欢迎来到ST小哥的博客

不简单的二进制运算游戏-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()
View Code

 

本文所有权利归山河故我所有,转载请标明出处!

 

posted @ 2018-11-26 16:35  Steven_Tim  阅读(744)  评论(0编辑  收藏  举报