石头剪刀布

简介: 本场景介绍如何在阿里云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

相关文章
|
4月前
|
人工智能
【洛谷】P2678 跳石头
洛谷 P2678 跳石头
35 0
【洛谷】P2678 跳石头
|
5月前
1018 锤子剪刀布 (20 分)
1018 锤子剪刀布 (20 分)
小游戏(猜数字、剪刀石头布) 2021-01-03
小游戏(猜数字、剪刀石头布) 2021-01-03
|
6月前
|
算法
联想算法题-石头剪刀布
联想算法题-石头剪刀布
89 0
shell 石头剪刀布
shell 石头剪刀布
|
11月前
|
存储 JavaScript 索引
基于 HTML+CSS+JS 的石头剪刀布游戏
基于 HTML+CSS+JS 的石头剪刀布游戏
132 0
|
算法
石头剪刀布 L1-044 稳赢 15分
石头剪刀布 L1-044 稳赢 15分
|
C语言
石头剪刀布小游戏(C语言)
1.游戏规则 2.游戏思路 3.代码实现 1.分别创建头文件game.h、源文件game.c和test.c 2.创建菜单并对输入的选择进行处理 3.实现石头剪刀布小游戏 3.1 打印菜单帮助玩家出拳,并对玩家选择进行处理 3.2电脑随机出拳 3.3判断输赢 3.4 打印游戏结果 3.5将结果写入文件 4.查看游戏记录 5.删除游戏记录 4.完整代码
355 0
[普及练习场] 生活大爆炸版石头剪刀布
[普及练习场] 生活大爆炸版石头剪刀布
172 0