Cas de développement de projet Python (deux) - jeu de gomoku simple (version console)

2. Jeu Gomoku simple (version console)

2.1 Analyse de la demande

Le jeu Gobang développé dans cette section est une version console, le jeu doit donc avoir les fonctions suivantes:

  • L'échiquier peut être imprimé cycliquement;
  • Vous pouvez jouer seul;
  • Lorsque l'une des deux équipes gagne, imprimez le tableau de la victoire et le gagnant;
  • Déterminez si la pièce d'échecs dépasse la portée de l'échiquier;
  • Déterminez s'il y a une pièce d'échecs à la position de coordonnées spécifiée;
  • L'interface est magnifique et les invites sont évidentes.

2.2 Conception du jeu

2.2.1 Structure des fonctions de jeu

2.2.2 Processus métier du jeu

        Le processus métier du jeu Gobang simple (version console) est illustré dans la figure ci-dessous.

2.3 Essentiels pour le développement de jeux

2.3.1 Environnement de développement de jeux

L'environnement de développement et d'exploitation de ce jeu est le suivant:

  • Système d'exploitation: Windows7, Windows10, etc .;
  • Version Python: Python3.7;
  • Outils de développement: Pycharm.

2.3.2 Structure d'organisation des dossiers

        Le jeu gobang simple (version console) n'a qu'un seul fichier gobang.py, qui représente le fichier de code du logiciel, et tous les codes qui implémentent la logique gobang sont dans ce fichier.

2.4 Paramètres du damier

2.4.1 Processus de mise en œuvre de la création du conseil

        Le processus de mise en œuvre de la configuration de la carte et les technologies clés utilisées sont illustrés dans la figure.

2.4.2 Initialiser l'échiquier

        Lors du développement d'un jeu de gomoku, vous devez d'abord initialiser le tableau. Le tableau de gomoku est similaire à une liste à deux dimensions. Par conséquent, dans ce programme, une liste à deux dimensions nommée checkboard est utilisée pour stocker le tableau de gomoku. Le code est le suivant:

finish = False  #游戏是否结束
flagNum = 1     #当前下棋者标记
flagch = 'a'    #当前下棋者棋子
x = 0           #当前棋子的横坐标
y = 0           #当前棋子的纵坐标
print('\033[1;37;41m------------简易五子棋游戏(控制台版)---------\033[0m')
#棋盘初始化
checkerboard=[]
for i in range(10):
    checkerboard.append([])
    for j in range(10):
        checkerboard[i].append('-')

2.4.3 Imprimer l'échiquier

        Pour jouer aux échecs dans le jeu Gobang, l'utilisateur doit d'abord afficher le tableau Gobang. Comme ce programme est un programme console, sélectionnez directement le fichier gobang, py dans Pycharn et cliquez sur le \ minuscule \ trianglerightbouton dans le coin supérieur droit de l'interface Pycharn pour le contrôler dans Pycharn Taichung montre un échiquier.

        La section 2.4.2 a initialisé le tableau Gomoku, et le travail suivant n'a plus qu'à l'imprimer. Ici, une boucle for imbriquée est utilisée pour parcourir la liste bidimensionnelle stockant le tableau Gomoku, puis passer une fois à l'élément Juste sortie. code montrer comme ci-dessous:

#打印棋盘
print("\033[1;30;46m-----------------------")
print("  1 2 3 4 5 6 7 8 9 10")                #输出行标号
for i in range(len(checkerboard)):
    print(chr(i+ord('A'))+"",end='');          #输出列标号
    for j in range(len(checkerboard[i])):
        print(checkerboard[i][j]+"",end='')
    print()                                    #换行
print("--------------------------------\033[0m")

2.4.4 Imprimer le tableau de la victoire et le gagnant

        Lorsque vous jouez au jeu Gobang, si une partie gagne, le tableau final est imprimé et le gagnant est sorti.

        Définissez une fonction msg () pour afficher le tableau de victoire finale et le vainqueur. Dans cette fonction, la boucle imbriquée pour est principalement utilisée pour sortir le tableau de backgammon de victoire finale, et la sortie du vainqueur est obtenue en jugeant la valeur de la variable flagNum. Le code d'implémentation de la fonction msg () est le suivant:

def mag():
    #输出最后胜利的棋盘
    print("\033[1;37;41m--------------------------")
    print(" 1 2 3 4 5 6 7 8 9 10")
    for i in range(len(checkerboard)):
        print(chr(i+ord('A'))+"",end='')
        for j in range(len(checkerboard[i])):
            print(checkerboard[i][j]+"",end='')
        print()
    print("--------------------------\033[0m")
    #输出赢家
    if(flagNum == 1):
       print('\033[32m*棋胜利!***\033[0m')
    else:
       print('\033[32mo棋胜利!***\033[0m')

2.4.5 Définir différentes polices et couleurs d'arrière-plan pour la console

2.5 Algorithme de Gobang

2.5.1 Analyse de l'algorithme de Gobang

        La règle du jeu de Gobang est de rechercher des pièces du même type dans huit directions avec le point d'entrée comme centre. Si le nombre des mêmes pièces est supérieur ou égal à 5, cela signifie que le joueur de ce type de pièce est le gagnant. La direction de recherche des morceaux de gobang est indiquée sur la figure.

                                                                  Figure 1 Déterminez la forme d'une pièce d'échecs placée dans huit directions

2.5.2 Déterminer la direction haut, bas, gauche et droite d'une pièce d'échecs

        Juger la direction haut, bas, gauche et droite de la pièce d'échecs, principalement pour juger si les quatre pièces adjacentes à la coordonnée X ou à la coordonnée Y de la pièce d'échecs sont les pièces d'échecs de la même couleur, si c'est le cas, définissez le drapeau d'arrivée sur Vrai, ce qui signifie la fin Jouez aux échecs en boucle, puis appelez la fonction msg () pour imprimer le tableau gagnant et le gagnant. code montrer comme ci-dessous:

#判断棋子左侧
if(y - 4 >= 0):
   if(checkerboard[x][y-1] == flagch
           and checkerboard[x][y-2] == flagch
           and checkerboard[x][y-3] == flagch
           and checkerboard[x][y-4] == flagch):
      finish = True
      msg()


#判断棋子右侧
if(y + 4 <= 9):
   if(checkerboard[x][y+1] == flagch
          and checkerboard[x][y+2] == flagch
          and checkerboard[x][y+3] == flagch
          and checkerboard[x][y+4] == flagch):
      finish = True
      msg()

#判断棋子上方
if(x - 4 >= 0):
   if(checkerboard[x-1][y] == flagch
          and checkerboard[x-2][y] == flagch
          and checkerboard[x-3][y] == flagch
          and checkerboard[x-4][y] == flagch):
      finish = True
      msg()

#判断棋子下方
if(x + 4 <= 9):
   if(checkerboard[x+1][y] == flagch
          and checkerboard[x+2][y] == flagch
          and checkerboard[x+3][y] == flagch
          and checkerboard[x+4][y] == flagch):
      finish = True
      msg()

2.5.3 Déterminer la direction diagonale d'une pièce d'échecs

        Pour déterminer la direction diagonale d'une pièce d'échecs, il s'agit principalement de déterminer si les 4 pièces d'échecs adjacentes aux coordonnées de la pièce d'échecs sur la diagonale sont de la même couleur. Si tel est le cas, définissez le drapeau d'arrivée sur Vrai, c'est-à-dire, terminez le cycle d'échecs, puis appelez La fonction msg () imprime le tableau de la victoire et le gagnant. code montrer comme ci-dessous:

#判断棋子右上方向
if(x - 4 >= 0 and y-4 >=0):
   if(checkerboard[x-1][y-1] == flagch
          and checkerboard[x-2][y-2] == flagch
          and checkerboard[x-3][y-3] == flagch
          and checkerboard[x-4][y-4] == flagch):
      finish = True
      msg()

#判断棋子右下方向
if(x + 4 <= 9 and y-4 >=0):
   if(checkerboard[x+1][y-1] == flagch
          and checkerboard[x+2][y-2] == flagch
          and checkerboard[x+3][y-3] == flagch
          and checkerboard[x+4][y-4] == flagch):
      finish = True
      msg()

#判断棋子左上方向
if(x - 4 >= 0 and y + 4 <= 9):
   if(checkerboard[x-1][y+1] == flagch
          and checkerboard[x-2][y+2] == flagch
          and checkerboard[x-3][y+3] == flagch
          and checkerboard[x-4][y+4] == flagch):
      finish = True
      msg()

#判断棋子左上方向
if(x + 4 <= 9 and y + 4 <= 9):
   if(checkerboard[x+1][y+1] == flagch
          and checkerboard[x+2][y+2] == flagch
          and checkerboard[x+3][y+3] == flagch
          and checkerboard[x+4][y+4] == flagch):
      finish = True
      msg()

2.6 Paramètres d'échecs

2.6.1 Processus de mise en œuvre du jeu d'échecs

        Le processus de mise en œuvre du jeu d'échecs et les technologies clés utilisées sont illustrés dans la figure.

2.6.2 Juger le joueur actuel

        Lorsque vous jouez aux échecs dans le jeu Gobang, il y a deux adversaires, qui sont affichés dans différentes couleurs de fond et couleurs de police dans la console.

        Ce programme utilise principalement une variable flagNum pour déterminer l'identité des adversaires. Si la variable est 1, le joueur est "*", sinon le joueur est "o". Le code d'implémentation est le suivant:

#判断当前下棋者
if flagNum == 1:
   flagch = '*'
   print('\033[1;37;45m请*输入棋子坐标(例如A1):\033[0m',end='')  # 粉字黑底
else:
   flagch = '*'
   print('\033[1;37;42m请o输入棋子坐标(例如J5):\033[0m',end='')  # 黑字绿底

        De plus, une fois qu'une partie a fini de jouer aux échecs, la valeur de la variable flagNum doit être modifiée pour changer de joueur. Le code est le suivant: 

flagNum *= -1; #更换下棋者标记

2.6.3 Enregistrer les coordonnées des pièces d'échecs

        Lorsque la fonction d'échecs est implémentée dans le jeu de backgammon, c'est principalement en enregistrant les coordonnées des pièces d'échecs pour déterminer la position à placer. Ici, utilisez d'abord la fonction input () pour enregistrer les coordonnées des pièces d'échecs saisies. La forme des coordonnées est "majuscules + 1 à 10 chiffres" (Par exemple, A1, A est l'abscisse et 1 est l'ordonnée), vous devez ensuite convertir les coordonnées en valeurs X et Y, puis convertir la première lettre en coordonnées X. Vous devez utiliser la fonction ord () pour obtenir la valeur de code ASCII correspondant à la lettre, puis soustraire La valeur de code ASCII de la lettre A; et pour convertir le deuxième nombre en coordonnée Y, il vous suffit de soustraire 1 car l'index commence à 0. Le code pour enregistrer les coordonnées d'une pièce d'échecs est le suivant:

#输入棋子坐标
str = input()
ch = str[0] #获取第一个字符的大写形式
x = ord(ch) - 65
y = int(str[1]) - 1

2.6.4 Juger les coordonnées des pièces d'échecs

        Lors de l'implémentation du jeu Gobang (version console), le plateau de jeu est 10 \Petits moments10, donc les coordonnées d'entrée doivent être dans la plage du plateau, si elle dépasse la plage, les informations d'invite correspondantes seront imprimées.

        Puisque le plateau de Gobang est 10 \Petits moments10 et que l'indice de coordonnées du plateau commence à 0, tant que la coordonnée X ou Y n'est pas dans la plage de 0-9, cela signifie que la coordonnée de la pièce d'échecs dépasse la plage du plateau. Le code d'implémentation est le suivant:

#判断坐标是否在棋盘之内
if(x < 0 or x > 9 or y < 0 or y > 9 ):
   print('\033[31m***您输入的坐标有误请重新输入!***\033[0m')
   continue

2.6.5 Déterminer s'il y a une pièce d'échecs à la position de coordonnées spécifiée

         Dans le jeu de Gobang (version console), si une partie a déjà placé une pièce à une position coordonnée, l'autre partie ne peut pas jouer la pièce à cette position. Si c'est le cas, un message d'invite correspondant devrait apparaître.

        La valeur par défaut de chaque position de coordonnées du plateau de Gobang est "-", et après avoir joué aux échecs, la valeur deviendra "*" ou "o". Par conséquent, pour déterminer s'il y a une pièce d'échecs à la position de coordonnées spécifiée, il vous suffit de déterminer si sa valeur est " - ", si c'est" - ", vous pouvez jouer aux échecs, sinon, imprimez les informations d'invite correspondantes, le code est le suivant:

#判断坐标上是否有棋子
if(checkerboard[x][y] == '-')
   if(flagNum == 1):
      checkerboard[x][y] == '*'
   else:
      checkerboard[x][y] == 'o'
else:
   print('\033[31m******您输入位置已经有其他棋子,请重新输入!\033[0m')
   continue

2.7 Résumé

        Ce chapitre utilise principalement le langage Python pour développer un projet de jeu Gomoku simple (version console). Le cœur du projet est l'algorithme d'implémentation de Gomoku. De plus, le jeu Gomoku interagit avec les utilisateurs dans la console. Comme chacun sait, la console est généralement Le fond noir et la police blanche affichent des données. Comment avoir une bonne expérience utilisateur dans la console est un point difficile de ce projet. Ce projet résout cette difficulté en définissant la couleur d'arrière-plan et la couleur de police dans la fonction d'impression print (). A travers l'étude de ce chapitre, les lecteurs doivent maîtriser l'algorithme de réalisation du jeu Gobang et savoir comment changer la couleur d'arrière-plan et la couleur de police de la console PyCharn.

Je suppose que tu aimes

Origine blog.csdn.net/weixin_38452841/article/details/108613734
conseillé
Classement