diff --git a/app.zip b/app.zip deleted file mode 100644 index 8740b21..0000000 Binary files a/app.zip and /dev/null differ diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/src/app/build.gradle b/app/build.gradle similarity index 89% rename from src/app/build.gradle rename to app/build.gradle index cc3d01f..5313a38 100644 --- a/src/app/build.gradle +++ b/app/build.gradle @@ -3,11 +3,11 @@ plugins { } android { - namespace 'com.example.tamere' + namespace 'com.example.jmastermind' compileSdk 33 defaultConfig { - applicationId "com.example.tamere" + applicationId "com.example.jmastermind" minSdk 19 targetSdk 33 versionCode 1 @@ -26,7 +26,7 @@ android { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } - buildToolsVersion '33.0.1' + buildToolsVersion '33.0.0' } dependencies { diff --git a/src/app/proguard-rules.pro b/app/proguard-rules.pro similarity index 100% rename from src/app/proguard-rules.pro rename to app/proguard-rules.pro diff --git a/src/app/src/androidTest/java/com/example/tamere/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/jmastermind/ExampleInstrumentedTest.java similarity index 85% rename from src/app/src/androidTest/java/com/example/tamere/ExampleInstrumentedTest.java rename to app/src/androidTest/java/com/example/jmastermind/ExampleInstrumentedTest.java index ff4e013..9c546fc 100644 --- a/src/app/src/androidTest/java/com/example/tamere/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/com/example/jmastermind/ExampleInstrumentedTest.java @@ -1,4 +1,4 @@ -package com.example.tamere; +package com.example.jmastermind; import android.content.Context; @@ -21,6 +21,6 @@ public class ExampleInstrumentedTest { public void useAppContext() { // Context of the app under test. Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); - assertEquals("com.example.tamere", appContext.getPackageName()); + assertEquals("com.example.jmastermind", appContext.getPackageName()); } } \ No newline at end of file diff --git a/src/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml similarity index 88% rename from src/app/src/main/AndroidManifest.xml rename to app/src/main/AndroidManifest.xml index f435786..0066848 100644 --- a/src/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,30 +1,30 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/jmastermind/Deck/Deck.java b/app/src/main/java/com/example/jmastermind/Deck/Deck.java new file mode 100644 index 0000000..47d4e86 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Deck/Deck.java @@ -0,0 +1,10 @@ +package com.example.jmastermind.Deck; + +import android.graphics.Color; + +import java.util.List; + +public interface Deck { + public abstract List getDeck(); + public abstract String displayComb(); +} diff --git a/app/src/main/java/com/example/jmastermind/Deck/DeckCheck.java b/app/src/main/java/com/example/jmastermind/Deck/DeckCheck.java new file mode 100644 index 0000000..85884a2 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Deck/DeckCheck.java @@ -0,0 +1,100 @@ +package com.example.jmastermind.Deck; + +import android.graphics.Color; + +import java.util.LinkedList; +import java.util.List; +import java.util.Objects; + +public class DeckCheck implements Deck { + private List deck; + private Deck lambda; + private Deck winner; + + public DeckCheck(Deck lambda, Deck winner) { + this.deck = new LinkedList<>(); + this.lambda = lambda; + this.winner = winner; + } + + public Deck doCheck() { + this.deck = new LinkedList<>(); + List winner = this.winner.getDeck(); + List lambda = this.lambda.getDeck(); + + for(int i = 0; i <= winner.size()-1; i++) { + Integer win = winner.get(i); + Integer lam = lambda.get(i); + + if(Objects.equals(win, lam)) { + this.deck.add(Color.BLACK); + } else { + if(winner.contains(lam)) { + this.deck.add(Color.WHITE); + } else { + this.deck.add(Color.GRAY); + } + } + } + + Deck check = new DeckLambda( + this.deck.get(0), + this.deck.get(1), + this.deck.get(2), + this.deck.get(3) + ); + + return check; + } + + @Override + public List getDeck() { + return this.deck; + } + + @Override + public String displayComb() { + StringBuilder sb = new StringBuilder(); + + for(int i = 0; i <= this.deck.size()-1; i++) { + switch(this.deck.get(i)) { + case Color.BLACK: { + sb.append("Noir").append(", "); + break; + } + + case Color.WHITE: { + sb.append("Blanc").append(", "); + break; + } + + case Color.GRAY: { + sb.append("Gris").append(", "); + break; + } + + case Color.GREEN: { + sb.append("Vert").append(", "); + break; + } + + case Color.RED: { + sb.append("Rouge").append(", "); + break; + } + + case Color.YELLOW: { + sb.append("Jaune").append(", "); + break; + } + + case Color.BLUE: { + sb.append("Bleu").append(", "); + break; + } + } + } + + return sb.toString(); + } +} diff --git a/app/src/main/java/com/example/jmastermind/Deck/DeckLambda.java b/app/src/main/java/com/example/jmastermind/Deck/DeckLambda.java new file mode 100644 index 0000000..76e8101 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Deck/DeckLambda.java @@ -0,0 +1,68 @@ +package com.example.jmastermind.Deck; + +import android.graphics.Color; +import java.util.LinkedList; +import java.util.List; + +public class DeckLambda implements Deck{ + List deck; + + public DeckLambda(Integer c1, Integer c2, Integer c3, Integer c4) { + this.deck = new LinkedList<>(); + this.deck.add(c1); + this.deck.add(c2); + this.deck.add(c3); + this.deck.add(c4); + } + + @Override + public List getDeck() { + return this.deck; + } + + @Override + public String displayComb() { + StringBuilder sb = new StringBuilder(); + + for(int i = 0; i <= this.deck.size()-1; i++) { + switch(this.deck.get(i)) { + case Color.BLACK: { + sb.append("Noir").append(", "); + break; + } + + case Color.WHITE: { + sb.append("Blanc").append(", "); + break; + } + + case Color.GREEN: { + sb.append("Vert").append(", "); + break; + } + + case Color.RED: { + sb.append("Rouge").append(", "); + break; + } + + case Color.YELLOW: { + sb.append("Jaune").append(", "); + break; + } + + case Color.BLUE: { + sb.append("Bleu").append(", "); + break; + } + + case Color.GRAY: { + sb.append("Gris").append(", "); + break; + } + } + } + + return sb.toString(); + } +} diff --git a/app/src/main/java/com/example/jmastermind/Deck/DeckWinner.java b/app/src/main/java/com/example/jmastermind/Deck/DeckWinner.java new file mode 100644 index 0000000..dcbf111 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Deck/DeckWinner.java @@ -0,0 +1,69 @@ +package com.example.jmastermind.Deck; + +import android.graphics.Color; + +import java.util.LinkedList; +import java.util.List; + +public class DeckWinner implements Deck{ + List deck; + + public DeckWinner(Integer c1, Integer c2, Integer c3, Integer c4) { + this.deck = new LinkedList<>(); + this.deck.add(c1); + this.deck.add(c2); + this.deck.add(c3); + this.deck.add(c4); + } + + @Override + public List getDeck() { + return this.deck; + } + + @Override + public String displayComb() { + StringBuilder sb = new StringBuilder(); + + for(int i = 0; i <= this.deck.size()-1; i++) { + switch(this.deck.get(i)) { + case Color.BLACK: { + sb.append("Noir").append(", "); + break; + } + + case Color.WHITE: { + sb.append("Blanc").append(", "); + break; + } + + case Color.GREEN: { + sb.append("Vert").append(", "); + break; + } + + case Color.RED: { + sb.append("Rouge").append(", "); + break; + } + + case Color.YELLOW: { + sb.append("Jaune").append(", "); + break; + } + + case Color.BLUE: { + sb.append("Bleu").append(", "); + break; + } + + case Color.GRAY: { + sb.append("Gris").append(", "); + break; + } + } + } + + return sb.toString(); + } +} diff --git a/app/src/main/java/com/example/jmastermind/Events/ColorSelectorEvent.java b/app/src/main/java/com/example/jmastermind/Events/ColorSelectorEvent.java new file mode 100644 index 0000000..e1ee091 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Events/ColorSelectorEvent.java @@ -0,0 +1,162 @@ +package com.example.jmastermind.Events; + +import android.graphics.Color; +import android.view.View; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.jmastermind.Deck.Deck; +import com.example.jmastermind.Deck.DeckCheck; +import com.example.jmastermind.Deck.DeckLambda; +import com.example.jmastermind.Game.Popup; +import com.example.jmastermind.Geometrics.Circle; +import com.example.jmastermind.R; + +import org.w3c.dom.Text; + +import java.util.LinkedList; +import java.util.List; + +public class ColorSelectorEvent extends View implements View.OnClickListener { + private AppCompatActivity context; + /** + * [0] = x + * [1] = y + * */ + private int[] coords; + private Deck winner; + private int tentative; + + public ColorSelectorEvent(AppCompatActivity context, Deck winner) { + super(context); + this.context = context; + this.winner = winner; + this.coords = new int[]{1, 1}; + this.tentative = 10; + } + + @Override + public void onClick(View view) { + int idOfClickedColor = view.getId(); + Circle circleClicked = (Circle) this.context.findViewById(idOfClickedColor); + int colorChoosed = circleClicked.getColor(); + + int id = this.context.getResources() + .getIdentifier("normalCircle" + this.coords[0] + this.coords[1], "id", this.context.getPackageName()); + Circle c = this.context.findViewById(id); + + switch(colorChoosed) { + case Color.RED: { + c.setColor(Color.RED); + break; + } + + case Color.GREEN: { + c.setColor(Color.GREEN); + break; + } + + case Color.BLUE: { + c.setColor(Color.BLUE); + break; + } + + case Color.YELLOW: { + c.setColor(Color.YELLOW); + break; + } + + case Color.BLACK: { + c.setColor(Color.BLACK); + break; + } + + case Color.WHITE: { + c.setColor(Color.WHITE); + break; + } + + case Color.GRAY: { + c.setColor(Color.GRAY); + break; + } + + default: { + break; + } + } + + if(this.coords[1] < 4) { + this.coords[1]++; + } + } + + public void goNext() { + List listOfColors = new LinkedList<>(); + + for(int i = 1; i <= 4; i++) { + int id = this.context.getResources() + .getIdentifier("normalCircle" + this.coords[0] + i, "id", this.context.getPackageName()); + Circle c = this.context.findViewById(id); + + listOfColors.add(c.getColor()); + } + + Deck lambda = new DeckLambda( + listOfColors.get(0), + listOfColors.get(1), + listOfColors.get(2), + listOfColors.get(3) + ); + + DeckCheck checker = new DeckCheck(lambda, this.winner); + Deck checkerPions = checker.doCheck(); + List checkColors = checkerPions.getDeck(); + int countOfBlack = 0; + + for(int i = 1; i <= 4; i++) { + int id = this.context.getResources() + .getIdentifier("checkCircle" + this.coords[0] + i, "id", this.context.getPackageName()); + Circle c = this.context.findViewById(id); + + c.setColor(checkColors.get(i-1)); + + if(checkColors.get(i-1) == Color.BLACK) { + countOfBlack++; + } + } + + if(countOfBlack == 4) { + String[] opts = new String[] { + "Rejouer", + "Voir votre jeu", + "Retourner au menu" + }; + + Popup popup = new Popup(this.context, opts, true, (10 - this.tentative + 1)); + popup.show(); + } + + this.tentative--; + + TextView tx = (TextView) this.context.findViewById(R.id.counter); + tx.setText("Tentative rest. \n" + this.tentative); + tx.invalidate(); + + this.coords[1] = 1; + this.coords[0]++; + } + + public void resetCombi() { + for(int i = 1; i <= this.coords[1]; i++) { + int id = this.context.getResources() + .getIdentifier("normalCircle" + this.coords[0] + i, "id", this.context.getPackageName()); + Circle c = this.context.findViewById(id); + + c.setColor(Color.GRAY); + } + + this.coords[1] = 1; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/jmastermind/Events/ControlEvent.java b/app/src/main/java/com/example/jmastermind/Events/ControlEvent.java new file mode 100644 index 0000000..2801953 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Events/ControlEvent.java @@ -0,0 +1,33 @@ +package com.example.jmastermind.Events; + +import android.content.Context; +import android.view.View; +import android.widget.Button; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.jmastermind.Game.Controller; + +public class ControlEvent extends View implements View.OnClickListener { + private final AppCompatActivity context; + private Controller controller; + + public ControlEvent(AppCompatActivity context, Controller controller) { + super(context); + this.context = context; + this.controller = controller; + } + + @Override + public void onClick(View view) { + int idOfButton = view.getId(); + Button btnClicked = (Button) this.context.findViewById(idOfButton); + CharSequence text = btnClicked.getText(); + + if ("Valider".equals(text)) { + this.controller.viewValidate(); + } else if ("Effacer".equals(text)) { + this.controller.viewReset(); + } + } +} diff --git a/src/app/src/main/java/com/example/tamere/Events/MenuEvent.java b/app/src/main/java/com/example/jmastermind/Events/MenuEvent.java similarity index 60% rename from src/app/src/main/java/com/example/tamere/Events/MenuEvent.java rename to app/src/main/java/com/example/jmastermind/Events/MenuEvent.java index 041be13..c5dd4a2 100644 --- a/src/app/src/main/java/com/example/tamere/Events/MenuEvent.java +++ b/app/src/main/java/com/example/jmastermind/Events/MenuEvent.java @@ -1,20 +1,21 @@ -package com.example.tamere.Events; +package com.example.jmastermind.Events; import android.content.Intent; import android.view.View; import androidx.appcompat.app.AppCompatActivity; -import com.example.tamere.GameRobot; public class MenuEvent implements View.OnClickListener { + private Class option; private AppCompatActivity ac; - public MenuEvent(AppCompatActivity ac) { + public MenuEvent(AppCompatActivity ac, Class option) { this.ac = ac; + this.option = option; } @Override public void onClick(View view) { - Intent i = new Intent(this.ac, GameRobot.class); + Intent i = new Intent(this.ac, this.option); this.ac.startActivity(i); } } diff --git a/app/src/main/java/com/example/jmastermind/Events/PopupEvent.java b/app/src/main/java/com/example/jmastermind/Events/PopupEvent.java new file mode 100644 index 0000000..0cbd997 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Events/PopupEvent.java @@ -0,0 +1,40 @@ +package com.example.jmastermind.Events; + +import android.content.DialogInterface; +import android.content.Intent; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.jmastermind.Game.Popup; +import com.example.jmastermind.Game.SoloGame; +import com.example.jmastermind.MainActivity; + +public class PopupEvent implements DialogInterface.OnClickListener { + private AppCompatActivity context; + + public PopupEvent(AppCompatActivity context) { + this.context = context; + } + + @Override + public void onClick(DialogInterface dialogInterface, int i) { + switch(i) { + case 0: { + Intent a = new Intent(this.context, SoloGame.class); + this.context.startActivity(a); + break; + } + + case 1: { + dialogInterface.cancel(); + break; + } + + case 2: { + Intent c = new Intent(this.context, MainActivity.class); + this.context.startActivity(c); + break; + } + } + } +} diff --git a/app/src/main/java/com/example/jmastermind/Game/Controller.java b/app/src/main/java/com/example/jmastermind/Game/Controller.java new file mode 100644 index 0000000..9c82bb5 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Game/Controller.java @@ -0,0 +1,52 @@ +package com.example.jmastermind.Game; + +import android.graphics.Color; +import androidx.appcompat.app.AppCompatActivity; + +import com.example.jmastermind.Deck.Deck; +import com.example.jmastermind.Deck.DeckWinner; +import com.example.jmastermind.Events.ColorSelectorEvent; +import com.example.jmastermind.Events.ControlEvent; + +import java.util.Random; + +public class Controller { + private Vuew vuew; + private Model model; + private AppCompatActivity context; + private ColorSelectorEvent event; + private ControlEvent controlEvent; + + public Controller(AppCompatActivity context, int mode) { + this.context = context; + this.controlEvent = new ControlEvent(this.context, this); + + this.model = new Model(this.context); + this.model.init(); + + if(mode == 0) { + this.model.genWinner(); + Deck winner = this.model.getWinner(); + System.out.println(winner.displayComb()); + this.event = new ColorSelectorEvent(this.context, winner); + } + + this.vuew = new Vuew( + this.context, + this.model.getListOfNormalCircle(), + this.model.getListOfCheckCircle(), + this.event, + this.controlEvent + ); + + this.vuew.init(); + } + + public void viewValidate() { + this.event.goNext(); + } + + public void viewReset() { + this.event.resetCombi(); + } +} diff --git a/app/src/main/java/com/example/jmastermind/Game/Model.java b/app/src/main/java/com/example/jmastermind/Game/Model.java new file mode 100644 index 0000000..c9ef68d --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Game/Model.java @@ -0,0 +1,116 @@ +package com.example.jmastermind.Game; + +import android.graphics.Color; +import android.view.View; +import androidx.appcompat.app.AppCompatActivity; +import com.example.jmastermind.Deck.DeckWinner; +import com.example.jmastermind.Geometrics.Circle; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; + +public class Model extends View { + private List listOfNormalCircle; + private List listOfCheckCircle; + private DeckWinner winner; + private AppCompatActivity context; + + public Model(AppCompatActivity context) { + super(context); + this.context = context; + this.listOfNormalCircle = new LinkedList<>(); + this.listOfCheckCircle = new LinkedList<>(); + this.winner = null; + } + + public void genWinner() { + Integer[] color = new Integer[]{0, 0, 0, 0}; + + for(int i = 0; i <= 3; i++) { + Random rand = new Random(); + int ran = rand.nextInt(6) + 1; + + switch(ran) { + case 1: { + color[i] = Color.RED; + break; + } + + case 2: { + color[i] = Color.YELLOW; + break; + } + + case 3: { + color[i] = Color.BLUE; + break; + } + + case 4: { + color[i] = Color.GREEN; + break; + } + + case 5: { + color[i] = Color.WHITE; + break; + } + + case 6: { + color[i] = Color.BLACK; + break; + } + + case 7: { + color[i] = Color.GRAY; + break; + } + + default: { + break; + } + } + } + + this.winner = new DeckWinner(color[1], color[0], color[2], color[3]); + } + + public DeckWinner getWinner() { + return this.winner; + } + + public Boolean init() { + try { + for(int i = 1; i <= 10; i++) { + for(int j = 1; j <= 4; j++) { + int normalId = this.context.getResources(). + getIdentifier("normalCircle" + i + j, "id", this.context.getPackageName()); + Circle normal = this.context.findViewById(normalId); + + int checkId = this.context.getResources() + .getIdentifier("checkCircle" + i + j, "id", this.context.getPackageName()); + Circle check = this.context.findViewById(checkId); + + this.listOfNormalCircle.add(normal); + this.listOfCheckCircle.add(check); + } + } + + return true; + } catch(ArrayIndexOutOfBoundsException e) { + System.out.println("[!] Probleme lors de l'initiliation du model (ArrayIndexOutOfBoundsException)."); + return false; + } catch(NullPointerException e) { + System.out.println("[!] Probleme lors de l'initiliation du model (NullPointerException)."); + return false; + } + } + + public List getListOfNormalCircle() { + return this.listOfNormalCircle; + } + + public List getListOfCheckCircle() { + return this.listOfCheckCircle; + } +} diff --git a/app/src/main/java/com/example/jmastermind/Game/MultiGame.java b/app/src/main/java/com/example/jmastermind/Game/MultiGame.java new file mode 100644 index 0000000..a35374d --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Game/MultiGame.java @@ -0,0 +1,4 @@ +package com.example.jmastermind.Game; + +public class MultiGame { +} diff --git a/app/src/main/java/com/example/jmastermind/Game/Popup.java b/app/src/main/java/com/example/jmastermind/Game/Popup.java new file mode 100644 index 0000000..39cd605 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Game/Popup.java @@ -0,0 +1,23 @@ +package com.example.jmastermind.Game; + +import androidx.appcompat.app.AlertDialog; +import androidx.appcompat.app.AppCompatActivity; +import com.example.jmastermind.Events.PopupEvent; + +public class Popup extends AlertDialog.Builder { + private AppCompatActivity context; + + public Popup(AppCompatActivity context, String[] options, Boolean isWinner, int tentative) { + super(context); + + this.context = context; + + if(isWinner) { + this.setTitle("Félicitation ! Vous avez gagner en : " + tentative + " coup(s)."); + } else { + this.setTitle("Perdu !"); + } + + this.setItems(options, new PopupEvent(this.context)); + } +} diff --git a/app/src/main/java/com/example/jmastermind/Game/SoloGame.java b/app/src/main/java/com/example/jmastermind/Game/SoloGame.java new file mode 100644 index 0000000..54d9592 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Game/SoloGame.java @@ -0,0 +1,17 @@ +package com.example.jmastermind.Game; + +import android.os.Bundle; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import com.example.jmastermind.R; + +public class SoloGame extends AppCompatActivity { + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.game); + + Controller controller = new Controller(this, 0); + } +} diff --git a/app/src/main/java/com/example/jmastermind/Game/Vuew.java b/app/src/main/java/com/example/jmastermind/Game/Vuew.java new file mode 100644 index 0000000..ff5b6e8 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Game/Vuew.java @@ -0,0 +1,75 @@ +package com.example.jmastermind.Game; + +import android.graphics.Color; +import android.widget.Button; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.jmastermind.Events.ColorSelectorEvent; +import com.example.jmastermind.Events.ControlEvent; +import com.example.jmastermind.Geometrics.Circle; +import com.example.jmastermind.R; + +import java.util.List; + +public class Vuew { + private ColorSelectorEvent event; + private List normalCircle; + private List checkedCircle; + private AppCompatActivity context; + private ControlEvent controlEvent; + + public Vuew(AppCompatActivity context, List normalCircle, List checkCircle, ColorSelectorEvent event, ControlEvent controlEvent) { + this.context = context; + this.normalCircle = normalCircle; + this.checkedCircle = checkCircle; + this.event = event; + this.controlEvent = controlEvent; + } + + public Boolean init() { + try { + Circle yellow = (Circle) this.context.findViewById(R.id.yellow); + yellow.setColor(Color.YELLOW); + yellow.setOnClickListener(this.event); + + Circle red = (Circle) this.context.findViewById(R.id.red); + red.setColor(Color.RED); + red.setOnClickListener(this.event); + + Circle green = (Circle) this.context.findViewById(R.id.green); + green.setColor(Color.GREEN); + green.setOnClickListener(this.event); + + Circle blue = (Circle) this.context.findViewById(R.id.blue); + blue.setColor(Color.BLUE); + blue.setOnClickListener(this.event); + + Circle gray = (Circle) this.context.findViewById(R.id.gray); + gray.setColor(Color.GRAY); + gray.setOnClickListener(this.event); + + Circle white = (Circle) this.context.findViewById(R.id.white); + white.setColor(Color.WHITE); + white.setOnClickListener(this.event); + + Circle black = (Circle) this.context.findViewById(R.id.black); + black.setColor(Color.BLACK); + black.setOnClickListener(this.event); + + Button validate = (Button) this.context.findViewById(R.id.validate); + validate.setOnClickListener(this.controlEvent); + + Button reset = (Button) this.context.findViewById(R.id.reset); + reset.setOnClickListener(this.controlEvent); + + return true; + } catch(NullPointerException e) { + System.out.println("[!] Probleme lors de l'initiliation de la vue (NullPointerException)."); + return false; + } catch(ArrayIndexOutOfBoundsException e) { + System.out.println("[!] Probleme lors de l'initiliation de la vue (ArrayIndexOutOfBoundsException)."); + return false; + } + } +} diff --git a/src/app/src/main/java/com/example/tamere/Geometrics/Circle.java b/app/src/main/java/com/example/jmastermind/Geometrics/Circle.java similarity index 65% rename from src/app/src/main/java/com/example/tamere/Geometrics/Circle.java rename to app/src/main/java/com/example/jmastermind/Geometrics/Circle.java index 33e914d..51db376 100644 --- a/src/app/src/main/java/com/example/tamere/Geometrics/Circle.java +++ b/app/src/main/java/com/example/jmastermind/Geometrics/Circle.java @@ -1,41 +1,42 @@ -package com.example.tamere.Geometrics; - -import android.content.Context; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.view.View; - -public class Circle extends View { - private Paint picasso; - private int color; - private Boolean canModify; - - public Circle(Context context, int color, Boolean canModify) { - super(context); - this.color = color; - this.canModify = canModify; - this.picasso = new Paint(); - } - - public int getColor() { - return this.color; - } - - public void setColor(int c) { - if(this.canModify) { - this.color = c; - } - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - - int centerX = getWidth() / 2; - int centerY = getHeight() / 2; - int radius = Math.min(centerX, centerY); - - this.picasso.setColor(this.color); - canvas.drawCircle(centerX, centerY, radius, this.picasso); - } -} +package com.example.jmastermind.Geometrics; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.util.AttributeSet; +import android.view.View; + +import androidx.annotation.Nullable; + +public class Circle extends View { + private Paint picasso; + private int color; + + public Circle(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + this.color = Color.GRAY; + this.picasso = new Paint(); + } + + public int getColor() { + return this.color; + } + + public void setColor(int c) { + this.color = c; + this.invalidate(); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + int centerX = getWidth() / 2; + int centerY = getHeight() / 2; + int radius = Math.min(centerX, centerY); + + this.picasso.setColor(this.color); + canvas.drawCircle(centerX, centerY, radius, this.picasso); + } +} diff --git a/app/src/main/java/com/example/jmastermind/MainActivity.java b/app/src/main/java/com/example/jmastermind/MainActivity.java new file mode 100644 index 0000000..92bc607 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/MainActivity.java @@ -0,0 +1,22 @@ +package com.example.jmastermind; + +import androidx.appcompat.app.AppCompatActivity; +import android.os.Bundle; +import android.widget.Button; +import com.example.jmastermind.Events.MenuEvent; +import com.example.jmastermind.Game.*; + +public class MainActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.menu); + + Button btnSoloGame = (Button) findViewById(R.id.robotselect); + btnSoloGame.setOnClickListener(new MenuEvent(this, SoloGame.class)); + + Button btnMultiGame = (Button) findViewById(R.id.jcjselect); + btnMultiGame.setOnClickListener(new MenuEvent(this, MultiGame.class)); + } +} \ No newline at end of file diff --git a/src/app/build/generated/res/pngs/debug/drawable-anydpi-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml similarity index 100% rename from src/app/build/generated/res/pngs/debug/drawable-anydpi-v24/ic_launcher_foreground.xml rename to app/src/main/res/drawable-v24/ic_launcher_foreground.xml diff --git a/src/app/build/generated/res/pngs/debug/drawable-anydpi-v21/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml similarity index 100% rename from src/app/build/generated/res/pngs/debug/drawable-anydpi-v21/ic_launcher_background.xml rename to app/src/main/res/drawable/ic_launcher_background.xml diff --git a/app/src/main/res/layout/game.xml b/app/src/main/res/layout/game.xml new file mode 100644 index 0000000..098313a --- /dev/null +++ b/app/src/main/res/layout/game.xml @@ -0,0 +1,869 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +