Added timer
This commit is contained in:
32
src/App.js
32
src/App.js
@@ -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}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user