模拟斗地主游戏:
分析:
1、准备一副扑克牌(Map 键 从 1~54),54张,
组成 数字(13个数字2~10 和字母 j q k A ) 和 花色(4种)
组排规则:从数字和字母获取每一个数字和字母跟4种花色分组组成不同的牌
将牌添加map集合中, 键从小到大。开始=1 每次组成一张牌 键++
大王和小王组成一幅牌。
2、将牌打乱使用工具collections
最后3张保留底牌。产生一个随机地主。
循环牌,每3个是一组。
4、排序调用COllections工具类.sort。
5、遍历所有玩家的牌。迭代器遍历玩家集合。
开发步骤:
1、准备一副扑克牌。定义方法
2、打乱扑克牌的顺序 定义方法
3、将扑克牌发给3个玩家 ,剩余3张作为底牌 定义方法
4、玩家对自己牌排序 定义方法
5、看牌 定义方法
代码实现:
package cn.shichuang.demo;
import java.util.*;
public class ddz {
//制作牌函数
public static void pyMean(Map<Integer, String> map, List<String> list){
String[] s1 = {"梅花","红桃","方块","黑桃"};
String[] s2 = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
map.put(1,"大王");
map.put(2,"小王");
int a=3;
while(a<=54){
for(int i=0;i<s1.length;i++){
for(int j=0;j<s2.length;j++){
String c = s1[i]+s2[j];
map.put(a,c);
a++;
if(a>54){
break;
}
}
}
}
System.out.println("牌已经取出");
}
//菜单函数
public static void pyCanDan(){
Scanner x = new Scanner(System.in);
Map<Integer,String> map = new HashMap();
List<String> list = new ArrayList<>();
List<String> list1 = new ArrayList<>();
List<String> list2 = new ArrayList<>();
List<String> list3 = new ArrayList<>();
int b=0;
System.out.println("=====开始斗地主=====");
while(true){
System.out.println("=====操作=====");
System.out.println("1 取出扑克");
System.out.println("2 洗牌");
System.out.println("3 摸牌");
System.out.println("4 看牌");
System.out.println("0 退出");
System.out.println("请选择操作");
int c =x.nextInt();
switch (c){
case 0:
b=1;
break;
case 1:
pyMean(map,list);
findAll(map,list);
break;
case 2:
clearAll(list);
break;
case 3:
sentAll(list,list1,list2,list3);
break;
case 4:
lookCode(list,list1,list2,list3);
break;
}
if(b==1){
break;
}
}
}
//看牌函数
public static void lookCode(List<String> list,List<String> list1,List<String> list2,List<String> list3){
Collections.sort(list1);
System.out.println("\n小白的牌为:");
Interde(list1);
Collections.sort(list2);
System.out.println("\n小红的牌为:");
Interde(list2);
Collections.sort(list3);
System.out.println("\n小民的牌为:");
Interde(list3);
System.out.println();
}
//集合迭代器
public static void Interde(Collection<?> c){
Iterator<?> ad = c.iterator();
while(ad.hasNext()){
System.out.print(ad.next()+" ");
}
}
//洗牌函数
public static void clearAll(List<String> list){
Collections.shuffle(list);
System.out.println("洗牌完毕");
}
//发牌函数
public static void sentAll(List<String> list,List<String> list1,List<String> list2,List<String> list3){
Scanner x = new Scanner(System.in);
for(int i=0;i<list.size()-3;){
list1.add(list.get(i));
list2.add(list.get(i+1));
list3.add(list.get(i+2));
i+=3;
}
System.out.println("开始抢地主");
System.out.println("1 小白抢地主");
System.out.println("2 小红抢地主");
System.out.println("3 小民抢地主");
int c = x.nextInt();
if(c<1 || c>3){
System.out.println("输入有误请重新输入");
c = x.nextInt();
}
for(int i=list.size()-3;i<list.size();i++){
if(c==1){
list1.add(list.get(i));
}
if(c==2){
list2.add(list.get(i));
}
if(c==3){
list3.add(list.get(i));
}
}
}
//查看牌
public static void findAll(Map<Integer,String> map,List list){
//1、获取键值对映射对象,保存到单列集合中。
Set<Map.Entry<Integer,String>> keyset= map.entrySet();
//2、循环遍历单列集合
Iterator<Map.Entry<Integer,String>> it= keyset.iterator();
//3、获取集合中单个的映射对象
while(it.hasNext()){
Map.Entry<Integer,String> entrys= it.next();
//4、从映射对象中获取键,和 值
Integer key= entrys.getKey();
String value=entrys.getValue();
list.add(value);
//System.out.println(key+"对应的值"+value);
}
}
public static void main(String[] args) {
pyCanDan();
}
}