简单博饼游戏的实现(java)

游戏规则:

游戏使用骰子一副(6个),参与游戏的玩家轮流依次掷骰子,看骰子点数得饼:

  1. 有1个“四点”,得“一秀”饼;
  2. 有2个“四点”,得“二举”饼;
  3. 有3个“四点”,得“三红”饼;
  4. 有4个相同点数(除四点外),得“四进”饼;
  5. 若骰子点数分别为1-6顺序排列,得“对堂”饼;
  6. 玩家得“状元”饼的情况有几种,其等级按从小到大排列如下:
    1. 有4个“四点”,加上2个“一点”,得“状元插金花”;
    2. 有5个相同点数的,得“五子登科”;
    3. 有4个“四点”,得“状元”;
    4. 特殊情况: 若玩家掷出6个“四点”得“六杯红”,则直接夺得所有奖品。

程序要求:

(1)游戏开始时,可由玩家设置奖品数,例如:设“状元”1个,“对堂”2个,“三红”4个,“四进”8个,“二举”16个,“一秀”32个。

(2)游戏开始时,可设定玩家人数,游戏中应提示各位玩家轮流依次掷骰子,例如“1号玩家请掷筛子:y”;

(3)游戏中,应显示玩家每次掷得的点数,并显示得奖情况。例如“1,2,3,5,5,6   无奖,继续努力”;“1,4,4,3,5,6  二举,恭喜”。程序应能保存各位玩家得奖的记录。

(4)游戏设定的“一秀”、“二举”、“三红”、“四进”、“对堂”的奖品若领完,后续玩家若再掷出此类点数,不再得奖。但在上述奖品领完前,“状元饼”采取追饼的方式,即在其他奖品分完前,后一个掷得“状元”的人若比前一个“状元”等级大,则可追得“状元饼”。

(5)所有奖品分完,游戏结束。或者某玩家掷出6个“四点”,夺得所有奖品,其他玩家将同时失去所有奖品,游戏结束。

(6)游戏结束后,应输出所有玩家得奖情况。

附:各种得奖情况图示

关于博饼游戏代码的一些说明

设计思路:总体设计思路是考虑先将总体的游戏代码框架搭好然后再去实现一些游戏逻辑,这样实现会较为轻松。

(1)用面向对象的思想,游戏的玩家可以封装成一个类,其中包含玩家的id、获奖情况以及用来比较状元之间追饼关系的flag。相关代码如下:

(2)然后主程序也封装成一个公共类名为bobing,在主程序中实现相关逻辑

具体实现

第一步:设置玩家数量,对不合法的输入值进行提醒,并让用户再次输入

第二步:设置奖品数量,用6个变量去存储,然后让用户去输入奖品数,对不合法的值进行判断,这里只截取一部分代码

第三步:创建对象数组,并初始化

第四步:开始游戏,用随机数来模拟掷色子,并用一个数组去存储掷色子的结果,如果掷到第六个时则对该次循环对应的玩家所掷出的色子进行判断,判断他的获奖情况,并存储在对应的类数组中。当循环到第六次,此时循环体中i为5,此时对该玩家的所有属性进行更改,下图我使用了6个flag去对所掷出的6个色子进行数据保存,之后可以用这6个flag去判断该玩家的获奖情况,一次循环对应一个人的全部属性的改变,直到游戏结束

第五步:用这6个flag去讨论获奖情况,因为游戏中有个特殊情况-----六杯红 该情况要单独拿出来讨论,我这里还用了常量YIXIU、DUITANG等常量去保留各个奖品数,当four_flag=6时,将全部奖品数归0,该玩家获得所有奖品数,对应的奖品数组全部赋值,并将其他玩家获得的奖品数全部归0

第六步:最重要的是追饼的实现,所以先对追饼进行实现(此次游戏实现的是状元数只有1个的情况),实现思路是写个静态变量prize_flag,并初始化为0

当有玩家抽到状元时,判断抽到的状元的等级,与之前抽到状元的玩家比较,那么怎么比较呢?

我是这样想的,设置除了六杯红外的3个状元等级-----4个4的状元为等级1,五子登科为2,状元插金花为3。假设第一次有人抽到状元而且是4个4的状元,则将全局的prize_flag置为1,并将玩家中的player_flag置为1,假设后来还有人抽到4个4的状元,则用1和prize_flag去比较,看下1是否大于prize_flag,大的话将prize_flag置为1并将玩家中的player_flag置为1,在这里显然不行所以改不了改玩家的状态,所以无法获得状元奖品。可以对应现实中博饼游戏里奖品被人先拿而无法获奖的情况,其他两种情况类似

 当然如果该玩家的状元比较大,比如说是五子登科时则依旧比较prize_flag与状元等级之间的大小关系,满足小于关系时才改变该玩家类的属性,只不过这里是把prize_flag和player_flag置为2

这样在最后输出所有玩家的获奖情况时,只需遍历所有玩家比较谁的player_flag等于prize_flag谁就获得状元奖品。

第七步:对游戏结束条件的编写和全部情况的逻辑编写-------这里要设置一个条件,不能无限追饼,这样游戏就没有意义,所以要在除了状元外的所有奖品都被人拿走后而且状元已经被决出来的情况直接结束游戏,若状元还未有人抽中,则继续游戏直到一名玩家抽中状元,并且此时结束游戏

全部逻辑的编写都是以four_flag为核心进行讨论,分情况讨论为0、1、2、3、4、5、6这七种情况,举个例当four_flag为2时的情况如下:

其他情况类似,要注意判断是否还有相对应的奖品存在,若不在则无法获奖,要输出无奖,继续努力

第八步:实现状元获奖者属性的更改,并将上述讨论的全部结果从类数组中输出,相应代码的实现:

  • 1
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
博饼是一种传统的中国民间游戏,也可以作为一种小游戏Java实现。在博饼游戏中,玩家通过掷骰子来获得不同的点数组合,根据不同的点数组合来判断获得的奖励或者惩罚。 在Java实现博饼游戏,可以按照以下步骤进行: 1. 创建一个Dice类,用于表示骰子。该类可以包含一个roll()方法,用于随机生成一个1到6之间的整数作为骰子的点数。 2. 创建一个Player类,用于表示玩家。该类可以包含一个rollDice()方法,用于掷骰子并返回点数组合。 3. 创建一个Game类,用于控制游戏的进行。该类可以包含一个start()方法,用于开始游戏。在游戏进行过程中,可以通过调用Player类的rollDice()方法来获取玩家的点数组合,并根据不同的点数组合来判断奖励或者惩罚。 下面是一个简单的示例代码: ```java import java.util.Random; class Dice { public int roll() { Random random = new Random(); return random.nextInt(6) + 1; } } class Player { private Dice dice; public Player(Dice dice) { this.dice = dice; } public int[] rollDice() { int[] diceValues = new int[6]; for (int i = 0; i < 6; i++) { diceValues[i] = dice.roll(); } return diceValues; } } class Game { private Player player; public Game(Player player) { this.player = player; } public void start() { int[] diceValues = player.rollDice(); // 根据点数组合进行判断奖励或者惩罚的逻辑 // ... } } public class Main { public static void main(String[] args) { Dice dice = new Dice(); Player player = new Player(dice); Game game = new Game(player); game.start(); } } ``` 这是一个简单博饼游戏Java实现示例。在实际的游戏中,你可以根据需求进行更加详细和复杂的设计和实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值