Numer0nって知ってる?
みなさんはヌメロンを知っていますか?
ヌメロンとは、今から10年ほど前に、あるテレビ番組でやっていた1対1の対戦ゲームです。
ルールも簡単でプログラミングの練習にちょうど良いと思って作ったので、備忘録として解説していきます。
ルール
基本的なルールは簡単です。
- 1対1の対戦ゲームです
- プレイヤーは0~9を使って3桁の数字を選びます。
- ただし、同じ数字を使ってはいけません
- 先行後攻を決め、相手の選んだ数字を予想し合い、お互いの数字を先に当てた方が勝ちです。
ただし、ヌメロンには相手が予想した数字が合っているかどうかの答え方に決まりがあります。
それが、EATとBITEです。
EAT | BITE |
---|---|
数字と桁が合っている | 数字は合っているが桁は合っていない |
例えば、自分の選んだ数字が”135”のとき、相手が"123"と答えたら、
1:数字も桁も合っている。(1EAT)
2:数字も桁も合っていない。
3:数字は合っているが桁は合っていない。(1BITE)
このとき、「1EAT, 1BITE」と答えます。
今回は、PCが自動で生成した3桁の数字を10回以内に当てられたら勝ちというルールで作成します!
処理の流れ
- ランダムな3桁の数字を生成し、配列として格納する。
- 予想する3桁の数字を入力
- 入力の仕方が正しいかチェック
- 予想された3桁の数字を配列に格納する
- 配列のそれぞれの数字を比較し、EATとBITEを計算する
- 数字を当てて勝利or10回以内に当てられなくて敗北で終了
使用技術
言語:Python
エディタ:Visual Studio Code
Pythonを使ったことがなかったので、使ってみたいという気持ちだけで採用してみました。
コード
import random
numlist = list(range(10))
num1 = numlist.pop(random.randint(0, len(numlist) - 1))
num2 = numlist.pop(random.randint(0, len(numlist) - 1))
num3 = numlist.pop(random.randint(0, len(numlist) - 1))
answer = [num1, num2, num3]
def check_digit(num):
return len(num) != len(set(num))
def eat_judge(answer, num_3dig):
eat = 0
for n in range(len(answer)):
if answer[n] == num_3dig[n]:
eat += 1
return eat
def bite_judge(answer, num_3dig):
bite = 0
for n in range(len(answer)):
for m in range(len(answer)):
if answer[n] == num_3dig[m] and n != m:
bite += 1
return bite
print("Let's start Numer0n!")
n = 1
while n < 11:
print("Challenge " + str(n))
num_3dig = input('Please enter a 3-digit number : ')
while True:
if len(num_3dig) != 3:
num_3dig = input('Please enter a 3-digit number again : ')
elif check_digit(num_3dig):
num_3dig = input('Please enter a 3-digit number again : ')
elif not num_3dig[0].isdigit() or not num_3dig[1].isdigit() or not num_3dig[2].isdigit():
num_3dig = input('Please enter a 3-digit number again : ')
else:
break
num_3dig = list(map(int, num_3dig))
if answer[0] == num_3dig[0] and answer[1] == num_3dig[1] and answer[2] == num_3dig[2]:
print("!!---------------------------------!!")
print("Congratulations!! You won this game!!")
print("!!---------------------------------!!")
break
else:
if n != 10:
print("EAT : " + str(eat_judge(answer, num_3dig)))
print("BITE : " + str(bite_judge(answer, num_3dig)))
print("It's wrong.\n")
else:
answer = map(str, answer)
print("You lose this game. The answer is " + ''.join(answer) + ".")
n += 1
参考までに
↓github載せときます
github : https://github.com/ryudaitakai/Numer0n