@@ -3,12 +3,12 @@ import cs from 'classnames';
3
3
4
4
import './App.css' ;
5
5
6
- const GRID_SIZE = 40 ;
6
+ const GRID_SIZE = 20 ;
7
7
const TICK_RATE = 100 ;
8
- const GRID_ARRAY = [ ] ;
8
+ const GRID = [ ] ;
9
9
10
10
for ( let i = 0 ; i <= GRID_SIZE ; i ++ ) {
11
- GRID_ARRAY . push ( i ) ;
11
+ GRID . push ( i ) ;
12
12
}
13
13
14
14
const KEY_CODES_MAPPER = {
@@ -38,24 +38,20 @@ const getIsGameOver = (state) =>
38
38
const getIsAllowedToChangeDirection = ( state , e ) =>
39
39
! getIsGameOver ( state ) && KEY_CODES_MAPPER [ e . keyCode ] ;
40
40
41
+ const getRandomNumberFromRange = ( min , max ) =>
42
+ Math . floor ( Math . random ( ) * ( max - min + 1 ) + min ) ;
43
+
41
44
const getRandomCoordinate = ( ) =>
42
45
( {
43
- x : Math . floor ( Math . random ( ) * GRID_SIZE ) ,
44
- y : Math . floor ( Math . random ( ) * GRID_SIZE ) ,
46
+ x : getRandomNumberFromRange ( 1 , GRID_SIZE - 1 ) ,
47
+ y : getRandomNumberFromRange ( 1 , GRID_SIZE - 1 ) ,
45
48
} ) ;
46
49
47
50
const isPosition = ( x , y , diffX , diffY ) =>
48
51
x === diffX && y === diffY ;
49
52
50
- // TODO make own some, use compose
51
- const isSnake = ( x , y , snakeCoordinates ) => {
52
- for ( var i = 0 ; i < snakeCoordinates . length ; i ++ ) {
53
- if ( isPosition ( snakeCoordinates [ i ] . x , snakeCoordinates [ i ] . y , x , y ) ) {
54
- return true ;
55
- }
56
- }
57
- return false ;
58
- } ;
53
+ const isSnake = ( x , y , snakeCoordinates ) =>
54
+ snakeCoordinates . filter ( coordinate => isPosition ( coordinate . x , coordinate . y , x , y ) ) . length ;
59
55
60
56
const getSnakeHead = ( snake ) =>
61
57
snake . coordinates [ 0 ] ;
@@ -69,8 +65,8 @@ const getSnakeTail = (snake) =>
69
65
const getIsSnakeOutside = ( snake ) =>
70
66
getSnakeHead ( snake ) . x >= GRID_SIZE ||
71
67
getSnakeHead ( snake ) . y >= GRID_SIZE ||
72
- getSnakeHead ( snake ) . x < 0 ||
73
- getSnakeHead ( snake ) . y < 0 ;
68
+ getSnakeHead ( snake ) . x <= 0 ||
69
+ getSnakeHead ( snake ) . y <= 0 ;
74
70
75
71
const getIsSnakeClumy = ( snake ) =>
76
72
isSnake ( getSnakeHead ( snake ) . x , getSnakeHead ( snake ) . y , getSnakeTail ( snake ) ) ;
@@ -105,7 +101,7 @@ const applySnakePosition = (prevState) => {
105
101
106
102
return {
107
103
snake : {
108
- coordinates : [ snakeHead ] . concat ( snakeTail ) , // babel
104
+ coordinates : [ snakeHead , ... snakeTail ] ,
109
105
} ,
110
106
snack : {
111
107
coordinate : snackCoordinate ,
@@ -125,7 +121,8 @@ const getCellCs = (isGameOver, snake, snack, x, y) =>
125
121
{
126
122
'grid-cell-snake' : isSnake ( x , y , snake . coordinates ) ,
127
123
'grid-cell-snack' : isPosition ( x , y , snack . coordinate . x , snack . coordinate . y ) ,
128
- 'grid-cell-hit' : isGameOver && isPosition ( x , y , getSnakeHead ( snake ) . x , getSnakeHead ( snake ) . y )
124
+ 'grid-cell-border' : x === 0 || y === 0 || x === GRID_SIZE || y === GRID_SIZE ,
125
+ 'grid-cell-hit' : isGameOver && isPosition ( x , y , getSnakeHead ( snake ) . x , getSnakeHead ( snake ) . y ) ,
129
126
}
130
127
) ;
131
128
@@ -196,41 +193,27 @@ class App extends Component {
196
193
197
194
const Grid = ( { isGameOver, snake, snack } ) =>
198
195
< div className = "grid" >
199
- < Border grid = { GRID_ARRAY } />
200
- { GRID_ARRAY . map ( y => < Row
201
- y = { y }
202
- key = { y }
203
- snake = { snake }
204
- snack = { snack }
205
- isGameOver = { isGameOver }
206
- /> ) }
207
- < Border grid = { GRID_ARRAY } />
196
+ { GRID . map ( y => < Row
197
+ y = { y }
198
+ key = { y }
199
+ snake = { snake }
200
+ snack = { snack }
201
+ isGameOver = { isGameOver }
202
+ /> ) }
208
203
</ div >
209
204
210
205
const Row = ( { isGameOver, snake, snack, y } ) =>
211
206
< div className = "grid-row" >
212
- < Block />
213
- { GRID_ARRAY . map ( x => < Cell
207
+ { GRID . map ( x => < Cell
214
208
x = { x }
215
209
y = { y }
216
210
key = { x }
217
211
snake = { snake }
218
212
snack = { snack }
219
213
isGameOver = { isGameOver }
220
214
/> ) }
221
- < Block />
222
- </ div >
223
-
224
- const Border = ( { grid } ) =>
225
- < div className = "grid-row" >
226
- < Block />
227
- { grid . map ( v => < Block key = { v } /> ) }
228
- < Block />
229
215
</ div >
230
216
231
- const Block = ( ) =>
232
- < div className = "grid-cell grid-cell-border" />
233
-
234
217
const Cell = ( { isGameOver, snake, snack, x, y } ) =>
235
218
< div className = { getCellCs ( isGameOver , snake , snack , x , y ) } /> ;
236
219
0 commit comments