文章目录
一、模拟斗地主
代码示例:
package itheima_05;
import java.util.ArrayList;
import java.util.Collections;
public class pokerDemo {
public static void main(String[] args) {
//创建一个牌盒,也就是一个集合对象,用ArrayList集合实现
ArrayList<String>array = new ArrayList<String>();
//往牌盒装牌
/*
♦2,♦3...♦k,♦A
♥2,♥3...
♣2,♣3,,,
♠2,♠3,,,
小王
大王
*/
//定义花色数组
String[] colors = {"♦","♥","♣","♠"};
//定义点数数组
String[] numbers = {"2","3","4","5","6","7","8","9","J","Q","K","A"};
//利用增强for进行拼接,也可以用嵌套
for(String color:colors){
for(String number:numbers){
array.add(color+number);//拼接储存到牌盒中
}
}
array.add("小王");
array.add("大王");
//开始洗牌,也就是把牌打散,用collertions的shuffle()方法实现
Collections.shuffle(array);
//发牌,遍历集合,给三个玩家发牌
//构建三个玩家对象各自用于存储发的牌
ArrayList<String>lhcArray = new ArrayList<String>();
ArrayList<String>dfbbArray = new ArrayList<String>();
ArrayList<String>whArray = new ArrayList<String>();
ArrayList<String>dpArray = new ArrayList<String>();//三张底牌
for(int i=0;i<array.size();i++){
String poker = array.get(i);
if(i>= array.size()-3){
dpArray.add(poker);
}else if(i%3==0){//利用对三取余一次对三名玩家发牌
lhcArray.add(poker);
}else if(i%3==1){
dfbbArray.add(poker);
}else if(i%3==2){
whArray.add(poker);
}
}
//看牌,三名玩家各自遍历自己的牌,三张底牌
lookpoker("令狐冲",lhcArray);
lookpoker("东方不败",dfbbArray);
lookpoker("温华",whArray);
lookpoker("底牌",dpArray);
}
public static void lookpoker(String name,ArrayList<String>array){//需要调用的相关数据参数
System.out.print(name + "的牌是:");
for(String poker:array){
System.out.print(poker + " ");
}
System.out.println();
}
}
二、模拟斗地主升级版
代码示例:
package itheima_04;
import java.util.*;
public class PokerDemo {
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 = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//从0开始HashMap里面储存编号,并储存对应的牌。同时往ArrayList里面储存编号
int index = 0;
for(String number: numbers){//这里嵌套数字一定要在外层,
for(String color:colors){
hm.put(index,color+number);//每一个编号都对应了一张牌,再把编号储存起来,再分发编号找对应的牌
array.add(index);
index++;
}
}
hm.put(index,"小王");//上面的for结尾判断时多加了一次编号
array.add(index);
index++;
hm.put(index,"大王");
array.add(index);
//洗牌(洗的是编号),用collertions的shuffle()方法实现
Collections.shuffle(array);
//发牌(发的也是编号,为了保证编号是排序的,创建TreeSet集合接收)
TreeSet<Integer> lhc = new TreeSet<Integer>();
TreeSet<Integer>dfbb = new TreeSet<Integer>();
TreeSet<Integer>wh = new TreeSet<Integer>();
TreeSet<Integer>dp = new TreeSet<Integer>();
for(int i=0;i<array.size();i++){
if(i>=array.size()-3){
dp.add(array.get(i));
}else if(i%3==0){
lhc.add(array.get(i));
}else if(i%3==1){
dfbb.add(array.get(i));
}else if(i%3==2){
wh.add(array.get(i));
}
}
//看牌,遍历三位玩家的编号,并且找对应的值
lookPoker("令狐冲",lhc,hm);
lookPoker("东方不败",dfbb,hm);
lookPoker("温华",wh,hm);
lookPoker("底牌",dp,hm);
}
//定义方法看牌(遍历Treeset集合,获取编号,到hashmap集合中找对应的牌
public static void lookPoker(String name,TreeSet<Integer>ts,HashMap<Integer,String>hm){//需要用到编号和值
System.out.print(name + "的牌是:");
for(Integer key:ts){
String poker = hm.get(key);//遍历时找编号对应的牌
System.out.print(poker +" ");//找到对应的牌之后输出
}
System.out.println();
}
}