基本上,项目描述要求用户创建一个匹配的游戏,包括:
1
public class Card {
private final int cardValue;
private boolean faceUp;
public Card(int value) {
cardValue = value;
faceUp = false;
}
public int getValue() {
return cardValue;
}
public boolean isFaceUp() {
return faceUp;
}
public void setFaceUp(boolean input) {
faceUp = input;
}
public static void printBoard(Card[][] cards) {
System.out.println("\t\t1\t2\t3\t4");
System.out.println("\t____________");
for(int i = 0; i < cards.length; i++) {
System.out.println((i + 1) + "\t|\t");
for(int j = 0; j < cards[0].length; j++)
if(cards[i][j].isFaceUp()) {
System.out.print(cards[i][j].getValue() + "\t"); }
else
System.out.println("*\t");
}
System.out.println();
}
}
2
public class CreateBoard {
public static Card[][] createBoard() {
Card[][] board = new Card[4][4];
for(int i = 1; i <= 8; i++) {
for(int j = 1; j <= 2; j++) {
boolean boardLocation = false;
while(!boardLocation) {
int row = (int)(Math.random() * 4);
int column = (int)(Math.random() * 4);
if(board[row] == null && board[column] == null) {
boardLocation = true;
board[row][column] = new Card(i);
}
}
}
}
return board;
}
}
3
public class Game {
public static boolean wonGame(Card[][] board) {
for(int i = 0; i < board.length; i++) {
for(int j = 0; j < board[0].length; j++) {
if(!board[i][j].isFaceUp())
return false;
}
}
return true;
}
}
最后,主要课程:
public class GameDriver {
public static void main(String[] args) {
Card[][] board = CreateBoard.createBoard();
Scanner keyboard = new Scanner(System.in);
System.out.println("Starting Game...");
while(!Game.wonGame(board)) {
Card.printBoard(board);
System.out.println("Enter X-Coordinate #1 (1-4): ");
int column1 = keyboard.nextInt();
System.out.println("Enter Y-Coordinate #1 (1-4): ");
int row1 = keyboard.nextInt();
System.out.println("Enter X-Coordinate #2 (1-4): ");
int column2 = keyboard.nextInt();
System.out.println("Enter Y-Coordinate #2 (1-4): ");
int row2 = keyboard.nextInt();
Card card1 = board[row1][column1];
Card card2 = board[row2][column2];
if(card1.getValue() == card2.getValue() && !(row1 == row2 && column1 == column2))
{
card1.setFaceUp(true);
card2.setFaceUp(true);
}
else if(row1 == row2 && column1 == column2)
{
System.out.println("Points selected are the same, try again");
}
else
{
System.out.println(card1.getValue() + " and " + card2.getValue() + " do not match");
}
}
Card.printBoard(board);
}
}
代码运行完美,但我对如何在卡上添加西装几乎一无所知。我只需要在板上的每张卡上都有两套西装(例如红心和钻石,所以如果代码产生两个4,一个会得到心脏,一个会得到钻石)我知道我可以使用枚举,但我不喜欢真的很了解它们是如何工作的。非常感谢帮助!
答案 0 :(得分:1)
这是guide to enums我建议您阅读。这是快速阅读,很多例子。 Java教程通常非常有用。
以下是您可以使用的一些代码。
public enum Suit {
HEARTS
,SPADES
,DIAMONDS
,CLUBS
}
public class Card {
private final int cardValue;
private final Suit suit;
private boolean faceUp;
public Card(int value, Suit suit) {
this.cardValue = value;
this.faceUp = false;
this.suit = suit;
}
// ...snip...
public Suit getSuit() {
return this.suit;
}
}
你可以通过以下方式构建卡片:
Card myCard = new Card(3, Suit.HEARTS);
我强烈建议您不采用仅使用一组char值的建议。为什么?一堆原因。首先,如果您使用enum
类型,您就知道有人不会意外地向您传递无效值;错字无法搞砸整个程序。另一方面,您不需要在任何地方传递可接受的字符列表,或者更糟糕的是 - 每次都检查每个可能的值的switch-case或if语句,如果有人使用了无效值,则抛出错误。< / p>
然后有一个事实是,如果你每枚枚举值只使用一个字符,那么枚举值就不能有有意义的名字(有人应该如何弄清楚'C'
和'S'
是什么意思? ),Suit.CLUBS
或Suit.SPADES
中的歧义很少(并且,请记住,代码是为人而不是计算机编写的。非常可疑没有经验足以反驳的人。)