# Start making the player card
## the game is set up
- each player gets a card
 - ~~called playerCard for player to mark their points~~
 - ~~has 4 different colored rows (direction rule, add lockout, label boxes, rules for boxes)~~
 - ~~rows are numbered 2-12 with boxes for scoring~~
- ~~there are six six-sided dice~~
 - ~~two white die, a blue, a red, a yellow and green die.~~

## players take turns
1.  ~~roll the dice~~ (completed 20JUL28) **add a true random number for when dice is initialized**
1.  all players may add points to their card 
 - sum both white dice and optionally add points to any color on card
1.  the player whose turn it is sums one white and one colored dice and may add points to that color on card
1.  the player whose turn it is adds penalty if no points taken
1.  ~~scoring phase~~
 - ~~at the end of the turn, the game may end if there are enough points on any player's card~~
     - ~~if any one player has 4 penalties, the game is over~~
     - ~~if any 2 rows are locked out, the game is over~~

### notes on turns
- create end of turn in game
- **add time constraint to game later**

#### use sockets to make a networkable game and also send data back/forth**
- what is on the file that gets sent back and forth between server and players
- what goes out to players: per player(48boxes, penalty count), locked off rows, dice roll, game end(when it occurs)
- (20AUG04) Started working on send function, come back and finish it to denote a 4x12 grid to save checkboxes per row
- ~~(20AUG06) come back to `// add selection to players' cards` (kyle-plain it) to continue with `send/receive`~~
    - before writing received create the rules that will affect receive function (e.g. which checkboxes are allowed to be clicked)
    - ~~(20AUG09) TODO: check that index and color, match rolled die (this will help finish addx) then continue work on send/receive~~
    - ~~(20AUG11) TODO: write psuedo code for line 170-175 (174 specifically) in game.cpp~~
    - ~~(20AUG13) TODO: fix the leftToRightRule and the lockoutRule functions to return bools and change parameters so they use collectionOfMoves.~~
        1. ~~create master function for to call all rules~~ - remove addx dependencies from currentTurnOlok
    - (20AUG13) TODO: refactor dice so it is not vector of ints and add different property to access the die
    - ~~(20AGU13) TODO: receive should parse input and create a collectionOfMoves (20AUG18, collectionOfMoves has been refactored to Turn) from it~~
    - (20AUG20) TODO: only the active player can take two turns
    - ~~(20AUG20) TODO: refer to line 155/156 (in game.cpp) figure out functions and parameters needed for the pseudocode~~
    - (20AUG23) TODO: set up front end with send/receive or write a receieve type funciton to handle new players
    - (20AUG30) TODO: add timerGAME to Qwixx
- current make process involves compiling all object files from dice, game, playercard to create main.exe which has to be manually linked to these objects. update makefile to support object file code
- what comes in from players: newest item checked off on row&column (maybe 2) or penalty

##  front end
    1. executable (icon is: Qwixx with two dice)
    1. home screen - falling dice in background and casino music
    1. user buttons (make a sound when clicked)
        - start/join game
        - player stats (shows game stats from prior games of all players)
        - options
        - exit
    1. during turns the outside of the screen goes from green(1min), to yellow(1.5min), to orange(pulsing), to red depending on time left
    1. user gets a Win/Loss Ratio posted in the middle-top of screen and associated title
    1. when user takes a penalty flash a RED X & -5 points across their screen and associated penalty sound
    1. game end shows score screen with a sound
    1. kyle likes sounds, emotes, "tips", levels, player back stories, subtle lists to players
    1. kyle hates loading screens, blank areas (things with no purpose)
    1. emma likes a ready check

### Simple Layout
    1. intro screen
        - intro [movie/sound], a way to interact with it (hit any key to skip to home screen)
    2. home screen
        - background, music, buttons aligned on the right: player stats, create game, join game, options, exit
    3. server screen
        - list of games to join, buttons: join, exit
    4. lobby screen
        - list of players, start button for host, exit
    5. start screen
        - same as game screen, but nothing has happened yet: 5second timer until dice get rolled
    6. game screen
        - show user's board (interactive) as 70% of screen, 30% for other users showing what they have marked off, maybe an interactive roll button (doesnt really do anything though, makes a sound)
    7. end screen
        - displays the players score, 2 buttons home screen or play again with same people
            - List of players Winner to Loser
    (20AUG28) TODO: clean up toDo list in Qwixx main folder, finish screen layouts and notes in frontend\mockeryUps

### ideas thats wont be implemented yet
    1. Players like to earn rewards/trophies/levels
    1. Players like to have notifications/tips
    1. Players like different game modes (i.e. regular point system vs. bonus points system, timed vs normal)
    1. Players dont like loading screens/lag/wait times/bugs

## the game is ended
- list the scores and indicate the winner