diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..4de62b4 --- /dev/null +++ b/.classpath @@ -0,0 +1,7 @@ + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e4f6b46 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +/Card$1.class +/Card.class +/ComputerPlayer.class +/CreateDeck.class +/Deck.class +/Driver.class +/GUI$1.class +/GUI$2.class +/GUI.class +/Game.class +/Hand.class +/Player.class diff --git a/.project b/.project new file mode 100644 index 0000000..0d723b2 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + CardGame + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/Card.java b/Card.java deleted file mode 100644 index 9fc5f77..0000000 --- a/Card.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * author : alex Torres - * this class is the card class that will hold the suit, value and image of the card. - * this class contains a comparator that will compare the values of 2 cards - * - */ -import java.util.Comparator; - -import javax.swing.ImageIcon; - -public class Card { - - //instance variables for cards - - private String suit; - private int rank; - private ImageIcon cardImage; - - //preset suits for when making cards - public final static String hearts = "h"; - public final static String diamonds = "d"; - public final static String spade ="s"; - public final static String club ="c"; - - //preset rank for when making cards - public final static int ace = 1; - public final static int two = 2; - public final static int three =3; - public final static int four = 4; - public final static int five =5; - public final static int six = 6; - public final static int seven = 7; - public final static int eight =8; - public final static int nine =9; - public final static int ten = 10; - public final static int jack = 11; - public final static int queen = 12; - public final static int king = 13; - public final static int joker = 14; - - //constructor that takes in a suit, rank and in image for the card - public Card(String suit, int rank, ImageIcon image) { - this.suit = suit; - this.rank = rank; - cardImage= image; - } - - //get suit of the card - public String getSuit() { - return suit; - } - - //gets the rank of the card - public int getRank() { - return rank; - } - - //gets the rank of the card - public ImageIcon getImage() { - return cardImage; - } - - //comparator that will compare card by value - public static Comparator compareByValue = new Comparator() { - //this method will compare the cards by the value. - @Override - public int compare (Card o1, Card o2) { - return o1.rank - o2.rank ; - } - }; - - //toString method - @Override - public String toString() { - return rank + " of " + suit + "\n"; - } - -} diff --git a/CardGame/.gitignore b/CardGame/.gitignore new file mode 100644 index 0000000..d38daf7 --- /dev/null +++ b/CardGame/.gitignore @@ -0,0 +1,15 @@ +/Player.class +/Hand.class +/GUI.class +/GUI$1.class +/GUI$2.class +/Game.class +/Driver.class +/Deck.class +/CreateDeck.class +/ComputerPlayer.class +/Card$1.class +/Card.class +/DeckDealer.class +/Suit.class +/Rank.class diff --git a/CardGame/Card.java b/CardGame/Card.java new file mode 100644 index 0000000..c3bfd25 --- /dev/null +++ b/CardGame/Card.java @@ -0,0 +1,41 @@ +/* + * author : alex Torres + * this class is the card class that will hold the suit, value and image of the card. + * this class contains a comparator that will compare the values of 2 cards + * + */ +package CardGame; + +import java.util.Comparator; + +import javax.swing.ImageIcon; + +public class Card { + private final Suit suit; + private final Rank rank; + private final ImageIcon cardImage; + public Card(Suit suit, Rank rank, ImageIcon image) { + this.suit = suit; + this.rank = rank; + this.cardImage = image; + } + public Suit getSuit() { + return suit; + } + public Rank getRank() { + return rank; + } + public ImageIcon getImage() { + return cardImage; + } + public static Comparator compareByValue = new Comparator() { + @Override + public int compare(Card o1, Card o2) { + return o1.getRank().getValue() - o2.getRank().getValue(); + } + }; + @Override + public String toString() { + return rank + " of " + suit + "\n"; + } +} diff --git a/ComputerPlayer.java b/CardGame/ComputerPlayer.java similarity index 97% rename from ComputerPlayer.java rename to CardGame/ComputerPlayer.java index 8de5f4e..1bfa20f 100644 --- a/ComputerPlayer.java +++ b/CardGame/ComputerPlayer.java @@ -1,3 +1,4 @@ +package CardGame; import java.util.Random; /* diff --git a/CardGame/CreateDeck.java b/CardGame/CreateDeck.java new file mode 100644 index 0000000..c31cacd --- /dev/null +++ b/CardGame/CreateDeck.java @@ -0,0 +1,38 @@ +/* + * author Kenji Lor + * this class will create all 53 cards + * the cards will then be put into a deck. + */ +package CardGame; + +import javax.swing.ImageIcon; + +//this class has a static method that will return a deck of 53 cards +public class CreateDeck { + public static Deck fullDeck() { + Deck deck = new Deck(); + + // Agregar cartas para cada palo + addSuitToDeck(deck, Card.hearts, "H"); + addSuitToDeck(deck, Card.diamonds, "D"); + addSuitToDeck(deck, Card.spade, "S"); + addSuitToDeck(deck, Card.club, "C"); + + // Agregar Joker + deck.addCard(new Card("joker", Card.joker, new ImageIcon("FolderOfCards/joker.png"))); + + return deck; + } + + private static void addSuitToDeck(Deck deck, String suit, String suitAbbreviation) { + String[] rankNames = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; + int[] ranks = {Card.ace, Card.two, Card.three, Card.four, Card.five, Card.six, + Card.seven, Card.eight, Card.nine, Card.ten, Card.jack, Card.queen, Card.king}; + + for (int i = 0; i < ranks.length; i++) { + String fileName = "FolderOfCards/" + rankNames[i] + suitAbbreviation + ".png"; + deck.addCard(new Card(suit, ranks[i], new ImageIcon(fileName))); + } + } + +} diff --git a/CardGame/Deck.java b/CardGame/Deck.java new file mode 100644 index 0000000..78d778d --- /dev/null +++ b/CardGame/Deck.java @@ -0,0 +1,33 @@ +/* + * Author: alex torres + * this class will store a deck of cards. this class has an array list that will store a deck of cards. + */ +package CardGame; + +import java.util.ArrayList; +import java.util.Collections; + +public class Deck { + private ArrayList deck; + + public Deck() { + deck = new ArrayList(53); + } + + public void addCard(Card card) { + deck.add(card); + } + + public void shuffleDeck() { + Collections.shuffle(deck); + } + + public ArrayList getDeck() { + return deck; + } + + @Override + public String toString() { + return deck.toString(); + } +} diff --git a/CardGame/DeckDealer.java b/CardGame/DeckDealer.java new file mode 100644 index 0000000..312866d --- /dev/null +++ b/CardGame/DeckDealer.java @@ -0,0 +1,22 @@ +package CardGame; + +import java.util.ArrayList; + +public class DeckDealer { + + public ArrayList dealFirstHalf(Deck deck) { + ArrayList firstHalf = new ArrayList<>(); + for (int i = 0; i < 26; i++) { + firstHalf.add(deck.getDeck().get(i)); + } + return firstHalf; + } + + public ArrayList dealSecondHalf(Deck deck) { + ArrayList secondHalf = new ArrayList<>(); + for (int i = 26; i < 53; i++) { + secondHalf.add(deck.getDeck().get(i)); + } + return secondHalf; + } +} diff --git a/Driver.java b/CardGame/Driver.java similarity index 98% rename from Driver.java rename to CardGame/Driver.java index bd899a3..7d5e963 100644 --- a/Driver.java +++ b/CardGame/Driver.java @@ -1,3 +1,4 @@ +package CardGame; import java.util.Scanner; //author alex torres diff --git a/GUI.java b/CardGame/GUI.java similarity index 98% rename from GUI.java rename to CardGame/GUI.java index 3b496d2..ed230ed 100644 --- a/GUI.java +++ b/CardGame/GUI.java @@ -2,6 +2,8 @@ * author chris Lara-Betancourt * */ +package CardGame; + import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -111,7 +113,7 @@ public void actionPerformed(ActionEvent e) { } public static void main (String[] args) { - Gui g = new GUI(); + GUI g = new GUI(); } diff --git a/Game.java b/CardGame/Game.java similarity index 86% rename from Game.java rename to CardGame/Game.java index d579787..f8c52f7 100644 --- a/Game.java +++ b/CardGame/Game.java @@ -3,6 +3,8 @@ * this is the games class that will run the game. this class will create the deck, player, and hand. this class * will also will run each step of the game */ +package CardGame; + public class Game { //deck of cards @@ -38,12 +40,14 @@ public void gameSetup() { //shuffle deck deck.shuffleDeck(); - //create hands - //hand for player. half the deck is delt - playerHand = new Hand( deck.dealFirstHalf()); - - //hand for computer player. second half is delt - computerHand = new Hand( deck.dealSecondhalf()); + // Instancia de DeckDealer para manejar la distribución del mazo + DeckDealer dealer = new DeckDealer(); + + // Crear la mano del jugador usando la primera mitad del mazo + playerHand = new Hand(dealer.dealFirstHalf(deck)); + + // Crear la mano del jugador de computadora usando la segunda mitad del mazo + computerHand = new Hand(dealer.dealSecondHalf(deck)); //add hand to players diff --git a/Hand.java b/CardGame/Hand.java similarity index 98% rename from Hand.java rename to CardGame/Hand.java index 51219f1..6db830d 100644 --- a/Hand.java +++ b/CardGame/Hand.java @@ -3,6 +3,7 @@ * this class is the hand class that will hold the cards of each player * this class has array list that will hold all the card */ +package CardGame; import java.util.ArrayList; import java.util.Collections; diff --git a/Player.java b/CardGame/Player.java similarity index 98% rename from Player.java rename to CardGame/Player.java index 6f23860..8690df4 100644 --- a/Player.java +++ b/CardGame/Player.java @@ -2,6 +2,8 @@ * author: alex torres * this class is the player class. this player class has a hand that will store cards. */ +package CardGame; + public class Player { //hand of player that will holds the cards private Hand hand; diff --git a/CardGame/Rank.java b/CardGame/Rank.java new file mode 100644 index 0000000..ce7fc7f --- /dev/null +++ b/CardGame/Rank.java @@ -0,0 +1,29 @@ +package CardGame; + +public enum Rank { + ACE(1), + TWO(2), + THREE(3), + FOUR(4), + FIVE(5), + SIX(6), + SEVEN(7), + EIGHT(8), + NINE(9), + TEN(10), + JACK(11), + QUEEN(12), + KING(13), + JOKER(14); + private final int value; + Rank(int value) { + this.value = value; + } + public int getValue() { + return value; + } + @Override + public String toString() { + return String.valueOf(value); + } +} diff --git a/CardGame/Suit.java b/CardGame/Suit.java new file mode 100644 index 0000000..037ad78 --- /dev/null +++ b/CardGame/Suit.java @@ -0,0 +1,19 @@ +package CardGame; + +public enum Suit { + HEARTS("hearts"), + DIAMONDS("diamonds"), + SPADES("spades"), + CLUBS("clubs"); + + private final String name; + + Suit(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } +} diff --git a/CreateDeck.java b/CreateDeck.java deleted file mode 100644 index d0b6153..0000000 --- a/CreateDeck.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * author Kenji Lor - * this class will create all 53 cards - * the cards will then be put into a deck. - */ -import javax.swing.ImageIcon; - -//this class has a static method that will return a deck of 53 cards -public class CreateDeck { - - - - public static Deck fullDeck() { - //create cards to add to deck - - //ace - Card heartAce = new Card(Card.hearts,Card.ace,new ImageIcon("FolderOfCards/AH.png")); - Card diamondAce = new Card(Card.diamonds, Card.ace, new ImageIcon("FolderOfCards/AD.png")); - Card spadeAce = new Card(Card.spade, Card.ace, new ImageIcon("FolderOfCards/AS.png")); - Card clubAce = new Card(Card.club, Card.ace, new ImageIcon("FolderOfCards/AC.png")); - - - //two - Card heartTwo = new Card(Card.hearts, Card.two, new ImageIcon("FolderOfCards/2H.png")); - Card diamondTwo = new Card(Card.diamonds, Card.two, new ImageIcon("FolderOfCards/2D.png")); - Card spadeTwo = new Card(Card.spade, Card.two, new ImageIcon("FolderOfCards/2S.png")); - Card clubTwo = new Card(Card.club, Card.two, new ImageIcon("FolderOfCards/2C.png")); - - //three - Card heartThree = new Card(Card.hearts, Card.three, new ImageIcon("FolderOfCards/3H.png")); - Card diamondThree = new Card(Card.diamonds, Card.three, new ImageIcon("FolderOfCards/3D.png")); - Card spadeThree = new Card(Card.spade, Card.three, new ImageIcon("FolderOfCards/3S.png")); - Card clubThree = new Card(Card.club, Card.three, new ImageIcon("FolderOfCards/3C.png")); - - //four - Card heartFour = new Card(Card.hearts, Card.four, new ImageIcon("FolderOfCards/4H.png")); - Card diamondFour = new Card(Card.diamonds, Card.four, new ImageIcon("FolderOfCards/4D.png")); - Card spadeFour = new Card(Card.spade, Card.four, new ImageIcon("FolderOfCards/4S.png")); - Card clubFour = new Card(Card.club, Card.four, new ImageIcon("FolderOfCards/4C.png")); - - //five - Card heartFive = new Card(Card.hearts ,Card.five, new ImageIcon("FolderOfCards/5H.png")); - Card diamondFive = new Card(Card.diamonds ,Card.five, new ImageIcon("FolderOfCards/5D.png")); - Card spadeFive = new Card(Card.spade ,Card.five, new ImageIcon("FolderOfCards/5S.png")); - Card clubFive = new Card(Card.club ,Card.five, new ImageIcon("FolderOfCards/5C.png")); - - //six - Card heartSix = new Card(Card.hearts , Card.six, new ImageIcon("FolderOfCards/6H.png")); - Card diamondSix = new Card(Card.diamonds , Card.six, new ImageIcon("FolderOfCards/6D.png")); - Card spadeSix = new Card(Card.spade , Card.six, new ImageIcon("FolderOfCards/6S.png")); - Card clubSix = new Card(Card.club , Card.six, new ImageIcon("FolderOfCards/6C.png")); - - //seven - Card heartSeven = new Card(Card.hearts ,Card.seven, new ImageIcon("FolderOfCards/7H.png")); - Card diamondSeven = new Card(Card.diamonds ,Card.seven, new ImageIcon("FolderOfCards/7D.png")); - Card spadeSeven = new Card(Card.spade ,Card.seven, new ImageIcon("FolderOfCards/7S.png")); - Card clubSeven = new Card(Card.club ,Card.seven, new ImageIcon("FolderOfCards/7C.png")); - - //eight - Card heartEight = new Card(Card.hearts , Card.eight, new ImageIcon("FolderOfCards/8H.png")); - Card diamondEight = new Card(Card.diamonds , Card.eight, new ImageIcon("FolderOfCards/8D.png")); - Card spadeEight = new Card(Card.spade , Card.eight, new ImageIcon("FolderOfCards/8S.png")); - Card clubEight = new Card(Card.club , Card.eight, new ImageIcon("FolderOfCards/8C.png")); - - //nine - Card heartNine = new Card(Card.hearts , Card.nine, new ImageIcon("FolderOfCards/9H.png")); - Card diamondNine = new Card(Card.diamonds , Card.nine, new ImageIcon("FolderOfCards/9D.png")); - Card spadeNine = new Card(Card.spade , Card.nine, new ImageIcon("FolderOfCards/9S.png")); - Card clubNine = new Card(Card.club , Card.nine, new ImageIcon("FolderOfCards/9C.png")); - - //ten - Card heartTen = new Card (Card.hearts , Card.ten, new ImageIcon("FolderOfCards/10H.png")); - Card diamondTen = new Card (Card.diamonds , Card.ten, new ImageIcon("FolderOfCards/10D.png")); - Card spadeTen = new Card (Card.spade , Card.ten, new ImageIcon("FolderOfCards/10S.png")); - Card clubTen = new Card (Card.club , Card.ten, new ImageIcon("FolderOfCards/10c.png")); - - //jack - Card heartJack = new Card(Card.hearts , Card.jack, new ImageIcon("FolderOfCards/JH.png")); - Card diamondJack = new Card(Card.diamonds , Card.jack, new ImageIcon("FolderOfCards/JD.png")); - Card spadeJack = new Card(Card.spade, Card.jack, new ImageIcon("FolderOfCards/JS.png")); - Card clubJack = new Card(Card.club , Card.jack, new ImageIcon("FolderOfCards/JC.png")); - - //queen - Card heartQueen = new Card(Card.hearts , Card.queen, new ImageIcon("FolderOfCards/QH.png")); - Card diamondQueen = new Card(Card.diamonds , Card.queen, new ImageIcon("FolderOfCards/QD.png")); - Card spadeQueen = new Card(Card.spade , Card.queen, new ImageIcon("FolderOfCards/QS.png")); - Card clubQueen = new Card(Card.club , Card.queen,new ImageIcon("FolderOfCards/QC.png")); - - //king - Card heartKing = new Card(Card.hearts , Card.king, new ImageIcon("FolderOfCards/KH.png")); - Card diamondKing = new Card(Card.diamonds , Card.king, new ImageIcon("FolderOfCards/KD.png")); - Card spadeKing = new Card(Card.spade , Card.king, new ImageIcon("FolderOfCards/KS.png")); - Card clubKing = new Card(Card.club , Card.king, new ImageIcon("FolderOfCards/KC.png")); - - //joker - Card joker = new Card("joker", Card.joker, new ImageIcon("FolderOfCards/joker.png")); - - //create a new deck - Deck deck = new Deck(); - - //adding cards to deck - - //ace - deck.addCard(heartAce); - deck.addCard(diamondAce); - deck.addCard(spadeAce); - deck.addCard(clubAce); - - //two - deck.addCard(heartTwo); - deck.addCard(diamondTwo); - deck.addCard(spadeTwo); - deck.addCard(clubTwo); - - - //three - deck.addCard(heartThree); - deck.addCard(diamondThree); - deck.addCard(spadeThree); - deck.addCard(clubThree); - - //four - deck.addCard(heartFour); - deck.addCard(diamondFour); - deck.addCard(spadeFour); - deck.addCard(clubFour); - - //five - deck.addCard(heartFive); - deck.addCard(diamondFive); - deck.addCard(spadeFive); - deck.addCard(clubFive); - - //six - deck.addCard(heartSix); - deck.addCard(diamondSix); - deck.addCard(spadeSix); - deck.addCard(clubSix); - - //seven - deck.addCard(heartSeven); - deck.addCard(diamondSeven); - deck.addCard(spadeSeven); - deck.addCard(clubSeven); - - //eight - deck.addCard(heartEight); - deck.addCard(spadeEight); - deck.addCard(diamondEight); - deck.addCard(clubEight); - - //nine - deck.addCard(heartNine); - deck.addCard(diamondNine); - deck.addCard(spadeNine); - deck.addCard(clubNine); - - //ten - deck.addCard(heartTen); - deck.addCard(diamondTen); - deck.addCard(spadeTen); - deck.addCard(clubTen); - - //jack - deck.addCard(heartJack); - deck.addCard(diamondJack); - deck.addCard(spadeJack); - deck.addCard(clubJack); - - //queen - deck.addCard(heartQueen); - deck.addCard(diamondQueen); - deck.addCard(spadeQueen); - deck.addCard(clubQueen); - - //king - deck.addCard(heartKing); - deck.addCard(diamondKing); - deck.addCard(spadeKing); - deck.addCard(clubKing); - - //joker - deck.addCard(joker); - - return deck; - - - } -} diff --git a/Deck.java b/Deck.java deleted file mode 100644 index 9c3cc4e..0000000 --- a/Deck.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Author: alex torres - * this class will store a deck of cards. this class has an array list that will store a deck of cards. - */ -import java.util.ArrayList; -import java.util.Collections; - -public class Deck { - - //arraylist that stores cards - private ArrayList deck = null; - - //constructor that creates a deck of empty cards - public Deck() { - //arraylist initalized to 53 (52 = joker) - deck = new ArrayList(53); - } - - //method that adds card to deck - public void addCard(Card card) { - deck.add(card); - } - - //method that will shuffle deck - public void shuffleDeck() { - Collections.shuffle(deck); - } - //deal first half of deck cards 1-26 - public ArrayList dealFirstHalf (){ - - //creating an array list - ArrayList tempHand = new ArrayList (); - - //for loop that will copy the first half of the deck to the array list - for (int i =0; i < 26; i++) { - Card tempCard = deck.get(i); - tempHand.add(tempCard); - } - - return tempHand; - } - - //deal second half of the deck 27-53 - public ArrayList dealSecondhalf() { - //creating a temp array list - ArrayList tempHand = new ArrayList (); - - //for loop that will copy secound half of deck to the temp arrayList - for (int i =26; i<53; i++) { - //temp card - Card tempCard = deck.get(i); - tempHand.add(tempCard); - } - return tempHand; - } - - @Override - public String toString () { - return deck.toString(); - } - - -} diff --git a/tests/.gitignore b/tests/.gitignore new file mode 100644 index 0000000..d6d951a --- /dev/null +++ b/tests/.gitignore @@ -0,0 +1,3 @@ +/CreateDeckTest.class +/DeckTest.class +/CardTest.class diff --git a/tests/CardTest.java b/tests/CardTest.java new file mode 100644 index 0000000..c484dca --- /dev/null +++ b/tests/CardTest.java @@ -0,0 +1,26 @@ +package tests; + +import static org.junit.Assert.*; + +import javax.swing.ImageIcon; + +import org.junit.Test; + +import CardGame.*; + +public class CardTest { + + @Test + public void testCompareByValue_LowerRank() { + // Configurar + Card card1 = new Card(Suit.HEARTS, Rank.FIVE, new ImageIcon("5H.png")); + Card card2 = new Card(Suit.SPADES, Rank.TEN, new ImageIcon("10S.png")); + + // Ejecutar + int result = Card.compareByValue.compare(card1, card2); + + // Validar + assertEquals(-5, result); + } + +} diff --git a/tests/CreateDeckTest.java b/tests/CreateDeckTest.java new file mode 100644 index 0000000..a065186 --- /dev/null +++ b/tests/CreateDeckTest.java @@ -0,0 +1,26 @@ +package tests; + +import static org.junit.Assert.*; +import org.junit.Test; + +import CardGame.*; + + +public class CreateDeckTest { + + @Test + public void testFullDeckCreation() { + // Ejecutar el método fullDeck() + Deck deck = CreateDeck.fullDeck(); + + // Verificar el número total de cartas + int expectedCardCount = 53; // 52 cartas estándar + 1 joker + assertEquals("El mazo debe contener 53 cartas.", expectedCardCount, deck.getDeck().size()); + + // Verificar que cada carta tiene la imagen correcta asignada + for (Card card : deck.getDeck()) { + assertNotNull("Cada carta debe tener una imagen asignada.", card.getImage()); + } + } + +} diff --git a/tests/DeckTest.java b/tests/DeckTest.java new file mode 100644 index 0000000..b6196a9 --- /dev/null +++ b/tests/DeckTest.java @@ -0,0 +1,40 @@ +package tests; + +import static org.junit.Assert.*; + +import javax.swing.ImageIcon; + +import org.junit.Before; +import org.junit.Test; + +import CardGame.*; + +public class DeckTest { + + private Deck deck; + + @Before + public void setUp() { + deck = new Deck(); // Inicializar el mazo + } + + @Test + public void testAddCard() { + ImageIcon icon = new ImageIcon("5H.png"); + // Crear una nueva carta + Card newCard = new Card("hearts", 5, icon); + + // Obtener el tamaño inicial del mazo + int initialSize = deck.getDeck().size(); + + // Añadir la nueva carta al mazo + deck.addCard(newCard); + + // Verificar que el tamaño del mazo ha incrementado en 1 + assertEquals("El tamaño del mazo debe aumentar en 1.", initialSize + 1, deck.getDeck().size()); + + // Verificar que la última carta en el mazo es la que se acaba de añadir + assertEquals("La última carta añadida debe estar en la última posición del mazo.", newCard, deck.getDeck().get(deck.getDeck().size() - 1)); + } + +}