项目要求:
人和机器猜拳游戏写成一个类, 有如下几个函数 1)函数1:选择角色:1曹操,2张飞,3刘备 2)函数2:角色猜拳1剪刀2石头3布玩家输入-个1-3的数 3)函数3:电脑出拳随机产生1个1-3的数字,提示电脑出拳结果 4)函数4:角色和机器出拳对战,对战结束后,最后出示本局对战结果:赢、输,然后提示用户是否继续?按y继续,按n退出。 5)最后结束的时候输出结果角色赢几局电脑赢几局,平局几次游戏结束
代码如下:
import random class RolePcGame: roles = ['曹操', '张飞', '刘备'] fist_list = ['剪刀', '石头', '布'] def get_role_name(self): # 选角 role = int(input("请选择角色(输入对应编号):曹操:1, 张飞:2, 刘备:3")) while role not in (1,2,3): role = int(input("你选择的角色不存在,请重新(输入对应编号):曹操:1, 张飞:2, 刘备:3")) break return self.roles[role-1] # 返回角色名称 def get_role_fist(self): # 角色出拳 fist_num = int(input( "请角色出拳(输入对应编号):剪刀:1, 石头:2, 布:3")) while fist_num not in (1, 2, 3): fist_num = int(input("输入有误,请重新出拳(输入对应编号):剪刀:1, 石头:2, 布:3")) break return fist_num def get_pc_fist(self): # 电脑出拳 fist_num = random.randint(1,3) return fist_num def pve(self): # 人机对战计算 win_role = 0 # 统计角色赢的局数 win_pc = 0 # 统计电脑赢的局数 draw = 0 # 统计平局数 # 获得角色 role_name = self.get_role_name() # 获取角色名称,get_role_name()返回的就是角色名称 print("恭喜你,选角成功,你选的角色是:",role_name) while True: print(role_name + "请出拳") role_fist = self.get_role_fist() #角色出拳 # print("电脑请出拳") pc_fist = self.get_pc_fist() # 电脑出拳 print("{0}角色出的拳是:{1},电脑出的拳是:{2}".format(role_name,self.fist_list[role_fist-1],self.fist_list[pc_fist-1])) if role_fist - pc_fist in (1,-2): #角色胜出 print(role_name + "赢了") win_role +=1 elif role_fist - pc_fist == 0: #平局 print("人机平局") draw +=1 elif role_fist - pc_fist in(-1,2): #电脑胜出 print("pc赢了") win_pc +=1 choose = input("是否继续游戏?按y继续,按n退出") if choose == 'n': print("退出游戏") break print( "{0}一共赢了{1}局,电脑赢了{2}局,平{3}局".format(role_name,win_role, win_pc, draw)) if __name__ == '__main__': RolePcGame().pve()
实现效果:
心得:
(1)最初版本的代码如下:虽然可以实现功能,但是运行完整程序,必须调用下面的4种方法,否则会报错,并且代码很繁琐。
import random class Man_machineGuessing: def casting(self): # 选角 role = int(input("请输入你要选择的角色对应的编号:1曹操,2张飞,3刘备")) while role not in (1,2,3): role = int(input("输入有误,请重新输入你要选择的角色对应的编号:1曹操,2张飞,3刘备")) break if role == 1: print("恭喜你,选角成功,你选的角色是:曹操") self.role_name = '曹操' elif role ==2: print("恭喜你,选角成功,你选的角色是:张飞") self.role_name = '张飞' elif role == 3: print("恭喜你,选角成功,你选的角色是:刘备") self.role_name = '刘备' def roleGuessing(self): self.guess_role = int(input("请输入"+self.role_name + "角色猜拳对应的编号:1剪刀2石头3布")) while self.guess_role not in (1, 2, 3): self.guess_role = int(input("输入有误,请重新输入你要选择的猜拳对应的编号:1剪刀2石头3布")) break if self.guess_role == 1: print("你猜的是:剪刀") elif self.guess_role == 2: print("你猜的是:石头") elif self.guess_role == 3: print("你猜的是:布") def machineGuessing(self): self.guess_mac = random.randint(1,3) while self.guess_mac not in (1, 2, 3): print("输入有误,电脑将重新输入") self.guess_mac = random.randint(1, 3) break if self.guess_mac == 1: print("电脑猜的是:剪刀") elif self.guess_mac == 2: print("电脑猜的是:石头") elif self.guess_mac == 3: print("电脑猜的是:布") # 人机对战计算: # count_role:role赢的局数 # count_mac:电脑赢的局数 # count_equal:平的局数 # result:y继续,q结束游戏 def pve(self): count_role = 0 count_mac = 0 count_equal = 0 if self.guess_role == self.guess_mac: print("本局为平局") count_equal += 1 elif str(self.guess_role) + str(self.guess_mac) in('1''3','2''1','3''2'): print("本局" + self.role_name + '赢了') count_role += 1 else: print("本局电脑赢了") count_mac += 1 result = input("是否继续游戏?按y继续,按n退出") while result == 'y': self.roleGuessing() self.machineGuessing() if self.guess_role == self.guess_mac: print("本局为平局") count_equal += 1 elif (str(self.guess_role)+str(self.guess_mac)) in ('1''3','2''1','3''2'): print("本局" + self.role_name + '赢了') count_role += 1 else: print("本局电脑赢了") count_mac += 1 result = input("是否继续游戏?按y继续,按n退出") if result == 'n': print("退出游戏") else: print("输入错误,退出游戏") print("{0}一共赢了{1}局,电脑赢了{2}局,平{3}局".format(self.role_name,count_role,count_mac,count_equal)) mmg = Man_machineGuessing() mmg.casting() mmg.roleGuessing() mmg.machineGuessing()
(2)优化了下代码:
这个版本在代码上优化了些,但是仍要依次调用4个方法才能实现完成功能
(3)在网上学习了别人的写法。思路大概是这样的:
方法1get_role_name():主要负责获取角色名称编号,
方法2get_role_fist():主要负责获取角色出拳编号,
方法3get_pc_fist():主要负责生成电脑出拳编号,
方法4pve():以方法4为人机对战游戏主线,通过调用前3种方法return返回值将4种方法串起来,while-break控制游戏是否继续循环
这方法很有效!!!