MENU

コンソールで遊べる○×ゲームをPythonプログラミングで作る

こんにちは、のちたままです。

ちょっと時間ができたので、マルバツゲーム作って遊んでました。

linuxのコンソールで遊べるので、よかったら参考につくってみてください。

コード一覧

marubatsu={1:' ',2:' ',3:' ',4:' ',5:' ',6:' ',7:' ',8:' ',9:' '}

def your_turn(dia):
    print(dia+'の番です。')
    print('記号を書きたい位置の番号を入力してください。')
    print('盤面の数字を見るには0を押してください。')

def print_space(marubatsu):
    print('--------------')
    print(marubatsu[1]+'|'+marubatsu[2]+'|'+marubatsu[3])
    print('-+-+-')
    print(marubatsu[4]+'|'+marubatsu[5]+'|'+marubatsu[6])
    print('-+-+-')
    print(marubatsu[7]+'|'+marubatsu[8]+'|'+marubatsu[9])
    print('--------------')
    
def print_num():
    print('--------------')
    print('1|2|3')
    print('-+-+-')
    print('4|5|6')
    print('-+-+-')
    print('7|8|9')
    print('--------------')

def judge(marubatsu):
    if marubatsu[1]==marubatsu[2]==marubatsu[3]=='×' or marubatsu[4]==marubatsu[5]==marubatsu[6]=='×'or marubatsu[7]==marubatsu[8]==marubatsu[9]=='×':
        print('×の勝ち')
        exit(0)
    if marubatsu[1]==marubatsu[4]==marubatsu[7]=='×' or marubatsu[2]==marubatsu[5]==marubatsu[8]=='×'or marubatsu[3]==marubatsu[6]==marubatsu[9]=='×':
        print('×の勝ち')
        exit(0)
    if marubatsu[1]==marubatsu[5]==marubatsu[9]=='×'or marubatsu[3]==marubatsu[5]==marubatsu[7]=='×':
        print('×の勝ち')
        exit(0)
    
    if marubatsu[1]==marubatsu[2]==marubatsu[3]=='○'or marubatsu[4]==marubatsu[5]==marubatsu[6]=='○'or marubatsu[7]==marubatsu[8]==marubatsu[9]=='○':
        print('○の勝ち')
        exit(0)
    if marubatsu[1]==marubatsu[4]==marubatsu[7]=='○' or marubatsu[2]==marubatsu[5]==marubatsu[8]=='○'or marubatsu[3]==marubatsu[6]==marubatsu[9]=='○':
        print('○の勝ち')
        exit(0)
    if marubatsu[1]==marubatsu[5]==marubatsu[9]=='○'or marubatsu[3]==marubatsu[5]==marubatsu[7]=='○':
        print('○の勝ち')
        exit(0)


def main():
    count=0
    while(True):
        print_space(marubatsu)
        if count%2==0:
            your_turn('×')
        else:
            your_turn('○')
        
        space=int(input())
        if space==0:
            print_num()
            continue
        if marubatsu[space]==' ':
            if count%2==0:
                marubatsu[space]='×'
            else:
                marubatsu[space]='○'
        else:
            print('すでに埋まっています。')
            print('他の位置を選んでください。')
            continue
        judge(marubatsu)
        count+=1

if __name__=='__main__':
    main()

コード解説

ここでは簡単に各処理について説明していきます。

①盤面の設定

marubatsu={1:' ',2:' ',3:' ',4:' ',5:' ',6:' ',7:' ',8:' ',9:' '}

今回は3×3の盤面を数字で選択するようにしています。

そのため、盤面情報をmarubatsuに持たせています。

初期値は空文字です。

②毎回出るメッセージ

def your_turn(dia):
    print(dia+'の番です。')
    print('記号を書きたい位置の番号を入力してください。')
    print('盤面の数字を見るには0を押してください。')

ここでは各ターンになったら表示されるメッセージを処理しています。

diaには×または○の文字が入ります。

③現在の盤面情報表示

def print_space(marubatsu):
    print('--------------')
    print(marubatsu[1]+'|'+marubatsu[2]+'|'+marubatsu[3])
    print('-+-+-')
    print(marubatsu[4]+'|'+marubatsu[5]+'|'+marubatsu[6])
    print('-+-+-')
    print(marubatsu[7]+'|'+marubatsu[8]+'|'+marubatsu[9])
    print('--------------')

各ターンの初めに表示される盤面情報です。

④盤面と数字の対応

def print_num():
    print('--------------')
    print('1|2|3')
    print('-+-+-')
    print('4|5|6')
    print('-+-+-')
    print('7|8|9')
    print('--------------')

0を押したときに表示される数字と盤面の対応処理です。

⑤勝敗判定

def judge(marubatsu):
    if marubatsu[1]==marubatsu[2]==marubatsu[3]=='×' or marubatsu[4]==marubatsu[5]==marubatsu[6]=='×'or marubatsu[7]==marubatsu[8]==marubatsu[9]=='×':
        print('×の勝ち')
        exit(0)
    if marubatsu[1]==marubatsu[4]==marubatsu[7]=='×' or marubatsu[2]==marubatsu[5]==marubatsu[8]=='×'or marubatsu[3]==marubatsu[6]==marubatsu[9]=='×':
        print('×の勝ち')
        exit(0)
    if marubatsu[1]==marubatsu[5]==marubatsu[9]=='×'or marubatsu[3]==marubatsu[5]==marubatsu[7]=='×':
        print('×の勝ち')
        exit(0)
    
    if marubatsu[1]==marubatsu[2]==marubatsu[3]=='○'or marubatsu[4]==marubatsu[5]==marubatsu[6]=='○'or marubatsu[7]==marubatsu[8]==marubatsu[9]=='○':
        print('○の勝ち')
        exit(0)
    if marubatsu[1]==marubatsu[4]==marubatsu[7]=='○' or marubatsu[2]==marubatsu[5]==marubatsu[8]=='○'or marubatsu[3]==marubatsu[6]==marubatsu[9]=='○':
        print('○の勝ち')
        exit(0)
    if marubatsu[1]==marubatsu[5]==marubatsu[9]=='○'or marubatsu[3]==marubatsu[5]==marubatsu[7]=='○':
        print('○の勝ち')
        exit(0)

各ターンの終了時に勝敗判定をする処理になります。

ここはもう少しやりようがあるかと思います。

⑥メイン処理

def main():
    count=0
    while(True):
        print_space(marubatsu)
        if count%2==0:
            your_turn('×')
        else:
            your_turn('○')
        
        space=int(input())
        if space==0:
            print_num()
            continue
        if marubatsu[space]==' ':
            if count%2==0:
                marubatsu[space]='×'
            else:
                marubatsu[space]='○'
        else:
            print('すでに埋まっています。')
            print('他の位置を選んでください。')
            continue
        hantei(marubatsu)
        count+=1

if __name__=='__main__':
    main()

while文で無限ループを作って各関数に値を渡しています。

最後に

暇になったら遊んでみてください。