Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android]Tic Tac Toe : Intelligence Artificielle bas niveau

Problème de boucles

Anonyme
    11 octobre 2012 à 14:02:47

    Bonjour,

    Je travaille sur le développement d'un jeu tournant sous Android, en utilisant bien évidemment le langage de programmation java: Le Tic Tac Toe ou le Morpion.
    Ce que j'essaie avant tout de réaliser, c'est une sorte d'intelligence artificielle.

    Principe

    Lorsque un humain clique sur une case, celle-ci se rempli de la valeur 1. Après ça, l'ordinateur répond en choisissant aléatoirement une case libre pour pouvoir y mettre une valeur de 0. Lorsque l'humain ou l'ordinateur a réussi une ligné, une colonne ou une diagonale de même valeur, celui-ci gagne et la partie prend fin.

    Avant de vous exposer mon problème, je tiens à préciser que j'ai de bonnes compétences - pas énorme non plus ^^ - pour réaliser ce projet :
    Les règles du jeu sont en places :
    • Si une case contient une valeur, celle-ci n'est plus cliquable
    • Fonction permettant de savoir qui est le grand gagnant ou non
    • Fonction permettant de choisir un nombre aléatoire moins la case cliqué


    Le problème

    Tout d'abord, une image avant le discours.
    Image utilisateur


    Je m'explique :
    • Orange : Lorsque la case 1 (celle de gauche) est cliquée, on passe par un case (switch) propre à cette case. La case remplie d'un 0, est la 3 (et ainsi de suite)
    • Bleu :
      • Tout d'abord, on passe par une boucle do... while qui permet de rechercher un nombre aléatoire sans prendre en compte le numéro de la case cliqué. Ici, le 1.
      • Si on trouve un nombre aléatoire différent de 1, on passe par des conditions pour pouvoir remplir la bonne case en fonction du nombre aléatoire reçu.
    • Et c'est ici que le problème se pose :
      Comment faire pour pouvoir retourner à la boucle do... while si un nombre aléatoire choisi ne peut pas être rempli dans une case car celle-ci est remplie ?


    J'ai essayé plusieurs façon différente de faire ça en suivant mon structogramme, mais j'arrive toujours au même point :
    • Si on arrive dans un else if, relancé un nombre aléatoire et voir ça valeur.
    • Il y a peu, j'y étais presque. L'IA répondait bien, mais fallait cliqué une 15aine de fois sur la même case pour remplir les 8 autres de 0 (lors des tests !)
    • ...


    Fonction permettant de gérer les clics des cases pour pouvoir y mettre une valeur (exemple présenté pour le problème).
    public void onClick(View v) {
    		switch(v.getId()){
    			case R.id.c1 :	
    				
    				Case1.setText("1");
    				
    				int nb = nbAleatoire(1);
    				
    				Toast.makeText(getApplicationContext(), "nb " + nb, Toast.LENGTH_SHORT).show();
    				
    				if(nb == 2){
    					Case2.setText("0");
    				}else if(!Case2.getText().toString().isEmpty()){
    					Toast.makeText(getApplicationContext(), "Case 2 remplie", Toast.LENGTH_SHORT).show();
    				}
    				
    				if(nb == 3){
    					Case3.setText("0");
    				}else if(!Case3.getText().toString().isEmpty()){
    					Toast.makeText(getApplicationContext(), "Case 3 remplie", Toast.LENGTH_SHORT).show();
    				}
    				
    				
    				break;
    		}
    	}
    

    Fonction permettant de choisir un nombre aléatoire moins la case cliqué (exemple présenté pour le problème)
    private int nbAleatoire(int nb){
    		int nbAlea;
    		do{
    			nbAlea = (int)(Math.random() * (4-1)) + 1;
    		}while(nbAlea == nb);//Si le nombre aléatoire est égale à la case cliqué, on refais une recherche
    		
    		return nbAlea;
    	}
    


    Conclusion

    Si une âme charitable peut me donner une simple piste, je lui serais très reconnaissant, car l'intelligence artificielle (ici de bas... Que dis-je... Très bas niveau) est un domaine passionnant et j'aimerais pouvoir on ne peut plus l'exploiter.

    En attendant de vos réponses, je vous souhaite un bon après-midi ^^
    • Partager sur Facebook
    • Partager sur Twitter

    [Android]Tic Tac Toe : Intelligence Artificielle bas niveau

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown