Added timer

This commit is contained in:
2020-11-08 17:59:45 -03:00
parent 493645737f
commit bbb0227300
2 changed files with 35 additions and 1 deletions

View File

@@ -5,6 +5,9 @@ import { GameService } from 'services';
const gameClient = new GameService(); const gameClient = new GameService();
let timer = null;
let elapsed = 0;
function App() { function App() {
const [cols, setCols] = useState(10); const [cols, setCols] = useState(10);
const [dummyBoard, setDummyBoard] = useState([]); const [dummyBoard, setDummyBoard] = useState([]);
@@ -13,6 +16,8 @@ function App() {
const [rows, setRows] = useState(10); const [rows, setRows] = useState(10);
const [updateDummyBoard, setUpdateDummyBoard] = useState(true); const [updateDummyBoard, setUpdateDummyBoard] = useState(true);
const [activeGame, setActiveGame] = useState(null); const [activeGame, setActiveGame] = useState(null);
const [hadFirstGameClick, setHadFirstGameClick] = useState(false);
const [elapsedTime, setElapsedTime] = useState(0);
const handleSetRows = event => { const handleSetRows = event => {
const value = parseInt(event.target.value); const value = parseInt(event.target.value);
@@ -82,6 +87,9 @@ function App() {
} }
if (activeGame && activeGame.win === true) { if (activeGame && activeGame.win === true) {
// Stop timer
clearInterval(timer);
document.getElementsByClassName('reset')[0].innerHTML = '😎'; document.getElementsByClassName('reset')[0].innerHTML = '😎';
// Search for all unrevealed squares to put the flag // Search for all unrevealed squares to put the flag
@@ -96,6 +104,9 @@ function App() {
} }
if (activeGame && activeGame.win === false) { if (activeGame && activeGame.win === false) {
// Stop timer
clearInterval(timer);
// search for all mines on board // search for all mines on board
activeGame.board.map((row, rowId) => activeGame.board.map((row, rowId) =>
row.map((col, colId) => { row.map((col, colId) => {
@@ -108,10 +119,26 @@ function App() {
} }
}); });
const incrementElapsedTime = () => {
elapsed += 1;
console.log(elapsedTime, elapsed);
setElapsedTime(elapsed);
};
const handlePlayTimer = () => {
timer = setInterval(incrementElapsedTime, 1000);
};
const handleCellClick = (row, col) => { const handleCellClick = (row, col) => {
if (activeGame.status === 3 || activeGame.win === true) { if (activeGame.status === 3 || activeGame.win === true) {
return; return;
} }
if (hadFirstGameClick === false) {
setHadFirstGameClick(true);
handlePlayTimer();
}
const cell = document.getElementById(`cell_${row}_${col}`); const cell = document.getElementById(`cell_${row}_${col}`);
if ( if (
cell.classList.contains('flagged') || cell.classList.contains('flagged') ||
@@ -196,8 +223,12 @@ function App() {
} }
gameClient.createNewGame(rows, cols, mines).then(response => { gameClient.createNewGame(rows, cols, mines).then(response => {
setHadFirstGameClick(false);
setActiveGame(response); setActiveGame(response);
setFlags(mines); setFlags(mines);
clearInterval(timer);
setElapsedTime(0);
elapsed = 0;
document.getElementsByClassName('reset')[0].innerHTML = '🙂'; document.getElementsByClassName('reset')[0].innerHTML = '🙂';
generateDummyBoard(); generateDummyBoard();
}); });
@@ -222,6 +253,7 @@ function App() {
setMines={setMines} setMines={setMines}
setRows={handleSetRows} setRows={handleSetRows}
setUpdateDummyBoard={setUpdateDummyBoard} setUpdateDummyBoard={setUpdateDummyBoard}
elapsedTime={`${elapsedTime}`}
/> />
<Board <Board
cols={cols} cols={cols}

View File

@@ -5,6 +5,7 @@ import './styles.scss';
const Header = ({ const Header = ({
cols, cols,
elapsedTime,
flags, flags,
handleCreateNewGame, handleCreateNewGame,
handleSetMines, handleSetMines,
@@ -68,7 +69,7 @@ const Header = ({
}}> }}>
🙂 🙂
</div> </div>
<div className="timer led-panel">000</div> <div className="timer led-panel">{elapsedTime}</div>
</div> </div>
</div> </div>
); );
@@ -76,6 +77,7 @@ const Header = ({
Header.propTypes = { Header.propTypes = {
cols: PropTypes.number, cols: PropTypes.number,
elapsedTime: PropTypes.string.isRequired,
flags: PropTypes.number, flags: PropTypes.number,
handleCreateNewGame: PropTypes.func.isRequired, handleCreateNewGame: PropTypes.func.isRequired,
handleSetMines: PropTypes.func.isRequired, handleSetMines: PropTypes.func.isRequired,