项目要求:
人和机器猜拳游戏写成一个类, 有如下几个函数 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控制游戏是否继续循环这方法很有效!!!