Serie de bouton a activer

JVFV 2 Messages postés mardi 19 décembre 2017Date d'inscription 19 décembre 2017 Dernière intervention - 19 déc. 2017 à 10:17 - Dernière réponse : Twinuts 5255 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 11 janvier 2018 Dernière intervention
- 4 janv. 2018 à 22:15
Bonjour,
Je viens solliciter de l'aide car je fais fasse a un problème, et aucune idée sur ma manière de le résoudre.
Allons droit au but : ( Supporter de l'O.M s'abstenir :) )

Je voudrais créer un petit jeu, qui consisterai a activer 4 boutons dans un ordre défini.
Si les 4 boutons sont activés dans le bon ordre, vous passer a l'activité suivante, dans le cas contraire,
vous recommencerez l'opération.

Je vous transmet une photo de mon code actuel.


Merci pour toute aide apporté, je précise que je suis débutant, donc un peu d'indulgence :D
Afficher la suite 

1 réponse

Répondre au sujet
Twinuts 5255 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 11 janvier 2018 Dernière intervention - 4 janv. 2018 à 22:15
0
Utile
Salut,

Je ne sais pas trop si ton problème est toujours d'actu mais voici une solution 'assez simpliste':
Le fichier layout activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    tools:context="xx.yyy.foo.MainActivity">
    <TextView
        android:id="@+id/textview"
        android:layout_alignParentTop="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <ToggleButton
        android:id="@+id/button1"
        android:layout_below="@id/textview"
        android:layout_alignParentStart="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"/>
    <ToggleButton
        android:id="@+id/button2"
        android:layout_below="@id/textview"
        android:layout_toEndOf="@id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"/>
    <ToggleButton
        android:id="@+id/button3"
        android:layout_below="@id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick" />
    <ToggleButton
        android:id="@+id/button4"
        android:layout_below="@id/button2"
        android:layout_toEndOf="@id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="onClick"/>
</RelativeLayout>


Le code de l'activity MainActivity.java:
package xx.yyy.foo;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.CycleInterpolator;
import android.view.animation.TranslateAnimation;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.ToggleButton;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {
  private List<Integer> mList = null; /* Liste utilisée pour l'ordre */
  private List<ToggleButton> mListButtons = null; /* Temporaire pour faciliter la manipulation des boutons */


  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mList = new ArrayList<>();
    mListButtons = new ArrayList<>(Arrays.asList(
        findViewById(R.id.button1),
        findViewById(R.id.button2),
        findViewById(R.id.button3),
        findViewById(R.id.button4)
    ));
    /* Init des textes des boutons */
    final Locale locale = Locale.US;
    for(int i = 0; i < mListButtons.size(); i++) {
      ToggleButton tb = mListButtons.get(i);
      tb.setTextOn(String.format(locale, "On: Button %d", i));
      tb.setTextOff(String.format(locale, "Off: Button %d", i));
    }
    /* Build de la liste du "jeu" */
    buildList();
  }

  /**
   * Construction de la liste utilisée pour le "jeu"
   */
  private void buildList() {
    if(!mList.isEmpty()) /* cas d'erreur */
      mList.clear();
    /* Re remplissage de la liste */
    for(int i = 0; i < mListButtons.size(); i++)
      mList.add(i);
    /* random de la liste */
    Collections.shuffle(mList);
    /* Affichage de l'ordre */
    StringBuilder sb = new StringBuilder();
    sb.append("List order: ");
    mList.forEach((i) -> sb.append(i).append(" "));
    ((TextView)findViewById(R.id.textview)).setText(sb.toString().trim());
    /* Revalidation des boutons */
    uncheckAll();
  }

  /**
   * Click sur un bouton.
   * @param v Vue du click.
   */
  public void onClick(View v) {
    ToggleButton tb = (ToggleButton)v;
    String lbl = tb.getText().toString();
    /* Récupération de l'index (récupéré dans le label) */
    int idx = Integer.parseInt(lbl.substring(lbl.lastIndexOf(' ') + 1, lbl.length()));
    /* Validation de l'ordre */
    if(mList.get(0) == idx) {
      v.setEnabled(false); /* désactivation du bouton */
      mList.remove(0); /* suppression dans la liste */
      if(mList.isEmpty()) {
        Toast.makeText(this, "Success :)", Toast.LENGTH_SHORT).show();
        buildList();
      }
    } else {
      Toast.makeText(this, "Error :(", Toast.LENGTH_SHORT).show();
      shake((ToggleButton)v);
      buildList();
    }
  }

  /**
   * Petite animation en cas d'erreur.
   * @param tb Bouton à animer.
   */
  private void shake(ToggleButton tb) {
    TranslateAnimation shake = new TranslateAnimation(0, 10, 0, 0);
    shake.setDuration(500);
    shake.setInterpolator(new CycleInterpolator(5));
    tb.clearAnimation();
    tb.startAnimation(shake);
  }

  /**
   * Deselectionne et reactive les boutons.
   */
  private void uncheckAll() {
    mListButtons.forEach((bt) -> {
      bt.setChecked(false);
      bt.setEnabled(true);
    });
  }
}


Dans le code j'utilise la syntaxe java 1.8 il faudra donc ajouter le bloc compileOptions dans le fichier build.gradle (chez moi c'est dans celui de l'application):

apply plugin: 'com.android.application'

android {
compileSdkVersion 26
defaultConfig {
applicationId "xx.yyy.foo"
minSdkVersion 24
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}

Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.