こんにちは、のちたままです。
ちょっと時間ができたので、マルバツゲーム作って遊んでました。
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文で無限ループを作って各関数に値を渡しています。
最後に
暇になったら遊んでみてください。