【Java实验】贪心猪游戏

本文介绍了使用Java编程实现贪心猪游戏的过程,包括实验目的、游戏规则、实验环境和主要步骤。游戏规则包括玩家轮流掷色子,普通玩家可以选择重掷或保留得分,而计算机玩家则自动进行游戏直到得分超过20分。程序通过类和继承结构设计,使用while循环控制游戏流程。
摘要由CSDN通过智能技术生成

一、 实验目的

熟悉 Java 语言的编程、编译、运行、调试过程,掌握 Java 的控制流和随机数的方法。

二、实验性质

设计

三、实验内容

编写 Java 程序完成贪心猪游戏,规则如下:
(1)一个简单的两人掷色子游戏,玩家轮流进行游戏,每次掷出一个[1,6] 的整数,先达到或者超过 100 分的玩家获胜,普通玩家先掷色子。
(2)对于普通玩家,若掷出 1 不得分并换人,如果玩家掷出 2-6,就可以选可以输入“r”重掷色子,或者输入“h”保留得分。
(3)对于计算机,轮到其进行游戏,需持续掷色子直到达到或者超过 20
分才予以保留得分。如果计算机获胜或掷出 1,则本轮立即结束。
(4)轮到玩家时,程序会显示双方成绩和之前的点数。

四、实验环境

1.计算机一台;
2.中文 Windows 操作系统;安装 JDK1.6 以上版本,安装 EclipseIDE 软件。

五、实验主要步骤

1.问题分解

(1)类和继承关系

贪心猪游戏的执行主体为“玩家”,其状态可用“当前得分”与“当前回合”描 述,在游戏过程中玩家可执行的动作为“玩游戏”和“掷色子”。在每轮游戏中,具体进行游戏的“玩家”根据游戏规则的不同分为“计算机玩家”和“普通玩家”。则在游戏中,应将玩家类(GamePlayer)作为父类,其具有的成员变量为分数(score) 和当前回合(state),具有的方法为掷色子(dice)和玩游戏(play)。由于规则

中每次掷骰子得到的分数为一个[1,6]的整数,故将 score 定义为整型(int)。同时,每名玩家对于回合的判定仅有两种结果,即是否处在本人回合,则可将 state 定义为布尔型(boolean)。不同的玩家均需执行掷骰子和玩游戏这两个动作,因而将其设置成公有类型(public)。由于普通玩家和计算机玩家在具体规则上的差异,可设置普通玩家(Player)和计算机玩家(Machine)两个类继承自 Gameplayer 类,对其中的 play 函数进行重写,类图如下。

在这里插入图片描述
类图

如图 5.1-1 所示,在本实验中除测试类外共涉及 GamePlayer、Player 和 Macine 三个类,其中后二者分别为 GamePlayer 的子类。由于规则的不同,两子类对父类中的 play 函数进行重写,且在构造函数中对父类的两成员变量赋初值。此外, Player 类在执行时,需由用户判断是否娇羞投掷色子,因而添加了 willContinue 方法,用以判断是否继续。

(2)循环控制

规则中玩家先手,则初始化时将普通玩家的回合状态设为假(false),将计算机玩家的回合状态设为真(true),其分数均为 0。游戏在任意玩家分数达到一百及以上时停止,当没有玩家满足条件时始终继续。则主循环可采用 while 型循环,结束条件为普通玩家或计算机玩家总分大于等于一百。其中,每个玩家结束自己的回合后将自己的回合状态设为假(true)并将对方状态设为真(true),用以实现二人的轮换状态。若其中任意玩家分数满足条件,可提前跳出循环。

贪心猪游戏流程图
贪心猪游戏流程图
如图 5.1-2 所示,程序开始运行后,需判断是否有玩家分数大于等于一百, 若有跳出循环判断其是否为普通玩家,并输出普通我那家获胜或机器获胜。若没有玩家分数满足条件,则判断是否为某个玩家回合,执行游戏。

2.程序源码

/**
*贪心猪游戏(测试类)
*贪心猪游戏的测试类,开始游戏时分别生成机器玩家和用户玩家,轮流进行游戏。
* */
public class GreedyTest {
   
/**
*由用户先开始游戏,则玩家的状态为“真”,即可以游戏,之后的每一次游戏中,机器和用户在完成掷骰子之后,将自己的状态置为“假”,即本回合结束。
*同时,将对方的状态置为“真”,即对方的回合开始。 当其中一方的分数大于 100 时,结束循环,并报告获胜者。
* */
public class GreedyTest {
   
	/**
	 * 由用户先开始游戏,则玩家的状态为“真”,即可以游戏,之后的每一次游戏中,机器和用户在完成掷骰子之后,将自己的状态置为“假”,即本回合结束。
	 * 同时,将对方的状态置为“真”,即对方的回合开始。 当其中一方的分数大于100时,结束循环,并报告获胜者。
	 * */
	public static void main(String[] args) 
	{
   
		Player player = new Player() ;
		Machine machine = new Machine() ;
		System.out.println("玩家先掷骰子") ;
		while (player.getScore() < 
  • 11
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值