add license and readme
This commit is contained in:
parent
6d6716acbf
commit
7ba82b569b
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2023 emclrk
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
140
doc/design.txt
140
doc/design.txt
@ -1,140 +0,0 @@
|
||||
Classes:
|
||||
|
||||
class Factory {
|
||||
public:
|
||||
Factory() : tileCounts(), isEmpty(false) {}
|
||||
private:
|
||||
int tileCounts[NUMCOLORS]; // initialize to 0s
|
||||
bool isEmpty; // initialize to false
|
||||
}
|
||||
|
||||
class Player {
|
||||
public:
|
||||
Player();
|
||||
void checkValidMove(TileColor color, int rowIdx) {
|
||||
// check if valid move (color exists on selected factory, grid doesn't already have this color on that row,
|
||||
// row is either empty or already has the same color)
|
||||
}
|
||||
void takeTilesFromFactory(int factoryIdx, TileColor color, int rowIdx) {
|
||||
// call game board -> takeTiles(factoryIdx, color)
|
||||
placeTiles(color, rowIdx);
|
||||
}
|
||||
void takeTilesFromPool(TileColor color, int rowIdx) {
|
||||
// call game board -> takeTilesFromPool
|
||||
int numTiles = 0;
|
||||
bool poolPenalty = myGameBoardPtr->takeTilesFromPool(color, numTiles);
|
||||
placeTiles(rowIdx, numTiles);
|
||||
} // takeTilesFromPool
|
||||
void placeTiles(int rowIdx, int numTiles) {
|
||||
// increment row with # of new tiles
|
||||
rows[rowIdx] += numTiles;
|
||||
int maxNumInRow = rowIdx + 1;
|
||||
// if tiles overflow the row, take penalty(ies)
|
||||
if (rows[rowIdx] > maxNumInRow) {
|
||||
myNumPenaltiesForTurn += (rows[rowIdx] - maxNumInRow);
|
||||
rows[rowIdx] = maxNumInRow;
|
||||
}
|
||||
} // placeTiles
|
||||
void endRound() {
|
||||
// determine which rows are full of tiles
|
||||
// update the grid
|
||||
// send extra tiles back to the game board
|
||||
// find the score for each tile placed
|
||||
for (int ii = 0; ii < NUMCOLORS; ++ii) {
|
||||
if (myRows[ii].first == (ii+1)) {
|
||||
// filled a row. now place a tile on the grid
|
||||
// determine which column it belongs to
|
||||
int col = (ii + 5 - myRows[ii].second) % 5;
|
||||
grid[ii][col] = true;
|
||||
// search horizontally and vertically for points
|
||||
myScore += scoreTile(ii, col);
|
||||
// return extra tiles
|
||||
myBoardPtr->returnTilesToBag(ii, myRows[ii].second);
|
||||
// reset rows for next turn
|
||||
myRows[ii].first = 0;
|
||||
myRows[ii].second = NONE;
|
||||
}
|
||||
}
|
||||
// Account for penalties
|
||||
} // endRound
|
||||
|
||||
int scoreTile(int row, int col) {
|
||||
int tileScore = 1;
|
||||
// Get column score
|
||||
for (int ii = row - 1; ii > -1; --ii) {
|
||||
if (!grid[ii][col]) {
|
||||
break;
|
||||
}
|
||||
tileScore++;
|
||||
} // iterate above current row
|
||||
for (int ii = row; ii < NUMCOLORS; ++ii) {
|
||||
if (!grid[ii][col]) {
|
||||
break;
|
||||
}
|
||||
tileScore++;
|
||||
} // iterate from current row down
|
||||
// Get row score
|
||||
for (int ii = col - 1; ii > -1; --ii) {
|
||||
if (!grid[row][ii]) {
|
||||
break;
|
||||
}
|
||||
tileScore++;
|
||||
} // iterate left of current column
|
||||
for (int ii = col; ii < NUMCOLORS; ++ii) {
|
||||
if (!grid[row][ii]) {
|
||||
break;
|
||||
}
|
||||
tileScore++;
|
||||
} // iterate from current column to right
|
||||
} // scoreTile
|
||||
|
||||
void finalScore() {
|
||||
// compute bonuses for rows, columns, 5 of a kind
|
||||
}
|
||||
|
||||
private:
|
||||
// color = r + c % 5
|
||||
bool myGrid[5][5];
|
||||
std::pair<int, TileColor> myRows[NUMCOLORS]; // first - # of tiles on that row, second - color of tiles on row
|
||||
GameBoard* myBoardPtr;
|
||||
int myScore;
|
||||
int myNumPenaltiesForTurn;
|
||||
};
|
||||
|
||||
// who manages turns and rounds? probably the main function
|
||||
|
||||
class GameBoard {
|
||||
public:
|
||||
enum TileColor {
|
||||
NONE = -1,
|
||||
RED = 0,
|
||||
BLUE,
|
||||
GREEN,
|
||||
YELLOW,
|
||||
BLACK,
|
||||
NUMCOLORS
|
||||
};
|
||||
GameBoard();
|
||||
bool takeTilesFromFactory(int factoryIdx, TileColor color, uint6_t& numTiles) {
|
||||
// clear factory
|
||||
// add other tiles to pool
|
||||
// return # of tiles given to player
|
||||
// if failed, return false
|
||||
}
|
||||
bool takeTilesFromPool(TileColor color, uint6_t& numTiles) {
|
||||
// zero color count in pool
|
||||
// return # of tiles given to player (-1 if failed)
|
||||
// if failed, return false
|
||||
}
|
||||
bool returnTilesToBag(uint6_t numTiles, TileColor color);
|
||||
void endGame(); // called by a player if they get a row
|
||||
private:
|
||||
void dealTiles();
|
||||
void resetTiles();
|
||||
members:
|
||||
- vector of factories?
|
||||
int pool[NUMCOLORS]; // stores the count of each color currently in the pool; initialize to 0s
|
||||
bool whiteTileInPool; // initialize to true
|
||||
std::vector<TileColor> tileBag; // initialize to 20 of each color
|
||||
bool lastRound; // initialize to false
|
||||
};
|
Loading…
x
Reference in New Issue
Block a user