人和机器猜拳游戏

项目要求:

人和机器猜拳游戏写成一个类, 有如下几个函数
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控制游戏是否继续循环

这方法很有效!!!



 
原文地址:https://www.cnblogs.com/kite123/p/11763538.html