问答详情
源自:7-1 简易扑克牌游戏

写了两三个小时写出来了JAVA入门第三季的扑克牌游戏 大神来看看如何优化 感觉我的代码太复杂了

package pokergame;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.InputMismatchException;
import java.util.Scanner;

public class bidaxiao {
	static boolean flag = true;
	static HashMap<Integer, String> poker = new HashMap<Integer, String>();// 放扑克
	static ArrayList<Integer> xuhao = new ArrayList<Integer>();// 放排序
	static HashMap<Integer, String> player = new HashMap<Integer, String>();
	static String[] dianshu = { "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3" };
	static String[] huase = { "♠", "♥", "♣", "♦" };
	static ArrayList<Integer> player1 = new ArrayList<Integer>();//玩家1的牌
	static ArrayList<Integer> player2 = new ArrayList<Integer>();//玩家2的牌
	static ArrayList<Integer> number = new ArrayList<Integer>();//存放玩家序号

	public static void main(String[] args) {
		int index = 0;
		for (String ds : dianshu) {
			for (String hs : huase) {
				poker.put(index, hs + ds);
				xuhao.add(index);
				index++;
			}
		}//做牌
		Collections.shuffle(xuhao);//打乱牌序
		System.out.println("------------创建玩家------------");
		startgame();//进入游戏
		fapai();//开始发牌
		start();//开始游戏比大小
		lookpoker(player.get(number.get(0)), player1, poker);//看牌
		lookpoker(player.get(number.get(1)), player2, poker);//看牌
	}

	public static void startgame() {

		int i = 1;
		while (flag) {
			try {
				Scanner input = new Scanner(System.in);
				System.out.println("请输入第" + i + "位玩家的ID和姓名:");
				System.out.println("输入ID:");
				int a = input.nextInt();
				number.add(a);
				System.out.println("输入姓名:");
				String name = input.next();
				player.put(a, name);
				i++;
			} catch (InputMismatchException e) {
				System.out.println("请输入整数类型的ID!");
			}
			if (i == 3) {
				flag = false;
			}
		}
		for (Integer Key : player.keySet()) {
			System.out.println("----欢迎玩家:" + player.get(Key));
		}
	}

	public static void fapai() {
		System.out.println("---------开始发牌...---------");
		for (int o = 0; o < 4; o++) {
			if (o % 2 == 0) {
				player1.add(xuhao.get(o));
				System.out.println("---玩家:" + player.get(number.get(0)) + "-拿牌");
			} else if (o % 2 == 1) {
				player2.add(xuhao.get(o));
				System.out.println("---玩家:" + player.get(number.get(1)) + "-拿牌");
			}
		}
		System.out.println("---------发牌结束!---------");
	}

	public static void start() {
		System.out.println("---------开始游戏...---------");
		Collections.sort(player1);
		Collections.sort(player2);
		System.out.println(player.get(number.get(0)) + "最大的手牌为:" + poker.get(player1.get(0)));
		System.out.println(player.get(number.get(1)) + "最大的手牌为:" + poker.get(player2.get(0)));
		if (player1.get(0) > player2.get(0)) {
			System.out.println("---------玩家:" + player.get(2) + "获胜!---------");
		} else {
			System.out.println("---------玩家:" + player.get(1) + "获胜!---------");
		}

	}

	public static void lookpoker(String name, ArrayList<Integer> playernum, HashMap<Integer, String> poker) {
		System.out.println("玩家各自的手牌为:	");
		System.out.print(name + ":");
		for (Integer key : playernum) {
			String value = poker.get(key);
			System.out.print(value + " ");
		}
		System.out.println();
	}

}

运行效果如图

http://img.mukewang.com/598453ca00016c1604220586.jpg

提问者:不负旧时日 2017-08-04 19:00

个回答

  • define_ray
    2017-08-28 14:01:08

    我感觉比较的时候不对吧?黑桃>梅花(但是h<m),sort之后m大,你的比较结果是:梅花2>黑桃2吧。

    还有同色(如黑桃J、黑桃Q、黑桃K)怎么比较?(按照sort:Q>K>J)

  • qq_半夏微伤_0
    2017-08-09 20:57:28

    命名感觉不规范啊