Refactor TicTacToeCell interface and callback, and implement game reset.
This commit is contained in:
		
							parent
							
								
									82492e10d9
								
							
						
					
					
						commit
						69a13f7a7f
					
				| @ -13,9 +13,18 @@ function TicTacToe() { | |||||||
| 		setGridState(gridState); | 		setGridState(gridState); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	function resetGridState() { | ||||||
|  | 		setGridState(Array(9).fill(0)); | ||||||
|  | 		setPlayerState(false); | ||||||
|  | 		setWinState(0); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	function playTurn(index : number) { | 	function playTurn(index : number) { | ||||||
|  | 		if (winState) { | ||||||
|  | 			resetGridState() | ||||||
|  | 			return; | ||||||
|  | 		} | ||||||
| 		if (gridState[index]) return; | 		if (gridState[index]) return; | ||||||
| 		if (winState) return; |  | ||||||
| 
 | 
 | ||||||
| 		const newState = playerState ? 2 : 1; | 		const newState = playerState ? 2 : 1; | ||||||
| 		updateGridState(index, newState); | 		updateGridState(index, newState); | ||||||
| @ -106,9 +115,9 @@ function TicTacToe() { | |||||||
| 				<div className="TicTacToeGrid"> | 				<div className="TicTacToeGrid"> | ||||||
| 				{ | 				{ | ||||||
| 					gridState.map((item, index) => { | 					gridState.map((item, index) => { | ||||||
| 						const getState = () => { return gridState[index] }; | 						const state = gridState[index]; | ||||||
| 						const callback = () => { playTurn(index) }; | 						const onClick = () => { playTurn(index) }; | ||||||
| 						return (<TicTacToeCell getState={getState} callback={callback}/>); | 						return (<TicTacToeCell state={state} onClick={onClick}/>); | ||||||
| 					}) | 					}) | ||||||
| 				} | 				} | ||||||
| 				</div> | 				</div> | ||||||
| @ -117,19 +126,15 @@ function TicTacToe() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| interface CellProps { | interface CellProps { | ||||||
| 	getState: () => number; | 	state: number; | ||||||
| 	callback: () => void; | 	onClick: () => void; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| function TicTacToeCell({ getState, callback }: CellProps) { | function TicTacToeCell({ state, onClick }: CellProps) { | ||||||
| 
 |  | ||||||
| 	function handleClick() { |  | ||||||
| 		callback() |  | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	return ( | 	return ( | ||||||
| 			<div className={`TicTacToeCell ${getStateClass(getState())}`} onClick={handleClick}> | 			<div className={`TicTacToeCell ${getStateClass(state)}`} onClick={onClick}> | ||||||
| 				<p>{getStateChar(getState())}</p> | 				<p>{getStateChar(state)}</p> | ||||||
| 			</div> | 			</div> | ||||||
| 		   ); | 		   ); | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user