模拟斗地主
package 集合进阶.Map双列.Collections.模拟斗地主;
/*
模拟斗地主
需求:通过程序实现斗地主过程中的洗牌,发牌和看牌
思路:
1.创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
2.往牌盒里面装牌
3.洗牌,也就是把牌打撒,用Collections的shuffle)方法实现
4.发牌,也就是遍历集合,给三个玩家发牌
5.看牌,也就是三个玩家分别遍历自己的牌
*/
import java.util.ArrayList;
import java.util.Collections;
public class 模拟斗地主 {
public static void main(String[] args) {
//创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现
ArrayList<String> array = new ArrayList<String>();
//定义花色数组
String[] colors = {"♥", "♦", "♠", "♣"};
//定义点数数组
String[] numbers= {"2", "3", "4", "5", "6", "7", "8", "9", "1", "J", "K", "A"};
for (String color : colors) {
for (String number : numbers) {
array.add(color + number);
}
}
array.add("小王");
array.add("大王");
//洗牌,也就是把牌打撒,用Collections的shuffle)方法实现
Collections.shuffle(array);
//发牌,也就是遍历集合,给三个玩家发牌
ArrayList<String> a = new ArrayList<String>();
ArrayList<String> b = new ArrayList<String>();
ArrayList<String> c = new ArrayList<String>();
ArrayList<String> dp = new ArrayList<String>();
for (int i = 0; i < array.size(); i++) {
String pkp = array.get(i);
if (i >= array.size() - 3) {
dp.add(pkp);
} else if (i % 3 == 0) {
a.add(pkp);
} else if (i % 3 == 1) {
b.add(pkp);
} else if (i % 3 == 2) {
c.add(pkp);
}
}
//看牌,也就是三个玩家分别遍历自己的牌
lookpkp("赵", a);
lookpkp("钱", b);
lookpkp("孙", c);
lookpkp("底牌", dp);
}
//看牌的方法
public static void lookpkp(String name, ArrayList<String> array) {
System.out.println(name + "的牌是: ");
for (String pkp : array) {
System.out.println(pkp + " ");
}
System.out.println();
}
}
赵的牌是:
♣3
♥9
♥A
♣A
♥5
♦J
♥6
♠7
♠4
♥7
♠1
♥2
♥J
小王
♥3
♦A
钱的牌是:
♦4
♦6
♦2
♠5
♠6
♠3
♦9
♠K
♦1
♠8
♦8
♥K
♠A
♣5
♠2
♠J
孙的牌是:
♦5
♥8
大王
♣1
♣J
♣K
♣4
♣2
♦3
♣7
♠9
♦K
♥1
♣8
♦7
底牌的牌是:
♣9
♥4
♣6
模拟斗地主升级版
package 集合进阶.Map双列.Collections.模拟斗地主;
/*
模拟斗地主升级版
需求:通过程序实现斗地主过程中的洗牌,发牌和看牌。要求:对牌进行排序
思路:
1.创建HashMap,键是编号,值是牌
2.创建ArrayList,存储编号
3.创建花色数组和点数数组
4.从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayLis理面存储编号
5.洗牌(洗的是编号),用Collections的shuffle)方法实现
6.发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收)
定义方法看牌(遍历TreeSet集合,获取编号,到HashMap集合找对应的牌)调用看牌方法
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
public class 模拟斗地主升级版 {
public static void main(String[] args) {
//创建HashMap,键是编号,值是牌
HashMap<Integer, String> hm = new HashMap<Integer,String>();
//创建ArrayList,存储编号
ArrayList<Integer> array = new ArrayList<Integer>();
//定义花色数组
String[] colors = {"♥", "♦", "♠", "♣"};
//定义点数数组
String[] numbers= {"2", "3", "4", "5", "6", "7", "8", "9", "1", "J", "K", "A"};
//从0开始往HashMap里面存储编号,并存储对应的牌。同时往ArrayLis理面存储编号
int index=0;
for (String number : numbers) {
for (String color: colors){
hm.put(index, color+number);
array.add(index);
index++;
}
}
hm.put(index,"小王");
array.add(index);
index++;
hm.put(index,"大王");
array.add(index);
//洗牌(洗的是编号),用Collections的shuffle)方法实现
Collections.shuffle(array);
//发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收)
TreeSet<Integer> a=new TreeSet<Integer>();
TreeSet<Integer> b=new TreeSet<Integer>();
TreeSet<Integer> c=new TreeSet<Integer>();
TreeSet<Integer> dp=new TreeSet<Integer>();
for (int i = 0; i < array.size(); i++) {
int x= array.get(i);
if (i >= array.size() - 3) {
dp.add(x);
} else if (i % 3 == 0) {
a.add(x);
} else if (i % 3 == 1) {
b.add(x);
} else if (i % 3 == 2) {
c.add(x);
}
}
//看牌,也就是三个玩家分别遍历自己的牌
lookpkp("赵", a,hm);
lookpkp("钱", b,hm);
lookpkp("孙", c,hm);
lookpkp("底牌", dp,hm);
}
//看牌的方法
public static void lookpkp(String name, TreeSet<Integer> ts,HashMap<Integer,String> hm) {
System.out.println(name + "的牌是: ");
for (Integer key : ts) {
String pkp = hm.get(key);
System.out.println(pkp + " ");
}
System.out.println();
}
}
赵的牌是:
♠2
♥3
♦3
♥5
♦5
♥7
♠7
♣7
♣8
♠9
♣9
♦1
♣1
♥K
♣K
♦A
钱的牌是:
♦2
♣2
♥4
♠5
♣5
♥6
♦6
♣6
♦7
♠8
♠1
♥J
♦J
♦K
♥A
大王
孙的牌是:
♥2
♠3
♣3
♦4
♠4
♣4
♠6
♥8
♥9
♦9
♥1
♠J
♣J
♠K
小王
底牌的牌是:
♦8
♠A
♣A
该博客介绍了如何使用Java实现斗地主游戏的洗牌、发牌和看牌功能。首先创建一个包含所有牌的ArrayList,然后通过Collections.shuffle()方法洗牌,接着按顺序分配给三位玩家。在升级版中,使用HashMap存储牌及其编号,对发牌过程进行了排序优化,使用TreeSet保证了牌的有序性。
297

被折叠的 条评论
为什么被折叠?



