Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 18th, 2012  |  syntax: JavaScript  |  size: 5.56 KB  |  hits: 10  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. var _score;
  2. var _id ;
  3.  
  4. var _point_x ;
  5. var _point_y ;
  6.  
  7. var _x ;
  8. var _y ;
  9. var _tail_x = [];
  10. var _tail_y = [];
  11.  
  12.  
  13. var _length ; // длина хвоста
  14.  
  15.  
  16. var cr_mtrx_again = true ;
  17. var _prev_dir = 'RIGHT';
  18.  
  19.  
  20. var _extra_fruit = false ;
  21. var time = -1 ;
  22. var count = 0 ;
  23.  
  24. //
  25.  
  26. // Создание матрицы.
  27. //
  28. function createMatrix() // class Matrix
  29. {
  30.         var matrix = document.getElementById('matrix');//объект матрица
  31.         var n = 20 * 20;
  32.  
  33.         for (var i = 0; i < n; i++)
  34.         {
  35.                 var div = document.createElement('div');//cрздание объекта div c именем класса  cell
  36.                 div.className = 'cell';
  37.                 div.style.backgroundImage = 'url(pixel.png)';
  38.                 matrix.appendChild(div);//заносим в матрицу детей div cell
  39.                
  40.         }
  41.  
  42.  
  43. }
  44. function showScore(time) //
  45. {
  46.         document.getElementById('score').innerHTML = 'Score : ' + _score;
  47.        
  48.  
  49.         if (_extra_fruit && time )
  50.         document.getElementById('time_left').innerHTML = 'Time : ' + time;
  51.         else
  52.         document.getElementById('time_left').innerHTML = '' ;
  53. }
  54.  
  55. //
  56. // Чтение ячейки матрицы.
  57. //
  58. function getCell(row,col)
  59. {
  60.         var div = document.getElementById('matrix');   
  61.         if ( div.children[20*(row-1) + col -1].style.backgroundColor == 'red' )
  62.         return true ;
  63.         else
  64.         return false ;
  65.  
  66. }
  67.  
  68. //
  69. // Установка ячейки матрицы.
  70. //
  71. function setCell(row,col,url, val)
  72. {
  73.    
  74.         var div_matrix = document.getElementById('matrix');
  75.  
  76.         if ( val == true )
  77.         div_matrix.children[(row-1)*20 + col-1].style.backgroundImage = url;
  78.         else
  79.         {
  80.         div_matrix.children[(row-1)*20 + col-1].style.backgroundImage = 'url(pixel.png)';
  81.         }
  82.  
  83. }
  84.  
  85. document.onkeydown = function(event)
  86. {
  87. if (window.event)
  88.                 event = window.event;
  89.                
  90.  
  91.     switch (event.keyCode)
  92.         {
  93.                 //влево
  94.                 case 37: {if (_prev_dir != 'RIGHT' && _prev_dir != 'LEFT') move_snake('LEFT'); break;}
  95.                 //вверх
  96.                 case 38: {if (_prev_dir != 'UP' && _prev_dir != 'DOWN') move_snake('UP'); break;}
  97.                 //вправо
  98.                 case 39: {if (_prev_dir != 'RIGHT' && _prev_dir != 'LEFT') move_snake('RIGHT'); break;}
  99.                 //вниз
  100.                 case 40: {if (_prev_dir != 'UP' && _prev_dir != 'DOWN') move_snake('DOWN'); break;}
  101.         }
  102.        
  103. }
  104.  
  105. function crash_snake()
  106. {
  107.         var lose ;
  108.        
  109.         // границы
  110.         if (_x == 0 || _x == 21 || _y == 0 || _y == 21)
  111.         {
  112.                 lose = true ;
  113.         }
  114.        
  115.         // врезание в своё тело
  116.         for ( i = 0 ; i < _length ; i ++ )
  117.         {
  118.                 if (_x == _tail_x[i] && _y == _tail_y[i])
  119.                 {
  120.                         lose = true ;                  
  121.                         break ;
  122.                 }
  123.         }
  124.        
  125.         if (lose == true)
  126.         {
  127.                 clearInterval(_id);
  128.                 alert('Вы проиграли') ;
  129.                 erase_matrix();
  130.                
  131.                 _prev_dir = 'RIGHT';
  132.                 cr_mtrx_again = false ;
  133.                 return true ;
  134.         }
  135.        
  136.         return false ;
  137.        
  138. }
  139.  
  140. function set_point()
  141. {
  142.         _point_x = Math.floor(Math.random()*20+1);
  143.         _point_y = Math.floor(Math.random()*20+1);
  144.        
  145.         if ( _point_x == _x && _point_y ==_y)
  146.         set_point();
  147.        
  148.         for ( i = 0 ; i < _length ; i ++ )
  149.         {
  150.                 if ((_point_x == _tail_x[i]) && (_point_y == _tail_y[i]))
  151.                 {
  152.                         set_point();
  153.                 }
  154.         }
  155.        
  156.         if (_extra_fruit)
  157.         setCell(_point_x,_point_y,'url(extra_fruit.png)',true);
  158.         else
  159.         setCell(_point_x,_point_y,'url(fruit_pixel.png)',true);
  160.        
  161. }
  162. function eat_point(last_x,last_y)
  163. {
  164.  
  165. if ( (_x == _point_x) && (_y == _point_y) )
  166. {
  167. _score+= (_extra_fruit) ? time : 1 ;
  168.  
  169. if (_extra_fruit == true )
  170. _extra_fruit = false ;
  171.  
  172. _length++;
  173.  
  174. _tail_x[_length-1] = last_x;
  175. _tail_y[_length-1] = last_y;
  176.  
  177. return true ;
  178. }
  179.  
  180. return false;
  181. }
  182.  
  183. function create_snake(size,x,y)
  184. {
  185.        
  186.         _length = size-1;//длина хвоста - 3
  187.         _x = x ;
  188.         _y = y ;
  189.  
  190.         for (i = 0; i <_length ; i++) // от 0 до 2
  191.         {
  192.                 _tail_x[i] = _x ;
  193.                 _tail_y[i] = _y -(i+1);
  194.         }
  195.  
  196.         draw_snake() ;
  197.  }
  198.  
  199. function erase_matrix()
  200.  {
  201.         for ( i = 1 ; i <= 20 ; i++ )
  202.         {
  203.                 for ( j = 1 ; j <= 20 ; j++ )
  204.                 setCell(i,j,false);
  205.         }
  206.  }
  207.  
  208. function draw_snake()
  209.  {
  210.         setCell(_x,_y,'url(snake_pixel.png)',true); // голова
  211.        
  212.         var i ;
  213.         for ( i = 0 ; i < _length ; i++ )
  214.         {
  215.                 setCell(_tail_x[i],_tail_y[i],'url(snake_pixel.png)',true);
  216.         }
  217.  }
  218.  
  219. //
  220. // Точка входа.
  221. //
  222. window.onload = function()
  223. {
  224.        
  225.         _score = 0;
  226.         showScore();
  227.         if (cr_mtrx_again)
  228.         createMatrix();
  229.        
  230.         set_point();
  231.         create_snake(3,10,10);
  232.     move_snake('RIGHT');
  233.  
  234. //  set_point();       
  235. }
  236.  
  237.  
  238.  
  239. function move_snake(dir_move)
  240. {
  241.  
  242.  
  243. switch (dir_move)
  244. {
  245. case 'LEFT' :  {_prev_dir = 'LEFT' ; break }
  246. case 'RIGHT' : {_prev_dir = 'RIGHT' ; break }
  247. case 'UP' :    {_prev_dir = 'UP' ;break }
  248. case 'DOWN' :  {_prev_dir = 'DOWN' ; break }
  249. }
  250.  
  251. var last_x ;
  252. var last_y ;
  253.  
  254. clearInterval(_id);
  255. _id = setInterval( function ()
  256. {
  257.  
  258. if (!time)
  259. {
  260. _extra_fruit = false ;
  261. setCell(_point_x,_point_y,false);
  262. time = - 1;
  263. set_point();
  264. }
  265.  
  266.  
  267. if (_extra_fruit) count ++ ;
  268.  
  269. // время бонуса
  270. time-= (_extra_fruit && (count == 5 )) ? 1 : 0;
  271. count = (count==5) ? 0 : count ;
  272.  
  273. last_x = _tail_x[_length-1] ;
  274. last_y = _tail_y[_length-1] ;
  275.  
  276.  
  277.  for ( i = _length ; i >= 0 ; i -- )
  278.  {
  279.  if (i)
  280.  {
  281.         _tail_x[i] = _tail_x[i-1];
  282.         _tail_y[i] = _tail_y[i-1];
  283. }
  284.  else
  285.  {
  286.     _tail_x[i] = _x;
  287.         _tail_y[i] = _y;
  288.  }
  289.  }
  290.  
  291. switch (dir_move)
  292. {
  293. case 'LEFT' :  {--_y; break;}
  294. case 'RIGHT' : {++_y; break;}
  295. case 'UP' :    {--_x; break;}
  296. case 'DOWN' :  {++_x; break;}
  297. }
  298.  
  299. showScore(time);
  300.  
  301.  
  302. if (!crash_snake())
  303. {
  304.  
  305. if (!eat_point(last_x,last_y))
  306. {
  307. setCell(last_x,last_y,false ); // последний элемент хвоста
  308. }
  309. else
  310. {
  311. if (( _score > 0 ) && (!(_score % 5)) )
  312. {
  313. _extra_fruit = true ;
  314. time = 5 ;
  315. }
  316. set_point();
  317. }
  318.  
  319. draw_snake();
  320.  
  321. }
  322.  
  323. else
  324. window.onload();
  325. },100 ) ;
  326. }