石头剪刀布

简介: 本场景介绍如何在阿里云ECS环境下用Python实现一款人机对战小游戏:石头剪刀布。

石头剪刀布


1.  创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2.  实验步骤

  1. 实验资源创建完毕后的界面如图1所示。

 

图1 资源创建完毕后的界面

  1. 该实验要求编写一个简单的人机对战游戏。对此问题进行简单分析,可以从以下几个方面进行整体考虑:
  • 关于出拳:由于是人机对战游戏,计算机和用户是游戏主体,因此计算机出拳必须通过随机数产生,而用户出拳需要从键盘输入;
  • 关于单局的胜负判定:此游戏中的出拳有3种状态,分别为石头、剪刀和布,为了处理方便可以分别用如0、1、2这样的数来代表(也可用其它数字表示)。以这些设定为例,可以穷举出除出拳一样的所有状态,这里共有6种状态,分别如下:

表1 双方出拳示意及胜负判定表

计算机

出拳值

用户

出拳值

计算机出拳值-用户出拳值

胜负判定

一般性判定规则

0

1

-1

计算机胜

如果差值为-1或2则计算机胜;

如果差值为1或-2则用户胜

0

2

-2

用户胜

1

0

1

用户胜

1

2

-1

计算机胜

2

0

2

计算机胜

2

1

1

用户胜

  • 关于游戏胜负的判定:表1给出了单局游戏的胜负判定规则,但整个游戏的胜负还要进行“三局两胜”,因此,只有在一方先达到胜两局的情况下,才能确定游戏的胜负。如何实现先达到胜两局的这一判定呢?其实可以采用最简单的积分方法,每胜一局者,为其积1分,累计积分先达到2分的判定该方获胜。

另外还有一些细节上的考虑,如下面几点:

  • 如何生成范围在0-2之间的随机整数;
  • 要进行多轮猜拳,循环如何处理,用何种结构更好?
  • 胜负判定的具体表达式如何写出?
  • 还需要一些外部变量吗?需要几个?都起什么作用?
  • 所有思考后得到的语句顺序如何调整?
  1. 根据上述总体思考和细节考虑,写出一个简单的单轮猜拳的样本,具体代码如下:
import random as r
print("+----------------------------+")
print("+                            +")
print("+   欢迎进入石头剪刀布游戏   +")
print("+   0:石头  1:剪刀  2:布    +")
print("+                            +")
print("+----------------------------+")
c_box=r.randint(0,2)     #用来记录计算机的出拳
p_box=int(input("请输入您的出拳:"))   #用来记录用户的出拳
d=c_box-p_box            #计算机出拳与用户出拳之差
print("计算机的出拳为%d,您的出拳为%d"%(c_box,p_box))
if d==-1 or d==2:
  print("抱歉,您输了!")
elif d==-2 or d==1:
  print("恭喜,您赢了!")
elif d==0:
  print("平局!")

3.1 在命令窗口,执行如下命令,进入源代码编辑窗口。

vim p3-1.py

3.2 进入程序编辑状态后,先按键盘上的i键进入插入模式,然后将上述代码添加进去。添加完成后,按键盘左上角的Esc键退出编辑模式,然后输入:wq保存并退出配置文件。保存退出前的界面如图2所示。

图2 源代码编辑窗口

3.3 在命令窗口,执行如下命令:

python3 p3-1.py

执行后的结果如图3所示。

 

图3 p3-1.py程序的执行结果

上述代码仅是完成了一次猜拳过程,与实验内容的要求不完全相符,请同学自行改造程序,使其能够满足实验内容的要求。

  1. 改造上述程序代码,使其能够满足实验内容的要求,将其存为“p3-2.py”,并调试通过。

3.  实验要求

  1. 请将上面实验的每一步截图,分别用e5-1.jpg、e5-2.jpg、……、e5-n.jpg保存,至少截取5张图,并将所有实验内容的Python代码及截图一起打包提交到学习平台上,压缩包格式统一为zip格式。
  2. 西安交通大学的同学,请将文件命名为“你的学号-Py3.zip”;非西安交通大学的同学,请将文件命名为“你的学校-你的姓名-Py3.zip”或“你的姓名-Py3.zip”。
  3. 所有文档请于实验截止日期前提交。

实验链接:https://developer.aliyun.com/adc/scenario/58ceffe667bd4ff4b9e4d114d81adf5f

相关文章
|
API Python
pypi发布问题
我最经在发布我的更新包的时候遇到了ERROR HTTPError: 403 Forbidden from https://upload.pypi.org/legacy/ Invalid or non-existent authentication information. See https://pypi.org/help/#invalid-auth for more information.这样的问题。
|
弹性计算
阿里云免费企业邮箱申请流程
免费版的阿里云企业邮箱给你一个很好的体验,享受中小企业发展时期的优惠扶持。那怎么才能申请阿里云免费的企业邮箱呢??
43415 0
|
存储 NoSQL Redis
容器部署日志分析平台ELK7.10.1(Elasisearch+Filebeat+Redis+Logstash+Kibana)
容器部署日志分析平台ELK7.10.1(Elasisearch+Filebeat+Redis+Logstash+Kibana)
973 0
|
7月前
|
人工智能 自然语言处理 安全
AI战略丨大模型时代,基金投顾AI应用探索
AI战略丨大模型时代,基金投顾AI应用探索
|
Serverless C++ 计算机视觉
OpenCV中phase函数计算方向场
一、函数原型 ​该函数参数angleInDegrees默认为false,即弧度,当置为true时,则输出为角度。 phase函数根据函数来计算角度,计算精度大约为0.3弧度,当x,y相等时,angle为0。
2433 0
|
11月前
|
存储 安全 Android开发
探索Android与iOS的隐私保护机制
在数字化时代,移动设备已成为我们生活的一部分,而隐私安全是用户最为关注的问题之一。本文将深入探讨Android和iOS两大主流操作系统在隐私保护方面的策略和实现方式,分析它们各自的优势和不足,以及如何更好地保护用户的隐私。
|
12月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
12月前
|
安全 Swift iOS开发
探索iOS开发中的Swift语言之美
在数字时代的浪潮中,移动应用已成为日常生活的延伸。本文将深入探讨iOS平台上的Swift编程语言,揭示其背后的设计哲学、语法特性以及如何利用Swift进行高效开发。我们将通过实际代码示例,展示Swift语言的强大功能和优雅简洁的编程风格,引导读者理解并运用Swift解决实际问题。
|
传感器 监控 物联网
无线传感器网络的基本架构及其广泛应用
无线传感器网络的基本架构及其广泛应用
969 1
|
消息中间件 存储 算法
这些年背过的面试题——实战算法篇
本文是技术人面试系列实战算法篇,面试中关于实战算法都需要了解哪些内容?一文带你详细了解,欢迎收藏!