From 1f89f63222d681b2140a972b358ee466ee780586 Mon Sep 17 00:00:00 2001 From: Alexis1663 <92861778+Alexis1663@users.noreply.github.com> Date: Fri, 24 Mar 2023 15:17:57 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20mod=C3=A8le?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tetris/.idea/gradle.xml | 1 + Tetris/app/build.gradle | 1 + Tetris/app/src/main/AndroidManifest.xml | 6 ++ Tetris/app/src/main/java/activity/Game.kt | 7 +++ .../src/main/java/activity/MainActivity.kt | 26 ++++++++ Tetris/app/src/main/java/activity/Option.kt | 2 +- .../but/androidstudio/tetris/MainFragment.kt | 21 +++++++ .../androidstudio/tetris/OptionFragment.kt | 59 +++++++++++++++++++ Tetris/app/src/main/java/modele/DashBoard.kt | 6 ++ Tetris/app/src/main/java/modele/Difficulty.kt | 7 +++ Tetris/app/src/main/java/modele/Draw.kt | 10 ++++ .../app/src/main/java/modele/EnumTypeShape.kt | 5 ++ Tetris/app/src/main/java/modele/Game.kt | 21 ++++++- Tetris/app/src/main/java/modele/Shape.kt | 38 ++++++++---- Tetris/app/src/main/java/modele/TypeShape.kt | 56 ++++++++++++++---- .../src/main/res/layout/activity_option.xml | 5 +- .../{activity_menu.xml => fragment_main.xml} | 9 +-- .../src/main/res/layout/fragment_option.xml | 41 +++++++++++++ .../app/src/main/res/layout/main_activity.xml | 11 ++++ Tetris/app/src/test/java/modele/Draw.kt | 4 ++ 20 files changed, 306 insertions(+), 30 deletions(-) create mode 100644 Tetris/app/src/main/java/activity/MainActivity.kt create mode 100644 Tetris/app/src/main/java/but/androidstudio/tetris/MainFragment.kt create mode 100644 Tetris/app/src/main/java/but/androidstudio/tetris/OptionFragment.kt create mode 100644 Tetris/app/src/main/java/modele/Difficulty.kt create mode 100644 Tetris/app/src/main/java/modele/Draw.kt create mode 100644 Tetris/app/src/main/java/modele/EnumTypeShape.kt rename Tetris/app/src/main/res/layout/{activity_menu.xml => fragment_main.xml} (90%) create mode 100644 Tetris/app/src/main/res/layout/fragment_option.xml create mode 100644 Tetris/app/src/main/res/layout/main_activity.xml create mode 100644 Tetris/app/src/test/java/modele/Draw.kt diff --git a/Tetris/.idea/gradle.xml b/Tetris/.idea/gradle.xml index a2d7c21..0d498f0 100644 --- a/Tetris/.idea/gradle.xml +++ b/Tetris/.idea/gradle.xml @@ -11,6 +11,7 @@ diff --git a/Tetris/app/build.gradle b/Tetris/app/build.gradle index ba3fe66..c68d295 100644 --- a/Tetris/app/build.gradle +++ b/Tetris/app/build.gradle @@ -38,6 +38,7 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'com.google.android.material:material:1.8.0' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.fragment:fragment:1.5.5' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' diff --git a/Tetris/app/src/main/AndroidManifest.xml b/Tetris/app/src/main/AndroidManifest.xml index 9519b36..3128eb6 100644 --- a/Tetris/app/src/main/AndroidManifest.xml +++ b/Tetris/app/src/main/AndroidManifest.xml @@ -29,6 +29,12 @@ + + + + + + \ No newline at end of file diff --git a/Tetris/app/src/main/java/activity/Game.kt b/Tetris/app/src/main/java/activity/Game.kt index ff6cd48..858b830 100644 --- a/Tetris/app/src/main/java/activity/Game.kt +++ b/Tetris/app/src/main/java/activity/Game.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.widget.ImageView import androidx.core.content.ContextCompat import but.androidstudio.tetris.R +import modele.Game class Game : AppCompatActivity() { @@ -13,5 +14,11 @@ class Game : AppCompatActivity() { setContentView(R.layout.activity_game) } + override fun onResume() { + super.onResume() + val myGame: modele.Game = Game(10,20) + myGame.startGame() + } + } \ No newline at end of file diff --git a/Tetris/app/src/main/java/activity/MainActivity.kt b/Tetris/app/src/main/java/activity/MainActivity.kt new file mode 100644 index 0000000..bac5d66 --- /dev/null +++ b/Tetris/app/src/main/java/activity/MainActivity.kt @@ -0,0 +1,26 @@ +package activity + +import android.os.Bundle +import android.os.PersistableBundle +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.FragmentContainerView +import but.androidstudio.tetris.MainFragment +import but.androidstudio.tetris.R + +class MainActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.main_activity) + if(savedInstanceState == null){ + supportFragmentManager.beginTransaction() + .setReorderingAllowed(true) + .add(R.id.homeLayout,MainFragment()) + .commit() + } + + } + + override fun onResume() { + super.onResume() + } +} \ No newline at end of file diff --git a/Tetris/app/src/main/java/activity/Option.kt b/Tetris/app/src/main/java/activity/Option.kt index 485f166..9d74a23 100644 --- a/Tetris/app/src/main/java/activity/Option.kt +++ b/Tetris/app/src/main/java/activity/Option.kt @@ -18,7 +18,7 @@ class Option : AppCompatActivity() { super.onResume() val spinnerDifficulty:Spinner = findViewById(R.id.spinnerDifficulty) - val difficulty = arrayOf("Facile","Intermédiaire","Difficile") + val difficulty = arrayOf("Easy","Medium","Hard") val adaptateurSpinnerDifficulty = ArrayAdapter(this,android.R.layout.simple_spinner_dropdown_item,difficulty) spinnerDifficulty.adapter = adaptateurSpinnerDifficulty diff --git a/Tetris/app/src/main/java/but/androidstudio/tetris/MainFragment.kt b/Tetris/app/src/main/java/but/androidstudio/tetris/MainFragment.kt new file mode 100644 index 0000000..3660f53 --- /dev/null +++ b/Tetris/app/src/main/java/but/androidstudio/tetris/MainFragment.kt @@ -0,0 +1,21 @@ +package but.androidstudio.tetris + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +class MainFragment : Fragment() { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_main, container, false) + } +} \ No newline at end of file diff --git a/Tetris/app/src/main/java/but/androidstudio/tetris/OptionFragment.kt b/Tetris/app/src/main/java/but/androidstudio/tetris/OptionFragment.kt new file mode 100644 index 0000000..d4f6147 --- /dev/null +++ b/Tetris/app/src/main/java/but/androidstudio/tetris/OptionFragment.kt @@ -0,0 +1,59 @@ +package but.androidstudio.tetris + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +// TODO: Rename parameter arguments, choose names that match +// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER +private const val ARG_PARAM1 = "param1" +private const val ARG_PARAM2 = "param2" + +/** + * A simple [Fragment] subclass. + * Use the [OptionFragment.newInstance] factory method to + * create an instance of this fragment. + */ +class OptionFragment : Fragment() { + // TODO: Rename and change types of parameters + private var param1: String? = null + private var param2: String? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + param1 = it.getString(ARG_PARAM1) + param2 = it.getString(ARG_PARAM2) + } + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_option, container, false) + } + + companion object { + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment OptionFragment. + */ + // TODO: Rename and change types and number of parameters + @JvmStatic + fun newInstance(param1: String, param2: String) = + OptionFragment().apply { + arguments = Bundle().apply { + putString(ARG_PARAM1, param1) + putString(ARG_PARAM2, param2) + } + } + } +} \ No newline at end of file diff --git a/Tetris/app/src/main/java/modele/DashBoard.kt b/Tetris/app/src/main/java/modele/DashBoard.kt index 247cb08..60ead99 100644 --- a/Tetris/app/src/main/java/modele/DashBoard.kt +++ b/Tetris/app/src/main/java/modele/DashBoard.kt @@ -7,6 +7,12 @@ class DashBoard(private val width: Int,private val height: Int) { fun getWidth(): Int = this.width fun getHeight(): Int = this.height + // To set something to occupied + + fun toOccupied(col: Int,row: Int){ + gridOfGame[row][col] = 1 + } + // To check if an position is occupied fun isOccupied(col: Int,row: Int): Boolean = gridOfGame[row][col] != 0 diff --git a/Tetris/app/src/main/java/modele/Difficulty.kt b/Tetris/app/src/main/java/modele/Difficulty.kt new file mode 100644 index 0000000..8b6b786 --- /dev/null +++ b/Tetris/app/src/main/java/modele/Difficulty.kt @@ -0,0 +1,7 @@ +package modele + +enum class Difficulty { + EASY, + MEDIUM, + HARD +} \ No newline at end of file diff --git a/Tetris/app/src/main/java/modele/Draw.kt b/Tetris/app/src/main/java/modele/Draw.kt new file mode 100644 index 0000000..d4cfe30 --- /dev/null +++ b/Tetris/app/src/main/java/modele/Draw.kt @@ -0,0 +1,10 @@ +package modele + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Paint +import android.graphics.Path +import android.view.View + +class Draw { +} \ No newline at end of file diff --git a/Tetris/app/src/main/java/modele/EnumTypeShape.kt b/Tetris/app/src/main/java/modele/EnumTypeShape.kt new file mode 100644 index 0000000..5530eda --- /dev/null +++ b/Tetris/app/src/main/java/modele/EnumTypeShape.kt @@ -0,0 +1,5 @@ +package modele + +enum class EnumTypeShape { + IShape,SquareShape,TShape,LShape,JShape,ZShape,SShape +} \ No newline at end of file diff --git a/Tetris/app/src/main/java/modele/Game.kt b/Tetris/app/src/main/java/modele/Game.kt index 9aabde3..d7d0b9d 100644 --- a/Tetris/app/src/main/java/modele/Game.kt +++ b/Tetris/app/src/main/java/modele/Game.kt @@ -1,6 +1,25 @@ package modele class Game(private val width: Int,private val height: Int) { private val dashBoard: DashBoard = DashBoard(width,height) - private val currentShape: Shape? = null + private var currentShape: Shape? = null + private var difficulty: Difficulty = Difficulty.EASY + + // To get the current difficulty + fun getDifficulty(): Difficulty = this.difficulty + + // To get the current shape on the game + fun getCurrentShape(): Shape? = this.currentShape + + // To set the current shape + fun setCurrentShape(newCurrentShape: Shape){ + this.currentShape = newCurrentShape + } + + // The start game function + + fun startGame(){ + //this.setCurrentShape(TypeShape.SquareShape) + + } } \ No newline at end of file diff --git a/Tetris/app/src/main/java/modele/Shape.kt b/Tetris/app/src/main/java/modele/Shape.kt index cff686a..1624f03 100644 --- a/Tetris/app/src/main/java/modele/Shape.kt +++ b/Tetris/app/src/main/java/modele/Shape.kt @@ -1,23 +1,41 @@ package modele -class Shape(private var x: Int,private var y: Int) { +import java.lang.reflect.Type + +class Shape(private val typeShape: TypeShape,private var position: Position) { + + private var shapePosition : Array = emptyArray() + +/* init { + val + }*/ + fun moveRight(){ - this.x += 1 + this.position.setX(this.position.getX()+1) + //update } fun moveLeft(){ - this.x -=1 + this.position.setX(this.position.getX()-1) + //update } fun moveDown(){ - this.y -= 1 + this.position.setY(this.position.getY()-1) + //update } - /*fun rotateLeft(){ - - }*/ - - /*fun rotateRight(){ + fun rotateLeft(){ + val tmp = this.position.getX() + this.position.setX(this.position.getY() * -1) + this.position.setY(tmp) + //update + } - }*/ + fun rotateRight(){ + val tmp = this.position.getX() + this.position.setX(this.position.getY()) + this.position.setY(tmp * -1) + //update + } } \ No newline at end of file diff --git a/Tetris/app/src/main/java/modele/TypeShape.kt b/Tetris/app/src/main/java/modele/TypeShape.kt index 8802b20..819393b 100644 --- a/Tetris/app/src/main/java/modele/TypeShape.kt +++ b/Tetris/app/src/main/java/modele/TypeShape.kt @@ -1,14 +1,48 @@ package modele -enum class TypeShape(private var shape: Array) { - ZStair(arrayOf(Position(-1, 1), Position(0, 1), Position(0, 0), Position(1, 1))), - SStair(arrayOf(Position(-1,0),Position(0,0),Position(0,1),Position(1,1))), - LRight(arrayOf(Position(-1,0),Position(0,0),Position(0,1),Position(0,2))), - LLeft(arrayOf(Position(0,2),Position(0,1),Position(0,0),Position(1,0))), - TShape(arrayOf(Position(-1,0),Position(0,0),Position(0,-1),Position(1,0))), - IShape(arrayOf(Position(0,0),Position(0,1),Position(0,2),Position(0,3))), - SquareShape(arrayOf(Position(0,0),Position(0,-1),Position(1,-1),Position(1,0))); - - // The getter of the array of position of the enum shape - fun getShape(): Array = this.shape.copyOf() +import java.lang.reflect.Type +import kotlin.random.Random + +class TypeShape(private val type: EnumTypeShape,private val showShape: Array>>){ + + private var currentIndex = 0 + + fun getPoints(): Array{ + val positions = ArrayList() + val typeShape = getCurrentType() + for (i in typeShape.indices){ + for (j in typeShape[i].indices){ + if (typeShape[i][j] != 0) { + positions.add(Position(j, i)) + } + } + } + return positions.toTypedArray() + } + + //to augmente of 1 the current index + fun getNextType(): TypeShape { + currentIndex++ + return this + } + + //To get the next shape + fun getNextShape(){ + val random: Int = Random.nextInt(1,7) + when(random){ + 1 -> TypeShape(EnumTypeShape.IShape, arrayOf(arrayOf(arrayOf()))) + 2 -> TypeShape(EnumTypeShape.SquareShape, arrayOf(arrayOf(arrayOf()))) + 3 -> TypeShape(EnumTypeShape.JShape, arrayOf(arrayOf(arrayOf()))) + 4 -> TypeShape(EnumTypeShape.LShape, arrayOf(arrayOf(arrayOf()))) + 5 -> TypeShape(EnumTypeShape.SShape, arrayOf(arrayOf(arrayOf()))) + 6 -> TypeShape(EnumTypeShape.TShape, arrayOf(arrayOf(arrayOf()))) + 7 -> TypeShape(EnumTypeShape.ZShape, arrayOf(arrayOf(arrayOf()))) + else -> throw Exception("Problème de random getNextShape()") + } + } + + // To get the table of position of the current shape type + private fun getCurrentType(): Array> { + return showShape[currentIndex] + } } \ No newline at end of file diff --git a/Tetris/app/src/main/res/layout/activity_option.xml b/Tetris/app/src/main/res/layout/activity_option.xml index e40e7ac..f9433dd 100644 --- a/Tetris/app/src/main/res/layout/activity_option.xml +++ b/Tetris/app/src/main/res/layout/activity_option.xml @@ -1,13 +1,12 @@ - - - - + tools:context=".MainFragment"> - \ No newline at end of file + + \ No newline at end of file diff --git a/Tetris/app/src/main/res/layout/fragment_option.xml b/Tetris/app/src/main/res/layout/fragment_option.xml new file mode 100644 index 0000000..a164ace --- /dev/null +++ b/Tetris/app/src/main/res/layout/fragment_option.xml @@ -0,0 +1,41 @@ + + + + + +