控制台游戏斗地主Java版(首版)
在论坛上看到有人用java写了个控制台游戏,但是有点bug,就在解决bug之余稍微优化了一下代码记录在这。时间关系目前第一版流程到了发牌看牌,后续有时间再继续开发抢地主和真正的斗地主。
import java.util.*;
public class PokerGame {
private static List<Integer> list;
private static Map<Integer, String> pokers;
private static Map<Integer, Integer> pokerMap;
private static String[] huase = {"梅花", "黑桃", "红桃", "方片"};
private static String[] shuzi = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
private static Integer[] actualNumArr = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
/**
* 初始化
*/
public static void init(){
list = new ArrayList();
pokers = new HashMap<>();
pokerMap = new HashMap<>();
int num = 0;
for (String str : huase) {
for (int i=0;i<shuzi.length;i++){
String poke = str + shuzi[i];
pokers.put(num, poke);
list.add(num);
if (i<13){
pokerMap.put(num,actualNumArr[i]);
}
num++;
}
}
pokers.put(52, "小王");
list.add(52);
pokerMap.put(52,17);
pokers.put(53, "大王");
list.add(53);
pokerMap.put(53,16);
}
public static void main(String[] args) {
init();
begin();
}
public static void begin(){
//洗牌
Collections.shuffle(list);
List<Integer> xiaohua = new ArrayList<>();
List<Integer> xiaohei = new ArrayList<>();
List<Integer> xiaowang = new ArrayList<>();
List<Integer> dipai = new ArrayList<>();
// 发牌
for (int i =0; i < list.size();i++){
Integer pokeNUM=list.get(i);
if (i>=list.size()-3){
dipai.add(pokeNUM);
}else if (i%3==0){
xiaohua.add(pokeNUM);
}else if (i%3==1){
xiaohei.add(pokeNUM);
}else if (i%3==2){
xiaowang.add(pokeNUM);
}
}
System.out.println("小花:"+ lookAndSort(xiaohua));
System.out.println("小黑:"+ lookAndSort(xiaohei));
System.out.println("小王: "+lookAndSort(xiaowang));
System.out.println("底牌:"+lookAndSort(dipai));
}
/**
* 看牌及将牌按照从小到大排序
* @param nums
* @return
*/
private static String lookAndSort(List<Integer> nums){
Map<Integer,Integer> pokerMap = numsToMap(nums);
List<Integer> sortList = sort(pokerMap);
StringBuilder sb = new StringBuilder();
for (Integer num :sortList){
String poker= pokers.get(num);
sb.append(poker+" ");
}
String str = sb.toString();
return str.trim();
}
/**
* 根据得到的牌索引集合获取每个索引实际的牌面
* @param nums
* @return
*/
public static Map<Integer,Integer> numsToMap(List<Integer> nums){
Map<Integer,Integer> map = new HashMap<>();
for (Integer num : nums) {
map.put(num,pokerMap.get(num));
}
return map;
}
/**
* 按照牌面实际大小排序
* @param map
* @return
*/
public static List<Integer> sort( Map<Integer,Integer> map){
List<Integer> resList = new ArrayList<>();
List<Map.Entry<Integer,Integer>> list = new ArrayList<Map.Entry<Integer,Integer>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
public int compare(Map.Entry<Integer, Integer> o1,
Map.Entry<Integer, Integer> o2) {
return (o1.getValue() - o2.getValue());
}
});
for (Map.Entry<Integer, Integer> integerIntegerEntry : list) {
resList.add(integerIntegerEntry.getKey());
}
return resList;
}
}