RotLenin

Untitled

Apr 5th, 2022
948
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React, {useEffect} from "react";
  2.  
  3. import {randomInt} from "Utils/randomInt";
  4. import {setInRandomCell} from "Utils/matrixUtils";
  5.  
  6. let oldHandler : (event) => any = () => null;
  7.  
  8. export default function GameLogic( {matrix, setter, children} ) {
  9.   /** mount */
  10.   useEffect(() => {
  11.     addSquare(2);
  12.     document.addEventListener("keydown", handleKeyPress, false);
  13.     oldHandler = handleKeyPress;
  14.   }, []);
  15.  
  16.   /** change matrix */
  17.   useEffect(() => {
  18.     document.removeEventListener("keydown", oldHandler);
  19.     document.addEventListener("keydown", handleKeyPress, false);
  20.     oldHandler = handleKeyPress;
  21.   }, [matrix])
  22.  
  23.   /** unmount */
  24.   useEffect( () => () => {
  25.     document.removeEventListener("keydown", oldHandler);
  26.   }, [] );
  27.  
  28.   function handleKeyPress(event){
  29.     let keyActionlist = {
  30.       'ArrowUp' : Up,
  31.       'ArrowDown' : Down,
  32.       'ArrowLeft' : Left,
  33.       'ArrowRight' : Right,
  34.     }
  35.  
  36.     if(keyActionlist[event.key]){
  37.       keyActionlist[event.key]();
  38.     }
  39.   }
  40.  
  41.   function Up(){
  42.     console.log('up');
  43.     //addSquare();
  44.   }
  45.  
  46.   function Down(){
  47.     console.log('down');
  48.     //addSquare();
  49.   }
  50.  
  51.   function Left(){
  52.     console.log('left');
  53.     //addSquare();
  54.   }
  55.  
  56.   function Right(){
  57.     console.log('right');
  58.     //addSquare();
  59.   }
  60.  
  61.   /**
  62.    * @description 75% Π½Π° 2 25% Π½Π° 4
  63.    * @param {number} n
  64.    */
  65.   function addSquare(n = 1){
  66.     let newMatrix : number[][]  = Array.from(matrix);
  67.     for(let i = 0; i < n; i++){
  68.       let rand = randomInt(4);
  69.       let val = rand === 3 ? 4 : 2;
  70.       newMatrix = setInRandomCell(newMatrix, val);
  71.     }
  72.     setter(newMatrix);
  73.   }
  74.  
  75.   return <div className={'game-field'} onKeyDown={handleKeyPress}>
  76.     {children}
  77.   </div>
  78. }
Advertisement
Add Comment
Please, Sign In to add comment