見出し画像

○✕ゲーム(三目並べ)を作ってみよう ! with Python3 ③

みなさんこんにちは、metchです🌻🍓🧡
今回は○✕ゲームを作ってみよう第3段の記事になります✨
はじめてプログラミングに触れる人でも作れるように
分かりやすく解説を付けていきたいと思います!
何かわからないことがあったら、ぜひコメントで質問してください!
有料記事となっていますが、記事をしっかりと呼んでいれば
無料の部分だけでプログラムを作成することが可能です。
答えが見たい方は有料部分を読んでくださいね🎶

○✕ゲームの流れ

  1. 3×3の盤面を表示する

  2. ○を書く位置を入力させ、盤面に反映する

  3. 盤面を表示する

  4. 勝利判定をする

  5. ✕を書く位置を入力させ、盤面に反映する

  6. 盤面を表示する

  7. 勝利判定をする

前回の記事では、
3. 盤面を表示する
プログラムの作成を行いました。

今回の記事では、
4. 勝利判定をする
プログラムを作成したいと思います。

前回までのプログラム

前回までに作成したプログラムは前の記事の最後にまとめてあります。
こちらをご覧ください!

4. 勝利判定をする

勝敗を判定するために、
どのようなときに「勝ち」になるのか考えてみましょう。

○✕ゲームでは、
自分のマークが先に3つ並べることができたら、
「勝ち」です。

少し大変ですが、
勝ちになる手をすべて書き出してみましょう。

よこ
たて
ななめ

よこ、たて、ななめの順番でプログラムに
勝ち手をすべて書き出していきます。

#勝ち手
lines = [
    [0, 1, 2],
    [3, 4, 5],
    [6, 7, 8],
    [0, 3, 6],
    [1, 4, 7],
    [2, 5, 8],
    [0, 4, 8],
    [2, 4, 6],
    ]


関数 judgeを作成し、
現在の盤面に勝ち手がないか判定します。

現在の盤面を確認するため
変数 a、b、c を用意し、
勝ち手の一番目を確認します。

def judge():
    a=lines[0][0]
    b=lines[0][1]
    c=lines[0][2]

勝ち手の一番目は
0、1、2となっているため、
aには0
bには1
cには2が入ることになります。

つまり、
gameboard[0](1のマス)、
gameboard[1](2のマス)、
gameboard[2](3のマス)に
同じマークが書き込まれていないか判定することで、
勝利判定を行うことができます。

プログラムを書いてみましょう。

if(gameboard[a] and gameboard[a] == gameboard[b] and gameboard[a] == gameboard[c]):
    return gameboard[a]
else:
    print ("勝ち手はありません。")

勝ち手があったとき、〇を返し、
なかったときは「勝ち手はありません。」と表示します。

#ゲームの流れの最後にjudgeを呼び出す分を追加し、
プログラムを実行しましょう。

現在の盤面が表示された後、
数字を入力すると現在の盤面が表示され
「勝ち手はありません。」と表示されましたか?

勝ち手の2番目をチェックするためには

    a=lines[1][0]
    b=lines[1][1]
    c=lines[1][2]
        
    if(gameboard[a] and gameboard[a] == gameboard[b] and gameboard[a] == gameboard[c]):
        return gameboard[a]

    else:
        print ("勝ち手はありません。")
        
    return None 

勝ち手の三番目をチェックするためには

    a=lines[2][0]
    b=lines[2][1]
    c=lines[2][2]
        
    if(gameboard[a] and gameboard[a] == gameboard[b] and gameboard[a] == gameboard[c]):
        return gameboard[a]

    else:
        print ("勝ち手はありません。")
        
    return None

と同じようなコードを何行も書かなくてはなりません。
全ての勝ち手をチェックするために
for文を使ったプログラムに変更してみましょう。

def judge():
    for i in range(0,len(lines)): #for文を追加 
        a=lines[i][0]        #iに変更
        b=lines[i][1]
        c=lines[i][2]
 
        if(gameboard[a] and gameboard[a] == gameboard[b] and gameboard[a] == gameboard[c]):
            return gameboard[a]

        else:
            print ("勝ち手はありません。")
            
    return None 

実行すると、
現在の盤面が表示され、数字の入力が求められます。
数字を入力すると〇が書き込まれた現在の盤面が表示され、
8回「勝ち手はありません。」と表示されましたか?

勝ち手をチェックするたびに
「勝ち手はありません」と表示されるので、
8個の勝ち手すべてがチェックされたことが分かります。

else:
  print ("勝ち手はありません")

はプログラムの確認のために入れてあります。
毎回8回「勝ち手はありません」と表示されるのが嫌な人は
上の2行をコメントアウトしたり、
削除したりしてください。


今回の記事で、
4. 勝利判定をする
のプログラムが完成しました。

次回は、
5.✕を書く位置を入力させ、盤面に反映する
プログラムを作成します。

今回作成したプログラムには新しく、

  • 関数の返り値

が含まれています。

興味がある人は、それぞれの用語について調べてみるとより、
理解が深まると思います✨
何かわからないことがあったらコメントで教えてください!

ここまで読んでいただき、ありがとうございます!
少しでも参考になったら
♡(スキ)やフォローよろしくお願いします。

次の記事はこちら


ここまでのプログラム

ここまで作成したプログラムを載せておくので、
参考にしてください。

ここから先は

1,054字

¥ 100

この記事が参加している募集

スキしてみて

この記事が気に入ったらサポートをしてみませんか?