patternjavaModerate
Playing Card & Deck Class in Java
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
RankEnumClass
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(
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.
-
Checked Exceptions are bad, don't use them
-
You don't need to write a shuffle method yourself, there is a one in the JDK already
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.