diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f58ad3d --- /dev/null +++ b/.gitignore @@ -0,0 +1,54 @@ +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +target + +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Maven +.idea/**/jarRepositories.xml \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..5c98b42 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..a023490 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/description.html b/.idea/description.html new file mode 100644 index 0000000..db5f129 --- /dev/null +++ b/.idea/description.html @@ -0,0 +1 @@ +Simple Java application that includes a class with main() method \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..611e7fe --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b649543 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..1393576 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/project-template.xml b/.idea/project-template.xml new file mode 100644 index 0000000..1f08b88 --- /dev/null +++ b/.idea/project-template.xml @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8a67587 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Kevin Viglucci + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..0a33100 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +# java-card-game + +A designer gave the following design for a card game to a developer: + +> Implement the first phase of a card game in which a dealer shuffles a deck of cards and then deals a hand of 5 cards to each player. +> +> The running program should produce the below output: +> +> ``` +> Nick has the below cards in their hand: +> Ten of Diamonds +> Four of Clubs +> Queen of Hearts +> Three of Diamonds +> Nine of Diamonds +> Tommy has the below cards in their hand: +> King of Hearts +> Six of Diamonds +> Ace of Clubs +> Queen of Spades +> Two of Hearts +> ``` +> +> Additionally, all tests should pass. + +The developer has opened a pull request with their implementation of the card game. Your task is to review their pull request. + +## Branches + +- The `main` branch has the skeleton implementation of the card game. +- The `shuffle-and-deal` branch has the developer's implementation of the above design. diff --git a/java-card-game.iml b/java-card-game.iml new file mode 100644 index 0000000..6c60e5f --- /dev/null +++ b/java-card-game.iml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..828793b --- /dev/null +++ b/pom.xml @@ -0,0 +1,49 @@ + + + 4.0.0 + + groupId + java-card-game + 1.0.0-SNAPSHOT + jar + + + UTF-8 + + + + + org.junit.jupiter + junit-jupiter + 5.7.1 + test + + + org.assertj + assertj-core + 3.19.0 + test + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 11 + 11 + + + + org.apache.maven.plugins + maven-surefire-plugin + 3.0.0-M5 + + + + \ No newline at end of file diff --git a/src/main/java/com/example/main/Main.java b/src/main/java/com/example/main/Main.java new file mode 100644 index 0000000..89d99b0 --- /dev/null +++ b/src/main/java/com/example/main/Main.java @@ -0,0 +1,50 @@ +package com.example.main; + +import com.example.main.model.Card; +import com.example.main.model.Dealer; +import com.example.main.model.Deck; +import com.example.main.model.Player; + +public class Main { + + /** + * Produces the below output: + * + * Nick has the below cards in their hand: + * Ten of Diamonds + * Four of Clubs + * Queen of Hearts + * Three of Diamonds + * Nine of Diamonds + * + * Tommy has the below cards in their hand: + * King of Hearts + * Six of Diamonds + * Ace of Clubs + * Queen of Spades + * Two of Hearts + */ + public static void main(String[] args) { + Deck deck = Deck.generate(); + Dealer dealer = new Dealer(deck); + + dealer.shuffleDeck(); + + Player playerOne = new Player("Nick"); + playerOne.replaceHand(dealer.dealCards(5)); + + Player playerTwo = new Player("Tommy"); + playerTwo.replaceHand(dealer.dealCards(5)); + + printPlayersHand(playerOne); + printPlayersHand(playerTwo); + } + + private static void printPlayersHand(Player player) { + System.out.println(player.getName() + " has the below cards in their hand:"); + for (Card card : player.getHand()) { + System.out.println(" " + card.getDisplayText()); + } + System.out.print("\n"); + } +} diff --git a/src/main/java/com/example/main/model/Card.java b/src/main/java/com/example/main/model/Card.java new file mode 100644 index 0000000..93fc3b6 --- /dev/null +++ b/src/main/java/com/example/main/model/Card.java @@ -0,0 +1,40 @@ +package com.example.main.model; + +public class Card { + + public Card(String suit, String faceValue) { + + } + + /** + * Returns the suit of the card + * + * Ex: Hearts + * + * @return String + */ + public String getSuit() { + + } + + /** + * Returns the face value of the card + * + * Ex: King + * @return String + */ + public String getFaceValue() { + + } + + /** + * Returns the human readable string representation of the card. + * + * Ex: King of Hearts + * + * @return String + */ + public String getDisplayText() { + + } +} diff --git a/src/main/java/com/example/main/model/Dealer.java b/src/main/java/com/example/main/model/Dealer.java new file mode 100644 index 0000000..11c753c --- /dev/null +++ b/src/main/java/com/example/main/model/Dealer.java @@ -0,0 +1,34 @@ +package com.example.main.model; + +import java.util.List; + +public class Dealer { + + public Dealer(Deck deck) { + + } + + /** + * Shuffles the dealers deck. + */ + public void shuffleDeck() { + + } + + /** + * Retrieves the deck. + * @return Deck + */ + public Deck getDeck() { + + } + + /** + * Returns a list of cards from the dealers deck. + * @param numberOfCards the number of cards to include in the dealt cards list. + * @return List + */ + public List dealCards(int numberOfCards) { + + } +} diff --git a/src/main/java/com/example/main/model/Deck.java b/src/main/java/com/example/main/model/Deck.java new file mode 100644 index 0000000..7ae976e --- /dev/null +++ b/src/main/java/com/example/main/model/Deck.java @@ -0,0 +1,54 @@ +package com.example.main.model; + +import java.util.Stack; + +public class Deck { + + /** + * Generates a Deck. + * @return Deck + */ + public static Deck generate() { + + } + + /** + * Adds the given card to the deck. + * @return void + */ + public void addCard(Card card) { + + } + + /** + * Retrieves the next card from the Deck. + * @return + */ + public Card getNext() { + + } + + /** + * Returns the number of cards in the deck. + * @return int + */ + public int size() { + + } + + /** + * "Peeks" the top card in the deck without removing the card from the deck. + * @return Card + */ + public Card peekCard() { + + } + + /** + * Returns the cards in the deck. + * @return Stack + */ + public Stack getCards() { + + } +} diff --git a/src/main/java/com/example/main/model/Player.java b/src/main/java/com/example/main/model/Player.java new file mode 100644 index 0000000..f294af8 --- /dev/null +++ b/src/main/java/com/example/main/model/Player.java @@ -0,0 +1,46 @@ +package com.example.main.model; + +import java.util.List; + +public class Player { + + /** + * Create a player given a name. + * @param name + */ + public Player(String name) { + + } + + /** + * Adds a card to the players hand. + * @param card + */ + public void addCardToHand(Card card) { + + } + + /** + * Returns the list of cards in the players hand. + * @return + */ + public List getHand() { + + } + + /** + * Replaces the players hand with a new list of cards. + * @param newHand + */ + public void replaceHand(List newHand) { + + } + + /** + * Returns the players name; + * @return + */ + public String getName() { + + } +} diff --git a/src/test/java/com/example/main/model/CardTest.java b/src/test/java/com/example/main/model/CardTest.java new file mode 100644 index 0000000..47b2206 --- /dev/null +++ b/src/test/java/com/example/main/model/CardTest.java @@ -0,0 +1,5 @@ +package com.example.main.model; + +public class CardTest { + +} diff --git a/src/test/java/com/example/main/model/DealerTest.java b/src/test/java/com/example/main/model/DealerTest.java new file mode 100644 index 0000000..f7a3ef6 --- /dev/null +++ b/src/test/java/com/example/main/model/DealerTest.java @@ -0,0 +1,5 @@ +package com.example.main.model; + +class DealerTest { + +} diff --git a/src/test/java/com/example/main/model/DeckTest.java b/src/test/java/com/example/main/model/DeckTest.java new file mode 100644 index 0000000..f606add --- /dev/null +++ b/src/test/java/com/example/main/model/DeckTest.java @@ -0,0 +1,5 @@ +package com.example.main.model; + +class DeckTest { + +} diff --git a/src/test/java/com/example/main/model/PlayerTest.java b/src/test/java/com/example/main/model/PlayerTest.java new file mode 100644 index 0000000..66fbbfe --- /dev/null +++ b/src/test/java/com/example/main/model/PlayerTest.java @@ -0,0 +1,5 @@ +package com.example.main.model; + +class PlayerTest { + +}