HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavaModerate

Playing Card & Deck Class in Java

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
playingdeckcardjavaclass

Problem

I am currently learning how to write code in Java. To improve my understanding of OOP concepts, I am creating a playing card and deck class. The deck has the functionality of drawing and shuffling. I also attach an image to my card class (using JavaFX). Am I doing it right?

I am also planning to extend this class into a fully functional card game with JavaFX GUI.

Since I am self-learning, any kind of feedback would be greatly appreciated.

SuitEnum Class

public enum SuitEnum {
    DIAMONDS, CLUBS, HEARTS, SPADES;

}


RankEnumClass

public enum RankEnum {
    TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE;

}


Card Class

```
import javafx.scene.image.*;

public class Card implements Comparable{

private static final String IMAGE_FOLDER_DIR = "image";
private static final String IMAGE_FORMAT = ".png";
private static final String BACK_IMAGE_DIR = ("image/back_image.png");

private Image cardImage;
private Image backImage;

private SuitEnum suit;
private RankEnum rank;

public Card(){

}

public Card(SuitEnum suit, RankEnum rank){
this.suit = suit;
this.rank = rank;

String location = generateImageLocation();

try {
cardImage = new Image(location);

} catch (Exception ex) {
System.out.println(String.format("cannot load image from: (%s)", location));
cardImage = null;
}

try {
backImage = new Image(BACK_IMAGE_DIR);
} catch (Exception ex){
System.out.println(String.format("cannot load image from: (%s)", BACK_IMAGE_DIR));
backImage = null;
}
}

public SuitEnum getSuit() {
return suit;
}

public RankEnum getRank() {
return rank;
}

public Image getCardImage(){
return cardImage;
}

private String generateImageLocation(){

StringBuilder sb = new StringBuilder();

sb.append(IMAGE_FOLDER_DIR);
sb.append("/");

sb.append(suit.toString());
sb.append("_");
sb.append(rank.toString());

sb.append(

Solution

-
Use interfaces as much as you can.

private List deck = new ArrayList<>();


-
Checked Exceptions are bad, don't use them

public class EmptyDeckException extends RuntimeException{
 ..
}

public Card draw(){ // no throws 
}


-
You don't need to write a shuffle method yourself, there is a one in the JDK already

List numbers = new ArrayList<>();

for (int i = low; i <= high; i++){
    numbers.add(i);
}
Collections.shuffle(numbers);

Code Snippets

private List<Card> deck = new ArrayList<>();
public class EmptyDeckException extends RuntimeException{
 ..
}

public Card draw(){ // no throws 
}
List<Integer> numbers = new ArrayList<>();

for (int i = low; i <= high; i++){
    numbers.add(i);
}
Collections.shuffle(numbers);

Context

StackExchange Code Review Q#93662, answer score: 10

Revisions (0)

No revisions yet.