commit d178e5b0c35980182c6cff6584ef164a74a92307
Author: William Lindholm <william_lindholm@outlook.com>
Date: Fri, 20 Jan 2023 19:23:13 +0100
Finished project 1
Diffstat:
9 files changed, 276 insertions(+), 0 deletions(-)
diff --git a/OOP2023_a22willi_assignment1/.classpath b/OOP2023_a22willi_assignment1/.classpath
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-17">
+ <attributes>
+ <attribute name="module" value="true"/>
+ </attributes>
+ </classpathentry>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/OOP2023_a22willi_assignment1/.gitignore b/OOP2023_a22willi_assignment1/.gitignore
@@ -0,0 +1 @@
+/bin/
diff --git a/OOP2023_a22willi_assignment1/.project b/OOP2023_a22willi_assignment1/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>OOP2023_a22willi_assignment1</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/OOP2023_a22willi_assignment1/.settings/org.eclipse.core.resources.prefs b/OOP2023_a22willi_assignment1/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/OOP2023_a22willi_assignment1/.settings/org.eclipse.jdt.core.prefs b/OOP2023_a22willi_assignment1/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,14 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=17
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=17
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=17
diff --git a/OOP2023_a22willi_assignment1/src/lucky_card/Card.java b/OOP2023_a22willi_assignment1/src/lucky_card/Card.java
@@ -0,0 +1,70 @@
+package lucky_card;
+
+public class Card {
+ private String suit;
+ private String rank;
+ private int value;
+
+ //constructor
+ public Card(String suit, String rank) {
+ this.suit = suit;
+ this.rank = rank;
+ value = generateCardValue();
+ }
+
+ //return the cards suit
+ String getSuit() {
+ return this.suit;
+ }
+
+ //return the cards rank
+ String getRank() {
+ return this.rank;
+ }
+
+ //return the cards value
+ int getValue() {
+ return this.value;
+ }
+
+ //calculate each cards value based on suit and rank
+ private int generateCardValue() {
+ int value = 0; //holds the current cards value
+
+ //add "bonus" based on card suit
+ switch(suit) {
+ case ("Diamonds"):
+ value += 4;
+ break;
+ case ("Clubs"):
+ value += 6;
+ break;
+ case ("Hearts"):
+ value += 8;
+ break;
+ case ("Spades"):
+ value += 10;
+ break;
+ }
+
+ //add value based on cards "base value"
+ switch(rank) {
+ case("Ace"):
+ value += 1;
+ break;
+ case("Jack"):
+ value += 11;
+ break;
+ case("Queen"):
+ value += 12;
+ break;
+ case("King"):
+ value += 13;
+ break;
+ default:
+ value+= Integer.parseInt(rank);
+
+ }
+ return value;
+ }
+}
diff --git a/OOP2023_a22willi_assignment1/src/lucky_card/Deck.java b/OOP2023_a22willi_assignment1/src/lucky_card/Deck.java
@@ -0,0 +1,51 @@
+package lucky_card;
+
+import java.util.ArrayList;
+import java.util.Collections;
+
+public class Deck {
+ //arrayList where all cards are stored
+ private ArrayList<Card> deck = new ArrayList<Card>();
+
+ //used to build cards
+ private String[] suits = {"Clubs", "Diamonds", "Hearts", "Spades"};
+ private String[] ranks = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};
+
+ //constructor
+ public Deck() {
+ //generate deck
+ for (String suit : suits) {
+ for (String rank : ranks) {
+ //create new card object for every suit and rank
+ deck.add(new Card(suit, rank));
+ }
+ }
+ shuffle();
+ }
+
+ //shuffle the deck
+ void shuffle() {
+ //shuffle deck
+ Collections.shuffle(deck);
+ }
+
+ //add card to the end of the deck.
+ void addToBottom(Card card) {
+ deck.add(0, card);
+ }
+
+ //retrieve a card from deck at specified position (cardNumber)
+ Card getCard(int cardNumber) {
+ return deck.get(cardNumber);
+ }
+
+ //return and remove the first card in deck
+ Card pop() {
+ return deck.remove(this.getLength()-1);
+ }
+
+ //return the amount of cards in the deck.
+ int getLength() {
+ return deck.size();
+ }
+}
diff --git a/OOP2023_a22willi_assignment1/src/lucky_card/Game.java b/OOP2023_a22willi_assignment1/src/lucky_card/Game.java
@@ -0,0 +1,103 @@
+package lucky_card;
+
+import java.util.ArrayList;
+import java.util.Scanner;
+
+public class Game {
+ private Deck deck;
+ private boolean playing;
+ private Scanner inputHandler;
+
+
+ //constructor
+ public Game() {
+ deck = new Deck();
+ playing = true;
+ inputHandler = new Scanner(System.in);
+ }
+
+ //start the game
+ public void play() {
+ //greet user
+ System.out.println("Welcome to Lucky Card game by William Lindholm\n");
+
+ //main game loop
+ while (playing) {
+
+ //display starting round information
+ System.out.println("\n------- Playing a game round");
+
+ //draw three cards from top of deck
+ ArrayList<Card> drawnCards = new ArrayList<Card>();
+ for (int i = 0; i < 3; i++) {
+ drawnCards.add(deck.pop());
+ }
+
+ //re-add the drawn cards
+ for (Card card : drawnCards) {
+ deck.addToBottom(card);
+ }
+
+ //display cards and determine if user won.
+ displayCards(drawnCards);
+
+ //check if user has won and display result
+ displayResult(isWin(drawnCards));
+
+ //ask if user wants to play again
+ System.out.print("\n=========> Press ENTER to play again or \"q\" to quit: ");
+
+ //handle the user input, if user presses q exit game
+ handleInput();
+ }
+ }
+
+ //Handles the user input
+ private void handleInput() {
+ //handle input
+ String userinput = inputHandler.nextLine();
+ System.out.println(userinput);
+ if (userinput.equals("q")) {
+ System.out.println("\nThank you for playing and welcome back!");
+ playing = false;
+ }
+ }
+
+ //display cards and determine if user won
+ private void displayCards(ArrayList<Card> cards) {
+ //display cards
+ for (int i = 0; i < cards.size(); i++) {
+ Card card = cards.get(i); //get current card
+
+ //print out cards suit, rank and value
+ System.out.println("Card " + i + ": " + card.getSuit()
+ + " -> " + card.getRank() + " Value = " + card.getValue());
+ }
+ }
+
+ private void displayResult(boolean hasWon) {
+ //display win
+ if (hasWon) {
+ System.out.println("You win!");
+ } else {
+ System.out.println("You lose!");
+ }
+ }
+
+ private boolean isWin(ArrayList<Card> cards) {
+ //grab values from drawnCards
+ int[] cardValues = new int[cards.size()];
+ for (int i = 0; i < cards.size(); i++) {
+ cardValues[i] = cards.get(i).getValue();
+ }
+
+ //compare values from drawnCards
+ if ((cardValues[cardValues.length-1] > cardValues[0]
+ && cardValues[cardValues.length-1] < cardValues[1])
+ || (cardValues[cardValues.length-1] < cardValues[0]
+ && cardValues[cardValues.length-1] > cardValues[1])){
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/OOP2023_a22willi_assignment1/src/lucky_card/Main.java b/OOP2023_a22willi_assignment1/src/lucky_card/Main.java
@@ -0,0 +1,8 @@
+package lucky_card;
+
+public class Main {
+ public static void main(String[] args) {
+ Game luckyCards = new Game();
+ luckyCards.play();
+ }
+}