diff --git a/app/build.gradle b/app/build.gradle index 5313a38..f57c90b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,14 +26,12 @@ android { 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' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0066848..5ecc56c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,30 +1,34 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/jmastermind/Events/ColorSelectorEvent.java b/app/src/main/java/com/example/jmastermind/Events/ColorSelectorEvent.java index 1a35a48..45ed4eb 100644 --- a/app/src/main/java/com/example/jmastermind/Events/ColorSelectorEvent.java +++ b/app/src/main/java/com/example/jmastermind/Events/ColorSelectorEvent.java @@ -92,7 +92,7 @@ public class ColorSelectorEvent extends View implements View.OnClickListener { Popup popup = new Popup(this.context, opts, (10 - this.tentative)); popup.show(); } else if(this.tentative == 0) { - Popup popup = new Popup(this.context, opts); + Popup popup = new Popup(this.context, opts, -1); popup.show(); } diff --git a/app/src/main/java/com/example/jmastermind/Events/MenuEvent.java b/app/src/main/java/com/example/jmastermind/Events/MenuEvent.java index 84c79af..55f623f 100644 --- a/app/src/main/java/com/example/jmastermind/Events/MenuEvent.java +++ b/app/src/main/java/com/example/jmastermind/Events/MenuEvent.java @@ -1,25 +1,31 @@ package com.example.jmastermind.Events; import android.content.Intent; +import android.media.MediaPlayer; import android.view.View; import androidx.appcompat.app.AppCompatActivity; public class MenuEvent implements View.OnClickListener { private Class option; private AppCompatActivity ac; + private MediaPlayer mp; /** * Event lié au menu de depart * @param ac Le contexte * @param option La class de l'activité a demarrer + * @param mp Couper le son d'une activite * */ - public MenuEvent(AppCompatActivity ac, Class option) { + public MenuEvent(AppCompatActivity ac, Class option, MediaPlayer mp) { this.ac = ac; this.option = option; + this.mp = mp; } @Override public void onClick(View view) { + this.mp.stop(); + 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 index 084d704..aead900 100644 --- a/app/src/main/java/com/example/jmastermind/Events/PopupEvent.java +++ b/app/src/main/java/com/example/jmastermind/Events/PopupEvent.java @@ -2,18 +2,20 @@ package com.example.jmastermind.Events; import android.content.DialogInterface; import android.content.Intent; +import android.media.MediaPlayer; import android.view.View; import android.widget.Button; -import android.widget.PopupMenu; import androidx.appcompat.app.AppCompatActivity; import com.example.jmastermind.Game.Popup; import com.example.jmastermind.Game.SoloGame; -import com.example.jmastermind.MainActivity; +import com.example.jmastermind.Menu.Menu; +import com.example.jmastermind.Prologue; import com.example.jmastermind.R; public class PopupEvent implements DialogInterface.OnClickListener, View.OnClickListener { + private MediaPlayer mp; private int tentative; private AppCompatActivity context; @@ -22,15 +24,17 @@ public class PopupEvent implements DialogInterface.OnClickListener, View.OnClick * @param context Le context * @param tentative Le nombre de tentative * */ - public PopupEvent(AppCompatActivity context, int tentative) { + public PopupEvent(AppCompatActivity context, int tentative, MediaPlayer mp) { this.context = context; this.tentative = tentative; + this.mp = mp; } @Override public void onClick(DialogInterface dialogInterface, int i) { switch(i) { case 0: { + this.mp.stop(); Intent a = new Intent(this.context, SoloGame.class); this.context.startActivity(a); break; @@ -46,7 +50,8 @@ public class PopupEvent implements DialogInterface.OnClickListener, View.OnClick } case 2: { - Intent c = new Intent(this.context, MainActivity.class); + this.mp.stop(); + Intent c = new Intent(this.context, Menu.class); this.context.startActivity(c); break; } diff --git a/app/src/main/java/com/example/jmastermind/Events/PrologueAnimation.java b/app/src/main/java/com/example/jmastermind/Events/PrologueAnimation.java new file mode 100644 index 0000000..555deb1 --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Events/PrologueAnimation.java @@ -0,0 +1,35 @@ +package com.example.jmastermind.Events; + +import android.content.Intent; +import android.media.MediaPlayer; +import android.view.animation.Animation; + +import androidx.appcompat.app.AppCompatActivity; + +import com.example.jmastermind.Menu.Menu; +import com.example.jmastermind.R; + +public class PrologueAnimation implements Animation.AnimationListener { + private AppCompatActivity context; + private MediaPlayer mp; + + public PrologueAnimation(AppCompatActivity context) { + this.context = context; + } + + @Override + public void onAnimationStart(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + Intent i = new Intent(this.context, Menu.class); + this.context.startActivity(i); + this.mp.stop(); + } + + @Override + public void onAnimationRepeat(Animation animation) { + + } +} diff --git a/app/src/main/java/com/example/jmastermind/Game/Popup.java b/app/src/main/java/com/example/jmastermind/Game/Popup.java index 59ca4be..a8cf907 100644 --- a/app/src/main/java/com/example/jmastermind/Game/Popup.java +++ b/app/src/main/java/com/example/jmastermind/Game/Popup.java @@ -1,5 +1,6 @@ package com.example.jmastermind.Game; +import android.media.MediaPlayer; import android.widget.Button; import androidx.appcompat.app.AlertDialog; @@ -8,6 +9,7 @@ import com.example.jmastermind.Events.PopupEvent; import com.example.jmastermind.R; public class Popup extends AlertDialog.Builder { + private MediaPlayer mp; private AppCompatActivity context; /** @@ -20,12 +22,20 @@ public class Popup extends AlertDialog.Builder { super(context); this.context = context; - if(tentative.length > 0) { + if(tentative[0] > 0) { + this.mp = MediaPlayer.create(this.context, R.raw.winningsong); + this.mp.setLooping(true); + this.mp.start(); + this.setTitle("Félicitation ! Vous avez gagner en : " + tentative[0] + " coup(s)."); } else { + this.mp = MediaPlayer.create(this.context, R.raw.loosegamesong); + this.mp.setLooping(true); + this.mp.start(); + this.setTitle("Perdu !"); } - this.setItems(options, new PopupEvent(this.context, tentative[0])); + this.setItems(options, new PopupEvent(this.context, tentative[0], this.mp)); } } diff --git a/app/src/main/java/com/example/jmastermind/Geometrics/Circle.java b/app/src/main/java/com/example/jmastermind/Geometrics/Circle.java index 08aef0b..e9cb2a2 100644 --- a/app/src/main/java/com/example/jmastermind/Geometrics/Circle.java +++ b/app/src/main/java/com/example/jmastermind/Geometrics/Circle.java @@ -47,9 +47,10 @@ public class Circle extends View { canvas.drawCircle(centerX, centerY, radius-2, this.picasso); - this.picasso.setColor(Color.GRAY); + int corail = Color.rgb(255, 127, 80); + this.picasso.setColor(corail); this.picasso.setStyle(Paint.Style.STROKE); - this.picasso.setStrokeWidth(5f); + this.picasso.setStrokeWidth(2f); canvas.drawCircle(centerX, centerY, radius-3, this.picasso); } diff --git a/app/src/main/java/com/example/jmastermind/Menu/Menu.java b/app/src/main/java/com/example/jmastermind/Menu/Menu.java new file mode 100644 index 0000000..3cc648c --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Menu/Menu.java @@ -0,0 +1,36 @@ +package com.example.jmastermind.Menu; + +import android.media.MediaPlayer; +import android.os.Bundle; +import android.widget.Button; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; + +import com.example.jmastermind.Events.MenuEvent; +import com.example.jmastermind.Game.MultiGame; +import com.example.jmastermind.Game.SoloGame; +import com.example.jmastermind.R; + +public class Menu extends AppCompatActivity { + private MediaPlayer mp; + + /** + * Le jeu mode SOLO + * */ + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.menu); + + this.mp = MediaPlayer.create(this, R.raw.menusong); + this.mp.setLooping(true); + this.mp.start(); + + Button btnSoloGame = (Button) findViewById(R.id.robotselect); + btnSoloGame.setOnClickListener(new MenuEvent(this, SoloGame.class, this.mp)); + + Button btnMultiGame = (Button) findViewById(R.id.jcjselect); + btnMultiGame.setOnClickListener(new MenuEvent(this, MultiGame.class, this.mp)); + } +} diff --git a/app/src/main/java/com/example/jmastermind/Prologue.java b/app/src/main/java/com/example/jmastermind/Prologue.java new file mode 100644 index 0000000..15ed70b --- /dev/null +++ b/app/src/main/java/com/example/jmastermind/Prologue.java @@ -0,0 +1,62 @@ +package com.example.jmastermind; + +import androidx.appcompat.app.AppCompatActivity; + +import android.media.MediaPlayer; +import android.os.Bundle; +import android.view.animation.Animation; +import android.view.animation.AnimationSet; +import android.view.animation.LinearInterpolator; +import android.view.animation.TranslateAnimation; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.example.jmastermind.Events.MenuEvent; +import com.example.jmastermind.Events.PrologueAnimation; +import com.example.jmastermind.Menu.Menu; + +public class Prologue extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.prologue); + + MediaPlayer mp = MediaPlayer.create(this, R.raw.prologuesong); + mp.setLooping(true); + mp.start(); + + LinearLayout prologue = (LinearLayout) findViewById(R.id.prologue); + prologue.setOnClickListener(new MenuEvent(this, Menu.class, mp)); + + TextView tx = (TextView) findViewById(R.id.prologuetext); + + AnimationSet animationSet = new AnimationSet(true); + animationSet.setInterpolator(new LinearInterpolator()); + + TranslateAnimation animationUp = new TranslateAnimation( + Animation.RELATIVE_TO_SELF, 0f, + Animation.RELATIVE_TO_SELF, 0f, + Animation.RELATIVE_TO_SELF, 0f, + Animation.RELATIVE_TO_SELF, -1f + ); + animationUp.setDuration(20000); + animationUp.setFillAfter(true); + animationSet.addAnimation(animationUp); + + TranslateAnimation animationDown = new TranslateAnimation( + Animation.RELATIVE_TO_SELF, 0f, + Animation.RELATIVE_TO_SELF, 0f, + Animation.RELATIVE_TO_SELF, 1f, + Animation.RELATIVE_TO_SELF, 0f + ); + animationDown.setDuration(20000); + animationDown.setFillAfter(true); + animationSet.addAnimation(animationDown); + + PrologueAnimation pa = new PrologueAnimation(this); + animationSet.setAnimationListener(pa); + + tx.startAnimation(animationSet); + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/game.PNG b/app/src/main/res/drawable/game.PNG new file mode 100644 index 0000000..9dc7f8e Binary files /dev/null and b/app/src/main/res/drawable/game.PNG differ diff --git a/app/src/main/res/drawable/logo.png b/app/src/main/res/drawable/logo.png new file mode 100644 index 0000000..868a586 Binary files /dev/null and b/app/src/main/res/drawable/logo.png differ diff --git a/app/src/main/res/font/text.ttf b/app/src/main/res/font/text.ttf new file mode 100644 index 0000000..3033308 Binary files /dev/null and b/app/src/main/res/font/text.ttf differ diff --git a/app/src/main/res/font/title.ttf b/app/src/main/res/font/title.ttf new file mode 100644 index 0000000..96ddf00 Binary files /dev/null and b/app/src/main/res/font/title.ttf differ diff --git a/app/src/main/res/layout/game.xml b/app/src/main/res/layout/game.xml index e97918e..d8f1dde 100644 --- a/app/src/main/res/layout/game.xml +++ b/app/src/main/res/layout/game.xml @@ -6,8 +6,8 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" - tools:context=".MainActivity" - android:background="@drawable/space" + tools:context=".Prologue" + android:background="@drawable/game" > + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/raw/loosegamesong.mp3 b/app/src/main/res/raw/loosegamesong.mp3 new file mode 100644 index 0000000..e825456 Binary files /dev/null and b/app/src/main/res/raw/loosegamesong.mp3 differ diff --git a/app/src/main/res/raw/menusong.mp3 b/app/src/main/res/raw/menusong.mp3 new file mode 100644 index 0000000..ca2d049 Binary files /dev/null and b/app/src/main/res/raw/menusong.mp3 differ diff --git a/app/src/main/res/raw/prologuesong.mp3 b/app/src/main/res/raw/prologuesong.mp3 new file mode 100644 index 0000000..b9e2487 Binary files /dev/null and b/app/src/main/res/raw/prologuesong.mp3 differ diff --git a/app/src/main/res/raw/winningsong.mp3 b/app/src/main/res/raw/winningsong.mp3 new file mode 100644 index 0000000..5c8125f Binary files /dev/null and b/app/src/main/res/raw/winningsong.mp3 differ diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 8750f33..8c059b8 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,8 +1,8 @@ -