Initial commit
This commit is contained in:
8
.idea/.gitignore
generated
vendored
Normal file
8
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
# Datasource local storage ignored files
|
||||
/dataSources/
|
||||
/dataSources.local.xml
|
||||
13
.idea/compiler.xml
generated
Normal file
13
.idea/compiler.xml
generated
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="CompilerConfiguration">
|
||||
<annotationProcessing>
|
||||
<profile name="Maven default annotation processors profile" enabled="true">
|
||||
<sourceOutputDir name="target/generated-sources/annotations" />
|
||||
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
|
||||
<outputRelativeToContentRoot value="true" />
|
||||
<module name="MauMau" />
|
||||
</profile>
|
||||
</annotationProcessing>
|
||||
</component>
|
||||
</project>
|
||||
7
.idea/encodings.xml
generated
Normal file
7
.idea/encodings.xml
generated
Normal file
@@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Encoding">
|
||||
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
|
||||
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
|
||||
</component>
|
||||
</project>
|
||||
20
.idea/jarRepositories.xml
generated
Normal file
20
.idea/jarRepositories.xml
generated
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RemoteRepositoriesConfiguration">
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Central Repository" />
|
||||
<option name="url" value="https://repo.maven.apache.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="central" />
|
||||
<option name="name" value="Maven Central repository" />
|
||||
<option name="url" value="https://repo1.maven.org/maven2" />
|
||||
</remote-repository>
|
||||
<remote-repository>
|
||||
<option name="id" value="jboss.community" />
|
||||
<option name="name" value="JBoss Community repository" />
|
||||
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
|
||||
</remote-repository>
|
||||
</component>
|
||||
</project>
|
||||
14
.idea/misc.xml
generated
Normal file
14
.idea/misc.xml
generated
Normal file
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||
<component name="MavenProjectsManager">
|
||||
<option name="originalFiles">
|
||||
<list>
|
||||
<option value="$PROJECT_DIR$/pom.xml" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK">
|
||||
<output url="file://$PROJECT_DIR$/out" />
|
||||
</component>
|
||||
</project>
|
||||
17
pom.xml
Normal file
17
pom.xml
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.tman</groupId>
|
||||
<artifactId>MauMau</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>17</maven.compiler.source>
|
||||
<maven.compiler.target>17</maven.compiler.target>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
|
||||
</project>
|
||||
20
src/main/java/mau/mau/Card.java
Normal file
20
src/main/java/mau/mau/Card.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package mau.mau;
|
||||
|
||||
public class Card {
|
||||
|
||||
private final TYPENUM CARD_TYPE;
|
||||
private final VALUENUM CARD_VALUE;
|
||||
|
||||
public Card(TYPENUM type, VALUENUM value) {
|
||||
this.CARD_TYPE = type;
|
||||
this.CARD_VALUE = value;
|
||||
}
|
||||
|
||||
public TYPENUM getType() {
|
||||
return CARD_TYPE;
|
||||
}
|
||||
|
||||
public VALUENUM getValue() {
|
||||
return CARD_VALUE;
|
||||
}
|
||||
}
|
||||
64
src/main/java/mau/mau/Dealer.java
Normal file
64
src/main/java/mau/mau/Dealer.java
Normal file
@@ -0,0 +1,64 @@
|
||||
package mau.mau;
|
||||
|
||||
import mau.mau.players.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Dealer {
|
||||
private Deck deck;
|
||||
|
||||
public Dealer(Deck deck) {
|
||||
this.deck = deck;
|
||||
deck.setDeck(shuffleDeck(this.deck.getDeck()));
|
||||
}
|
||||
|
||||
public List<Card> shuffleDeck(List<Card> unshuffledDeck) {
|
||||
List<Card> shuffledDeck = new ArrayList<>();
|
||||
while (unshuffledDeck.size() > 0) {
|
||||
int randomIndex = (int) (Math.random() * unshuffledDeck.size());
|
||||
shuffledDeck.add(unshuffledDeck.get(randomIndex));
|
||||
unshuffledDeck.remove(randomIndex);
|
||||
}
|
||||
return shuffledDeck;
|
||||
}
|
||||
|
||||
public List<Card> getHand() {
|
||||
List<Card> deck = this.deck.getDeck();
|
||||
List<Card> hand = new ArrayList<>();
|
||||
for (int i = 0; i < 7; i++) {
|
||||
hand.add(deck.get(i));
|
||||
deck.remove(i);
|
||||
}
|
||||
return hand;
|
||||
}
|
||||
|
||||
public void dealCards(List<Player> players) {
|
||||
for (Player player : players) {
|
||||
player.setHand(getHand());
|
||||
}
|
||||
}
|
||||
|
||||
public Card getInitialCard() {
|
||||
List<Card> deck = this.deck.getDeck();
|
||||
Card card = deck.get(0);
|
||||
this.deck.addUsedCard(card);
|
||||
return card;
|
||||
}
|
||||
|
||||
public List<Card> drawCards(int cardsToDraw) {
|
||||
if (deck.deckIsEmpty(cardsToDraw)) {
|
||||
deck.setDeck(shuffleDeck(deck.getUsedCards()));
|
||||
deck.setUsedCards(new ArrayList<>());
|
||||
}
|
||||
List<Card> cards = new ArrayList<>();
|
||||
for (int i = 0; i < cardsToDraw; i++) {
|
||||
cards.add(deck.drawCard());
|
||||
}
|
||||
return cards;
|
||||
}
|
||||
|
||||
public Card drawCard() {
|
||||
return drawCards(1).get(0);
|
||||
}
|
||||
}
|
||||
54
src/main/java/mau/mau/Deck.java
Normal file
54
src/main/java/mau/mau/Deck.java
Normal file
@@ -0,0 +1,54 @@
|
||||
package mau.mau;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Deck {
|
||||
|
||||
private List<Card> deck = new ArrayList<>();
|
||||
private List<Card> usedCards = new ArrayList<>();
|
||||
|
||||
public Deck() {
|
||||
for (TYPENUM type : TYPENUM.values()) {
|
||||
if(type == TYPENUM.JOKER) {
|
||||
deck.add(new Card(type, VALUENUM.TWO));
|
||||
deck.add(new Card(type, VALUENUM.THREE));
|
||||
} else {
|
||||
for (VALUENUM value : VALUENUM.values()) {
|
||||
deck.add(new Card(type, value));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public List<Card> getDeck() {
|
||||
return deck;
|
||||
}
|
||||
|
||||
public void setDeck(List<Card> deck){
|
||||
this.deck = deck;
|
||||
}
|
||||
|
||||
public List<Card> getUsedCards(){
|
||||
return usedCards;
|
||||
}
|
||||
|
||||
public void setUsedCards(List<Card> usedCards){
|
||||
this.usedCards = usedCards;
|
||||
}
|
||||
|
||||
public Card drawCard(){
|
||||
Card card = deck.get(0);
|
||||
deck.remove(0);
|
||||
usedCards.add(card);
|
||||
return card;
|
||||
}
|
||||
|
||||
public boolean deckIsEmpty(int cardsToDraw){
|
||||
return deck.size() < cardsToDraw;
|
||||
}
|
||||
|
||||
public void addUsedCard(Card card){
|
||||
usedCards.add(card);
|
||||
}
|
||||
}
|
||||
82
src/main/java/mau/mau/Game.java
Normal file
82
src/main/java/mau/mau/Game.java
Normal file
@@ -0,0 +1,82 @@
|
||||
package mau.mau;
|
||||
|
||||
import mau.mau.players.Bot;
|
||||
import mau.mau.players.Human;
|
||||
import mau.mau.players.Player;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Game {
|
||||
private Card currentCard;
|
||||
private Deck deck = new Deck();
|
||||
private Dealer dealer;
|
||||
private Human human;
|
||||
private Referee referee = new Referee();
|
||||
private List<Player> players = new ArrayList<>();
|
||||
|
||||
public Game() {
|
||||
setupGame();
|
||||
playGame();
|
||||
}
|
||||
|
||||
private void setupGame() {
|
||||
dealer = new Dealer(deck);
|
||||
human = new Human(dealer);
|
||||
players.add(human);
|
||||
players.add(new Bot(dealer));
|
||||
dealer.dealCards(players);
|
||||
currentCard = dealer.getInitialCard();
|
||||
}
|
||||
|
||||
private void playGame() {
|
||||
while (!human.handIsEmpty()) {
|
||||
if (players.size() == 1) {
|
||||
System.out.println("Game has ended");
|
||||
break;
|
||||
}
|
||||
for (Player player : players) {
|
||||
System.out.println("Current card is " + currentCard.getType() + " " + currentCard.getValue());
|
||||
Card card = player.getPlay(currentCard);
|
||||
if (card != null) {
|
||||
playCard(card);
|
||||
}
|
||||
}
|
||||
System.out.println(deck.getDeck().size() + " cards left in deck");
|
||||
players.removeIf(Player::handIsEmpty);
|
||||
}
|
||||
}
|
||||
|
||||
public void playCard(Card card) {
|
||||
currentCard = card;
|
||||
deck.addUsedCard(card);
|
||||
}
|
||||
|
||||
public void handleSpecialCard(Card card) {
|
||||
TYPENUM cardType = card.getType();
|
||||
VALUENUM cardValue = card.getValue();
|
||||
if (cardType == TYPENUM.JOKER) {
|
||||
// Draw 5 cards
|
||||
return;
|
||||
}
|
||||
switch (cardValue) {
|
||||
case TWO:
|
||||
// Draw 2 cards
|
||||
break;
|
||||
case SEVEN:
|
||||
case KING:
|
||||
// Keep turn
|
||||
break;
|
||||
case EIGHT:
|
||||
// Skip next player
|
||||
break;
|
||||
case JACK:
|
||||
// Draw 5 cards
|
||||
// Change card type
|
||||
break;
|
||||
case ACE:
|
||||
// Change direction
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
7
src/main/java/mau/mau/MauMau.java
Normal file
7
src/main/java/mau/mau/MauMau.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package mau.mau;
|
||||
|
||||
public class MauMau {
|
||||
public static void main(String[] args) {
|
||||
Game game = new Game();
|
||||
}
|
||||
}
|
||||
14
src/main/java/mau/mau/Referee.java
Normal file
14
src/main/java/mau/mau/Referee.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package mau.mau;
|
||||
|
||||
public class Referee {
|
||||
public static boolean isValidMove(Card currentCard, Card playedCard) {
|
||||
TYPENUM currentCardType = currentCard.getType();
|
||||
VALUENUM currentCardValue = currentCard.getValue();
|
||||
TYPENUM playedCardType = playedCard.getType();
|
||||
VALUENUM playedCardValue = playedCard.getValue();
|
||||
|
||||
return playedCardType == TYPENUM.JOKER
|
||||
|| playedCardType == currentCardType
|
||||
|| playedCardValue == currentCardValue;
|
||||
}
|
||||
}
|
||||
5
src/main/java/mau/mau/TYPENUM.java
Normal file
5
src/main/java/mau/mau/TYPENUM.java
Normal file
@@ -0,0 +1,5 @@
|
||||
package mau.mau;
|
||||
|
||||
public enum TYPENUM {
|
||||
SPADES, HEARTS, DIAMOND, CLUBS, JOKER;
|
||||
}
|
||||
12
src/main/java/mau/mau/Utils.java
Normal file
12
src/main/java/mau/mau/Utils.java
Normal file
@@ -0,0 +1,12 @@
|
||||
package mau.mau;
|
||||
|
||||
public class Utils {
|
||||
public static boolean isNumeric(String str) {
|
||||
try {
|
||||
int i = Integer.parseInt(str);
|
||||
} catch(NumberFormatException nfe) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
21
src/main/java/mau/mau/VALUENUM.java
Normal file
21
src/main/java/mau/mau/VALUENUM.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package mau.mau;
|
||||
|
||||
public enum VALUENUM {
|
||||
TWO (2), THREE (3),
|
||||
FOUR (4), FIVE (5),
|
||||
SIX (6), SEVEN (7),
|
||||
EIGHT (8), NINE (9),
|
||||
TEN (10), JACK (11),
|
||||
QUEEN (12), KING (13),
|
||||
ACE (13);
|
||||
|
||||
private final int VALUE;
|
||||
|
||||
VALUENUM(int value) {
|
||||
VALUE = value;
|
||||
}
|
||||
|
||||
public int getValue() {
|
||||
return VALUE;
|
||||
}
|
||||
}
|
||||
34
src/main/java/mau/mau/players/Bot.java
Normal file
34
src/main/java/mau/mau/players/Bot.java
Normal file
@@ -0,0 +1,34 @@
|
||||
package mau.mau.players;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class Bot extends Player {
|
||||
private List<Card> hand;
|
||||
private Dealer dealer;
|
||||
|
||||
public Bot(Dealer dealer) {
|
||||
super(dealer);
|
||||
this.hand = super.getHand();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Card getPlay(Card currentCard) {
|
||||
new Scanner(System.in).nextLine();
|
||||
|
||||
for(Card card : hand) {
|
||||
TYPENUM cardType = card.getType();
|
||||
VALUENUM cardValue = card.getValue();
|
||||
if(Referee.isValidMove(card, currentCard)) {
|
||||
System.out.println("Bot played " + cardType + " " + cardValue);
|
||||
hand.remove(card);
|
||||
System.out.println("Bot now has " + hand.size() + " cards");
|
||||
return card;
|
||||
}
|
||||
}
|
||||
hand.add(drawCard());
|
||||
System.out.println("Bot drew a card");
|
||||
System.out.println("Bot now has " + hand.size() + " cards");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
60
src/main/java/mau/mau/players/Human.java
Normal file
60
src/main/java/mau/mau/players/Human.java
Normal file
@@ -0,0 +1,60 @@
|
||||
package mau.mau.players;
|
||||
|
||||
import mau.mau.Card;
|
||||
import mau.mau.Dealer;
|
||||
import mau.mau.Referee;
|
||||
import mau.mau.Utils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class Human extends Player {
|
||||
private List<Card> hand;
|
||||
|
||||
public Human(Dealer dealer) {
|
||||
super(dealer);
|
||||
this.hand = super.getHand();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Card getPlay(Card currentCard) {
|
||||
printHand();
|
||||
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
|
||||
while (true){
|
||||
String input = scanner.nextLine();
|
||||
if(input.equals("quit")){
|
||||
System.out.println("You quit the game!");
|
||||
System.exit(69);
|
||||
}
|
||||
if (input.equals("draw")) {
|
||||
Card card = drawCard();
|
||||
System.out.println("You drew a " + card.getType() + " " + card.getValue());
|
||||
hand.add(card);
|
||||
return null;
|
||||
}
|
||||
if (Utils.isNumeric(input)) {
|
||||
int cardIndex = Integer.parseInt(input);
|
||||
if (cardIndex < 0 || cardIndex > hand.size()){
|
||||
System.out.println("Invalid card");
|
||||
continue;
|
||||
}
|
||||
Card card = hand.get(cardIndex);
|
||||
if (!Referee.isValidMove(card, currentCard)) {
|
||||
System.out.println("Invalid move");
|
||||
continue;
|
||||
}
|
||||
hand.remove(cardIndex);
|
||||
return card;
|
||||
}
|
||||
System.out.println("Invalid input");
|
||||
}
|
||||
}
|
||||
|
||||
private void printHand(){
|
||||
for (int i = 0; i < hand.size(); i++) {
|
||||
System.out.println("(" + i + ") " + hand.get(i).getType() + " " + hand.get(i).getValue());
|
||||
}
|
||||
}
|
||||
}
|
||||
48
src/main/java/mau/mau/players/Player.java
Normal file
48
src/main/java/mau/mau/players/Player.java
Normal file
@@ -0,0 +1,48 @@
|
||||
package mau.mau.players;
|
||||
|
||||
import mau.mau.Card;
|
||||
import mau.mau.Dealer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public abstract class Player {
|
||||
private List<Card> hand;
|
||||
private Dealer dealer;
|
||||
|
||||
public Player(Dealer dealer) {
|
||||
this.dealer = dealer;
|
||||
this.hand = dealer.getHand();
|
||||
}
|
||||
|
||||
protected List<Card> getHand() {
|
||||
return hand;
|
||||
}
|
||||
|
||||
public List<Card> setHand(List<Card> hand) {
|
||||
return this.hand = hand;
|
||||
}
|
||||
|
||||
public Boolean handIsEmpty(){
|
||||
return hand.isEmpty();
|
||||
}
|
||||
|
||||
public void addCardToHand(Card card){
|
||||
hand.add(card);
|
||||
}
|
||||
|
||||
public Card drawCard() {
|
||||
return dealer.drawCard();
|
||||
}
|
||||
|
||||
public Card playCard(int cardIndex){
|
||||
Card playCard = hand.get(cardIndex);
|
||||
hand.remove(cardIndex);
|
||||
return playCard;
|
||||
}
|
||||
|
||||
public int getHandSize(){
|
||||
return hand.size();
|
||||
}
|
||||
|
||||
public abstract Card getPlay(Card currentCard);
|
||||
}
|
||||
Reference in New Issue
Block a user