【案例 6-4】斗地主洗牌发牌

news/2024/12/29 20:55:12/

【案例介绍】

1.任务描述
斗地主的扑克牌游戏,相信许多人都会玩,本例要求编写一个斗地主的洗牌发牌程序,要求按照斗地主的规则完成洗牌发牌的过程。一副扑克总共有 54 张牌,牌面由花色和数字组成(包括 J、Q、K、A 字母)组成,花色有♠、♥、♦、♣ 四种,分别表示黑桃、红桃、方块、梅花,小☺、大☻分别表示小王和大王。斗地主游戏共有三位玩家参与,首先将这 54张牌的顺序打乱每人轮流摸一次牌,剩余 3 张留作底牌,然后在控制台打印三位玩家的牌和三张底牌。

2.运行结果

【任务介绍】

  • 学会分析“斗地主之洗牌发牌”任务的实现思路。
  • 根据思路独立完成“斗地主之洗牌发牌”任务的源代码编写、编译及运行。
  • 掌握 List 集合和 Map 集合特点及常用方法的使用。
  • 掌握集合遍历的方式。

【实现思路】

(1)要实现纸牌程序,首先需要完成纸牌的组装。牌面是由花色(包括♠、♥、♦、♣花色)和数字(包括 J、Q、K、A 字母)两部分组成,可以创建两个 ArrayList 集合作为花色集合与数字集合,存储时需要注意。比 10 大的牌的数字用 J、Q、K 表示,1 用 A 表示。

(2)将花色集合与数字集合这两个循环进行嵌套循环,将花色与数字组合,形成 52 章牌,并赋予其编号。将组合后的牌存放到一个 HashMap 集合中,集合的 Key 值是编号,value值是组装完成的纸牌。还有两张牌是大小王(小☺表示小王、大☻表示大王)。由于组装规则不一致,需单独使用 add()方法将这两张牌加入到 HashMap 集合中。

(3)创建一个数字集合,用这个数字集合代替纸牌完成洗牌和发牌操作。由于纸牌的数量是 54 张,所以创建集合范围是 0~53。

(4)可以使用 Collection 类的 shuffle()方法完成打乱数字集合的操作,实现洗牌效果。由于只有 3 个人,所以可以使用 for 循环,通过将数字与 3 取余的方法,将代表不同纸牌的数字分配给不同人与底牌,实现发牌效果。

(5) 洗牌和发牌结束后,可以通过 Collection 类的 sort()方法完成排序,之后通过foreach()循环 HashMap 集合,根据数字查找对应的纸牌字符串,并存入创建的字符串集合中,最后展示字符串集合。

【实现代码】

import java.util.ArrayList;
import java.util.Collections;public class main {public static void main(String[] args) {//斗地主洗牌发牌String[] colors = {"♠", "♥", "♦", "♣"};String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};String[] jokers = {"大王☻", "小王☺"};//创建一个牌盒ArrayList<String> pokerBox = new ArrayList<>();//将牌放入牌盒for (String number : numbers) {for (String color : colors) {pokerBox.add(number + color);}}pokerBox.add(jokers[0]);pokerBox.add(jokers[1]);//洗牌Collections.shuffle(pokerBox);//发牌ArrayList<String> player1 = new ArrayList<>();ArrayList<String> player2 = new ArrayList<>();ArrayList<String> player3 = new ArrayList<>();ArrayList<String> dipai = new ArrayList<>();for (int i = 0; i < pokerBox.size(); i++) {if (i >= pokerBox.size() - 3) {dipai.add(pokerBox.get(i));} else if (i % 3 == 0) {player1.add(pokerBox.get(i));} else if (i % 3 == 1) {player2.add(pokerBox.get(i));} else if (i % 3 == 2) {player3.add(pokerBox.get(i));}}//看牌Collections.sort(player1);Collections.sort(player2);Collections.sort(player3);System.out.println("玩家一:" + player1);System.out.println("玩家二:" + player2);System.out.println("玩家三:" + player3);System.out.println("底牌:" + dipai);}
}

http://www.ppmy.cn/news/376881.html

相关文章

斗地主参数

一、参数设置 1、大小&#xff1a;3、4、5、6、7、8、9、10、J、Q、K、A、2、小王、大王 2、牌基础值&#xff1a;以10为中间值0。向左依次递减&#xff0c;3为-7。向右依次递增&#xff0c;大王为7 4、一轮牌的价值是7 3、牌型值&#xff1a;&#xff08;非负7&#xff09;…

ET篇:运行斗地主

ET篇&#xff1a;运行斗地主 ET篇&#xff1a;运行斗地主环境准备&#xff1a;cmd配置mongodb路径 进入斗地主工程进入斗地主工程 ET篇&#xff1a;运行斗地主 环境准备&#xff1a; 下载斗地主Demo 准备2017.4.0版本的Unity 下载并配置MongoDB cmd配置mongodb路径 mongo…

c++【斗地主】

c【斗地主】 【题目描述】 到了嬉戏谷&#xff0c;同学们坐了过山车&#xff0c;看了4D电影&#xff0c;玩了VR&#xff08;虚拟现实&#xff09;游戏&#xff0c;吃过饭有一段自由活动时间&#xff0c;小&#xff38;拿出两幅扑克牌&#xff0c;叫上3个小伙伴斗起了地主&…

Java(斗地主案例)

斗地主案例的需求分析 斗地主案例的代码实现 package com.itheima.demo04.Test;import java.util.ArrayList; import java.util.Collections;/*斗地主综合案例:1.准备牌2.洗牌3.发牌4.看牌*/ public class DouDiZhu {public static void main(String[] args) {//1.准备牌//定义…

斗地主例子

斗地主 准备52大小王共54张牌 存放于数组或者集合当中用花色和牌面两个数组 嵌套循环组装牌洗牌 shuffle 使用指定的随机元对指定列表进行置换 打乱集合中元素的顺序发牌 定义四个集合 三个玩家 和底牌 索引%3看牌 遍历输出储存玩家和底牌的集合 package DemoDoudizhu;import…

斗地主游戏案例开发

* 业务需求 * 斗地主的做牌&#xff0c;发牌&#xff0c;排序&#xff0c;看牌 * 业务&#xff0c;54张牌 * 点数&#xff1a;"3","4","5","6","7","8","9","10","J&qu…

使用集合来完成一场斗地主

引言&#xff1a; 学习java这么久了&#xff0c;总归是要拿出一点有趣的东西哈&#xff0c;今天就给大家带来一个学集合当中有趣的一个&#xff0c;且知识点设计比较综合的一个例子&#xff0c;斗地主&#xff0c;当然基于目前的水平我们只解决一个发牌&#xff0c;看牌的简单操…

Java-斗地主小例子

//创建一个String类型的泛型集合ArrayList<String> poker new ArrayList<>();//定义两个数组&#xff0c;一个数组存牌的类型&#xff0c;一个存牌的序号String[] colors {"♥","♠","♦","♣"};String[] numbers {&qu…