python实现人机猜拳小游戏


Posted in Python onFebruary 03, 2020

今天的这篇文章呢是对人机猜拳小游戏——石头剪刀布的一个描述以及代码展现

石头剪刀布游戏代码的简介:关于石头剪刀布这个小游戏,大致得到思路就是,玩家出一个手势,然后电脑再随机出一个手势,最后再判断是玩家获胜还是电脑获胜。最简单的思路就是将这三个手势是三个代号来表示,然后再去判断代号之间的关系,最后输出胜方。

最一般情况下,最先想到的就是使用1、2、3数字来对三个手势进行代号化,然后再通过代号的大小去判断,如下是对这个方式的简述:

石头   代号   用1来表示

剪刀   代号   用2来表示

布      代号   用3来表示

石头   >   剪刀

剪刀   >   布

布   >   石头

站在玩家的角度考虑玩家胜利的情况(分析电脑胜利也是一样的):如果玩家出的是石头,只有电脑出剪刀时玩家才可以胜利,石头代号为1 ,剪刀代号为2,石头代号<剪刀代号,同时石头代号也<布的代号;如果玩家出的是剪刀,只有电脑出布时玩家才可以胜利,剪刀代号为2 ,布代号为3,剪刀代号<布代号;如果玩家出的是布,只有电脑出石头是玩家才可以胜利,布的代号为3,石头代号为1,布的代号>石头的代号。由这三条分析可以看出,单纯用这三个数字来比较大小的方式(即玩家手势代号大于或者小于电脑手势代号的方式)比较复杂。

1.  本代码思路,使用三种分类方式:玩家赢,平局,玩家输  来进行三种判断,当玩家出石头(1)并且电脑出剪刀(2)或者玩家出剪刀(2)并且电脑出布(3)或者玩家出布(3)并且电脑出石头(1)这三种情况时,玩家赢;当玩家和电脑的手势代号一致时,平局;其他情况玩家输。

代码如下:

import random  #导包
print("********欢迎来到猜拳小游戏********")
while True:
 key = int(input("请输入您的出拳选项:1,剪刀。2,石头。3,布:")) #从键盘上得到手势代号
 while (key not in [1, 2, 3]): #判断当输入的手势代号是否符合要求,不符合要求时,重新输入
  print("您的输入有误,请重新输入")
  key = int(input("请输入您的出拳选项:1,剪刀。2,石头。3,布:"))
 com_key=random.randint(1,3) #利用随机函数随机生成1到3之间的整数
 if (key==1 and com_key==2) or (key==2 and com_key==3) or (key==3 and com_key==1): 
  print("恭喜你啦,你赢了呦,加油!!!")
 elif key==com_key:
  print("此局是平局")
 else:
  print("真是遗憾呢,你输了。。。。")
 n=input("请输入n结束游戏或者输入其他字符继续游戏:")
 if n=="n":
  break
print("游戏结束")

运行结果如下:

********欢迎来到猜拳小游戏********
请输入您的出拳选项:1,剪刀。2,石头。3,布:1
此局是平局
请输入n结束游戏或者输入其他字符继续游戏:2
请输入您的出拳选项:1,剪刀。2,石头。3,布:2
恭喜你啦,你赢了呦,加油!!!
请输入n结束游戏或者输入其他字符继续游戏:2
请输入您的出拳选项:1,剪刀。2,石头。3,布:3
恭喜你啦,你赢了呦,加油!!!
请输入n结束游戏或者输入其他字符继续游戏:n
游戏结束

2. 人机猜拳小游戏升级版:

此版本多出来的功能为,可以为自己起用户名,并选择电脑玩家,计算玩家赢和电脑赢以及游戏总次数。

import random
print("* "*10+"人机猜拳"+"* "*10)
name=input("请输入昵称:")
hero_key=input("请选择英雄:1,刘备。2,李白。3,安琪拉")
if hero_key=="1":
 hero_name="刘备"
 print("刘备是个战士")
elif hero_key=="2":
 hero_name="李白"
 print("李白适合打野")
else:
 hero_name="安琪拉"
 print("安琪拉是个法师")
sum=0
# 统计人赢的和电脑赢的次数
per_win=0
com_win=0
while True:
 sum=sum+1
 key=int(input("请输入出拳选项:1,剪刀。2,石头。3,布:"))
 while (key not in [1,2,3]):
  print("输入有误请重新输入")
  key = int(input("请输入出拳选项:1,剪刀。2,石头。3,布:"))
 if key==1:
  print("%s出了剪刀"%name)
 elif key ==2:
  print("%s出了石头"%name)
 else:
  print("%s出了布"%name)
 com_key=random.randint(1,3)
 if com_key==1:
  print("%s出了剪刀"%hero_name)
 elif com_key ==2:
  print("%s出了石头"%hero_name)
 else:
  print("%s出了布"%hero_name)
 # 判断结果
 if key==1 and com_key==3 or key ==2 and com_key==1 or key ==3 and com_key==2 :
  print("本局结果:你赢了")
  per_win=per_win+1
 elif key==com_key:
  print("本局结果:打平了")
 else:
  print("本局结果:你输了,呵呵")
  com_win+=1
 n=input("输入n结束游戏输入其他键继续")
 if n=="n":
  break
print("游戏结束")
print("* "*10+"最终结果"+"* "*10)
print("本次游戏一共进行%d局其中%s赢%d局%s赢%d局最终结果:"%(sum,name,per_win,hero_name,com_win))
if per_win>com_win:
 print("大吉大利今晚吃鸡")
elif per_win==com_win:
 print("平局:择日再战")
else:
 print("你还是输了,真菜,呵呵。。。")

运行结果如下: 

* * * * * * * * * * 人机猜拳* * * * * * * * * * 
请输入昵称:鱼丸
请选择英雄:1,刘备。2,李白。3,安琪拉1
刘备是个战士
请输入出拳选项:1,剪刀。2,石头。3,布:2
鱼丸出了石头
刘备出了石头
本局结果:打平了
输入n结束游戏输入其他键继续c
请输入出拳选项:1,剪刀。2,石头。3,布:2
鱼丸出了石头
刘备出了石头
本局结果:打平了
输入n结束游戏输入其他键继续w
请输入出拳选项:1,剪刀。2,石头。3,布:3
鱼丸出了布
刘备出了石头
本局结果:你赢了
输入n结束游戏输入其他键继续n
游戏结束
* * * * * * * * * * 最终结果* * * * * * * * * * 
本次游戏一共进行3局其中鱼丸赢1局刘备赢0局最终结果:
大吉大利今晚吃鸡

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单介绍Python的Django框架的dj-scaffold项目
May 30 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
python列表的常用操作方法小结
May 21 Python
Python使用文件锁实现进程间同步功能【基于fcntl模块】
Oct 16 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
如何实现删除numpy.array中的行或列
May 08 Python
儿童学习python的一些小技巧
May 27 Python
python3实现名片管理系统
Nov 29 Python
Django 用户认证组件使用详解
Jul 23 Python
Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
Mar 09 Python
用Python进行websocket接口测试
Oct 16 Python
python中@property的作用和getter setter的解释
Dec 22 Python
如何使用selenium和requests组合实现登录页面
Feb 03 #Python
检测tensorflow是否使用gpu进行计算的方式
Feb 03 #Python
Tensorflow 实现释放内存
Feb 03 #Python
手把手教你进行Python虚拟环境配置教程
Feb 03 #Python
解决TensorFlow GPU版出现OOM错误的问题
Feb 03 #Python
python global和nonlocal用法解析
Feb 03 #Python
Tensorflow设置显存自适应,显存比例的操作
Feb 03 #Python
You might like
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
PHP获取表单textarea数据中的换行问题
2010/09/10 PHP
解析PHP中intval()等int转换时的意外异常情况
2013/06/21 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
THINKPHP2.0到3.0有哪些改进之处
2015/01/04 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
php自定义截取中文字符串-utf8版
2017/02/27 PHP
php输出文字乱码的解决方法
2019/10/04 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
ExtJS下grid的一些属性说明
2009/12/13 Javascript
判断控件是否已加载完成的代码
2010/02/24 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
捕获浏览器关闭、刷新事件不同情况下的处理方法
2013/06/02 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
AngularJS教程之简单应用程序示例
2016/08/16 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
vue v-on监听事件详解
2017/05/17 Javascript
php 修改密码实现代码
2017/05/24 Javascript
详解express + mock让前后台并行开发
2018/06/06 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
Postman内建变量常用方法实例解析
2020/07/28 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
[01:27]2014DOTA2展望TI 剑指西雅图IG战队专访
2014/06/30 DOTA
[01:21]DOTA2周边文化主题展 神秘商店火热开售
2017/07/30 DOTA
Python实现多线程/多进程的TCP服务器
2019/09/03 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
python Paramiko使用示例
2020/09/21 Python
园林资料员岗位职责
2013/12/30 职场文书