用Java写斗地主前期工作的一些小想法
目前我们并不是要实现一个游戏,而是要对斗地主游戏做准备,主要是做牌+洗牌+发牌+给发的牌进行排序。在这个过程中我希望通过集中方式来实现:
1. 使用集合+方法+字符串的运用完成以上功能
2. 使用面向对象思想,对1做改进,主要是对其排序的改进,从而理解面向对象的真正意义
3. 对2中代码再次进行简化,增强其可读性,同样的实现,可以用更简洁更省内存的方法来实现代码
实现1中的代码
package test02;
import java.util.*;
public class Entry {
public static void main(String[] args) {
//1.创建牌盒
List<String> porkers = new ArrayList<>();
//创建花色和点数
String[] colors = {
"♥","♠","♣","♦"};
String[] pointNumbers = {
"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
//将牌插入集合中
for (String point : pointNumbers) {
for (String color : colors) {
porkers.add(color+point);
}
}
//添加大小王
porkers.add("大王");
porkers.add("小王");
//遍历porker
showPorker(porkers);
//打乱扑克:多线程下要考虑线程安全
Collections.shuffle(porkers);
System.out.println("打乱后的扑克牌:");
showPorker(porkers);
//2.创建三个玩家集合和一个底牌集合
List<String> play1 = new ArrayList<>();
List<String> play2 = new ArrayList<>();
List<String> play3 = new ArrayList<>();
List<String> bottomPorkers = new ArrayList<>();
//发牌
for (int i = 0; i < porkers.size(); i++) {
String s = porkers.get(i);
if (i>=porkers.size()-3){
//获取底牌
bottomPorkers.add(s);
}else if (i%3==0){
//剩下的牌中可以被3整除的索引值给第一位玩家
play1.add(porkers.get(i));
} else if (i%3==1) {
//剩下的牌中可以被3整除余1的索引值给第一位玩家
play2.add(s);
}else if (i%3==2){
play3.add(s);
}
}
//查看每一位玩家的牌
System.out.println("玩家1的牌");
showPorker(play1);
System.out.println("玩家2的牌");
showPorker(play2);
System.out.println("玩家3的牌");
showPorker(play3);
System.out.println("底牌");
showPorker(bottomPorkers);
//随机选择地主,将底牌给地主玩家
Random ra = new Random();
int dz = ra.nextInt(3)+1;
switch (dz){
case 1:
System.out.println("选中玩家1为地主");
play1.addAll(bottomPorkers);
break;
case 2:
System.out.println