このチュートリアルでは、Python を使用して三目並べゲームを作成する方法を説明します。これには、関数、リスト、if ステートメント、while ループ、for ループ、エラー処理などが含まれます。
まず、2 つの関数を作成します。最初の関数は、三目並べゲームの背景テンプレートを出力します:
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 ""
ここでは、2 つの for ループを使用して map
という名前のリスト変数を走査します。この変数は、各場所の情報を保持する 2 次元のリストです。
(後で説明するように) キーパッドの数字に従って位置を比較するので、最初の値を (2-i)
,然后我们想用"|"
来进行分割我们的位置,所以在每个位置打印完之后,我们给他打印一个"|"
,我们在这里print map[2-i][j],
に設定し、それらが同じ行に印刷されるようにコンマを使用します。
さて、この関数はゲームの背景を印刷できます。次のようになります。 次に、各ラウンド後にゲームが終了したかどうかを確認する
関数を作成します。ゲームが終了した場合は True を返し、メッセージを出力します。りーcheck_done()
まず、水平方向と垂直方向に同じで空でない行が 3 つあるかどうかを確認します (したがって、連続する 3 つの空の行は対象とはみなされません)。
これら 8 行のいずれかが条件を満たす場合、ゲームは終了し、「勝ち!!!」が出力され、変数
が返され、どちらが現在チェスをプレイしているかを決定します。 「X 勝利!」または「O 勝利!」True
,同时注意turn
次に、この関数は、ポジションが空いていない場合、誰もゲームに勝つことができないことを意味すると判断し (前に判断した)、引き分けを出力して
True
上記 2 つの状況が存在しない場合は、ゲームはまだ終了していないため、
False
OK、これで 2 つの関数ができました。実際のプログラムを開始しましょう。まず 3 つの変数を作成します:
| | | | | |
これら 3 つの変数の意味についてはすでに説明しましたので、忘れた方は以下をご覧ください:
X | X | O | X | O | O | X
内部には while ループがあり、done が True になるまで、誰の順番になるかを出力します。
次に、
という名前の変数を作成して、プレーヤーが移動したかどうかを確認し、移動していない場合は次のループに入ります。moved
次に、プレーヤーがどのように進むべきかを出力します:
X | X | X X | X | X X | X | X
次へ:
りープレーヤーに数字を入力してもらい、それが 1 から 9 までの間であるかどうかを確認します。同時に、エラー処理を追加する必要があります。たとえば、プレーヤーが「こんにちは」と入力した場合、プログラムをそのまま終了することはできません。 。
ここで、彼がこのステップを実行できるかどうかを確認する必要があります:
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
笑、よく見てください。まず X と Y の値を取得し、それを使用して配置したい位置が空かどうかを確認します。次に、X と Y がどのように機能するかを説明します。
位置 1: Y = 1/3 = 0、X = 1%3 = 1、x -= 1 = 0
位置 2: Y = 2/3 = 0、X = 2%3 = 2。
位置 3: Y = 3/3 = 1、X = 3%3 = 0;
……
以下を自分で計算してください。結論は直接出ます (くそー、Hexo のデフォルトのテンプレートではテーブルが表示されません。mou で編集したところ、以下のものよりもはるかにきれいになりました!):
YX
x=1
7
y=1 | 4 |
5 |
||
---|---|---|---|---|
y=0 | 1 | 2 | 3 | |
aha,这个位置和我们键入的是一样的! print "7|8|9" print "4|5|6" print "1|2|3" ログイン後にコピー 现在我们完成大部分工作了,但是还有几行代码: 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" ログイン後にコピー 嗯,我们给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, "'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" ログイン後にコピー 原文出处: Vswe 以上がPython で簡単な三目並べゲームを作成するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。 このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
Python/MySQL は整数データを正しく保持できません
ここではコードは必要ありません。ゲームを作成していてスコアを保存する必要があるため、非常に長い数値を保存したいと考えています。ただし、テストしてスコアを 25000000000 に...
から 2024-04-04 19:09:44
0
1
367
Seleniumを使用してクラス内でURLをクリックして定義したい
今日はもう一つヒントが必要です。私は Python/Selenium コードを構築しようとしていますが、そのアイデアは www.thewebsiteIwantoclickon をク...
から 2024-04-04 14:14:44
0
1
3492
最初の X 行を保持し、テーブルの行を削除する方法
MySQLincident_archive に数百万のレコードを含む大きなテーブルがあります。作成した列で行をソートし、最初の X 行を保持し、残りを削除したいのですが、最も効率的...
から 2024-04-01 18:32:54
0
1
347
関連トピック
詳細>
|