$
This commit is contained in:
parent
64cfead736
commit
161624a82b
app
.gitignore (copy 1)build (copy 1).gradleproguard-rules (copy 1).pro
src
androidTest/java/com/example/jmastermind
main
AndroidManifest (copy 1).xml
java/com/example/jmastermind
Deck
Deck (copy 1).javaDeck.javaDeckCheck (copy 1).javaDeckCheck.javaDeckLambda (copy 1).javaDeckLambda.javaDeckWinner (copy 1).javaDeckWinner.java
Events
ColorSelectorEvent (copy 1).javaColorSelectorEvent.javaControlEvent (copy 1).javaControlEvent.javaMenuEvent (copy 1).javaMenuEvent.javaPopupEvent (copy 1).javaPopupEvent.java
Game
Controller (copy 1).javaController.javaModel (copy 1).javaModel.javaMultiGame (copy 1).javaPopup (copy 1).javaPopup.javaSoloGame (copy 1).javaSoloGame.javaVuew (copy 1).javaVuew.java
Geometrics
MainActivity (copy 1).javares
drawable-v24
drawable
layout
mipmap-anydpi-v26
mipmap-anydpi-v33
mipmap-hdpi
mipmap-mdpi
mipmap-xhdpi
mipmap-xxhdpi
1
app/.gitignore (copy 1)
Normal file
1
app/.gitignore (copy 1)
Normal file
@ -0,0 +1 @@
|
||||
/build
|
40
app/build (copy 1).gradle
Normal file
40
app/build (copy 1).gradle
Normal file
@ -0,0 +1,40 @@
|
||||
plugins {
|
||||
id 'com.android.application'
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'com.example.jmastermind'
|
||||
compileSdk 33
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.example.jmastermind"
|
||||
minSdk 19
|
||||
targetSdk 33
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_1_8
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
buildToolsVersion '33.0.0'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
implementation 'androidx.appcompat:appcompat:1.6.1'
|
||||
implementation 'com.google.android.material:material:1.8.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
testImplementation 'junit:junit:4.13.2'
|
||||
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
|
||||
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
|
||||
}
|
21
app/proguard-rules (copy 1).pro
Normal file
21
app/proguard-rules (copy 1).pro
Normal file
@ -0,0 +1,21 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
26
app/src/androidTest/java/com/example/jmastermind/ExampleInstrumentedTest (copy 1).java
Normal file
26
app/src/androidTest/java/com/example/jmastermind/ExampleInstrumentedTest (copy 1).java
Normal file
@ -0,0 +1,26 @@
|
||||
package com.example.jmastermind;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||
assertEquals("com.example.jmastermind", appContext.getPackageName());
|
||||
}
|
||||
}
|
30
app/src/main/AndroidManifest (copy 1).xml
Normal file
30
app/src/main/AndroidManifest (copy 1).xml
Normal file
@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.JMastermind"
|
||||
tools:targetApi="31">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".Game.SoloGame"
|
||||
android:exported="true">
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
@ -0,0 +1,19 @@
|
||||
package com.example.jmastermind.Deck;
|
||||
|
||||
import android.graphics.Color;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface Deck {
|
||||
/**
|
||||
* Recuperer la combinaison stockés dans la class
|
||||
* @return La combinaison du deck
|
||||
* */
|
||||
public abstract List<Integer> getDeck();
|
||||
|
||||
/**
|
||||
* Retourne la combinaison sous forme de chaine de caractere
|
||||
* @return Une facon personnaliser d'afficher la combinaison (debug)
|
||||
* */
|
||||
public abstract String displayComb();
|
||||
}
|
@ -5,6 +5,15 @@ import android.graphics.Color;
|
||||
import java.util.List;
|
||||
|
||||
public interface Deck {
|
||||
/**
|
||||
* Recuperer la combinaison stockés dans la class
|
||||
* @return La combinaison du deck
|
||||
* */
|
||||
public abstract List<Integer> getDeck();
|
||||
|
||||
/**
|
||||
* Retourne la combinaison sous forme de chaine de caractere
|
||||
* @return Une facon personnaliser d'afficher la combinaison (debug)
|
||||
* */
|
||||
public abstract String displayComb();
|
||||
}
|
||||
|
@ -0,0 +1,109 @@
|
||||
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<Integer> deck;
|
||||
private Deck lambda;
|
||||
private Deck winner;
|
||||
|
||||
/**
|
||||
* Permet de comparer une combinaison attaquante avec une combinaison gagnante
|
||||
* @param lambda La combinaison attaquante
|
||||
* @param winner La combinaison gagnante
|
||||
* */
|
||||
public DeckCheck(Deck lambda, Deck winner) {
|
||||
this.deck = new LinkedList<>();
|
||||
this.lambda = lambda;
|
||||
this.winner = winner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lancement de la verification
|
||||
* @return Le deck comprenant les pions de verification Noir et Blanc
|
||||
* */
|
||||
public Deck doCheck() {
|
||||
this.deck = new LinkedList<>();
|
||||
List<Integer> winner = this.winner.getDeck();
|
||||
List<Integer> 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<Integer> 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();
|
||||
}
|
||||
}
|
@ -11,12 +11,21 @@ public class DeckCheck implements Deck {
|
||||
private Deck lambda;
|
||||
private Deck winner;
|
||||
|
||||
/**
|
||||
* Permet de comparer une combinaison attaquante avec une combinaison gagnante
|
||||
* @param lambda La combinaison attaquante
|
||||
* @param winner La combinaison gagnante
|
||||
* */
|
||||
public DeckCheck(Deck lambda, Deck winner) {
|
||||
this.deck = new LinkedList<>();
|
||||
this.lambda = lambda;
|
||||
this.winner = winner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Lancement de la verification
|
||||
* @return Le deck comprenant les pions de verification Noir et Blanc
|
||||
* */
|
||||
public Deck doCheck() {
|
||||
this.deck = new LinkedList<>();
|
||||
List<Integer> winner = this.winner.getDeck();
|
||||
|
@ -0,0 +1,75 @@
|
||||
package com.example.jmastermind.Deck;
|
||||
|
||||
import android.graphics.Color;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class DeckLambda implements Deck{
|
||||
List<Integer> deck;
|
||||
|
||||
/**
|
||||
* Composition de la combinaison attaquante
|
||||
* @param c1 Couleur en int du Pion n1
|
||||
* @param c2 Couleur en int du Pion n2
|
||||
* @param c3 Couleur en int du Pion n3
|
||||
* @param c4 Couleur en int du Pion n4
|
||||
* */
|
||||
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<Integer> 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();
|
||||
}
|
||||
}
|
@ -7,6 +7,13 @@ import java.util.List;
|
||||
public class DeckLambda implements Deck{
|
||||
List<Integer> deck;
|
||||
|
||||
/**
|
||||
* Composition de la combinaison attaquante
|
||||
* @param c1 Couleur en int du Pion n1
|
||||
* @param c2 Couleur en int du Pion n2
|
||||
* @param c3 Couleur en int du Pion n3
|
||||
* @param c4 Couleur en int du Pion n4
|
||||
* */
|
||||
public DeckLambda(Integer c1, Integer c2, Integer c3, Integer c4) {
|
||||
this.deck = new LinkedList<>();
|
||||
this.deck.add(c1);
|
||||
|
@ -0,0 +1,76 @@
|
||||
package com.example.jmastermind.Deck;
|
||||
|
||||
import android.graphics.Color;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
public class DeckWinner implements Deck{
|
||||
List<Integer> deck;
|
||||
|
||||
/**
|
||||
* Composition de la combinaison gagante
|
||||
* @param c1 Couleur en int du Pion n1
|
||||
* @param c2 Couleur en int du Pion n2
|
||||
* @param c3 Couleur en int du Pion n3
|
||||
* @param c4 Couleur en int du Pion n4
|
||||
* */
|
||||
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<Integer> 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();
|
||||
}
|
||||
}
|
@ -8,6 +8,13 @@ import java.util.List;
|
||||
public class DeckWinner implements Deck{
|
||||
List<Integer> deck;
|
||||
|
||||
/**
|
||||
* Composition de la combinaison gagante
|
||||
* @param c1 Couleur en int du Pion n1
|
||||
* @param c2 Couleur en int du Pion n2
|
||||
* @param c3 Couleur en int du Pion n3
|
||||
* @param c4 Couleur en int du Pion n4
|
||||
* */
|
||||
public DeckWinner(Integer c1, Integer c2, Integer c3, Integer c4) {
|
||||
this.deck = new LinkedList<>();
|
||||
this.deck.add(c1);
|
||||
|
@ -0,0 +1,175 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* Evenement declanché lorsque le joueur selectionne une couleur
|
||||
* @param context Le contexte de l'app
|
||||
* @param winner La combinaison gagnante
|
||||
* */
|
||||
public ColorSelectorEvent(AppCompatActivity context, Deck winner) {
|
||||
super(context);
|
||||
this.context = context;
|
||||
this.winner = winner;
|
||||
this.coords = new int[]{1, 1};
|
||||
this.tentative = 10;
|
||||
}
|
||||
|
||||
/**
|
||||
* Relier indirectement au bouton "Valider"
|
||||
* Changer de ligne et lancer la verification des combinaisons
|
||||
* */
|
||||
public void goNext() {
|
||||
List<Integer> 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<Integer> 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]++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Relier indirectement au bouton "Effacer"
|
||||
* Permet d'effacer la combinaison non validé par le joueur
|
||||
* */
|
||||
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;
|
||||
}
|
||||
|
||||
@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]++;
|
||||
}
|
||||
}
|
||||
}
|
@ -28,6 +28,11 @@ public class ColorSelectorEvent extends View implements View.OnClickListener {
|
||||
private Deck winner;
|
||||
private int tentative;
|
||||
|
||||
/**
|
||||
* Evenement declanché lorsque le joueur selectionne une couleur
|
||||
* @param context Le contexte de l'app
|
||||
* @param winner La combinaison gagnante
|
||||
* */
|
||||
public ColorSelectorEvent(AppCompatActivity context, Deck winner) {
|
||||
super(context);
|
||||
this.context = context;
|
||||
@ -36,6 +41,82 @@ public class ColorSelectorEvent extends View implements View.OnClickListener {
|
||||
this.tentative = 10;
|
||||
}
|
||||
|
||||
/**
|
||||
* Relier indirectement au bouton "Valider"
|
||||
* Changer de ligne et lancer la verification des combinaisons
|
||||
* */
|
||||
public void goNext() {
|
||||
List<Integer> 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<Integer> 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]++;
|
||||
}
|
||||
|
||||
/**
|
||||
* Relier indirectement au bouton "Effacer"
|
||||
* Permet d'effacer la combinaison non validé par le joueur
|
||||
* */
|
||||
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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
int idOfClickedColor = view.getId();
|
||||
@ -91,72 +172,4 @@ public class ColorSelectorEvent extends View implements View.OnClickListener {
|
||||
this.coords[1]++;
|
||||
}
|
||||
}
|
||||
|
||||
public void goNext() {
|
||||
List<Integer> 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<Integer> 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;
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* Event relier aux boutons "Valider" et "Effacer"
|
||||
* @param context Le context
|
||||
* @param controller Le controller du jeu
|
||||
* */
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
@ -12,6 +12,11 @@ public class ControlEvent extends View implements View.OnClickListener {
|
||||
private final AppCompatActivity context;
|
||||
private Controller controller;
|
||||
|
||||
/**
|
||||
* Event relier aux boutons "Valider" et "Effacer"
|
||||
* @param context Le context
|
||||
* @param controller Le controller du jeu
|
||||
* */
|
||||
public ControlEvent(AppCompatActivity context, Controller controller) {
|
||||
super(context);
|
||||
this.context = context;
|
||||
|
@ -0,0 +1,26 @@
|
||||
package com.example.jmastermind.Events;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.view.View;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
|
||||
public class MenuEvent implements View.OnClickListener {
|
||||
private Class option;
|
||||
private AppCompatActivity ac;
|
||||
|
||||
/**
|
||||
* Event lié au menu de depart
|
||||
* @param ac Le contexte
|
||||
* @param option La class de l'activité a demarrer
|
||||
* */
|
||||
public MenuEvent(AppCompatActivity ac, Class option) {
|
||||
this.ac = ac;
|
||||
this.option = option;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
Intent i = new Intent(this.ac, this.option);
|
||||
this.ac.startActivity(i);
|
||||
}
|
||||
}
|
@ -8,6 +8,11 @@ public class MenuEvent implements View.OnClickListener {
|
||||
private Class option;
|
||||
private AppCompatActivity ac;
|
||||
|
||||
/**
|
||||
* Event lié au menu de depart
|
||||
* @param ac Le contexte
|
||||
* @param option La class de l'activité a demarrer
|
||||
* */
|
||||
public MenuEvent(AppCompatActivity ac, Class option) {
|
||||
this.ac = ac;
|
||||
this.option = option;
|
||||
|
@ -0,0 +1,44 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* Event lié au popup de fin de partie
|
||||
* @param context Le 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -12,6 +12,10 @@ import com.example.jmastermind.MainActivity;
|
||||
public class PopupEvent implements DialogInterface.OnClickListener {
|
||||
private AppCompatActivity context;
|
||||
|
||||
/**
|
||||
* Event lié au popup de fin de partie
|
||||
* @param context Le context
|
||||
* */
|
||||
public PopupEvent(AppCompatActivity context) {
|
||||
this.context = context;
|
||||
}
|
||||
|
@ -0,0 +1,63 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* Controlleur du jeu
|
||||
* @param context Le contexte
|
||||
* @param mode 0 Solo ou 1 multi
|
||||
* */
|
||||
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();
|
||||
}
|
||||
|
||||
/**
|
||||
* Quand le joueur appuie sur "valider"
|
||||
* */
|
||||
public void viewValidate() {
|
||||
this.event.goNext();
|
||||
}
|
||||
|
||||
/**
|
||||
* Quand le joueur appuie sur "effacer"
|
||||
* */
|
||||
public void viewReset() {
|
||||
this.event.resetCombi();
|
||||
}
|
||||
}
|
@ -17,6 +17,11 @@ public class Controller {
|
||||
private ColorSelectorEvent event;
|
||||
private ControlEvent controlEvent;
|
||||
|
||||
/**
|
||||
* Controlleur du jeu
|
||||
* @param context Le contexte
|
||||
* @param mode 0 Solo ou 1 multi
|
||||
* */
|
||||
public Controller(AppCompatActivity context, int mode) {
|
||||
this.context = context;
|
||||
this.controlEvent = new ControlEvent(this.context, this);
|
||||
@ -42,10 +47,16 @@ public class Controller {
|
||||
this.vuew.init();
|
||||
}
|
||||
|
||||
/**
|
||||
* Quand le joueur appuie sur "valider"
|
||||
* */
|
||||
public void viewValidate() {
|
||||
this.event.goNext();
|
||||
}
|
||||
|
||||
/**
|
||||
* Quand le joueur appuie sur "effacer"
|
||||
* */
|
||||
public void viewReset() {
|
||||
this.event.resetCombi();
|
||||
}
|
||||
|
@ -0,0 +1,139 @@
|
||||
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<Circle> listOfNormalCircle;
|
||||
private List<Circle> listOfCheckCircle;
|
||||
private DeckWinner winner;
|
||||
private AppCompatActivity context;
|
||||
|
||||
/**
|
||||
* Le model du jeu
|
||||
* @param context Le contexte
|
||||
* */
|
||||
public Model(AppCompatActivity context) {
|
||||
super(context);
|
||||
this.context = context;
|
||||
this.listOfNormalCircle = new LinkedList<>();
|
||||
this.listOfCheckCircle = new LinkedList<>();
|
||||
this.winner = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Genere une combinaison aleatoire
|
||||
* */
|
||||
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]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Recupere le deck gagant du jeu
|
||||
* @return DeckWinner Le deck gagant du jeu
|
||||
* */
|
||||
public DeckWinner getWinner() {
|
||||
return this.winner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Demarrage du Model
|
||||
* @return Si oui ou non ca a fonctionné
|
||||
* */
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Recuperation des cercles normaux du jeu (id="normalCircleXY" du xml)
|
||||
* @return La liste des references vers les cercles normaux
|
||||
* */
|
||||
public List<Circle> getListOfNormalCircle() {
|
||||
return this.listOfNormalCircle;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recuperation des clercles de verification du jeu (noir et blanc) (id="checkCircleXY" du xml)
|
||||
* @return La liste des references vers les cercles de verification
|
||||
* */
|
||||
public List<Circle> getListOfCheckCircle() {
|
||||
return this.listOfCheckCircle;
|
||||
}
|
||||
}
|
@ -15,6 +15,10 @@ public class Model extends View {
|
||||
private DeckWinner winner;
|
||||
private AppCompatActivity context;
|
||||
|
||||
/**
|
||||
* Le model du jeu
|
||||
* @param context Le contexte
|
||||
* */
|
||||
public Model(AppCompatActivity context) {
|
||||
super(context);
|
||||
this.context = context;
|
||||
@ -23,6 +27,9 @@ public class Model extends View {
|
||||
this.winner = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Genere une combinaison aleatoire
|
||||
* */
|
||||
public void genWinner() {
|
||||
Integer[] color = new Integer[]{0, 0, 0, 0};
|
||||
|
||||
@ -75,10 +82,18 @@ public class Model extends View {
|
||||
this.winner = new DeckWinner(color[1], color[0], color[2], color[3]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Recupere le deck gagant du jeu
|
||||
* @return DeckWinner Le deck gagant du jeu
|
||||
* */
|
||||
public DeckWinner getWinner() {
|
||||
return this.winner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Demarrage du Model
|
||||
* @return Si oui ou non ca a fonctionné
|
||||
* */
|
||||
public Boolean init() {
|
||||
try {
|
||||
for(int i = 1; i <= 10; i++) {
|
||||
@ -106,10 +121,18 @@ public class Model extends View {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Recuperation des cercles normaux du jeu (id="normalCircleXY" du xml)
|
||||
* @return La liste des references vers les cercles normaux
|
||||
* */
|
||||
public List<Circle> getListOfNormalCircle() {
|
||||
return this.listOfNormalCircle;
|
||||
}
|
||||
|
||||
/**
|
||||
* Recuperation des clercles de verification du jeu (noir et blanc) (id="checkCircleXY" du xml)
|
||||
* @return La liste des references vers les cercles de verification
|
||||
* */
|
||||
public List<Circle> getListOfCheckCircle() {
|
||||
return this.listOfCheckCircle;
|
||||
}
|
||||
|
@ -0,0 +1,4 @@
|
||||
package com.example.jmastermind.Game;
|
||||
|
||||
public class MultiGame {
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* Affiche la popup de fin de jeu
|
||||
* @param context Le context
|
||||
* @param options La liste des options (rejouer, ...)
|
||||
* @param isWinner Esceque le joueur a gagner la partie
|
||||
* @param tentative Le nombre de tentatives
|
||||
* */
|
||||
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));
|
||||
}
|
||||
}
|
@ -7,6 +7,13 @@ import com.example.jmastermind.Events.PopupEvent;
|
||||
public class Popup extends AlertDialog.Builder {
|
||||
private AppCompatActivity context;
|
||||
|
||||
/**
|
||||
* Affiche la popup de fin de jeu
|
||||
* @param context Le context
|
||||
* @param options La liste des options (rejouer, ...)
|
||||
* @param isWinner Esceque le joueur a gagner la partie
|
||||
* @param tentative Le nombre de tentatives
|
||||
* */
|
||||
public Popup(AppCompatActivity context, String[] options, Boolean isWinner, int tentative) {
|
||||
super(context);
|
||||
|
||||
|
@ -0,0 +1,21 @@
|
||||
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 {
|
||||
|
||||
/**
|
||||
* Le jeu mode SOLO
|
||||
* */
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(R.layout.game);
|
||||
|
||||
Controller controller = new Controller(this, 0);
|
||||
}
|
||||
}
|
@ -7,6 +7,10 @@ import androidx.appcompat.app.AppCompatActivity;
|
||||
import com.example.jmastermind.R;
|
||||
|
||||
public class SoloGame extends AppCompatActivity {
|
||||
|
||||
/**
|
||||
* Le jeu mode SOLO
|
||||
* */
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
@ -0,0 +1,86 @@
|
||||
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<Circle> normalCircle;
|
||||
private List<Circle> checkedCircle;
|
||||
private AppCompatActivity context;
|
||||
private ControlEvent controlEvent;
|
||||
|
||||
/**
|
||||
* La vue du jeu
|
||||
* @param context Le context
|
||||
* @param normalCircle Les references vers les cercles normaux
|
||||
* @param checkCircle Les references vers les cercles de verification
|
||||
* @param event L'event de la selection de couleur
|
||||
* @param controlEvent L'event vers les deux boutons Valider et Effacer
|
||||
* */
|
||||
public Vuew(AppCompatActivity context, List<Circle> normalCircle, List<Circle> checkCircle, ColorSelectorEvent event, ControlEvent controlEvent) {
|
||||
this.context = context;
|
||||
this.normalCircle = normalCircle;
|
||||
this.checkedCircle = checkCircle;
|
||||
this.event = event;
|
||||
this.controlEvent = controlEvent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parametrage du plateau de jeu
|
||||
* */
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
@ -19,6 +19,14 @@ public class Vuew {
|
||||
private AppCompatActivity context;
|
||||
private ControlEvent controlEvent;
|
||||
|
||||
/**
|
||||
* La vue du jeu
|
||||
* @param context Le context
|
||||
* @param normalCircle Les references vers les cercles normaux
|
||||
* @param checkCircle Les references vers les cercles de verification
|
||||
* @param event L'event de la selection de couleur
|
||||
* @param controlEvent L'event vers les deux boutons Valider et Effacer
|
||||
* */
|
||||
public Vuew(AppCompatActivity context, List<Circle> normalCircle, List<Circle> checkCircle, ColorSelectorEvent event, ControlEvent controlEvent) {
|
||||
this.context = context;
|
||||
this.normalCircle = normalCircle;
|
||||
@ -27,6 +35,9 @@ public class Vuew {
|
||||
this.controlEvent = controlEvent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Parametrage du plateau de jeu
|
||||
* */
|
||||
public Boolean init() {
|
||||
try {
|
||||
Circle yellow = (Circle) this.context.findViewById(R.id.yellow);
|
||||
|
@ -0,0 +1,55 @@
|
||||
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;
|
||||
|
||||
/**
|
||||
* Les cercles du jeu "programmiser" en Java
|
||||
* @param context Le context
|
||||
* @param attrs Les attributs (notamment id)
|
||||
* */
|
||||
public Circle(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.color = Color.GRAY;
|
||||
this.picasso = new Paint();
|
||||
}
|
||||
|
||||
/**
|
||||
* Recuperer la couleur du cercle
|
||||
* @return La couleur du cercle en int
|
||||
* */
|
||||
public int getColor() {
|
||||
return this.color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Changer la couleur d'un cercle
|
||||
* @param c La nouvelle couleur
|
||||
* */
|
||||
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);
|
||||
}
|
||||
}
|
@ -13,16 +13,29 @@ public class Circle extends View {
|
||||
private Paint picasso;
|
||||
private int color;
|
||||
|
||||
/**
|
||||
* Les cercles du jeu "programmiser" en Java
|
||||
* @param context Le context
|
||||
* @param attrs Les attributs (notamment id)
|
||||
* */
|
||||
public Circle(Context context, @Nullable AttributeSet attrs) {
|
||||
super(context, attrs);
|
||||
this.color = Color.GRAY;
|
||||
this.picasso = new Paint();
|
||||
}
|
||||
|
||||
/**
|
||||
* Recuperer la couleur du cercle
|
||||
* @return La couleur du cercle en int
|
||||
* */
|
||||
public int getColor() {
|
||||
return this.color;
|
||||
}
|
||||
|
||||
/**
|
||||
* Changer la couleur d'un cercle
|
||||
* @param c La nouvelle couleur
|
||||
* */
|
||||
public void setColor(int c) {
|
||||
this.color = c;
|
||||
this.invalidate();
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:endX="85.84757"
|
||||
android:endY="92.4963"
|
||||
android:startX="42.9492"
|
||||
android:startY="49.59793"
|
||||
android:type="linear">
|
||||
<item
|
||||
android:color="#44000000"
|
||||
android:offset="0.0" />
|
||||
<item
|
||||
android:color="#00000000"
|
||||
android:offset="1.0" />
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
<path
|
||||
android:fillColor="#FFFFFF"
|
||||
android:fillType="nonZero"
|
||||
android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
|
||||
android:strokeWidth="1"
|
||||
android:strokeColor="#00000000" />
|
||||
</vector>
|
170
app/src/main/res/drawable/ic_launcher_background (copy 1).xml
Normal file
170
app/src/main/res/drawable/ic_launcher_background (copy 1).xml
Normal file
@ -0,0 +1,170 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="108"
|
||||
android:viewportHeight="108">
|
||||
<path
|
||||
android:fillColor="#3DDC84"
|
||||
android:pathData="M0,0h108v108h-108z" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M9,0L9,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,0L19,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,0L29,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,0L39,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,0L49,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,0L59,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,0L69,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,0L79,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M89,0L89,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M99,0L99,108"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,9L108,9"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,19L108,19"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,29L108,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,39L108,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,49L108,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,59L108,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,69L108,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,79L108,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,89L108,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M0,99L108,99"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,29L89,29"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,39L89,39"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,49L89,49"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,59L89,59"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,69L89,69"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M19,79L89,79"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M29,19L29,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M39,19L39,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M49,19L49,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M59,19L59,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M69,19L69,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
<path
|
||||
android:fillColor="#00000000"
|
||||
android:pathData="M79,19L79,89"
|
||||
android:strokeWidth="0.8"
|
||||
android:strokeColor="#33FFFFFF" />
|
||||
</vector>
|
869
app/src/main/res/layout/game (copy 1).xml
Normal file
869
app/src/main/res/layout/game (copy 1).xml
Normal file
File diff suppressed because it is too large
Load Diff
47
app/src/main/res/layout/menu (copy 1).xml
Normal file
47
app/src/main/res/layout/menu (copy 1).xml
Normal file
@ -0,0 +1,47 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:context=".MainActivity"
|
||||
android:screenOrientation="portrait"
|
||||
android:background="#FFC0CB"
|
||||
android:gravity="center"
|
||||
android:orientation="vertical"
|
||||
>
|
||||
|
||||
<TextView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="40dp"
|
||||
android:textColor="@color/purple_700"
|
||||
android:gravity="center"
|
||||
android:text="JMastermind" />
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center"
|
||||
>
|
||||
<Button
|
||||
android:id="@+id/robotselect"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Joueur vs Robot"
|
||||
/>
|
||||
|
||||
<Button
|
||||
android:id="@+id/jcjselect"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Joueur contre Joueur" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/rules"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="Regles du jeu" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
</adaptive-icon>
|
BIN
app/src/main/res/mipmap-hdpi/ic_launcher (copy 1).webp
Normal file
BIN
app/src/main/res/mipmap-hdpi/ic_launcher (copy 1).webp
Normal file
Binary file not shown.
After ![]() (image error) Size: 1.4 KiB |
BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round (copy 1).webp
Normal file
BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round (copy 1).webp
Normal file
Binary file not shown.
After ![]() (image error) Size: 2.8 KiB |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher (copy 1).webp
Normal file
BIN
app/src/main/res/mipmap-mdpi/ic_launcher (copy 1).webp
Normal file
Binary file not shown.
After ![]() (image error) Size: 982 B |
BIN
app/src/main/res/mipmap-mdpi/ic_launcher_round (copy 1).webp
Normal file
BIN
app/src/main/res/mipmap-mdpi/ic_launcher_round (copy 1).webp
Normal file
Binary file not shown.
After ![]() (image error) Size: 1.7 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher (copy 1).webp
Normal file
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher (copy 1).webp
Normal file
Binary file not shown.
After ![]() (image error) Size: 1.9 KiB |
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round (copy 1).webp
Normal file
BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round (copy 1).webp
Normal file
Binary file not shown.
After ![]() (image error) Size: 3.8 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher (copy 1).webp
Normal file
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher (copy 1).webp
Normal file
Binary file not shown.
After ![]() (image error) Size: 2.8 KiB |
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_round (copy 1).webp
Normal file
BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_round (copy 1).webp
Normal file
Binary file not shown.
After ![]() (image error) Size: 5.8 KiB |
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user