Aller au contenu

Faire un game over


Sniijz

Recommended Posts

Bonsoir à tous!

Je débute en programmation java/android et pour m’entraîner je me suis amusé à coder en java l'application molemash qui était proposée dans l'appinventor. Cette application est en fait un jeu dans lequel on doit taper sur une taupe qui sort de tout les cotés de l'écran!

J'ai bien réussi à la refaire, mais maintenant, je voudrais ajouter un peu de challenge : faire un game over!

En effet, pour l'instant le seul but du jeu et de taper sur cette taupe, et lorsqu'on la touche, cela incrémente ma variable "lblHitsCountLabel" sinon si l'on touche à coté ça incrémente une autre variable nommée "lblMissesCountLabel".

Le seul but pour l'instant est de faire un maximum de "Hits" avec un minimum de "Misses".

Donc mon objectif serait de faire apparaitre une "alerte" comme en java au milieu de l'écran lorsque le joueur fait plus de 5 misses qui le force à recommencer, seulement voila, je n'y arrive pas! sa fait une semaine que je cherche et la je sèche!

Voila, je peux volontier vous faire part de mon code, mais je n'arrive pas à le joindre ici, peut être par mp!

Merci pour votre aide.

Sniijz.

Lien vers le commentaire
Partager sur d’autres sites

Désolé pour le temps de réponse!

Ah d'accord Sylvain-a, je ne voulais pas spammer sur le forum avec mon code :lol:

Et bien les deux ølivier :emo_im_undecided: le problème c'est que j'ai déclaré mes misses et les associés à un .text et du coup sa me perd un peu au niveau de la récupération de la valeur. Et en plus de sa, je ne sais absolument pas gérer une alert box, j'aimerai faire un simple pop up qui dit "Vous avez perdu, Voici votre score, voulez vous rejouer?"

Voici mon code!

package com.sniijz.geiimash;

import java.util.Random;
import android.view.Menu;
import android.view.MenuInflater;
import com.google.devtools.simple.runtime.components.HandlesEventDispatching;
import com.google.devtools.simple.runtime.components.android.Button;
import com.google.devtools.simple.runtime.components.android.Canvas;
import com.google.devtools.simple.runtime.components.android.Clock;
import com.google.devtools.simple.runtime.components.android.Form;
import com.google.devtools.simple.runtime.components.android.HorizontalArrangement;
import com.google.devtools.simple.runtime.components.android.ImageSprite;
import com.google.devtools.simple.runtime.components.android.Label;
import com.google.devtools.simple.runtime.components.android.Sound;
import com.google.devtools.simple.runtime.events.EventDispatcher;
/**
*
* @author Robin Cassagne // Sniijz the pig
* @Graphic Designer Julien Doucet // Doudou le fou
*/

public class GeiiMash extends Form implements HandlesEventDispatching
{
//Déclaration des variables à partir des bibliothèques google déjà existantes! (exemple: Canvas, Button...)
private Canvas cnvCanvas1;
private Button btnResetButton;
private HorizontalArrangement hrzHorizontalArrangement1, hrzHorizontalArrangement2;
private Clock clkClock1;
private Sound sndSound1;
private ImageSprite ispMole;
private Label lblHitsLabel, lblHitsCountLabel, lblMissesLabel, lblMissesCountLabel;
private Label game_over;

void $define()
{
 /*Affiliation des variables créees plus haut à un "état" nommé this, ce qui permet
 le regroupement en un même "état", lorsque l'on touche "this" bah, sa permettra de vibrer
  (sndSound1) de savoir si l'on touche ou pas le débile, de compter les débiles blessés...*/

 sndSound1 = new Sound( this );
 clkClock1 = new Clock( this );

 cnvCanvas1 = new Canvas(this);
 cnvCanvas1.Width( Canvas.LENGTH_FILL_PARENT );
 cnvCanvas1.Height( 300 );

 ispMole = new ImageSprite( cnvCanvas1 );
 ispMole.Picture( "mole.png" );

 btnResetButton = new Button( this );
 btnResetButton.Text( "Recommencer" );

 hrzHorizontalArrangement1 = new HorizontalArrangement( this );

 lblHitsLabel = new Label( hrzHorizontalArrangement1 );
 lblHitsLabel.Text( "Hits:" );

 lblHitsCountLabel = new Label( hrzHorizontalArrangement1 );
 lblHitsCountLabel.Text( "0" );

 hrzHorizontalArrangement2 = new HorizontalArrangement( this );

 lblMissesLabel = new Label( hrzHorizontalArrangement2 );
 lblMissesLabel.Text( "Misses:" );

 lblMissesCountLabel = new Label( hrzHorizontalArrangement2 );
 lblMissesCountLabel.Text( "0" );


 EventDispatcher.registerEventForDelegation( this, "MoleMash", "Click" );
 EventDispatcher.registerEventForDelegation( this, "MoleMash", "Initialize" );
 EventDispatcher.registerEventForDelegation( this, "MoleMash", "Timer" );
 EventDispatcher.registerEventForDelegation( this, "MoleMash", "Touched" );
}

public void dispatchEvent( Object component, String id, String eventName, Object[] args )
{
 if( eventName.equals( "Initialize" ) && component.equals( this ))
  this_Initialize();
 else if( eventName.equals( "Touched" ))
 {
  if( component.equals( cnvCanvas1 ) )
   cnvCanvas1_Touched( (Float)args[0], (Float)args[1], (Boolean)args[2] );
  else if( component.equals( ispMole ))
   ispMole_Touched( (Float)args[0], (Float)args[1] );
 }
 else if( eventName.equals( "Click" ) && component.equals( btnResetButton ))
  btnResetButton_Click();
 else if( eventName.equals( "Timer" ) && component.equals( clkClock1 ))
  clkClock1_Timer();
}

private void MoveMole()
{
 Random random = new Random();

 ispMole.MoveTo( random.nextDouble() * (cnvCanvas1.Width() - ispMole.Width()), random.nextDouble() * (cnvCanvas1.Height() - ispMole.Height()));
}

private void cnvCanvas1_Touched( float x, float y, boolean touchedSprite )
{
 if( touchedSprite )
  lblHitsCountLabel.Text( new Integer(Integer.valueOf( lblHitsCountLabel.Text()) + 1).toString() );
 else
  lblMissesCountLabel.Text( new Integer(Integer.valueOf( lblMissesCountLabel.Text()) + 1).toString() );
}


private void ispMole_Touched( float x, float y )
{
 sndSound1.Vibrate( 100 );
}
/*
private void game_over()
{
 if(lblMissesCountLabel.Height() == 5)
  game_over.Text(new Integer(Integer.valueOf(game_over.Text()) + 1).toString() );
}
*/
private void btnResetButton_Click()
{
 lblHitsCountLabel.Text( "0" );
 lblMissesCountLabel.Text( "0" );
}

private void clkClock1_Timer()
{
 MoveMole();
}

private void this_Initialize()
{
 MoveMole();
}


public boolean onCreateOptionsMenu(Menu menu)
{
 super.onCreateOptionsMenu(menu);
 MenuInflater mi = getMenuInflater();
 mi.inflate(R.menu.list_menu, menu);
 return true;

}
}

Merci d'avoir répondu aussi vite en tout cas!

Lien vers le commentaire
Partager sur d’autres sites

Le test pour savoir si on a raté plus de 5 fois est super étrange :)

if(lblMissesCountLabel.Height() == 5)

Dans ton cas il faut plutôt faire :

if ( Integer.valueOf( lblMissesCountLabel.Text()) == 5)

Ensuite tu appelles game_over() dans le else de ta méthode cnvCanvas1_Touched()

Pour afficher une alerte :

new AlertDialog.Builder( this )
.setTitle( "Game Over" )
.setMessage( "Vous avez trop raté " )
.setPositiveButton( "On recommence", new DialogInterface.OnClickListener() {
 public void onClick(DialogInterface dialog, int which) {
  Log.d( "AlertDialog", "Positive" );
 }
})
.show();

Tu peux personnaliser et générer facilement ce code ici :

http://www.generatea...m/android/alert

Je ne te cache pas que ton code est assez brut ;) , c'est normal tu débutes.

En règle général on utilise des variables qui représentent le modèle et tu affiches cette variable dans la vue.

En gros tu déclares une variable de type int que tu incrémentes /décrémentes /tests ... et tu l'affiches et pas l'inverse.

Ce qui donne

private int iMissesCount = 0;
private int iHitsCount = 0;

....


if( touchedSprite )
{
 iHitsCount = iHitsCount  +1;
 lblHitsCountLabel.Text(new String(iHitsCount ));
}
else
{
 iMissesCount = iMissesCount  +1;
 if (iMissesCount < 5)
  lblMissesCountLabel.Text(new String(iMissesCount ));
 else
 {
 // Affiche l'alerte
iMissesCount = 0;
iHitsCount = 0;
lblMissesCountLabel.Text("0");
  ....
 }
}

Enfin bon, chacun sa façon de coder. En hobby c'est le résultat qui compte :)

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...