##始めに
Python勉強の一環で、Numer0nという、簡単にいうと数当てゲームを作成しました!
Qiitaにある似たような投稿を参考にしつつ、 自分なりにアレンジしてユーザー同士の対決に変更しました。(相手がその場にいなければひとりですが、、、)
##開発環境
- Python 3.7.2
- pyenv 1.2.9
numeron.py
import getpass
def duplication_check(num):
if len(num) == len(set(num)) and len(num) == 3:
return True
def eat_bite_check(player_number,opponent_number):
global eat
global bite
eat = 0
bite = 0
if player_number[0] == opponent_number[0]:
eat += 1
elif player_number[0] in opponent_number:
bite += 1
else:
pass
if player_number[1] == opponent_number[1]:
eat += 1
elif player_number[1] in opponent_number:
bite += 1
else:
pass
if player_number[2] == opponent_number[2]:
eat += 1
elif player_number[2] in opponent_number:
bite += 1
else:
pass
return (str(eat)+ 'EAT-'+ str(bite)+ 'BITE')
print('Numer0nというゲームを始めます。\nルール説明は必要ですか?yes or no')
answer = input()
if answer == 'yes':
print('\nルール説明!')
print('各プレイヤーは、0~9までの数字の中から3つ使って、3桁の番号を作成します。\n0から始めても良いですが、「550」「377」といった同じ数字を2つ以上使用出来ません。')
print('プレイヤーは、自身のターン時に相手が選んだと思われる3桁の番号を選択します。')
print('数字と桁が合っていた場合は「EAT」、数字は合っているが桁は合っていない場合は「BITE」となります。')
print('[例]\n相手の番号が「765」で、自分が予測して入力した番号が「746」であった場合、「7」は数字と桁の位置が合致しているためEAT。\n「6」は数字自体は合っているが桁の位置が違うためBITE。\nEATが1つ・BITEが1つなので、結果は「1EAT-1BITE」となります。')
print('先に3EATになったプレイヤーの勝利です!\n')
else:
pass
print('先ずはplayer1の番号を決めてください')
while True:
try:
player1_number = getpass.getpass('3桁の数字を入力:')
print('')
if duplication_check(player1_number) and str.isdecimal(player1_number):
player1_number = list(player1_number)
break
except:
pass
print('3桁の数値を重複無しで再入力してください')
print('次にplayer2の番号を決めます')
while True:
try:
player2_number = getpass.getpass('3桁の数字を入力:')
print('')
if duplication_check(player2_number) and str.isdecimal(player2_number):
player2_number = list(player2_number)
break
except:
pass
print('3桁の数値を重複無しで再入力してください')
eat = 0
bite = 0
print('---------------------------------------------------')
print('ゲームを開始します\n')
while True:
while True:
player1_answer = input('player2の3桁の数字を予想してください:')
if duplication_check(player1_answer) and str.isdecimal(player1_answer):
player1_expectation = list(player1_answer)
break
else:
print('3桁の数値を重複無しで再入力してください\n')
print('\nplayer1の結果は['+ eat_bite_check(player1_expectation,player2_number)+ ']でした\n')
if eat == 3:
print('player1の勝ちです\n')
print('player1の番号は' + str(player1_number) + 'でした\n')
break
print('player2があなたの番号を予想します')
print('-----------------------------------------------------')
while True:
player2_answer = input('player1の3桁の数字を予想してください:')
if duplication_check(player2_answer) and str.isdecimal(player2_answer):
player2_expectation = list(player2_answer)
break
else:
print('3桁の数値を重複無しで再入力してください\n')
print('\nplayer2の結果は['+ eat_bite_check(player2_expectation,player1_number)+ ']でした\n')
if eat == 3:
print('player2の勝ちです\n')
print('player2の番号は' + str(player2_number) + 'でした\n')
break;
print('player1があなたの番号を予想します')
print('-----------------------------------------------------')
print('ゲームを終了します')
無駄な箇所が多いかもしれませんが初学者なのでよろしくお願いします!