Pythonプロジェクト開発ケース(2)-シンプルなごもくゲーム(コンソール版)

2.シンプルごもくゲーム(コンソール版)

2.1需要分析

このセクションで開発されたGobangゲームはコンソールバージョンであるため、ゲームには次の機能が必要です。

  • チェスボードは周期的に印刷できます。
  • スタンドアロンでプレイできます。
  • どちらか一方が勝ったら、勝利ボードと勝者を印刷します。
  • チェスピースがチェスボードの範囲を超えているかどうかを判断します。
  • 指定された座標位置にチェスピースがあるかどうかを判別します。
  • インターフェースは美しく、プロンプトは明白です。

2.2ゲームデザイン

2.2.1ゲーム機能の構造

2.2.2ゲームビジネスプロセス

        シンプルなゴバンゲーム(コンソール版)のビジネスプロセスを下図に示します。

2.3ゲーム開発の要点

2.3.1ゲーム開発環境

このゲームの開発および動作環境は次のとおりです。

  • オペレーティングシステム:Windows7、Windows10など。
  • Pythonバージョン:Python3.7;
  • 開発ツール:Pycharm。

2.3.2フォルダ構成構造

        単純なgobangゲーム(コンソールバージョン)には、ソフトウェアのコードファイルを表すgobang.pyファイルが1つだけあり、gobangロジックを実装するすべてのコードがこのファイルに含まれています。

2.4チェッカーボードの設定

2.4.1ボード設定の実装プロセス

        ボード設定の実装プロセスと使用される主要なテクノロジーを図に示します。

2.4.2チェスボードを初期化する

        ゴモクゲームを開発するときは、まずボードを初期化する必要があります。ゴモクのボードは2次元リストに似ているため、このプログラムでは、チェックボードという名前の2次元リストを使用してゴモクボードを格納します。コードは次のとおりです。

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チェス盤を印刷する

        Gobangゲームでチェスをプレイするには、ユーザーは最初にGobangボードを表示する必要があります。このプログラムはコンソールプログラムであるため、Pycharnでgobang、pyファイルを直接選択し、Pycharnインターフェイスの右上隅にある\ tiny \ trianglerightボタンをクリックしてPycharnで制御します。 Taichungはチェスボードを示しています。

        セクション2.4.2はGomokuボードを初期化したので、次の作業はそれを印刷するだけです。ここでは、ネストされたforループを使用して、Gomokuボードを格納する2次元リストをトラバースし、要素を1回トラバースします。出力するだけです。コードは次のように表示されます。

#打印棋盘
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勝利ボードと勝者を印刷する

        Gobangゲームをプレイするときに、一方のパーティが勝った場合、最終的なボードが印刷され、勝者が出力されます。

        最終勝利ボードと勝者を出力するmsg()関数を定義します。この関数では、ネストされたforループは主に最終勝利バックギャモンボードを出力するために使用され、勝者の出力は変数flagNumの値を判断することによって達成されます。msg()関数の実装コードは次のとおりです。

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コンソールに異なるフォントと背景色を設定する

2.5Gobangアルゴリズム

2.5.1Gobangアルゴリズム分析

        ゴバンのゲームルールは、エントリーポイントを中心に8方向に同じ種類の駒を探すことです。同じ駒の数が5以上の場合は、この種類の駒のプレイヤーが勝者であることを意味します。ゴバンピースの探索方向を図に示します。

                                                                  図18方向に配置されたチェスピースの形状を決定する

2.5.2チェスピースの上下左右の方向を決定する

        チェスピースの上下左右の方向を判断し、主にチェスピースのX座標またはY座標に隣接する4つのピースが同じ色のチェスピースであるかどうかを判断する場合は、終了フラグをTrueに設定します。これは終了を意味します。チェスをループで再生してから、msg()関数を呼び出して、勝者のボードと勝者を印刷します。コードは次のように表示されます。

#判断棋子左侧
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チェスピースの対角方向を決定する

        チェスピースの対角方向を決定するには、主に、対角線上のチェスピース座標に隣接する4つのチェスピースが同じ色のピースであるかどうかを判断します。同じ色のピースである場合は、終了フラグをTrueに設定します。つまり、チェスのサイクルを終了してから、 msg()関数は、勝利ボードと勝者を出力します。コードは次のように表示されます。

#判断棋子右上方向
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チェス設定

2.6.1チェス設定の実装プロセス

        チェス設定の実装プロセスと使用される主要なテクノロジーを図に示します。

2.6.2現在のプレーヤーの判断

        Gobangゲームでチェスをプレイする場合、2人の対戦相手がいて、コンソールでは異なる背景色とフォント色で表示されます。

        このプログラムは、主にflagNum変数を使用して、対戦相手のIDを判別します。変数が1の場合、プレーヤーは「*」、それ以外の場合、プレーヤーは「o」です。実装コードは次のとおりです。

#判断当前下棋者
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='')  # 黑字绿底

        さらに、一方のパーティがチェスのプレイを終了した後、プレーヤーを変更するには、flagNum変数の値を変更する必要があります。コードは次のとおりです。 

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

2.6.3チェスピースの座標を記録する

        バックギャモンゲームでチェス機能を実装する場合は、主にチェスピースの座標を記録して配置場所を決定します。ここでは、まずinput()関数を使用して、入力したチェスピースの座標を記録します。座標は「大文字+1から10の数字」の形式です。 (たとえば、A1、Aは横軸、1は縦座標)、座標をX値とY値に変換し、最初の文字をX座標に変換する必要があります。ord()関数を使用して、文字に対応するASCIIコード値を取得し、減算する必要があります。文字AのASCIIコード値。2番目の数値をY座標に変換するには、インデックスが0から始まるため、1を引くだけで済みます。チェスピースの座標を記録するコードは次のとおりです。

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

2.6.4チェスピースの座標を判断する

        Gobang(コンソールバージョン)ゲームを実装する場合、セットボードは10 \ tiny \ times10であるため、入力座標はボード範囲内である必要があります。範囲を超えると、対応するプロンプト情報が出力されます。

        Gobangのボードは1010\ tiny \ timesであり、ボード座標インデックスは0から始まるため、X座標またはY座標が0〜9の範囲内にない限り、チェスピースの座標がボードの範囲を超えていることを意味します。実装コードは次のとおりです。

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

2.6.5指定された座標位置にチェスピースがあるかどうかを確認します

         Gobang(コンソールバージョン)のゲームでは、一方のパーティがすでに調整位置にピースを配置している場合、もう一方のパーティはその位置にピースを再生できません。配置されている場合、対応するプロンプトメッセージが表示されます。

        ゴバンボードの各座標位置のデフォルト値は「-」で、チェスをプレイすると「*」または「o」になります。したがって、指定した座標位置にチェスピースがあるかどうかを判断するには、その値が「」かどうかを判断するだけです。 -"、"-"の場合はチェスを再生できます。それ以外の場合は、対応するプロンプト情報を出力します。コードは次のとおりです。

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

2.7まとめ

        この章では、主にPython言語を使用して、単純なGomokuゲーム(コンソールバージョン)プロジェクトを開発します。プロジェクトのコアは、Gomokuの実装アルゴリズムです。さらに、Gomokuゲームは、コンソール内のユーザーと対話します。誰もが知っているように、コンソールは通常、黒い背景と白いフォントの表示データ。このプロジェクトでは、コンソールで優れたユーザーエクスペリエンスを実現する方法が難しい点です。このプロジェクトでは、print()印刷関数で背景色とフォント色を設定することで、この問題を解決します。この章の学習を通じて、読者はGobangゲームの実現アルゴリズムに習熟し、PyCharnコンソールの背景色とフォント色を変更する方法に精通している必要があります。

おすすめ

転載: blog.csdn.net/weixin_38452841/article/details/108613734