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

我的代码,帮忙看看哪里有待改进?

//Card
import java.util.Arrays;
import java.util.List;

public class Card implements Comparable<Card> {
	private String colour;
	private String point;
	public final static List<String> cardColour = Arrays.asList("方片", "梅花", "红桃", "黑桃");
	public final static List<String> cardPoint = Arrays.asList("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q",
			"k", "A");

	public Card() {

	}

	public Card(String colour, String point) {
		this.colour = colour;
		this.point = point;
	}

	public String getColour() {
		return colour;
	}

	public String getPoint() {
		return point;
	}

	// 不然输出的都是地址
	@Override
	public String toString() {
		return "[" + colour + " " + point + "]";
	}

	@Override
	public int compareTo(Card o) {
		if (cardPoint.indexOf(this.point) == cardPoint.indexOf(o.point)) {
			return Integer.valueOf(cardColour.indexOf(this.colour))
					.compareTo(Integer.valueOf(cardColour.indexOf(o.colour)));
		} else {
			return Integer.valueOf(cardPoint.indexOf(this.point))
					.compareTo(Integer.valueOf(cardPoint.indexOf(o.point)));
		}
	}
}
//player
import java.util.ArrayList;
import java.util.List;

public class Player {
	private int id;
	private String name;
	private List<Card> palyCards;

	public Player() {

	}

	public Player(int id, String name) {
		this.id = id;
		this.name = name;
		palyCards = new ArrayList<Card>();
	}

	public int getId() {
		return id;
	}

	public String getName() {
		return name;
	}

	public List<Card> getPalyCards() {
		return palyCards;
	}
}
//game
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Game {
	private Scanner scanner = new Scanner(System.in);
	private int playerNum = 2;
	private int cardNum = 2;
	private static List<Card> cardList;
	private static List<Player> playerList;

	private Game() {
		cardList = new ArrayList<Card>();
		playerList = new ArrayList<Player>();
	}

	// 顺序的初始牌
	private void newCard() {
		String[] colourGame = { "黑桃", "红桃", "梅花", "方片" };
		String[] pointGame = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "k", "A" };
		Card newcard;
		for (int i = 0; i < colourGame.length; i++) {
			for (int j = 0; j < pointGame.length; j++) {
				newcard = new Card(colourGame[i], pointGame[j]);
				cardList.add(newcard);
				// System.out.println(newcard.getColour() + newcard.getPoint());
			}
		}
	}

	// 洗牌
	private void Shuffle() {
		System.out.println("--------洗牌--------");
		Collections.shuffle(cardList);
	}

	// 获取玩家
	private void gamePlayer() {
		int num = 0;
		int id = 0;
		while (num < playerNum) {
			try {
				System.out.println("请输入第" + (num + 1) + "个玩家的ID:");
				id = scanner.nextInt();

			} catch (Exception e) {
				scanner.next();
				System.out.println("输入错误,请输入正整数!!");
				continue;
			}
			System.out.println("请输入第" + (num + 1) + "个玩家的姓名:");
			String name;
			name = scanner.next();
			Player player = new Player(id, name);
			playerList.add(player);
			System.out.println("添加了ID:" + player.getId() + "的玩家:" + player.getName());
			num++;
		}
	}

	// 发牌
	private void cardDeal() {
		System.out.println("--------开始发牌--------");
		for (int i = 0; i < cardNum; i++) {
			for (int j = 0; j < playerNum; j++) {
				Card cd = cardList.get(i * playerNum + j);
				playerList.get(j).getPalyCards().add(cd);
				// System.out.println(playerList.get(j).getPalyCards());
			}
		}
		System.out.println("--------发牌结束--------");
	}

	// 游戏进行
	private void play() {
		System.out.println("--------游戏开始--------");
		int winPlayer = 0;
		Card maxCard = playerList.get(0).getPalyCards().get(0);
		for (int i = 0; i < playerNum; i++) {
			Collections.sort(playerList.get(i).getPalyCards());
			Collections.reverse(playerList.get(i).getPalyCards());
			System.out.println("玩家:" + playerList.get(i).getName() + " 的手牌为:" + playerList.get(i).getPalyCards());
			if (maxCard.compareTo(playerList.get(i).getPalyCards().get(0)) < 0) {
				maxCard = playerList.get(i).getPalyCards().get(0);
				winPlayer = i;
			}
		}
		System.out.println("恭喜!!" + "ID:" + playerList.get(winPlayer).getId() + " 的玩家:"
				+ playerList.get(winPlayer).getName() + " 获得胜利!");
		System.out.println("最大的牌为:" + playerList.get(winPlayer).getPalyCards().get(0));
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Game game = new Game();
		game.gamePlayer();
		game.newCard();
		game.Shuffle();
		game.cardDeal();
		game.play();
	}

}


提问者:狼女 2016-06-22 18:39

个回答

  • 狼女
    2016-06-27 10:31:03

    已修改id重复不检测

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import java.util.Scanner;
    
    public class Game {
    	private Scanner scanner = new Scanner(System.in);
    	private int playerNum = 2;
    	private int cardNum = 2;
    	private static List<Card> cardList;
    	private static List<Player> playerList;
    
    	private Game() {
    		cardList = new ArrayList<Card>();
    		playerList = new ArrayList<Player>();
    	}
    
    	// 顺序的初始牌
    	private void newCard() {
    		String[] colourGame = { "黑桃", "红桃", "梅花", "方片" };
    		String[] pointGame = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "k", "A" };
    		Card newcard;
    		for (int i = 0; i < colourGame.length; i++) {
    			for (int j = 0; j < pointGame.length; j++) {
    				newcard = new Card(colourGame[i], pointGame[j]);
    				cardList.add(newcard);
    				// System.out.println(newcard.getColour() + newcard.getPoint());
    			}
    		}
    	}
    
    	// 洗牌
    	private void Shuffle() {
    		System.out.println("--------洗牌--------");
    		Collections.shuffle(cardList);
    	}
    
    	// 获取玩家
    	private void gamePlayer() {
    		int num = 0;
    		int id = 0;
    		while (num < playerNum) {
    			try {
    				System.out.println("请输入第" + (num + 1) + "个玩家的ID:");
    				id = scanner.nextInt();
    				Player playerID=new Player();
    				playerID.setId(id);
    				if (!playerList.contains(playerID)) {
    					System.out.println("请输入第" + (num + 1) + "个玩家的姓名:");
    					String name;
    					name = scanner.next();
    					Player player = new Player(id, name);
    					playerList.add(player);
    					System.out.println("添加了ID:" + player.getId() + "的玩家:" + player.getName());
    					num++;
    				}else {
    					System.out.println("您输入的ID已被占用,请重新输入!!");
    					continue;
    				}
    
    			} catch (Exception e) {
    				scanner.next();
    				System.out.println("输入错误,请输入正整数!!");
    				continue;
    			}
    		}
    	}
    
    	// 发牌
    	private void cardDeal() {
    		System.out.println("--------开始发牌--------");
    		for (int i = 0; i < cardNum; i++) {
    			for (int j = 0; j < playerNum; j++) {
    				Card cd = cardList.get(i * playerNum + j);
    				playerList.get(j).getPalyCards().add(cd);
    				// System.out.println(playerList.get(j).getPalyCards());
    			}
    		}
    		System.out.println("--------发牌结束--------");
    	}
    
    	// 游戏进行
    	private void play() {
    		System.out.println("--------游戏开始--------");
    		int winPlayer = 0;
    		Card maxCard = playerList.get(0).getPalyCards().get(0);
    		for (int i = 0; i < playerNum; i++) {
    			Collections.sort(playerList.get(i).getPalyCards());
    			Collections.reverse(playerList.get(i).getPalyCards());
    			System.out.println("玩家:" + playerList.get(i).getName() + " 的手牌为:" + playerList.get(i).getPalyCards());
    			if (maxCard.compareTo(playerList.get(i).getPalyCards().get(0)) < 0) {
    				maxCard = playerList.get(i).getPalyCards().get(0);
    				winPlayer = i;
    			}
    		}
    		System.out.println("恭喜!!" + "ID:" + playerList.get(winPlayer).getId() + " 的玩家:"
    				+ playerList.get(winPlayer).getName() + " 获得胜利!");
    		System.out.println("最大的牌为:" + playerList.get(winPlayer).getPalyCards().get(0));
    	}
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Game game = new Game();
    		game.gamePlayer();
    		game.newCard();
    		game.Shuffle();
    		game.cardDeal();
    		game.play();
    	}
    
    }


  • 我真的不知道要取什么名字
    2016-06-23 23:33:59

    同学,咱输入重复的id也不会被检测。还有就是我们输出扑克牌是换行的。和老师的效果不一样啊。