【顺序表使用练习】发牌游戏
- 1. 介绍游戏
- 2. 实现52张牌
- 3. 实现洗牌
- 4. 实现发牌
- 5. 效果展示
1. 介绍游戏
首先先为大家介绍一下设计要求
- 实现52张牌(这里排除大小王)
- 洗牌——打乱牌的顺序
- 发牌——3个人,1人5张牌
2. 实现52张牌
- 创建Code对象
- 创建codelist顺序表,储存52张牌
下面是代码演示:
public class Code {//创建Code类
String suit;//定义花色
int number;//定义数字
//创建一个数组储存4种花色
public static final String[] suits={"❤","♠","♦","♣"};
@Override
//重写输出格式
public String toString() {
return "Code{" +
suit +
number +
'}';
}
public Code() {
}
public Code(String suit, int number) {
this.suit=suit;
this.number=number;
}
public static List<Code> buycode(){
//初始化牌面
List<Code> codeList=new ArrayList<>();//创建顺序表
for (int i = 0; i < 13; i++) {
for (int j = 0; j < 4; j++) {
String suit=suits[j];
int number=i;
Code code=new Code(suit,number);//创建code
codeList.add(code);//将每次创建的code都add尾插到顺序表中
//实现52张牌的存储
}
}
return codeList;
}
3. 实现洗牌
如何实现洗牌? 第一时间大部分人都会想到随机数,那么如何使用随机数实现洗牌呢?
下面是代码实现
public static List<Code> randcode(List<Code> codeList){
//洗牌
Random random=new Random();
for (int i = codeList.size()-1; i>0; i--) {
int a=random.nextInt(i);
swap(codeList,i,a);
}
return codeList;
}
4. 实现发牌
创建一个二维顺序表h
h1 h2 h3 分别是三个人被分到的牌
下面是代码实现
public static List<List<Code>> play(List<Code> codeList){
List<Code> h1=new ArrayList<>();
List<Code> h2=new ArrayList<>();
List<Code> h3=new ArrayList<>();
List<List<Code>> h=new ArrayList<>();
h.add(h1);
h.add(h2);
h.add(h3);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 5; j++) {
Code code=codeList.remove(0);
h.get(i).add(code);
}
}
return h;
}
5. 效果展示
main函数
public class Test {
public static void main(String[] args) {
Code code=new Code();
//初始化牌面
List<Code> codeList=code.buycode();
System.out.println("初始化牌面:"+codeList);
//洗牌
System.out.println("洗牌:"+code.randcode(codeList));
//发牌
List<List<Code>> h=code.play(codeList);
System.out.println("发牌:");
for (int i = 0; i < h.size(); i++) {
System.out.println(h.get(i));
}
}
}