Python3学习实战——用类实现简单的猜拳游戏

前言

本笔记仅个人认知和见解,水平有限,还请见谅。

如有错误,还请指出,若有想法,欢迎共享!

内容不代表最优解决方案,甚至可能不是很好的方法,仅供参考。


文章目录

  • Python3学习实战——用类实现简单的猜拳游戏
    • 前言
    • 1.题目分析
    • 2.流程分析
    • 3.完整程序
    • 4.方法分析
      • 初始化类
      • 出拳方法
      • 判断输赢方法
      • 游戏主体逻辑
    • 1.5优化方向

1.题目分析

原题:用类实现一个简单的猜拳游戏。

猜拳游戏:用户输入一个剪刀石头或布,机器输出一个剪刀石头或布,并判断输赢。

特殊需求:用类(创建自定义对象),简单的。

2.流程分析

主要流程:

提供选项->系统输出->获取用户输入->判断胜负->重新执行

由于这个程序比较简单,就做一个猜拳类,实现获取并处理用户输入的方法和判断胜负的的方法即可。

3.完整程序

#Run.py
import random
class GuessBox:'''机器随机出一个,并且问用户输入,然后判断胜负'''GuessW={0:'剪刀',1:'石头',2:'布'}def __init__(self):print('---猜拳小游戏---')def Player(self):#判断玩家输入的方法self.__Robot=random.randrange(3)#从0-2中随机抽取一个数print('1.剪刀\n2.石头\n3.布')print('轮到你了!')self.Players=input()print('----------------')if self.Players in ['1','剪刀','1.剪刀']:self.PlayerInput=0elif self.Players in ['2','石头','2.石头']:self.PlayerInput=1elif self.Players in ['3','布','3.布']:self.PlayerInput=2else:self.PlayerInput=-1def Outp(self):print('您的是——',self.GuessW.get(self.PlayerInput))print('电脑出——',self.GuessW.get(self.__Robot))def WinorNot(self):#判断输赢的方法if self.PlayerInput not in range(3):print('憋乱打')elif self.PlayerInput == self.__Robot:print('平手')elif (0 in [self.PlayerInput,self.__Robot]) and (2 in [self.PlayerInput,self.__Robot]):if self.PlayerInput > self.__Robot:print('你输了...')elif self.PlayerInput < self.__Robot:print('你赢了!')elif self.PlayerInput < self.__Robot:print('你输了...')elif self.PlayerInput > self.__Robot:print('你赢了!')#调用这个类gb=GuessBox()
while True:gb.Player()gb.Outp()gb.WinorNot()print('----------------')

执行这个文件:

---猜拳小游戏---
1.剪刀
2.石头
3.布
轮到你了!
1
----------------
您的是—— 剪刀
电脑出—— 石头
你输了...
----------------
1.剪刀
2.石头
3.布
轮到你了!
剪刀
----------------
您的是—— 剪刀
电脑出—— 布
你赢了!
----------------
1.剪刀
2.石头
3.布
轮到你了!
石头
----------------
您的是—— 石头
电脑出—— 石头
平手
----------------
1.剪刀
2.石头
3.布
轮到你了!
3.布
----------------
您的是—— 布
电脑出—— 布
平手
----------------
1.剪刀
2.石头
3.布
轮到你了!

4.方法分析

初始化类

class GuessBox:'''机器随机出一个,并且问用户输入,然后判断胜负'''GuessW={0:'剪刀',1:'石头',2:'布'}def __init__(self):print('---猜拳小游戏---')

首先是要用类的方法,那就先创建一个类。然后创建一个类变量,预存一个猜拳的字典,方便以后调用时使用,而且也提醒我们0代表剪刀,1代表石头,2代表布。利用数字代表文字有利于后期判断胜负。然后构造函数加载一个标题,而这个标题仅加载一次。

出拳方法

    def Player(self):#判断玩家输入的方法self.__Robot=random.randrange(3)#从0-2中随机抽取一个数print('1.剪刀\n2.石头\n3.布')print('轮到你了!')self.Players=input()print('----------------')if self.Players in ['1','剪刀','1.剪刀']:self.PlayerInput=0elif self.Players in ['2','石头','2.石头']:self.PlayerInput=1elif self.Players in ['3','布','3.布']:self.PlayerInput=2else:self.PlayerInput=-1

接着是出拳方法(电脑用户同时猜拳):利用random.randomrange(3)获得0-2这三个数中的随机一个代表电脑的输出,赋值给一个禁止外部直接访问的变量__Robot。然后获得用户的输入,鉴于用户输入形式随机,我提供了三种输入方式,无论是只利用数字或只利用名字,还是数字名字都用都可以正确识别用户的输入(我可以认为是多态吗),并给予一个用户输入的猜拳数字代表用户的输入。如果用户的输入是不正常的,那这个数字是-1,以便以后能够警告用户。

判断输赢方法

    def WinorNot(self):#判断输赢的方法if self.PlayerInput not in range(3):print('憋乱打')elif self.PlayerInput == self.__Robot:print('平手')elif (0 in [self.PlayerInput,self.__Robot]) and (2 in [self.PlayerInput,self.__Robot]):if self.PlayerInput > self.__Robot:print('你输了...')elif self.PlayerInput < self.__Robot:print('你赢了!')elif self.PlayerInput < self.__Robot:print('你输了...')elif self.PlayerInput > self.__Robot:print('你赢了!')

最后是判断输赢的方法,首先判断用户的输入是不是合法的,如果不是合法的就给予一定的指引。合法,就比较用户和电脑的数字。在用数字代表猜拳的时候,刻意以剪刀石头布的顺序给定数字,这样就可以利用大于小于来判断输赢了,除了同时出现0和2需要特殊讨论外,数字大的一方胜利。而0和2同时出现,也只需要反其道而行之,数字小的胜利即可。

def Outp(self):print('您的是——',self.GuessW.get(self.PlayerInput))print('电脑出——',self.GuessW.get(self.__Robot))

另外还有个同时输出用户猜拳和电脑猜拳的方法,方便得到用户和电脑的猜拳结果。

游戏主体逻辑

gb=GuessBox()
while True:gb.Player()gb.Outp()gb.WinorNot()print('----------------')

首先将类实例化,然后在一个死循环内不断地调用方法,先获取电脑和用户的猜拳结果,再同时展示给用户,最后判断输赢。

1.5优化方向

除了算法上可以优化,如游戏输赢的判断方法等,还可以从面向对象的角度优化类的结构。比如将类的功能打散,或者将PlayerInput这种处理过的结果封装起来等。如果从可扩展上来说,如果加入耍赖系统的话,比如强行反转输赢等,可能就要重写WinorNot的方法。

最后这个程序没给直接退出程序的方法,要手动关掉。

Python3学习实战——用类实现简单的猜拳游戏相关推荐

  1. Android学习-简单的猜拳游戏

    今天是2016年7月28日 Java制作简单的猜拳游戏, 游戏界面 简单分析: 猜拳比赛需要两个选手参加,一个是自己,一个是敌人,每个选手都有两个属性,分别是分数和角色;哪一方获胜,该方的分数自动加1 ...

  2. 用python做一个简单的猜拳游戏

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.简介 二.代码 总结一 总结二 注意 前言 用python编写一个简单的猜拳游戏 一.简介 这是我用python编 ...

  3. Java 入门课程视频实战-0基础 上线了,猜拳游戏,ATM实战,欢迎围观

    Java 入门课程视频实战-0基础 已经上传完了.欢迎小伙伴们过来围观 直接进入: http://edu.csdn.net/course/detail/196 课程文件夹例如以下: 1 初识Java  ...

  4. Java简单实现猜拳游戏

    前言 Random类的简单使用 .nextInt()方法,返回伪随机的,均匀分布 int值介于0(含)和指定值(不包括),从该随机数生成器的序列绘制. public class Demo_02 {// ...

  5. 【Tensorflow】深度学习实战01——Tensorflow实现简单的卷积网络(MNIST)

    [fishing-pan:https://blog.csdn.net/u013921430转载请注明出处] 前言 现在深度学习可以说很是热门,自己也非常感兴趣,之前有看过吴恩达老师的课程,也看过一些书 ...

  6. 利用Java编写简单的猜拳游戏

    猜拳游戏要求用Java编写一个人机对战并判断输赢,记录输赢情况. 其中,1代表石头,2代表剪刀,3代表布,110表示结束游戏. 思路:首先定义输入函数,并提示用户输入猜拳数值,定义一个随机数代表电脑数 ...

  7. python基础第三章选择结构答案-python3 学习笔记(二)选择结构、循环结构

    python3 学习笔记 python 优雅 明确 简单 1.选择结构 (1)简单判断 if else 使用格式: if  条件: 表达式1 else: 表达式2 (2)多条件判断 elif 使用格式 ...

  8. java 做猜数字小游戏_Java Properties类:利用Properties类制作猜数字小游戏

    在学习Random类时我们制作过猜数字小游戏,学习了Properties类后,可以为此游戏添加保存得分记录功能 游戏规则: 玩家可以选择玩游戏还是查看得分 玩游戏: 首先玩家需要选择难度: 难度级别 ...

  9. java猜拳游戏代码_Java实现简单猜拳游戏

    本文实例为大家分享了java实现简单猜拳游戏的具体代码,供大家参考,具体内容如下 看网上的猜拳游戏那么多,但都是用switch输入数字,所以用if嵌套,写一个简单的猜拳游戏 package game; ...

最新文章

  1. jquery 数组的调用
  2. c++ 线程池_基础篇:高并发一瞥,线程和线程池的总结
  3. c程序内存分布[转载]
  4. VTK:Points之NormalEstimation
  5. 千图成像_两分钟教你玩转千图成像Part1~
  6. python的语法格式
  7. TCP协议和UDP协议的对比
  8. python 快递分拣小程序
  9. python中format使用
  10. 高级程序员的思维模式
  11. 数据库面试基础题之执行计划
  12. android 之输入法
  13. snowboy个人模型制作
  14. 贪心问题(Python代码实现)——磁带最优存储问题
  15. 丽怡酒店品牌彰显运营实力,领跑中端酒店赛道
  16. 1147 简单评委打分
  17. 2019最新《妙堂Javascript全套项目实战》
  18. 亚像素卷积网络(ESPCN)学习与Pytorch复现
  19. 攻防世界7分~部分8分题
  20. Java 模拟栈结构

热门文章

  1. 怎样将PPT文件转换为Word文档精美ppt模板下载
  2. 10000套PPT模板免费下载
  3. 解决海康视频插件错位以及点击页面出现闪烁的情况
  4. shopeeLazada菲律宾市场好做吗?东南亚菲律宾站点热卖产品5大类推荐
  5. SQL server 2019 配置管理器,提示“MMC无法创建管理单元”的解决方法
  6. 禁止360开机自动启动
  7. 解决微信小程序video属性controls失效问题
  8. 网关gateway服务端配置 1
  9. 十进制转换为八进制或十六进制
  10. 中文WordNet的安装与使用