LoginSignup
0
0

More than 5 years have passed since last update.

PythonでNumer0n作ってみた!(ユーザー対戦型)

Last updated at Posted at 2019-04-05

始めに

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('ゲームを終了します')

無駄な箇所が多いかもしれませんが初学者なのでよろしくお願いします!

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0