题目:博饼小游戏
目的:
- 掌握java面向对象编程
- 选择合适的数据结构实现需求
- 熟练使用各种控制结构
内容:
设计并编程实现博饼小游戏,游戏规则如下:
游戏使用骰子一副(6个),参与游戏的玩家轮流依次掷骰子,看骰子点数得饼:
- 有1个“四点”,得“一秀”饼
- 有2个“四点”,得“二举”饼
- 有3个“四点”,得“三红”饼
- 有4个相同点数(除四点外),得“四进”饼
- 若骰子点数分别为1-6顺序排列,得“对堂”饼
- 玩家得“状元”饼的情况有几种,其等级按从小到大
排列如下:
- 有4个“四点”,得“状元”
- 有5个相同点数的,得“五子登科”
- 有4个“四点”,加上2个“一点”,得“状元插金花”
- 特殊情况: 若玩家掷出6个“四点”得“六杯红”,则直接夺得所有奖品
程序要求:
- 游戏开始时,可由玩家设置奖品数,例如:设“状元”1个,“对堂”2个,“三红”4个,“四进”8个,“二举”16个,“一秀”32个
- 游戏开始时,可设定玩家人数,游戏中应提示各位玩家轮流依次掷骰子,例如“1号玩家请掷筛子:y”
- 游戏中,应显示玩家每次掷得的点数,并显示得奖情况。例如“1,2,3,5,5,6 无奖,继续努力”;“1,4,4,3,5,6 二举,恭喜”。程序应能保存各位玩家得奖的记录
- 游戏设定的“一秀”、“二举”、“三红”、“四进”、“对堂”的奖品若领完,后续玩家若再掷出此类点数,不再得奖。但在上述奖品领完前,“状元饼”采取追饼的方式,即在其他奖品分完前,后一个掷得“状元”的人若比前一个“状元”等级大,则可追得“状元饼”
- 所有奖品分完,游戏结束。或者某玩家掷出6个“四点”,夺得所有奖品,其他玩家将同时失去所有奖品,游戏结束
- 游戏结束后,应输出所有玩家得奖情况
各种得奖情况图示
代码实现
Prize类(奖品对象)- package BocakeGame;
- import java.util.Scanner;
- public class Prize { //奖品对象
- //牺牲一个存储空间,增加程序可读性
- public static int reward1; //一秀
- public static int reward2; //二举
- public static int reward3; //三红
- public static int reward4; //四进
- public static int reward5; //对堂
- public static int reward6; //状元 五子登科 状元插金花 六杯红
- public Prize() { //初始化
- reward1 = reward2 = reward3 = reward4 = reward5 = reward6 = 0;
- }
- public void setPrizeNumber(Scanner scanner) {
- System.out.println("请设置奖品数量(如果输入负数或零将变为默认设置):");
- System.out.println("(1)状元奖数固定为:1");
- reward6 = 1;
- System.out.print("(2)请设置对堂奖数:");
- reward5 = scanner.nextInt();
- System.out.print("(3)请设置三红奖数:");
- reward3 = scanner.nextInt();
- System.out.print("(4)请设置四进奖数:");
- reward4 = scanner.nextInt();
- System.out.print("(5)请设置二举奖数:");
- reward2 = scanner.nextInt();
- System.out.print("(6)请设置一秀奖数:");
- reward1 = scanner.nextInt();
- }
- }
复制代码 PlayGame类(玩游戏对象)- package BocakeGame;
- import java.util.Scanner;
- public class PlayGame { //玩游戏
- public static int num; //游戏玩家数(静态属性)
- public static void setPlayerNumber(Scanner scanner) { //设置游戏玩家数(静态属性)
- System.out.print("请设置玩家人数(6~10):");
- num = scanner.nextInt();
- if (num < 6) num = 6;
- else if (num > 10) num = 10;
- }
- public static void main(String[] args) { //运行游戏
- Scanner scanner = new Scanner(System.in); //创建一个全局扫描器对象
- Dice dice = new Dice(); //创建骰子对象
- Prize prize = new Prize(); //创建奖品对象
- prize.setPrizeNumber(scanner); //设置奖品数量
- setPlayerNumber(scanner); //设置玩家人数
- scanner.close(); //关闭全局扫描器对象 后面不再需要输入了
- Player[] players = new Player[num]; //创建num个玩家
- for (int i = 0; i < num; i++) {
- players[i] = new Player(); //创建玩家对象
- players[i].id = i + 1; //给每个玩家编号
- }
- for (int i = 0; i < num; i++) {
- players[i].play(dice, prize); //每个人玩游戏
- if (players[i].flag == 1) { //游戏结束 退出循环
- break;
- }
- }
- if (players[0].winner != -1) { //最后输出状元玩家
- System.out.println("状元是" + players[0].winner + "号玩家!");
- } else System.out.println("很遗憾没有人获得状元!");
- }
- }
复制代码 Player类(玩家对象)Dice类(骰子对象)- package BocakeGame;
- public class Dice { //骰子对象
- public int[] dice = new int[6]; //六次掷骰子的点数
- public Dice() { //初始化骰子点数
- for (int i = 0; i < 6; i++) {
- dice[i] = 0;
- }
- }
- public void printDice() { //打印骰子点数
- System.out.print("骰子的点数为:");
- for (int i = 0; i < 6; i++)
- System.out.print(dice[i] + " ");
- System.out.println();
- }
- public void rollDice() { //随机扔骰子
- for (int i = 0; i < 6; i++) {
- dice[i] = 1 + (int) (Math.random() * 6); //产生[1,7)的随机整数
- }
- }
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |