diff --git a/client/src/App.js b/client/src/App.js index 93d5281..74064c4 100644 --- a/client/src/App.js +++ b/client/src/App.js @@ -2,6 +2,7 @@ import './App.css'; import { Routes, Route, BrowserRouter } from 'react-router-dom'; import Welcome from './components/Welcome'; +import GameBoard from './components/Game/GameBoard'; function App() { return ( @@ -9,6 +10,7 @@ function App() { }/> + }/> diff --git a/client/src/App.test.js b/client/src/App.test.js deleted file mode 100644 index 1f03afe..0000000 --- a/client/src/App.test.js +++ /dev/null @@ -1,8 +0,0 @@ -import { render, screen } from '@testing-library/react'; -import App from './App'; - -test('renders learn react link', () => { - render(); - const linkElement = screen.getByText(/learn react/i); - expect(linkElement).toBeInTheDocument(); -}); diff --git a/client/src/components/Cards/Card.js b/client/src/components/Cards/Card.js index 378f9e5..0e0b5b0 100644 --- a/client/src/components/Cards/Card.js +++ b/client/src/components/Cards/Card.js @@ -1,16 +1,28 @@ -export default class Card { - constructor(state) { - this.state = { - tier: state.tier, - points: state.points, - isWorth: state.worth, - cost: { - acorns: state.cost.acorns, - pineCones: state.cost.pineCones, - walnuts: state.cost.walnuts, - apples: state.cost.apples, - twigs: state.cost.twigs - } - }; +import '../../styles/Card.css'; + +export default function Card({ state }) { + const { tier, points, isWorth, cost } = state; + + const mapCosts = () => { + let allCosts = []; + for (let [key, value] of Object.entries(cost)) { + if (value < 1) continue; + allCosts.push(<>{value} {key}
); + } + return allCosts; } + + return ( +
+
+
{isWorth}
+
{points} points
+
+ +
+
+
Costs:
{mapCosts()}
+
+
+ ) } \ No newline at end of file diff --git a/client/src/components/Game/GameBoard.js b/client/src/components/Game/GameBoard.js new file mode 100644 index 0000000..a3e2f99 --- /dev/null +++ b/client/src/components/Game/GameBoard.js @@ -0,0 +1,51 @@ +import '../../styles/GameBoard.css'; +import Card from '../Cards/Card'; +import { CardDeck } from '../../store/CardDeck'; +import { useEffect, useState } from 'react'; + +export default function GameBoard() { + const [trigger, setTrigger] = useState(true); + const [tierThree, setTierThree] = useState(null); + const [tierTwo, setTierTwo] = useState(null); + const [tierOne, setTierOne] = useState(null); + + const [content, setContent] = useState(null); + + let currentCards = { + tierOneCards: null, + tierTwoCards: null, + tierThreeCards: null, + }; + + useEffect(() => { + // param limit sets limit on number of cards rendered + // param tier filters by card tier + const buildGameBoardRow = (limit) => { + let newBoard = []; + let iter = 0; + for (let cardConfig of CardDeck) { + while (iter < limit) { + iter++; + // if (cardConfig.tier !== tier) continue; + newBoard.push(); + } + } + setContent(newBoard); + setTrigger(false); + } + + if (trigger) buildGameBoardRow(6); + }, [trigger]); + + return ( +
+

SPLINTER

+ +
+ {content || 'Loading'} +
+ +

Deck length: {CardDeck.length}

+
+ ) +} \ No newline at end of file diff --git a/client/src/store/CardDeck.js b/client/src/store/CardDeck.js new file mode 100644 index 0000000..83f600a --- /dev/null +++ b/client/src/store/CardDeck.js @@ -0,0 +1,189 @@ +export const CardDeck = [ + // TIER ONE CARDS + // total: 40 + // cat 1: [2,1] cost cards + { + tier: 1, + points: 0, + isWorth: 'cedar', + cost: { + cedar: 2, + birch: 1, + walnut: 0, + mahogany: 0, + cherry: 0 + } + }, + { + tier: 1, + points: 0, + isWorth: 'birch', + cost: { + cedar: 0, + birch: 2, + walnut: 1, + mahogany: 0, + cherry: 0 + } + }, + { + tier: 1, + points: 0, + isWorth: 'walnut', + cost: { + cedar: 0, + birch: 0, + walnut: 2, + mahogany: 1, + cherry: 0 + } + }, + { + tier: 1, + points: 0, + isWorth: 'mahogany', + cost: { + cedar: 0, + birch: 0, + walnut: 0, + mahogany: 2, + cherry: 1 + } + }, + { + tier: 1, + points: 0, + isWorth: 'cherry', + cost: { + cedar: 1, + birch: 0, + walnut: 0, + mahogany: 0, + cherry: 2 + } + }, + + // cat 2: 3 of a kind cost + { + tier: 1, + points: 0, + isWorth: 'cedar', + cost: { + cedar: 3, + birch: 0, + walnut: 0, + mahogany: 0, + cherry: 0 + } + }, + { + tier: 1, + points: 0, + isWorth: 'birch', + cost: { + cedar: 0, + birch: 3, + walnut: 0, + mahogany: 0, + cherry: 0 + } + }, + { + tier: 1, + points: 0, + isWorth: 'walnut', + cost: { + cedar: 0, + birch: 0, + walnut: 3, + mahogany: 0, + cherry: 0 + } + }, + { + tier: 1, + points: 0, + isWorth: 'mahogany', + cost: { + cedar: 0, + birch: 0, + walnut: 0, + mahogany: 3, + cherry: 0 + } + }, + { + tier: 1, + points: 0, + isWorth: 'cherry', + cost: { + cedar: 0, + birch: 0, + walnut: 0, + mahogany: 0, + cherry: 3 + } + }, + + // cat 3: 4 of a kind, one point + { + tier: 1, + points: 1, + isWorth: 'cedar', + cost: { + cedar: 4, + birch: 0, + walnut: 0, + mahogany: 0, + cherry: 0 + } + }, + { + tier: 1, + points: 1, + isWorth: 'birch', + cost: { + cedar: 0, + birch: 4, + walnut: 0, + mahogany: 0, + cherry: 0 + } + }, + { + tier: 1, + points: 1, + isWorth: 'walnut', + cost: { + cedar: 0, + birch: 0, + walnut: 4, + mahogany: 0, + cherry: 0 + } + }, + { + tier: 1, + points: 1, + isWorth: 'mahogany', + cost: { + cedar: 0, + birch: 0, + walnut: 0, + mahogany: 4, + cherry: 0 + } + }, + { + tier: 1, + points: 1, + isWorth: 'cherry', + cost: { + cedar: 0, + birch: 0, + walnut: 0, + mahogany: 0, + cherry: 4 + } + }, +] \ No newline at end of file diff --git a/client/src/store/Store.js b/client/src/store/Store.js new file mode 100644 index 0000000..e69de29 diff --git a/client/src/styles/Card.css b/client/src/styles/Card.css new file mode 100644 index 0000000..713b98a --- /dev/null +++ b/client/src/styles/Card.css @@ -0,0 +1,37 @@ +.card { + display: flex; + flex-direction: column; + border: 1px solid black; + width: 20vw; + height: 30vh; +} + +.card-row { + display: inline-flex; + flex-direction: row; + justify-content: space-between; + padding: 0.7rem; + height: 50%; +} + +.bottom-row { + align-items: flex-end; +} + +.tier { + display: inline-block; + height: 2rem; + width: 2rem; +} + +.tier-3 { + background-color: blue; +} + +.tier-2 { + background-color: yellow; +} + +.tier-1 { + background-color: green; +} \ No newline at end of file diff --git a/client/src/styles/GameBoard.css b/client/src/styles/GameBoard.css new file mode 100644 index 0000000..cf58706 --- /dev/null +++ b/client/src/styles/GameBoard.css @@ -0,0 +1,15 @@ +.gameboard { + display: flex; + flex-direction: column; +} + +.gameboard-title { + font-weight: bold; +} + +.gameboard-row { + display: flex; + flex-flow: row wrap; + width: 90vw; + justify-content: center; +} \ No newline at end of file