diff --git a/src/App.jsx b/src/App.jsx
index 1ee1d31..e68d9e4 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,39 +1,14 @@
import logo from "/logo.png";
import "./App.css";
-import { makeShuffledDeck } from "./utils.jsx";
-import { useState } from "react";
+import Game from "./Game.jsx";
function App(props) {
- // Set default value of card deck to new shuffled deck
- const [cardDeck, setCardDeck] = useState(makeShuffledDeck());
- // currCards holds the cards from the current round
- const [currCards, setCurrCards] = useState([]);
-
- const dealCards = () => {
- const newCurrCards = [cardDeck.pop(), cardDeck.pop()];
- setCurrCards(newCurrCards);
- };
- // You can write JavaScript here, just don't try and set your state!
-
- // You can access your current components state here, as indicated below
- const currCardElems = currCards.map(({ name, suit }) => (
- // Give each list element a unique key
-
- {name} of {suit}
-
- ));
-
return (
<>
-
-
React High Card 🚀
- {currCardElems}
-
- Deal
-
+
>
);
}
diff --git a/src/DealCard.jsx b/src/DealCard.jsx
new file mode 100644
index 0000000..925e3a3
--- /dev/null
+++ b/src/DealCard.jsx
@@ -0,0 +1,11 @@
+const Card = ({ name, suit, rank }) => {
+ return (
+
+ );
+};
+
+export default Card;
diff --git a/src/Game.jsx b/src/Game.jsx
new file mode 100644
index 0000000..8c319e7
--- /dev/null
+++ b/src/Game.jsx
@@ -0,0 +1,123 @@
+import { makeShuffledDeck } from "./utils.jsx";
+import { useState } from "react";
+import DealCard from "./DealCard.jsx";
+
+function Game(props) {
+ // Set default value of card deck to new shuffled deck
+ const [cardDeck, setCardDeck] = useState(makeShuffledDeck());
+ // currCards holds the cards from the current round
+ const [currCards, setCurrCards] = useState([]);
+ const [player1Wins, setPlayer1Wins] = useState(0);
+ const [player2Wins, setPlayer2Wins] = useState(0);
+ const [roundWinner, setRoundWinner] = useState(null);
+ const [showCardContent, setShowCardContent] = useState(false);
+ const [finalWinner, setFinalWinner] = useState(null);
+ const [buttonText, setButtonText] = useState("Deal");
+ const [buttonColour, setButtonColour] = useState("#ededed");
+
+ const dealCards = () => {
+ const newCurrCards = [cardDeck.pop(), cardDeck.pop()];
+ setCurrCards(newCurrCards);
+ determineWinner(newCurrCards);
+ setShowCardContent(true);
+ if (cardDeck.length === 0) {
+ determineFinalWinner();
+ setButtonText("Play Again");
+ setButtonColour("#ffff99");
+ }
+ };
+
+ //Game messages
+
+ const PLAYER1 = `Player 1 wins `;
+ const PLAYER2 = `Player 2 wins `;
+ const TIE = `It's a tie!`;
+ const ROUND = `the round.`;
+ const GAME = `this game!!!!`;
+
+ const determineWinner = (newCurrCards) => {
+ if (newCurrCards.length === 2) {
+ const [card1, card2] = newCurrCards;
+ if (card1.rank > card2.rank) {
+ setPlayer1Wins((prevWins) => prevWins + 1);
+ setRoundWinner(`${PLAYER1}${ROUND}`);
+ } else if (card1.rank < card2.rank) {
+ setPlayer2Wins((prevWins) => prevWins + 1);
+ setRoundWinner(`${PLAYER2}${ROUND}`);
+ } else {
+ setRoundWinner(`${TIE}`);
+ }
+ }
+ };
+
+ const determineFinalWinner = () => {
+ if (player1Wins > player2Wins) {
+ setFinalWinner(`${PLAYER1}${GAME}`);
+ } else if (player2Wins > player1Wins) {
+ setFinalWinner(`${PLAYER2}${GAME}`);
+ } else {
+ setFinalWinner(`${TIE}`);
+ }
+ };
+
+ const restartGame = () => {
+ setCardDeck(makeShuffledDeck);
+ setCurrCards([]);
+ setPlayer1Wins(0);
+ setPlayer2Wins(0);
+ setRoundWinner(null);
+ setFinalWinner(null);
+ setShowCardContent(false);
+ setButtonText("Deal");
+ };
+
+ const currCardElems = currCards.map((card) => (
+
+ ));
+
+ // Button function
+
+ // To change name of button when state changed
+ // change function name
+ const dealOrRestart = cardDeck.length > 0 ? dealCards : restartGame;
+ // change button name
+ const buttonLabel = cardDeck.length > 0 ? "Deal" : buttonText;
+ // change button colour too
+ const colourButton = cardDeck.length > 0 ? "#ededed" : buttonColour;
+
+ return (
+ <>
+
+
High Card 🚀
+ {showCardContent && (
+ <>
+
Player 1: {currCardElems[0]}
+
Player 2: {currCardElems[1]}
+
+
Player 1 Wins: {player1Wins}
+
Player 2 Wins: {player2Wins}
+
{roundWinner}
+
{finalWinner}
+ >
+ )}
+ <>
+
+
+ {buttonLabel}
+
+
+ >
+
+ >
+ );
+}
+
+export default Game;
diff --git a/src/utils.jsx b/src/utils.jsx
index e3102aa..4bba137 100644
--- a/src/utils.jsx
+++ b/src/utils.jsx
@@ -19,6 +19,23 @@ const shuffleCards = (cards) => {
return cards;
};
+const suits = ["\u2660", "\u2665", "\u2666", "\u2663"]; // Spades, Hearts, Diamonds, Clubs
+const ranks = [
+ "Two",
+ "Three",
+ "Four",
+ "Five",
+ "Six",
+ "Seven",
+ "Eight",
+ "Nine",
+ "Ten",
+ "Jack",
+ "Queen",
+ "King",
+ "Ace",
+];
+
const makeDeck = () => {
// Initialise an empty deck array
const newDeck = [];