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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tetris/app/src/main/res/layout/main_activity.xml b/Tetris/app/src/main/res/layout/main_activity.xml
new file mode 100644
index 0000000..475d7fe
--- /dev/null
+++ b/Tetris/app/src/main/res/layout/main_activity.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tetris/app/src/test/java/modele/Draw.kt b/Tetris/app/src/test/java/modele/Draw.kt
new file mode 100644
index 0000000..ca58bd4
--- /dev/null
+++ b/Tetris/app/src/test/java/modele/Draw.kt
@@ -0,0 +1,4 @@
+package modele
+
+class Draw {
+}
\ No newline at end of file