Créer un simple jeu de tic-tac-toe en Python

巴扎黑
Libérer: 2017-04-05 14:53:58
original
1709 Les gens l'ont consulté

Dans ce tutoriel, je vais vous montrer comment créer un jeu de tic-tac-toe en utilisant Python. Cela inclura des fonctions, des listes, des instructions if, des boucles while, des boucles for, la gestion des erreurs, etc.

Tout d'abord, nous allons créer deux fonctions. La première fonction imprimera le modèle d'arrière-plan du jeu de tic-tac-toe :

def print_board():
    for i in range(0,3):
        for j in range(0,3):
            print map[2-i][j],
            if j != 2:
                print "|",
        print ""
Copier après la connexion

. Ici, nous utilisons deux boucles for pour parcourir une variable de liste nommée map. Cette variable est une liste bidimensionnelle qui contiendra des informations pour chaque emplacement.

Puisque je vais comparer les positions en fonction des chiffres sur le clavier (comme vous le verrez plus tard), nous définissons la première valeur sur (2-i), puis nous voulons utiliser "|" pour diviser nos positions, donc après chaque position est imprimé, nous imprimons un "|" pour cela. Nous utilisons ici des virgules print map[2-i][j], pour nous assurer qu'ils sont imprimés sur la même ligne.

Désormais, cette fonction peut imprimer l'arrière-plan d'un jeu. Cela ressemble à ceci :

  |   |   
  |   |   
  |   |
Copier après la connexion
X | X |   
O | X | O 
  | O | X
Copier après la connexion
X | X | X 
X | X | X 
X | X | X
Copier après la connexion

. Ensuite, nous créons une fonction check_done() qui vérifiera si le jeu est terminé après chaque tour. Si le jeu est terminé, renvoyez True et imprimez un message.

def check_done():
    for i in range(0,3):
        if map[i][0] == map[i][1] == map[i][2] != " " \
        or map[0][i] == map[1][i] == map[2][i] != " ":
            print turn, "won!!!"
            return True

    if map[0][0] == map[1][1] == map[2][2] != " " \
    or map[0][2] == map[1][1] == map[2][0] != " ":
        print turn, "won!!!"
        return True

    if " " not in map[0] and " " not in map[1] and " " not in map[2]:
        print "Draw"
        return True

    return False
Copier après la connexion

Premièrement, nous vérifierons s'il y a trois lignes dans les directions horizontale et verticale qui sont identiques et non vides (il ne considérera donc pas trois lignes vides consécutives comme éligibles). Deuxièmement, nous vérifions les lignes diagonales de la même manière.

Si l'une de ces 8 lignes remplit les conditions, le jeu se terminera et "Gagné !!!" sera imprimé et True sera renvoyé en même temps, faites attention à la variable turn. déterminez quel camp joue aux échecs maintenant, et enfin affichez le message qui apparaîtra "X gagné !!" ou "O gagné !!".

Ensuite, cette fonction jugera que si aucune position n'est vide, cela signifie que personne ne peut gagner la partie (jugée plus tôt), elle imprimera alors une égalité et reviendra True.

S'il n'y a aucune des deux situations ci-dessus, alors le jeu n'est pas encore terminé et revenez à False.

OK, maintenant nous avons deux fonctions, commençons notre vrai programme, créons d'abord trois variables :

turn = "X"
map = [[" "," "," "],
       [" "," "," "],
       [" "," "," "]]
done = False
Copier après la connexion

Je vous ai déjà expliqué ce que signifient ces trois variables. Si vous oubliez, jetez un œil ci-dessous :

  • tour : Qui devrait partir


  • map : La carte de fond du jeu


  • terminé : Ce jeu est-il terminé ?

Ensuite, écrivez comme ceci :

while done != True:
    print_board()

    print turn, "'s turn"
    print

    moved = False
    while moved != True:
Copier après la connexion

Il y a une boucle while à l'intérieur, jusqu'à ce que done soit True, nous imprimons à qui c'est le tour d'aller.

Créez ensuite une variable nommée moved pour vérifier si le joueur a bougé. Sinon, entrez dans la boucle suivante.

Ensuite, nous imprimons comment le joueur doit procéder :

print "Please select position by typing in a number between 1 and 9, see below for which number that is which position..."
print "7|8|9"
print "4|5|6"
print "1|2|3"
print
Copier après la connexion

Suivant :

try:
    pos = input("Select: ")
    if pos <=9 and pos >=1:
Copier après la connexion

Nous voulons que le joueur entre un nombre, puis nous vérifions s'il est compris entre 1 et 9. En même temps, nous devons ajouter une gestion des erreurs. Par exemple, si le joueur entre "Bonjour", le programme ne peut pas simplement quitter. .

Maintenant, il faut vérifier s'il peut franchir cette étape :

Y = pos/3
X = pos%3
if X != 0:
    X -=1
else:
    X = 2
    Y -=1
Copier après la connexion

Haha, gardez les yeux ouverts. Tout d'abord, nous obtenons une valeur de X et Y, puis nous les utilisons pour vérifier si la position qu'il souhaite placer est vide. Ensuite, je vais vous expliquer comment fonctionnent X et Y :<🎜. >

  • Position 1 : Y = 1/3 = 0, X = 1%3 = 1 ; Position 2 : Y = 2/3 = 0, X = 2%3 = 2 ; Position 3 : Y = 3/3 = 1, X = 3%3 = 0 ;

    ……

  • Vous pouvez faire le calcul ci-dessous, et je vais directement à la conclusion (Merde, le modèle par défaut d'Hexo n'affiche pas de tableaux. Quand je l'ai édité sur mou, il était bien plus joli que celui ci-dessous !) :

    < table align="center">< thead> YX x=0 x=1 x=2
  • y=2 7 8 9 y=1 4 5 6 y=0 1 2 3

      aha,这个位置和我们键入的是一样的!

    print "7|8|9"
    print "4|5|6"
    print "1|2|3"
    Copier après la connexion

      现在我们完成大部分工作了,但是还有几行代码:

    map[Y][X] = turn
    moved = True
    done = check_done()
    
    if done == False:
        if turn == "X":
            turn = "O"
        else:
            turn = "X"
    
    except:
        print "You need to add a numeric value"
    Copier après la connexion

      嗯,我们给moved变量复制为True,并检查是否结束了,木有结束的话变换角色换下一个人走。

      OK,差不多结束了,假如你只是想Ctrl+C 和 Ctrl+V的话,下面是全部的代码,希望你学到了点什么,( ^_^ )/~~拜拜。

    def print_board():
        for i in range(0,3):
            for j in range(0,3):
                print map[2-i][j],
                if j != 2:
                    print "|",
            print ""
    
    def check_done():
        for i in range(0,3):
            if map[i][0] == map[i][1] == map[i][2] != " " \
            or map[0][i] == map[1][i] == map[2][i] != " ":
                print turn, "won!!!"
                return True
    
        if map[0][0] == map[1][1] == map[2][2] != " " \
        or map[0][2] == map[1][1] == map[2][0] != " ":
            print turn, "won!!!"
            return True
    
        if " " not in map[0] and " " not in map[1] and " " not in map[2]:
            print "Draw"
            return True
    
        return False
    
    turn = "X"
    map = [[" "," "," "],
           [" "," "," "],
           [" "," "," "]]
    done = False
    
    while done != True:
        print_board()
    
        print turn, "&#39;s turn"
        print
    
        moved = False
        while moved != True:
            print "Please select position by typing in a number between 1 and 9, see below for which number that is which position..."
            print "7|8|9"
            print "4|5|6"
            print "1|2|3"
            print
    
            try:
                pos = input("Select: ")
                if pos <=9 and pos >=1:
                    Y = pos/3
                    X = pos%3
                    if X != 0:
                        X -=1
                    else:
                         X = 2
                         Y -=1
    
                    if map[Y][X] == " ":
                        map[Y][X] = turn
                        moved = True
                        done = check_done()
    
                        if done == False:
                            if turn == "X":
                                turn = "O"
                            else:
                                turn = "X"
    
            except:
                print "You need to add a numeric value"
    Copier après la connexion

      原文出处: Vswe

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal