1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+
4+ < head >
5+ < meta charset ="utf-8 " />
6+ < title > Classic Snake Game</ title >
7+ < style type ="text/css ">
8+ body {
9+ text-align : center;
10+ }
11+
12+ canvas {
13+ border : 7px solid # 4A4747
14+ }
15+ </ style >
16+ < script type ="text/javascript ">
17+ function play_game ( ) {
18+ var game_level = 150 ;
19+ var rect_w = 45 ;
20+ var rect_h = 30 ;
21+ var snake_color = "#0520A5" ;
22+ var tn = [ ] ; // temporary directions storage
23+ var x_dir = [ - 1 , 0 , 1 , 0 ] ;
24+ var y_dir = [ 0 , - 1 , 0 , 1 ] ;
25+ var queue = [ ] ;
26+ var frog = 1 ;
27+ var map = [ ] ;
28+ var X = 5 + ( Math . random ( ) * ( rect_w - 10 ) ) | 0 ;
29+ var Y = 5 + ( Math . random ( ) * ( rect_h - 10 ) ) | 0 ;
30+ var direction = Math . random ( ) * 3 | 0 ;
31+ var interval = 0 ;
32+ var score = 0 ;
33+ var sum = 0 , easy = 0 ;
34+ var i , dir ;
35+
36+ var c = document . getElementById ( 'playArea' ) ;
37+ var ctx = c . getContext ( '2d' ) ;
38+
39+ for ( i = 0 ; i < rect_w ; i ++ ) {
40+ map [ i ] = [ ] ;
41+ }
42+
43+ function set_game_speed ( ) {
44+ if ( easy ) {
45+ X = ( X + rect_w ) % rect_w ;
46+ Y = ( Y + rect_h ) % rect_h ;
47+ }
48+ if ( tn . length ) {
49+ dir = tn . pop ( ) ;
50+ if ( ( dir % 2 ) !== ( direction % 2 ) ) {
51+ direction = dir ;
52+ }
53+ }
54+ if ( ( easy || ( 0 <= X && 0 <= Y && X < rect_w && Y < rect_h ) ) && 2 !== map [ X ] [ Y ] ) {
55+ if ( 1 === map [ X ] [ Y ] ) {
56+ score ++ ;
57+ random_snake_position ( ) ;
58+ frog ++ ;
59+ }
60+ ctx . fillRect ( X * 10 , Y * 10 , 9 , 9 ) ;
61+ map [ X ] [ Y ] = 2 ;
62+ queue . unshift ( [ X , Y ] ) ;
63+ X += x_dir [ direction ] ;
64+ Y += y_dir [ direction ] ;
65+ if ( frog < queue . length ) {
66+ dir = queue . pop ( )
67+ map [ dir [ 0 ] ] [ dir [ 1 ] ] = 0 ;
68+ ctx . clearRect ( dir [ 0 ] * 10 , dir [ 1 ] * 10 , 10 , 10 ) ;
69+ }
70+ }
71+ else if ( ! tn . length ) {
72+ var show_score = document . getElementById ( "show" ) ;
73+ show_score . innerHTML = "Your Score: <b>" + score + "</b><br/><br/> <input type='button' value='Play Again' onclick='window.location.reload();' />" ;
74+ document . getElementById ( "playArea" ) . style . display = 'none' ;
75+ window . clearInterval ( interval ) ;
76+ }
77+ }
78+
79+ function random_snake_position ( ) {
80+ var x , y ;
81+ do {
82+ x = Math . random ( ) * rect_w | 0 ;
83+ y = Math . random ( ) * rect_h | 0 ;
84+ }
85+ while ( map [ x ] [ y ] ) ;
86+ map [ x ] [ y ] = 1 ;
87+ ctx . fillStyle = snake_color ;
88+ ctx . strokeRect ( x * 10 + 1 , y * 10 + 1 , 8 , 8 ) ;
89+ }
90+
91+ random_snake_position ( ) ;
92+ interval = window . setInterval ( set_game_speed , game_level ) ;
93+
94+ document . onkeydown = function ( e ) {
95+ var code = e . keyCode - 37 ;
96+ if ( 0 <= code && code < 4 && code !== tn [ 0 ] ) {
97+ tn . unshift ( code ) ;
98+ }
99+ else if ( - 5 == code ) {
100+ if ( interval ) {
101+ window . clearInterval ( interval ) ;
102+ interval = 0 ;
103+ }
104+ else {
105+ interval = window . setInterval ( set_game_speed , 60 ) ;
106+ }
107+ }
108+ else {
109+ dir = sum + code ;
110+ if ( dir == 44 || dir == 94 || dir == 126 || dir == 171 ) {
111+ sum += code
112+ } else if ( dir === 218 ) easy = 1 ;
113+ }
114+ }
115+ }
116+ </ script >
117+ </ head >
118+
119+ < body onload ="play_game() ">
120+ < h1 > Classic Snake Game</ h1 >
121+ < div id ="show "> </ div >
122+ < canvas id ="playArea " width ="450 " height ="300 "> Looks like we found a time traveller! You need to upgrade to modern browser to enjoy this game.</ canvas >
123+ </ body >
124+
125+ </ html >
0 commit comments