zoukankan      html  css  js  c++  java
  • 人和机器猜拳游戏

    项目要求:

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

    这方法很有效!!!



     
  • 相关阅读:
    你的灯亮着吗随笔2
    好搜--评价
    水王ID
    回溯算法
    贪心算法
    动态规划问题
    环境安装注意事项
    好用的idea插件记录
    软件工程项目冲刺阶段二:第七天
    软件工程项目冲刺阶段二:第六天
  • 原文地址:https://www.cnblogs.com/kite123/p/11763538.html
Copyright © 2011-2022 走看看