Java实现斗地主之洗牌发牌

网友投稿 229 2023-01-07

Java实现斗地主之洗牌发牌

本文通过实例为大家分享了java实现斗地主之洗牌发牌的具体代码,供大家参考,具体内容如下

案例分析

需求:

实现斗地主过程中的洗牌,发牌和看牌。

并且确保每一位玩家手上拿到的牌是随机并且按照大小排序好的

思路

1.创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现

2.往牌盒里面装牌

3.洗牌,也就是把牌打散,用Collections的shuffle()方法实现

4.发牌,也就是遍历结合,给三个玩家发牌

5.看牌,也就是三个玩家分别遍历自己的牌

代码实现

1.创建牌盒,存放所有牌

//创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现

ArrayList poker=new ArrayList();

2.往牌盒里面放入所有牌组

//往牌盒里面装牌

/*

◆2,◆3,◆4.....◆k,◆A

♣2,...

♥2,...

♠2,...

小王 , 大王

*/

//定义花色数组

String[] colors={"◆","♣","♥","♠"};

//定义点数数组

String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

//将所有牌组合放入牌盒

for(zdNWrString col:colors)

{

for(String num:numbers)

{

poker.add(col+num);

}

}

//将最后两张大小王放入牌盒

poker.add("小王");

poker.add("大王");

3. 洗牌,也就是把牌打散,用Collections的shuffle()方法实现

//洗牌---把牌打乱

Collections.shuffle(poker);

4. 发牌,也就是遍历结合,给三个玩家发牌

//发牌--》遍历牌盒,给三个玩家发牌

ArrayList p1=new ArrayList<>();

ArrayList p2=new ArrayList<>();

ArrayList p3=new ArrayList<>();

//留下三张底牌

ArrayList dp=new ArrayList<>();

//将牌分发

for(int i=0;i

{

if(i>=poker.size()-3)

{

dp.add(poker.get(i));

}

else if(i%3==0)

{

p1.add(poker.get(i));

}

else if(i%3==1)

{

p2.add(poker.get(i));

}

else if(i%3==2)

{

p3.add(poker.get(i));

}

}

5. 看牌,也就是三个玩家分别遍历自己的牌

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1);

show("小忽悠",p2);

show("超级无敌大忽悠",p3);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

System.out.print(Dp+" ");

看牌的方法定义:

public static void show(String name,ArrayList arr)

{

System.out.print(name+"的牌: ");

for(int i=0;i

{

System.out.print(arr.get(i)+" ");

}

System.out.println();

}

完整代码和演示结果

完整代码:

import java.util.ArrayList;

import java.util.Collections;

import java.util.Scanner;

public class Main

{

public static void main(String[] args)

{

//创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现

ArrayList poker=new ArrayList();

//往牌盒里面装牌

/*

◆2,◆3,◆4.....◆k,◆A

♣2,...

♥2,...

♠2,...

小王 , 大王

*/

//定义花色数组

String[] colors={"◆","♣","♥","♠"};

//定义点数数组

String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

//将所有牌组合放入牌盒

for(String col:colors)

{

for(String num:numbers)

{

poker.add(col+num);

}

}

//将最后两张大小王放入牌盒

poker.add("小王");

poker.add("大王");

//洗牌---把牌打乱

Collections.shuffle(poker);

//发牌--》遍历牌盒,给三个玩家发牌

ArrayList p1=new ArrayList<>();

ArrayList p2=new ArrayList<>();

ArrayList p3=new ArrayList();

//留下三张底牌

ArrayList dp=new ArrayList<>();

//将牌分发

for(int i=0;i

{

if(i>=poker.size()-3)

{

dp.add(poker.get(i));

}

else if(i%3==0)

{

p1.add(poker.get(i));

}

else if(i%3==1)

{

p2.add(poker.get(i));

}

else if(i%3==2)

{

p3.add(poker.get(i));

}

}

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1);

show("小忽悠",p2);

show("超级无敌大忽悠",p3);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

System.out.print(Dp+" ");

}

public static void show(String name,ArrayList arr)

{

System.out.print(name+"的牌: ");

for(int i=0;i

{

System.out.print(arr.get(i)+" ");

}

System.out.println();

}

}

哈希表优化

区别: 上面是用一个字符串数组来存储所有牌的组合,并且也是对字符串数组进行洗牌操作,较为麻烦,而用哈希表之后,我们可以对每一张牌对应的索引进行洗牌操作。

并且上面也要求了,对每一位玩家的牌进行排序,而上面我们并没有实现,因此下面我们使用Treeset来保存每一位玩家所拿到的牌,确保完成了排序功能

思路:

代码实现:

import java.util.*;

public class Main

{

public static void main(String[] args)

{

//HashMap存放索引和对应的牌

HashMap map=new HashMap<>();

//存放索引的数组

ArrayList index=new ArrayList<>();

//花色和点数数组

String[] colors={"◆","♣","♥","♠"};

String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

//发牌

int pos=0;//索引

for(var col:colors)

{

for(var num:numbers)

{

map.put(pos,col+num);

index.add(pos);

pos++;

}

}

//对索引执行洗牌操作

Collections.shuffle(index);

//发牌

TreeSet p1=new TreeSet<>();

TreeSet p2=new TreeSet<>();

TreeSet p3=new TreeSet<>();

TreeSet dp=new TreeSet<>();

for(int i=0;i

{

if(i>=index.size()-3)

{

dp.add(index.get(i));

}

else if(i%3==0)

{

p1.add(index.get(i));

}

else if(i%3==1)

{

p2.add(index.get(i));

}

else if(i%3==2)

{

p3.add(index.get(i));

}

}

//看牌

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1,map);

show("小忽悠",p2,map);

show("超级无敌大忽悠",p3,map);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

{

System.out.print(map.get(Dp)+" ");

}

}

public static void show(String name,TreeSet arr,HashMap map)

{

System.out.print(name+"牌如下: ");

for(var ele:arr)

{

System.out.print(map.get(ele)+" ");

}

System.out.println();

}

}

{

if(i>=poker.size()-3)

{

dp.add(poker.get(i));

}

else if(i%3==0)

{

p1.add(poker.get(i));

}

else if(i%3==1)

{

p2.add(poker.get(i));

}

else if(i%3==2)

{

p3.add(poker.get(i));

}

}

5. 看牌,也就是三个玩家分别遍历自己的牌

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1);

show("小忽悠",p2);

show("超级无敌大忽悠",p3);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

System.out.print(Dp+" ");

看牌的方法定义:

public static void show(String name,ArrayList arr)

{

System.out.print(name+"的牌: ");

for(int i=0;i

{

System.out.print(arr.get(i)+" ");

}

System.out.println();

}

完整代码和演示结果

完整代码:

import java.util.ArrayList;

import java.util.Collections;

import java.util.Scanner;

public class Main

{

public static void main(String[] args)

{

//创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现

ArrayList poker=new ArrayList();

//往牌盒里面装牌

/*

◆2,◆3,◆4.....◆k,◆A

♣2,...

♥2,...

♠2,...

小王 , 大王

*/

//定义花色数组

String[] colors={"◆","♣","♥","♠"};

//定义点数数组

String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

//将所有牌组合放入牌盒

for(String col:colors)

{

for(String num:numbers)

{

poker.add(col+num);

}

}

//将最后两张大小王放入牌盒

poker.add("小王");

poker.add("大王");

//洗牌---把牌打乱

Collections.shuffle(poker);

//发牌--》遍历牌盒,给三个玩家发牌

ArrayList p1=new ArrayList<>();

ArrayList p2=new ArrayList<>();

ArrayList p3=new ArrayList();

//留下三张底牌

ArrayList dp=new ArrayList<>();

//将牌分发

for(int i=0;i

{

if(i>=poker.size()-3)

{

dp.add(poker.get(i));

}

else if(i%3==0)

{

p1.add(poker.get(i));

}

else if(i%3==1)

{

p2.add(poker.get(i));

}

else if(i%3==2)

{

p3.add(poker.get(i));

}

}

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1);

show("小忽悠",p2);

show("超级无敌大忽悠",p3);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

System.out.print(Dp+" ");

}

public static void show(String name,ArrayList arr)

{

System.out.print(name+"的牌: ");

for(int i=0;i

{

System.out.print(arr.get(i)+" ");

}

System.out.println();

}

}

哈希表优化

区别: 上面是用一个字符串数组来存储所有牌的组合,并且也是对字符串数组进行洗牌操作,较为麻烦,而用哈希表之后,我们可以对每一张牌对应的索引进行洗牌操作。

并且上面也要求了,对每一位玩家的牌进行排序,而上面我们并没有实现,因此下面我们使用Treeset来保存每一位玩家所拿到的牌,确保完成了排序功能

思路:

代码实现:

import java.util.*;

public class Main

{

public static void main(String[] args)

{

//HashMap存放索引和对应的牌

HashMap map=new HashMap<>();

//存放索引的数组

ArrayList index=new ArrayList<>();

//花色和点数数组

String[] colors={"◆","♣","♥","♠"};

String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

//发牌

int pos=0;//索引

for(var col:colors)

{

for(var num:numbers)

{

map.put(pos,col+num);

index.add(pos);

pos++;

}

}

//对索引执行洗牌操作

Collections.shuffle(index);

//发牌

TreeSet p1=new TreeSet<>();

TreeSet p2=new TreeSet<>();

TreeSet p3=new TreeSet<>();

TreeSet dp=new TreeSet<>();

for(int i=0;i

{

if(i>=index.size()-3)

{

dp.add(index.get(i));

}

else if(i%3==0)

{

p1.add(index.get(i));

}

else if(i%3==1)

{

p2.add(index.get(i));

}

else if(i%3==2)

{

p3.add(index.get(i));

}

}

//看牌

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1,map);

show("小忽悠",p2,map);

show("超级无敌大忽悠",p3,map);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

{

System.out.print(map.get(Dp)+" ");

}

}

public static void show(String name,TreeSet arr,HashMap map)

{

System.out.print(name+"牌如下: ");

for(var ele:arr)

{

System.out.print(map.get(ele)+" ");

}

System.out.println();

}

}

{

System.out.print(arr.get(i)+" ");

}

System.out.println();

}

完整代码和演示结果

完整代码:

import java.util.ArrayList;

import java.util.Collections;

import java.util.Scanner;

public class Main

{

public static void main(String[] args)

{

//创建一个牌盒,也就是定义一个集合对象,用ArrayList集合实现

ArrayList poker=new ArrayList();

//往牌盒里面装牌

/*

◆2,◆3,◆4.....◆k,◆A

♣2,...

♥2,...

♠2,...

小王 , 大王

*/

//定义花色数组

String[] colors={"◆","♣","♥","♠"};

//定义点数数组

String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

//将所有牌组合放入牌盒

for(String col:colors)

{

for(String num:numbers)

{

poker.add(col+num);

}

}

//将最后两张大小王放入牌盒

poker.add("小王");

poker.add("大王");

//洗牌---把牌打乱

Collections.shuffle(poker);

//发牌--》遍历牌盒,给三个玩家发牌

ArrayList p1=new ArrayList<>();

ArrayList p2=new ArrayList<>();

ArrayList p3=new ArrayList();

//留下三张底牌

ArrayList dp=new ArrayList<>();

//将牌分发

for(int i=0;i

{

if(i>=poker.size()-3)

{

dp.add(poker.get(i));

}

else if(i%3==0)

{

p1.add(poker.get(i));

}

else if(i%3==1)

{

p2.add(poker.get(i));

}

else if(i%3==2)

{

p3.add(poker.get(i));

}

}

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1);

show("小忽悠",p2);

show("超级无敌大忽悠",p3);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

System.out.print(Dp+" ");

}

public static void show(String name,ArrayList arr)

{

System.out.print(name+"的牌: ");

for(int i=0;i

{

System.out.print(arr.get(i)+" ");

}

System.out.println();

}

}

哈希表优化

区别: 上面是用一个字符串数组来存储所有牌的组合,并且也是对字符串数组进行洗牌操作,较为麻烦,而用哈希表之后,我们可以对每一张牌对应的索引进行洗牌操作。

并且上面也要求了,对每一位玩家的牌进行排序,而上面我们并没有实现,因此下面我们使用Treeset来保存每一位玩家所拿到的牌,确保完成了排序功能

思路:

代码实现:

import java.util.*;

public class Main

{

public static void main(String[] args)

{

//HashMap存放索引和对应的牌

HashMap map=new HashMap<>();

//存放索引的数组

ArrayList index=new ArrayList<>();

//花色和点数数组

String[] colors={"◆","♣","♥","♠"};

String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

//发牌

int pos=0;//索引

for(var col:colors)

{

for(var num:numbers)

{

map.put(pos,col+num);

index.add(pos);

pos++;

}

}

//对索引执行洗牌操作

Collections.shuffle(index);

//发牌

TreeSet p1=new TreeSet<>();

TreeSet p2=new TreeSet<>();

TreeSet p3=new TreeSet<>();

TreeSet dp=new TreeSet<>();

for(int i=0;i

{

if(i>=index.size()-3)

{

dp.add(index.get(i));

}

else if(i%3==0)

{

p1.add(index.get(i));

}

else if(i%3==1)

{

p2.add(index.get(i));

}

else if(i%3==2)

{

p3.add(index.get(i));

}

}

//看牌

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1,map);

show("小忽悠",p2,map);

show("超级无敌大忽悠",p3,map);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

{

System.out.print(map.get(Dp)+" ");

}

}

public static void show(String name,TreeSet arr,HashMap map)

{

System.out.print(name+"牌如下: ");

for(var ele:arr)

{

System.out.print(map.get(ele)+" ");

}

System.out.println();

}

}

{

if(i>=poker.size()-3)

{

dp.add(poker.get(i));

}

else if(i%3==0)

{

p1.add(poker.get(i));

}

else if(i%3==1)

{

p2.add(poker.get(i));

}

else if(i%3==2)

{

p3.add(poker.get(i));

}

}

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1);

show("小忽悠",p2);

show("超级无敌大忽悠",p3);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

System.out.print(Dp+" ");

}

public static void show(String name,ArrayList arr)

{

System.out.print(name+"的牌: ");

for(int i=0;i

{

System.out.print(arr.get(i)+" ");

}

System.out.println();

}

}

哈希表优化

区别: 上面是用一个字符串数组来存储所有牌的组合,并且也是对字符串数组进行洗牌操作,较为麻烦,而用哈希表之后,我们可以对每一张牌对应的索引进行洗牌操作。

并且上面也要求了,对每一位玩家的牌进行排序,而上面我们并没有实现,因此下面我们使用Treeset来保存每一位玩家所拿到的牌,确保完成了排序功能

思路:

代码实现:

import java.util.*;

public class Main

{

public static void main(String[] args)

{

//HashMap存放索引和对应的牌

HashMap map=new HashMap<>();

//存放索引的数组

ArrayList index=new ArrayList<>();

//花色和点数数组

String[] colors={"◆","♣","♥","♠"};

String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

//发牌

int pos=0;//索引

for(var col:colors)

{

for(var num:numbers)

{

map.put(pos,col+num);

index.add(pos);

pos++;

}

}

//对索引执行洗牌操作

Collections.shuffle(index);

//发牌

TreeSet p1=new TreeSet<>();

TreeSet p2=new TreeSet<>();

TreeSet p3=new TreeSet<>();

TreeSet dp=new TreeSet<>();

for(int i=0;i

{

if(i>=index.size()-3)

{

dp.add(index.get(i));

}

else if(i%3==0)

{

p1.add(index.get(i));

}

else if(i%3==1)

{

p2.add(index.get(i));

}

else if(i%3==2)

{

p3.add(index.get(i));

}

}

//看牌

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1,map);

show("小忽悠",p2,map);

show("超级无敌大忽悠",p3,map);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

{

System.out.print(map.get(Dp)+" ");

}

}

public static void show(String name,TreeSet arr,HashMap map)

{

System.out.print(name+"牌如下: ");

for(var ele:arr)

{

System.out.print(map.get(ele)+" ");

}

System.out.println();

}

}

{

System.out.print(arr.get(i)+" ");

}

System.out.println();

}

}

哈希表优化

区别: 上面是用一个字符串数组来存储所有牌的组合,并且也是对字符串数组进行洗牌操作,较为麻烦,而用哈希表之后,我们可以对每一张牌对应的索引进行洗牌操作。

并且上面也要求了,对每一位玩家的牌进行排序,而上面我们并没有实现,因此下面我们使用Treeset来保存每一位玩家所拿到的牌,确保完成了排序功能

思路:

代码实现:

import java.util.*;

public class Main

{

public static void main(String[] args)

{

//HashMap存放索引和对应的牌

HashMap map=new HashMap<>();

//存放索引的数组

ArrayList index=new ArrayList<>();

//花色和点数数组

String[] colors={"◆","♣","♥","♠"};

String[] numbers={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

//发牌

int pos=0;//索引

for(var col:colors)

{

for(var num:numbers)

{

map.put(pos,col+num);

index.add(pos);

pos++;

}

}

//对索引执行洗牌操作

Collections.shuffle(index);

//发牌

TreeSet p1=new TreeSet<>();

TreeSet p2=new TreeSet<>();

TreeSet p3=new TreeSet<>();

TreeSet dp=new TreeSet<>();

for(int i=0;i

{

if(i>=index.size()-3)

{

dp.add(index.get(i));

}

else if(i%3==0)

{

p1.add(index.get(i));

}

else if(i%3==1)

{

p2.add(index.get(i));

}

else if(i%3==2)

{

p3.add(index.get(i));

}

}

//看牌

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1,map);

show("小忽悠",p2,map);

show("超级无敌大忽悠",p3,map);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

{

System.out.print(map.get(Dp)+" ");

}

}

public static void show(String name,TreeSet arr,HashMap map)

{

System.out.print(name+"牌如下: ");

for(var ele:arr)

{

System.out.print(map.get(ele)+" ");

}

System.out.println();

}

}

{

if(i>=index.size()-3)

{

dp.add(index.get(i));

}

else if(i%3==0)

{

p1.add(index.get(i));

}

else if(i%3==1)

{

p2.add(index.get(i));

}

else if(i%3==2)

{

p3.add(index.get(i));

}

}

//看牌

//看牌---分别展示三位玩家自己的牌

show("大忽悠",p1,map);

show("小忽悠",p2,map);

show("超级无敌大忽悠",p3,map);

//展示底牌

System.out.print("底牌如下: ");

for(var Dp:dp)

{

System.out.print(map.get(Dp)+" ");

}

}

public static void show(String name,TreeSet arr,HashMap map)

{

System.out.print(name+"牌如下: ");

for(var ele:arr)

{

System.out.print(map.get(ele)+" ");

}

System.out.println();

}

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:临沂邮政快递物流查询单号(临沂邮政快递网点查询)
下一篇:MybatisPlus代码生成器的使用方法详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~