OOP-Projects-Java

Log | Files | Refs | README

commit d178e5b0c35980182c6cff6584ef164a74a92307
Author: William Lindholm <william_lindholm@outlook.com>
Date:   Fri, 20 Jan 2023 19:23:13 +0100

Finished project 1

Diffstat:
AOOP2023_a22willi_assignment1/.classpath | 10++++++++++
AOOP2023_a22willi_assignment1/.gitignore | 1+
AOOP2023_a22willi_assignment1/.project | 17+++++++++++++++++
AOOP2023_a22willi_assignment1/.settings/org.eclipse.core.resources.prefs | 2++
AOOP2023_a22willi_assignment1/.settings/org.eclipse.jdt.core.prefs | 14++++++++++++++
AOOP2023_a22willi_assignment1/src/lucky_card/Card.java | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AOOP2023_a22willi_assignment1/src/lucky_card/Deck.java | 51+++++++++++++++++++++++++++++++++++++++++++++++++++
AOOP2023_a22willi_assignment1/src/lucky_card/Game.java | 103+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AOOP2023_a22willi_assignment1/src/lucky_card/Main.java | 8++++++++
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(); + } +}