Skip to content
Snippets Groups Projects
Commit e94eb729 authored by Josefine Arntsen's avatar Josefine Arntsen
Browse files

Merge branch 'master' into 'main'

Master

See merge request !1
parents 5f14b629 fd68a5e5
Branches master
No related tags found
1 merge request!1Master
Showing
with 683 additions and 0 deletions
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
.idea/workspace.xml
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
\ No newline at end of file
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
checkstyle-idea.xml
/compiler.xml
/encodings.xml
/jarRepositories.xml
/misc.xml
/vcs.xml
./shelf
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CheckStyle-IDEA" serialisationVersion="2">
<checkstyleVersion>10.13.0</checkstyleVersion>
<scanScope>JavaOnly</scanScope>
<option name="thirdPartyClasspath" />
<option name="activeLocationIds" />
<option name="locations">
<list>
<ConfigurationLocation id="bundled-sun-checks" type="BUNDLED" scope="All" description="Sun Checks">(bundled)</ConfigurationLocation>
<ConfigurationLocation id="bundled-google-checks" type="BUNDLED" scope="All" description="Google Checks">(bundled)</ConfigurationLocation>
</list>
</option>
</component>
</project>
\ No newline at end of file
<?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>
\ No newline at end of file
<?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_21" default="true" project-jdk-name="21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
Z
*src/main/java/edu/ntnu/idatt2003/Main.java,d/5/d54772303db45029ffa547ae0cc6732dbac23e86
7
pom.xml,4/4/442292b8a7efeabbe4cc176709b833b1792140ec
:
.gitignore,a/5/a5cc2925ca8258af241be7e5b0381edf30266302
a
1src/main/java/edu/ntnu/idatt2003/DeckOfCards.java,9/a/9a7f7241d6cb1223232b94ce728408a537908733
S
#.idea/sonarlint/issuestore/index.pb,9/f/9fe84ebb15faf917b7def6236dba604453cc61e0

Q.idea/sonarlint/securityhotspotstore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec,2/c/2cabb939da04d3de3a200bf2b575690e1a16316d
w
G.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec,8/6/863e0292fd7e9b3e74dafd6cc01f73ba76346482

Q.idea/sonarlint/securityhotspotstore/d/5/d54772303db45029ffa547ae0cc6732dbac23e86,3/5/35af4e01311927943f75d38eaa44707aaadb08f6
]
-.idea/sonarlint/securityhotspotstore/index.pb,8/8/88a9255124c95bdc913197c120a8d560edc59c8e
Z
*src/main/java/edu/ntnu/idatt2003/Hand.java,c/5/c5f6d93eae6b1eaef762a247993789b87818888f
a
1src/main/java/edu/ntnu/idatt2003/CardDeckGUI.java,e/0/e01492a75939a913d48c4e47c802fa6ed084f814
a
1src/main/java/edu/ntnu/idatt2003/PlayingCard.java,0/9/090ec46a502392ab528efbf8c1049720f16c7813
^
.src/test/java/edu/ntnu/idatt2003/HandTest.java,f/0/f06fd316e1ba465eb8b2a738856478bdfd77abda
e
5src/test/java/edu/ntnu/idatt2003/DeckOfCardsTest.java,b/a/ba58807c8e5623ee01656d3bcfb79abd925c0617
\ No newline at end of file
Z
*src/main/java/edu/ntnu/idatt2003/Main.java,d/5/d54772303db45029ffa547ae0cc6732dbac23e86
7
pom.xml,4/4/442292b8a7efeabbe4cc176709b833b1792140ec
:
.gitignore,a/5/a5cc2925ca8258af241be7e5b0381edf30266302
a
1src/main/java/edu/ntnu/idatt2003/DeckOfCards.java,9/a/9a7f7241d6cb1223232b94ce728408a537908733
S
#.idea/sonarlint/issuestore/index.pb,9/f/9fe84ebb15faf917b7def6236dba604453cc61e0

Q.idea/sonarlint/securityhotspotstore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec,2/c/2cabb939da04d3de3a200bf2b575690e1a16316d
w
G.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec,8/6/863e0292fd7e9b3e74dafd6cc01f73ba76346482

Q.idea/sonarlint/securityhotspotstore/d/5/d54772303db45029ffa547ae0cc6732dbac23e86,3/5/35af4e01311927943f75d38eaa44707aaadb08f6
]
-.idea/sonarlint/securityhotspotstore/index.pb,8/8/88a9255124c95bdc913197c120a8d560edc59c8e
Z
*src/main/java/edu/ntnu/idatt2003/Hand.java,c/5/c5f6d93eae6b1eaef762a247993789b87818888f
a
1src/main/java/edu/ntnu/idatt2003/CardDeckGUI.java,e/0/e01492a75939a913d48c4e47c802fa6ed084f814
a
1src/main/java/edu/ntnu/idatt2003/PlayingCard.java,0/9/090ec46a502392ab528efbf8c1049720f16c7813
^
.src/test/java/edu/ntnu/idatt2003/HandTest.java,f/0/f06fd316e1ba465eb8b2a738856478bdfd77abda
e
5src/test/java/edu/ntnu/idatt2003/DeckOfCardsTest.java,b/a/ba58807c8e5623ee01656d3bcfb79abd925c0617
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
pom.xml 0 → 100644
<?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>edu.ntnu.idatt2003</groupId>
<artifactId>oving4</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>21.0.1</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.10.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.12.1</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.3</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.4.1</version>
</plugin>
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.8</version>
<configuration>
<mainClass>edu.ntnu.idatt2003.Main</mainClass>
</configuration>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package edu.ntnu.idatt2003;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import java.util.ArrayList;
/**
* The CardDeckGUI class provides a graphical user interface for interacting with a deck of playing cards.
* It allows users to deal hands of cards, check the properties of the hand, and manipulate the deck.
*/
public class CardDeckGUI extends Application {
/** The deck of cards used in the GUI. */
private DeckOfCards deckOfCards = new DeckOfCards();
/** The hand of cards dealt in the GUI. */
Hand handOfcards = new Hand(DeckOfCards.dealHand(5));
/** Button to deal a hand of cards. */
Button dealHandButton = new Button("Deal Hand");
/** Button to check the properties of the hand. */
Button checkHandButton = new Button("Check Hand");
/** Button to fill up the deck with a standard set of cards. */
Button fillUpDeckButton = new Button("Fill up deck");
/** Text displaying the sum of face values of the cards in the hand. */
Text sumofCards = new Text();
/** Text displaying whether the hand has a flush. */
Text flush = new Text();
/** Text displaying the hearts cards in the hand. */
Text hearts = new Text();
/** Text displaying whether the hand contains the Queen of Spades. */
Text queenOfSpades = new Text();
/** Container for displaying cards in the hand. */
HBox cardBox = new HBox();
/**
* Starts the JavaFX application by initializing the GUI components.
* @param primaryStage The primary stage for the application.
*/
@Override
public void start(Stage primaryStage) {
Label label = new Label();
VBox checkHand = new VBox();
dealHandButton.setOnAction(e -> {
cardBox.getChildren().clear();
handOfcards.playersHand(5);
ArrayList<PlayingCard> hand = handOfcards.getHandCards();
HBox cards = new HBox();
for (PlayingCard card : hand) {
cards.getChildren().add(new Label(card.getAsString()));
}
label.setText("Hand dealt: " );
cardBox.getChildren().addAll(label, cards);
});
checkHandButton.setOnAction(e -> checkHand.getChildren().add(getResult()));
fillUpDeckButton.setOnAction(e -> deckOfCards.fillUpTheDeck());
HBox buttons = new HBox(50);
buttons.setSpacing(20);
buttons.getChildren().addAll(dealHandButton, checkHandButton, fillUpDeckButton);
VBox root = new VBox(10);
root.setPadding((new Insets(10)));
root.getChildren().addAll(buttons, cardBox, checkHand);
Scene scene = new Scene(root, 1000,1200);
primaryStage.setTitle("CardGame");
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* Constructs a VBox containing the results of checking the properties of the hand.
* @return A VBox containing the results.
*/
private VBox getResult() {
VBox result = new VBox();
sumofCards.setText("Sum of Cards: " + handOfcards.getSumOfHand());
flush.setText("Flush: " + handOfcards.hasFlush());
if (handOfcards.checkHandForHearts().isEmpty()) {
hearts.setText("No hearts");
} else {
hearts.setText("Check Hearts: " + handOfcards.checkHandForHearts());
}
queenOfSpades.setText("Check Queen of Spades: " + handOfcards.checkHandForQueenOfSpades());
result.getChildren().addAll(sumofCards,flush,hearts,queenOfSpades);
result.setAlignment(Pos.CENTER);
return result;
}
/**
* Launches the JavaFX application.
* @param args The command-line arguments.
*/
public static void main(String[] args) {
launch(args);
}
}
\ No newline at end of file
package edu.ntnu.idatt2003;
import java.util.ArrayList;
import java.util.Random;
/**
* The DeckOfCards class represents a standard deck of playing cards.
* It provides methods to initialize the deck, retrieve the deck, and deal hands of cards.
*/
public class DeckOfCards {
/** The list of playing cards in the deck. */
private static ArrayList<PlayingCard> deck;
/**
* Constructs a DeckOfCards object and initializes the deck with a standard set of playing cards.
*/
public DeckOfCards() {
deck = new ArrayList<>();
fillUpTheDeck();
}
/**
* Fills up the deck with a standard set of playing cards.
* If the deck is not empty, it clears the existing cards before refilling.
*/
public void fillUpTheDeck() {
if (!deck.isEmpty()) {
deck.clear();
}
for (int i = 1; i < 14; i++){
deck.add(new PlayingCard('S', i));
deck.add(new PlayingCard('H', i));
deck.add(new PlayingCard('D', i));
deck.add(new PlayingCard('C', i));
}
}
public ArrayList<PlayingCard> getDeck() {
return deck;
}
/**
* Deals a hand of cards from the deck.
* @param n The number of cards to deal for the hand.
* @return An ArrayList containing the cards dealt for the hand.
* @throws IllegalArgumentException if the specified number of cards is invalid (less than 1 or greater than 52).
*/
public static ArrayList<PlayingCard> dealHand(int n) throws IllegalArgumentException {
if (n < 1 || n > 52) {
throw new IllegalArgumentException("Invalid number of cards requested");
}
ArrayList<PlayingCard> hand = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < n; i++) {
int randomIndex = random.nextInt(deck.size());
hand.add(deck.get(randomIndex));
deck.remove(randomIndex);
}
return hand;
}
}
\ No newline at end of file
package edu.ntnu.idatt2003;
import java.util.ArrayList;
import java.util.stream.Collectors;
/**
* The Hand class represents a player's hand in a card game.
* It contains methods to manage and analyze the hand of playing cards.
*/
public class Hand {
/** The list of playing cards in the hand. */
private ArrayList<PlayingCard> hand;
/**
* Constructs a Hand object with the given list of playing cards.
* @param dealHand The list of playing cards to initialize the hand with.
*/
public Hand(ArrayList<PlayingCard> dealHand) {
this.hand = dealHand;
}
/**
* Deals a hand of cards of the specified size.
* @param sizeHandCards The number of cards to deal for the hand.
*/
public void playersHand(int sizeHandCards) {
hand = DeckOfCards.dealHand(sizeHandCards);
}
/**
* Retrieves the list of playing cards in the hand.
* @return The list of playing cards in the hand.
*/
public ArrayList<PlayingCard> getHandCards() {
return hand;
}
/**
* Calculates the sum of face values of the cards in the hand.
* @return The sum of face values of the cards in the hand.
*/
public int getSumOfHand() {
return hand.stream().mapToInt(PlayingCard::getFace).sum();
}
/**
* Checks if the hand has a flush: all cards have the same suit.
* @return True if the hand has a flush, otherwise false.
*/
public boolean hasFlush() {
return hand.stream()
.allMatch(card -> card.getSuit() == hand.get(0).getSuit());
}
/**
* Checks the hand for cards of hearts suit and returns their string representations.
* @return A list of string representations of hearts cards in the hand.
*/
public ArrayList<String> checkHandForHearts() {
return hand.stream()
.filter(card -> card.getSuit() == 'H')
.map(PlayingCard::getAsString)
.collect(Collectors.toCollection(ArrayList::new));
}
/**
* Checks if the hand contains the Queen of Spades.
* @return True if the hand contains the Queen of Spades, otherwise false.
*/
public boolean checkHandForQueenOfSpades() {
return hand.stream()
.anyMatch(card -> card.getAsString().equals("S12"));
}
/**
* Returns a string representation of the hand.
* @return A string representation of the hand.
*/
@Override
public String toString() {
return "Hand{ hand = " + hand + '}';
}
}
\ No newline at end of file
package edu.ntnu.idatt2003;
public class Main {
/**
* The main method to start the GUI.
*
* @param args the args
*/
public static void main(String[] args) {
CardDeckGUI.main(args);
}
}
\ No newline at end of file
package edu.ntnu.idatt2003;
/**
* Represents a playing card. A playing card has a number (face) between
* 1 and 13, where 1 is called an Ace, 11 = Knight, 12 = Queen and 13 = King.
* The card can also be one of 4 suits: Spade, Heart, Diamonds and Clubs.
*
* @author ntnu
* @version 2021-03-13
*/
public class PlayingCard {
private final char suit; // 'S'=spade, 'H'=heart, 'D'=diamonds, 'C'=clubs
private final int face; // a number between 1 and 13
/**
* Creates an instance of a PlayingCard with a given suit and face.
* The face value is an integer between 1 and 13, where 11 represents the jack,
* 12 represents the queen and 13 represents the king. The Ace is represented by the
* number 1.
*
* <p>If the suit or face are invalid, an {@code IllegalArgumentException} is thrown.</p>
*
* @param suit The suit of the card, as a single character. 'S' for Spades,
* 'H' for Heart, 'D' for Diamonds and 'C' for clubs
* @param face The face value of the card, an integer between 1 and 13
* @throws IllegalArgumentException if suit or face have invalid values.
*/
public PlayingCard(char suit, int face) {
if (suit != 'H' && suit != 'D' && suit != 'C' && suit != 'S') {
throw new IllegalArgumentException("Parameter suit must be one of H, D, C or S");
}
if (face < 1 || face > 13) {
throw new IllegalArgumentException("Parameter face must be a number between 1 to 13");
}
this.suit = suit;
this.face = face;
}
/**
* Returns the suit and face of the card as a string.
* A 4 of hearts is returned as the string "H4".
*
* @return the suit and face of the card as a string
*/
public String getAsString() {
return String.format("%s%s", suit, face);
}
/**
* Returns the suit of the card, 'S' for Spades, 'H' for Heart,
* 'D' for Diamonds and 'C' for clubs.
*
* @return the suit of the card
*/
public char getSuit() {
return suit;
}
/**
* Returns the face of the card (value between 1 and 13).
*
* @return the face of the card
*/
public int getFace() {
return face;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
PlayingCard otherCard = (PlayingCard) o;
return getSuit() == otherCard.getSuit() && getFace() == otherCard.getFace();
}
@Override
public int hashCode() {
int hash = 7;
hash = 31 * hash + getSuit();
hash = 31 * hash + getFace();
return hash;
}
}
package edu.ntnu.idatt2003;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import static org.junit.jupiter.api.Assertions.*;
class DeckOfCardsTest {
private DeckOfCards deckOfCards;
@BeforeEach
void setUp() {
deckOfCards = new DeckOfCards();
}
@Test
void fillUpTheDeck() {
deckOfCards.fillUpTheDeck();
assertEquals(52, deckOfCards.getDeck().size());
}
@Test
void dealHand() {
ArrayList<PlayingCard> hand = deckOfCards.dealHand(5);
assertEquals(5, hand.size());
assertEquals(47, deckOfCards.getDeck().size());
}
@Test
void dealHandInvalidNumberOfCards() {
IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> {
deckOfCards.dealHand(0);
});
assertEquals("Invalid number of cards requested", exception.getMessage());
}
}
\ No newline at end of file
package edu.ntnu.idatt2003;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import static org.junit.jupiter.api.Assertions.*;
class HandTest {
ArrayList<PlayingCard> cards;
Hand hand;
@BeforeEach
void setUp() {
cards = new ArrayList<>();
cards.add(new PlayingCard('S',1));
cards.add(new PlayingCard('H',5));
cards.add(new PlayingCard('D',10));
hand = new Hand(cards);
}
@Test
void getHandCards() {
assertEquals(cards, hand.getHandCards());
}
@Test
void getSumOfHand() {
assertEquals(1+5+10, hand.getSumOfHand());
}
@Test
void hasFlush() {
assertFalse(hand.hasFlush());
}
@Test
void checkHandForHearts() {
ArrayList<String> hearts = hand.checkHandForHearts();
assertEquals(1, hearts.size());
assertTrue(hearts.contains("H5"));
}
@Test
void checkHandForQueenOfSpades() {
assertFalse(hand.checkHandForQueenOfSpades());
}
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment