I'm a beginner in Java and want to improve and learn.
This is a game called "Acey Ducey":
The dealer shows you two cards. You decide whether you want the dealer to pick a third card or not. If the third card is between the two cards, then you win, otherwise you lose.
This is the main file:
import model.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// load
Player player = new Player();
List<Card> deck = new ArrayList<>();
for (CardColor color : CardColor.values()) {
for (CardNumber number : CardNumber.values()) {
Card card = new Card(number, color);
deck.add(card);
}
}
while(true) {
System.out.println("---------------------");
System.out.println("remaining cards " + deck.size());
if (deck.size() < 2 ) {
System.out.println("Game over. Not enough cards");
break;
}
if (player.getMoney() <= 0) {
System.out.println("Game over. Not enough money");
break;
}
// pick two
Card firstPick = Dealer.pickRandomCardFrom(deck);
Card secondPick = Dealer.pickRandomCardFrom(deck);
Card thirdPick = new Card();
//show two cards
System.out.println("First card ");
System.out.println(firstPick.getCardNumber() + " of " + firstPick.getCardColor());
System.out.println("----");
System.out.println("Second card ");
System.out.println(secondPick.getCardNumber() + " of " + secondPick.getCardColor());
System.out.println("Do you want to set?");
String userInput = getUserInput();
if (userInput.equals("y")) {
System.out.println("How much money do you want to bet?");
System.out.println("You got that amount of money " + player.getMoney());
int playerBet = Integer.parseInt(getUserInput());
try {
player.withdrawMoney(playerBet);
} catch (Exception e) {
System.out.println("You don't have enough money");
e.printStackTrace();
break;
}
thirdPick = Dealer.pickRandomCardFrom(deck);
int compareThis = thirdPick.getCardNumberValue();
int maxValue = Math.max(firstPick.getCardNumberValue(), secondPick.getCardNumberValue());
int minValue = Math.min(firstPick.getCardNumberValue(), secondPick.getCardNumberValue());
System.out.println("Result:");
System.out.println(thirdPick.getCardNumber() + " of " + thirdPick.getCardColor());
if (compareThis >= minValue && compareThis <= maxValue) {
System.out.println("You won!");
try{
player.depositMoney(2 * playerBet);
} catch (Exception e) {
System.out.println("Invalid amount of money");
e.printStackTrace();
}
} else {
System.out.println("though luck!");
}
}
}
}
private static String getUserInput() {
Scanner scanner = new Scanner(System.in);
return scanner.nextLine();
}
}
In the folder "model" I got these classes:
Card
package model;
public class Card {
private CardNumber number;
private CardColor color;
public Card() {};
public Card(CardNumber number, CardColor color) {
this.number = number;
this.color = color;
}
public CardNumber getNumber() {
return number;
}
public String getCardNumber() {
return number.getCardNumber();
}
public int getCardNumberValue() {
return number.getCardValue();
}
public void setNumber(CardNumber number) {
this.number = number;
}
public CardColor getColor() {
return color;
}
public String getCardColor() {
return color.getCardColor();
}
public void setColor(CardColor color) {
this.color = color;
}
}
Card Color (=card suite)
package model;
public enum CardColor {
HEART("Heart"),
SPADE("Spade"),
CLUB("Club"),
DIAMOND("Diamond");
private String color;
private CardColor(String color) {
this.color = color;
}
public String getCardColor() {
return color;
}
}
Card Number
package model;
public enum CardNumber {
ACE("Ace", 1),
TWO("Two", 2),
THREE("Three", 3),
FOUR("Four", 4),
FIVE("Five", 5),
SIX("Six", 6),
SEVEN("Seven", 7),
EIGHT("Eight", 8),
NINE("Nine", 9),
TEN("Ten", 10),
JACK("Jack", 11),
QUEEN("Queen", 12),
KING("King", 13);
private String number;
private int value;
private CardNumber(String number, int value) {
this.number = number;
this.value = value;
}
public String getCardNumber(){return number;}
public int getCardValue() {return value;}
}
Dealer
package model;
import java.util.List;
public class Dealer {
public static Card pickRandomCardFrom(List<Card> deck) {
int randomNumber = (int)Math.floor(Math.random() * deck.size());
Card pickedCard = deck.get(randomNumber);
deck.remove(randomNumber);
return pickedCard;
}
}
Player
package model;
public class Player {
private int money = 100;
public int getMoney() {
return money;
}
public void setMoney(int money) throws Exception {
if (money > 0) {
this.money = money;
} else {
throw new Exception();
}
}
public void withdrawMoney(int amount) throws Exception {
if (amount <= this.money) {
this.money -= amount;
return;
}
throw new Exception();
}
public void depositMoney(int amount) throws Exception {
if (amount > 0) {
this.money += amount;
return;
}
throw new Exception();
}
}