不简单的二进制运算游戏-python3.0
简单的四位二进制运算游戏依靠人脑计算二进制数值,阶乘类型的,我使用的是python3.0+实现的。
思路:
1,首先我们要产生随机题目,而且后续可以扩展难度:
2,问题有了,就要生成四个答案,其中一个为正确答案:
3,问题只有一个唯一正确的答案,而因为难度不同答案也会不一样:
4,再写一个用于在cmd环境下退出的方法:
5,写一下游戏的主体逻辑方法和一些小小的优化:
6,最后我们加入一个异常捕捉,就大功告成了!
运行的结果:
软件全部的源码:
1 # -*- coding: GB2312 -*- 2 import random #用来生成随机数的函数 3 import os #支持cmd命令行 4 5 def roll_dice(numbers,points):#随机生成题目 6 if points is None: 7 points = [] # points为空列表,后续可以插入新值到该列表 8 while numbers > 0: 9 point = random.randrange(0,2)#生成0-1的随机数 10 points.append(point) # 用append()方法将point数值插入points列表中 11 numbers = numbers - 1# 完成一次,numbers减1,当小于等于0时不再执行该循环 12 return points 13 def roll_ys(number,points_ys):#随机的生成答案 14 numbers=3 15 if points_ys is None: 16 points_ys = [] # points为空列表,后续可以插入新值到该列表 17 while numbers > 0: 18 if number == 4: 19 point = random.randrange(1,17)#生成1-16的随机数 20 elif number == 5: 21 point = random.randrange(1,33)#生成1-32的随机数 22 elif number == 6: 23 point = random.randrange(1,65)#生成1-64的随机数 24 elif number == 7: 25 point = random.randrange(1,129)#生成1-128的随机数 26 elif number == 8: 27 point = random.randrange(1,257)#生成1-256的随机数 28 if point not in points_ys: 29 points_ys.append(point) # 用append()方法将point数值插入points列表中 30 numbers = numbers - 1# 完成一次,numbers减1,当小于等于0时不再执行该循环 31 return points_ys 32 def ex():#退出方法 33 os.system('echo 本游戏由steven制作,版权属于16软件五班一组!') 34 os.system('echo 按任意键退出!') 35 os.system('pause>nul') 36 def suanfa(points):#计算难度的正确答案 37 if len(points)==4: 38 ppt = (1 * points[3]) + (2 * points[2]) + (4 * points[1]) + (8 * points[0]) 39 return ppt 40 if len(points)==5: 41 ppt = (1 * points[4]) + (2 * points[3]) + (4 * points[2]) + (8 * points[1])+(16 * points[0]) 42 return ppt 43 if len(points)==6: 44 ppt = (1 * points[5]) + (2 * points[4]) + (4 * points[3]) + (8 * points[2])+(16 * points[1])+(32 * points[0]) 45 return ppt 46 if len(points)==7: 47 ppt = (1 * points[6]) + (2 * points[5]) + (4 * points[4]) + (8 * points[3])+(16 * points[2])+(32 * points[1])+(64 * points[0]) 48 return ppt 49 if len(points)==8: 50 ppt = (1 * points[7]) + (2 * points[6]) + (4 * points[5]) + (8 * points[4])+(16 * points[3])+(32 * points[2])+(64 * points[1])+(128 * points[0]) 51 return ppt 52 def start_game():#开始游戏 53 #定义需要的数组 54 zcl = 0 55 cwl = 0 56 cs = 0 57 zc = 0 58 cw = 0 59 lu = 1 60 #提示语句 61 print ("本游戏由steven制作,版权属于16软件五班一组!") 62 print ("-----二进制游戏?想考的好?不存在的!------") 63 print ('----- 游戏现在正式开始 -----') 64 number = int(input('请输入挑战的等级(4-8)')) 65 while 1:#游戏主循环 66 points = roll_dice(number,points = None) 67 pt = suanfa(points) 68 points_ys = roll_ys(number,points_ys = None) 69 if pt == 0:#判断是否为空值 70 continue 71 if pt in points_ys:#检测pt在points_ys是否存在,存在即随机增加数值po插入 72 po = random.randrange(3,6) 73 po+=pt 74 points_ys.append(po) 75 else: 76 points_ys.append(pt) 77 points_ys.sort() 78 print ('第%s轮,给出的二进制是:'%lu,points) 79 print ('结果的数字可能是是:',points_ys) 80 if lu >= 2:#退出语句判断条件 81 print ("现在,你可以输入5167来退出游戏") 82 your_choice = input('请回答:') #赋值为points_ys值,用户需输入为正确数值才可以 83 if your_choice == "5167" :#结算条件 84 zcl = (zc/cs)*100 85 cwl = (cw/cs)*100 86 print ("本次挑战: \n \t 正确率为%s"%zcl+"%"+"\n \t 错误率为%s"%cwl+"%") 87 if 100 >= zcl > 90: 88 print ("你真的很不错,期待下一次你依旧可以创造奇迹!") 89 ex() 90 exit() 91 elif 90 >zcl >= 50: 92 print ("你还需要努力,加油少年!") 93 ex() 94 exit() 95 96 else: 97 print ("佩服佩服,你的数学是体育老师教的么?") 98 ex() 99 exit() 100 101 if int(your_choice) == pt:#判断正确 102 print ("正确") 103 float(zcl) 104 lu+=1 105 cs+=1 106 zc+=1 107 zcl = (zc/cs)*100 108 print ("正确率为%s"%zcl+"%") 109 print ("请再接再厉!") 110 continue 111 else:#判断错误 112 print ("错误") 113 float(cwl) 114 cs+=1 115 cw+=1 116 lu+=1 117 cwl = (cw/cs)*100 118 print ("错误率为%s"%cwl+"%") 119 print ("正确答案为%s"%pt) 120 continue 121 122 123 try:#异常捕捉 124 os.system('title 本游戏由steven制作,版权属于16软件五班一组!版本v0.5') 125 start_game() 126 except ValueError:#防止乱输入的问题 127 print ("输入有误,请重新输入!") 128 start_game()
本文所有权利归山河故我所有,转载请标明出处!