先介绍下游戏规则:
系统随机生成一个四位数字符串,每一位都由数字(0~9)组成,如 0123 5678 4679等(数字不会重复)
玩家有5次机会,每次输入长度为4的数字,系统给出匹配信息
如:
系统生成的字符串为 1234
(A代表这一位数猜对了,B代表这一位没猜对,但这个数字存在于答案中,X代表这个数字不存在于答案中)
玩家输入 1389 则匹配信息为 ABXX
玩家输入 1436 则匹配信息为 ABAX
玩家输入 1432 则匹配信息为 ABAB
玩家输入 1234 则匹配信息为 AAAA 则此时游戏成功
如果当输入次数达到指定的次数上限(可自行配置,一般取10次)后仍然匹配失败,则游戏失败,并打印出答案
这个小游戏其实是我的老朋友了,我在学习比如c,c++,java,汇编这些编程语言的时候,都曾拿这个小游戏来作为练手的小项目。
下面来看看这个小游戏的python版本:
import random
R_NUM = ''
TIMES = 10
#生成由4位不重复的随机数字组成的字符串
def init_random_num():
global R_NUM
num = ''
for i in range(4):
word = str(random.randint(0, 9))
#避免数字重复
while word in num:
word = str(random.randint(0, 9))
num = num + word
R_NUM = num
print('\n')
print('System already init the answer,Game start!', num)
#控制用户输入,只接受由4位数字组成的字符串
def input_num():
flag = True
while (flag):
num = input("input a num (like 1234):")
if (len(num) == 4):
try:
int(num)
except:
#输入的字符串长度为4并且全部由数字组成,退出循环
flag = True
else:
flag = False
return num
#判断用户输入的字符串和答案的匹配情况
def judge(input_num):
global R_NUM
judge_result = 'XXXX'
for i in range(4):
# 数字相同
if R_NUM[i] == input_num[i]:
judge_result = set_char(judge_result, i, 'A')
#数字不同
elif (R_NUM[i] != input_num[i]):
# 数字存在
if input_num[i] in R_NUM:
judge_result = set_char(judge_result, i, 'B')
# 数字不存在
else:
judge_result = set_char(judge_result, i, 'X')
return judge_result
#设置匹配字母 A|B|X
def set_char(str, index, ch):
return str[:index] + ch + str[index + 1:]
#游戏主流程
def play_game():
init_random_num()
print('You have ', TIMES, ' chances to guess the answer, enjoy the game!')
print('\n')
for i in range(TIMES):
user_input = input_num()
jud = judge(user_input)
#没猜中
if jud != 'AAAA':
print('Your answer is wrong: ', jud, ' left times: ',
(TIMES - (i + 1)))
continue
#猜中了
else:
print('\n')
print('Yes! you get the right answer! answer is:', R_NUM,
'used times:', i + 1)
break
else:
print('Sorry you used all chances, the right answer is :', R_NUM)
#控制游戏开始与结束
def play():
global R_NUM, TIMES
flag = True
while (flag):
print('\n**********************************************')
if input("Want to play game?(y/n)") == 'y':
play_game()
else:
print('good bye~')
flag = False
if __name__ == '__main__':
play()
游戏画面如下: