Techno

Snake v1.0 by www.technoslab.in / Manish Raj

Nov 25th, 2012
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 16.49 KB | None | 0 0
  1. <?php
  2.     if(isset($_POST['level']) && isset($_POST['ini_len'])){
  3.         $level = intval($_POST['level']);
  4.         $ini_len = intval($_POST['ini_len']);
  5.         if($level < 0){
  6.             $level = 1;
  7.         }
  8.         if($level > 10){
  9.             $level = 10;
  10.         }
  11.         if($ini_len < 1){
  12.             $ini_len = 1;
  13.         }
  14.         if($ini_len > 20){
  15.             $ini_len = 20;
  16.         }
  17.     }else{
  18.         ?>
  19.         <form method="POST" action="">
  20.             Level: <select name="level">
  21.             <?php
  22.             for($i = 0; $i <= 10; $i++){
  23.                 echo '<option value="'.$i.'">'.$i.'</option>';
  24.             }
  25.             ?>
  26.             </select>
  27.             Initial Length: <select name="ini_len">
  28.             <?php
  29.             for($i = 1; $i <= 20; $i++){
  30.                 echo '<option value="'.$i.'">'.$i.'</option>';
  31.             }
  32.             ?>
  33.             </select>
  34.             <input type="submit" name="submit" value="Start Game" />
  35.         </form>
  36.         <?php
  37.         exit;
  38.     }
  39. ?>
  40. <!DOCTYPE html>
  41. <html>
  42.     <head>
  43.         <title>Snake v1.0</title>
  44.         <script type="text/javascript">
  45.         window.onload = function(){
  46.                
  47.                 // Constants
  48.                 var KEY_UP = 38;
  49.                 var KEY_LEFT = 37;
  50.                 var KEY_DOWN = 40;
  51.                 var KEY_RIGHT = 39;
  52.                 var DIR_UP = 38;
  53.                 var DIR_LEFT = 37;
  54.                 var DIR_DOWN = 40;
  55.                 var DIR_RIGHT = 39;
  56.  
  57.                 var ground_width = window.innerWidth;
  58.                 var ground_height = window.innerHeight;
  59.  
  60.                 var snake_width = 10;
  61.                 var snake_audio = new Audio("b.ogg");
  62.                 var snake_speed = 100;
  63.                 var snake_initial_length = <?php echo $ini_len; ?>;
  64.                
  65.                 var game_level =  <?php echo $level; ?>;
  66.                 var speed_increment = 10;
  67.                 var game_score = 0;
  68.                
  69.                 var body = document.getElementsByTagName('body')[0];
  70.                 body.style.padding = "0px";
  71.                 body.style.margin = "0px";
  72.                
  73.                
  74.                 // Snake ground
  75.                 var snake_ground = document.createElement("div");
  76.                 snake_ground.style.background = "#000000";
  77.                 snake_ground.style.display = "block";
  78.                 snake_ground.style.width = ground_width + "px";
  79.                 snake_ground.style.height = ground_height + "px";
  80.                 snake_ground.style.margin = "0px";
  81.                 snake_ground.style.padding = "0px";
  82.                 snake_ground.style.position = "relative";
  83.                 snake_ground.style.overflow = "hidden";
  84.                
  85.                 // Add snake ground
  86.                 body.appendChild(snake_ground);
  87.                
  88.                 // Food block
  89.                 var food = document.createElement("div");
  90.                
  91.                 var food_position = [0,0]
  92.                
  93.                 var boundary = 50;
  94.                 var max1 = ground_width - boundary;
  95.                 var max2 = ground_height - boundary;
  96.                 var min1 = snake_width + boundary;
  97.                 var min2 = snake_width + boundary;
  98.  
  99.                 var map_food_position = function(){
  100.                     console.log('('+min1+','+max1+') , ('+min2+', '+max2+')');
  101.                     food_position[0] = Math.floor((Math.random() * (max1 - min1) + min1)/min1) * min1;
  102.                     food_position[1] = Math.floor((Math.random() * (max2 - min2) + min2)/min2) * min2;
  103.                 }
  104.                
  105.                 map_food_position();
  106.                
  107.                 food.style.background = "#FF0000";
  108.                 food.style.display = "block";
  109.                 food.style.width = snake_width + "px";
  110.                 food.style.height = snake_width + "px";
  111.                 food.style.position = "absolute";
  112.                 food.style.left = food_position[0] + "px";
  113.                 food.style.top = food_position[1] + "px";
  114.                 food.style.border = "2px solid #000000";                
  115.                 // Add food block to ground
  116.                 snake_ground.appendChild(food);
  117.                
  118.                 // Game stats
  119.                 var game_stat_right = document.createElement('div');
  120.                 game_stat_right.style.display = 'block';
  121.                 game_stat_right.style.position = 'absolute';
  122.                 game_stat_right.style.right = '10px';
  123.                 game_stat_right.style.top = '10px';
  124.                 game_stat_right.style.font = 'bold 15px Monospace';
  125.                 game_stat_right.style.color = '#FFFFFF';
  126.                
  127.                 var game_stat_left = document.createElement('div');
  128.                 game_stat_left.style.display = 'block';
  129.                 game_stat_left.style.position = 'absolute';
  130.                 game_stat_left.style.left = '10px';
  131.                 game_stat_left.style.top = '10px';
  132.                 game_stat_left.style.font = 'bold 15px Monospace';
  133.                 game_stat_left.style.color = '#FFFFFF';
  134.                
  135.                 // Add game stats to ground
  136.                 snake_ground.appendChild(game_stat_right);
  137.                 snake_ground.appendChild(game_stat_left);
  138.                
  139.                
  140.                 // Snake
  141.                 var snake = new Array();
  142.                
  143.                 // Define first two blocks or elements of snake
  144.                 snake[0] = [Math.floor(ground_width/(2*snake_width)) * snake_width, Math.floor(ground_height/(2 * snake_width)) * snake_width];
  145.                 for(var i = 1; i <= snake_initial_length; i++){
  146.                     snake[i] = [snake[0][0] - i * snake_width, snake[0][1]];
  147.                 }
  148.                
  149.                 // Set initial direction to right
  150.                 var snake_direction = DIR_RIGHT;
  151.                
  152.                 // Variable to track game position
  153.                 var game_over = false;
  154.                
  155.                 var key_code;
  156.                
  157.                 var trigger_keydown_event =
  158.                     function(key_code){
  159.  
  160.                         // Create and dispatch an keyEvent to move snake's head towards snake_direction
  161.                         if( window.KeyEvent ) {
  162.                             var evObj = document.createEvent("KeyEvents");
  163.                             evObj.initKeyEvent( "keydown", true, true, window, false, false, false, false, key_code, 0 );
  164.                         } else {
  165.                             var evObj = document.createEvent("UIEvents");
  166.                             evObj.initUIEvent( "keydown", true, true, window, 1 );
  167.                             evObj.keyCode = key_code;
  168.                         }
  169.                         document.dispatchEvent(evObj);
  170.                     }
  171.                
  172.                 // Add nav keys for non-compatible browsers
  173.                 var button_up = document.createElement('button');
  174.                 button_up.style.position = 'absolute';
  175.                 button_up.style.display = 'block';
  176.                 button_up.style.width = '40px';
  177.                 button_up.style.height = '30px';
  178.                 button_up.innerHTML = '&uarr;';
  179.                 button_up.style.font = '15px Arial';
  180.                 button_up.style.top = (ground_height - 60) + 'px';
  181.                 button_up.style.left = (ground_width / 2 - 20) + 'px';
  182.  
  183.                 var button_down = document.createElement('button');
  184.                 button_down.style.position = 'absolute';
  185.                 button_down.style.display = 'block';
  186.                 button_down.style.width = '40px';
  187.                 button_down.style.height = '30px';
  188.                 button_down.innerHTML = '&darr;';
  189.                 button_down.style.font = '15px Arial';
  190.                 button_down.style.top = (ground_height - 30) + 'px';
  191.                 button_down.style.left = (ground_width/2 - 20) + 'px';
  192.  
  193.                 var button_left = document.createElement('button');
  194.                 button_left.style.position = 'absolute';
  195.                 button_left.style.display = 'block';
  196.                 button_left.style.width = '40px';
  197.                 button_left.style.height = '30px';
  198.                 button_left.innerHTML = '&larr;';
  199.                 button_left.style.font = '15px Arial';
  200.                 button_left.style.top = (ground_height - 30) + 'px';
  201.                 button_left.style.left = (ground_width / 2 - 60) + 'px';
  202.  
  203.                 var button_right = document.createElement('button');
  204.                 button_right.style.position = 'absolute';
  205.                 button_right.style.display = 'block';
  206.                 button_right.style.width = '40px';
  207.                 button_right.style.height = '30px';
  208.                 button_right.innerHTML = '&rarr;';
  209.                 button_right.style.font = '15px Arial';
  210.                 button_right.style.top = (ground_height - 30) + 'px';
  211.                 button_right.style.left = (ground_width / 2 + 20) + 'px';
  212.  
  213.                 // Handle button input
  214.                
  215.                 button_left.onclick =
  216.                     function(){
  217.                         trigger_keydown_event(KEY_LEFT);
  218.                     }
  219.                 button_right.onclick =
  220.                     function(){
  221.                         trigger_keydown_event(KEY_RIGHT);
  222.                     }
  223.                 button_down.onclick =
  224.                     function(){
  225.                         trigger_keydown_event(KEY_DOWN);
  226.                     }
  227.                 button_up.onclick =
  228.                     function(){
  229.                         trigger_keydown_event(KEY_UP);
  230.                     }
  231.                
  232.                 /*
  233.                 body.appendChild(button_up);
  234.                 body.appendChild(button_down);
  235.                 body.appendChild(button_left);
  236.                 body.appendChild(button_right);
  237.                 */
  238.                
  239.                 // Loop for as long as needed
  240.                 var game_loop =
  241.                     function(){
  242.                         if(!game_over){
  243.                            
  244.                             trigger_keydown_event(snake_direction);
  245.                             window.setTimeout(game_loop, snake_speed - speed_increment * game_level);
  246.                         }else{
  247.                             var gameover_dialog = document.createElement("div");
  248.                             gameover_dialog.style.display = "block";
  249.                             gameover_dialog.style.position = "absolute";
  250.                             gameover_dialog.style.width = "200px";
  251.                             gameover_dialog.style.height = "200px";
  252.                             gameover_dialog.style.font = "bold 20px Arial";
  253.                             gameover_dialog.style.color = "#FF0000";
  254.                             gameover_dialog.style.left = (ground_width/2 - 100) + "px";
  255.                             gameover_dialog.style.top = (ground_height/2 - 100) + "px";
  256.                             gameover_dialog.style.textAlign = "center";
  257.                             gameover_dialog.innerHTML = "GAME OVER!";
  258.                             gameover_dialog_button = document.createElement("button");
  259.                             gameover_dialog_button.style.display = "inline-block";
  260.                             gameover_dialog_button.innerHTML = "Click To Play Again";
  261.                             gameover_dialog_button.onclick = function(){
  262.                                 document.location.reload(false);
  263.                             }
  264.                             gameover_dialog.appendChild(gameover_dialog_button);
  265.                             body.appendChild(gameover_dialog);
  266.                             gameover_dialog_button.focus();
  267.                         }
  268.                     }
  269.                
  270.                 window.setTimeout(game_loop, snake_speed);
  271.                
  272.                
  273.                 // Experimental: Time wrap
  274.                 /*
  275.                 document.onclick = function(e){
  276.                     snake[0][0] = e.clientX;
  277.                     snake[0][1] = e.clientY;
  278.                 }
  279.                 */
  280.                
  281.                 // Add keyDown event handler
  282.                 document.onkeydown = function(e){
  283.                
  284.                     // Ignore keyDown events if game is over
  285.                     if(game_over){
  286.                         return null;
  287.                     }
  288.                    
  289.                     // Prevent snake from moving in reverse direction
  290.                     if(snake_direction == DIR_UP && e.keyCode == KEY_DOWN){
  291.                         return null;
  292.                     }
  293.  
  294.                     if(snake_direction == DIR_RIGHT && e.keyCode == KEY_LEFT){
  295.                         return null;
  296.                     }
  297.  
  298.                     if(snake_direction == DIR_LEFT && e.keyCode == KEY_RIGHT){
  299.                         return null;
  300.                     }
  301.  
  302.                     if(snake_direction == DIR_DOWN && e.keyCode == KEY_UP){
  303.                         return null;
  304.                     }
  305.                    
  306.                     // If one of the four navigation keys was pressed
  307.                     if(e.keyCode == KEY_UP || e.keyCode == KEY_LEFT || e.keyCode == KEY_DOWN || e.keyCode == KEY_RIGHT){
  308.                    
  309.                         // Store position of last block, will be used when adding new tail block i.e. when snake's head eats food block
  310.                         var last_x_position = snake[snake.length - 1][0];
  311.                         var last_y_position = snake[snake.length - 1][1];
  312.                        
  313.                         // Update every element to move to position of block ahead
  314.                         for(var i = snake.length - 1; i > 0 ; i--){
  315.                             snake[i][0] = snake[i-1][0];
  316.                             snake[i][1] = snake[i-1][1];
  317.                         }
  318.                        
  319.                         // If UP key was pressed ( basically released )
  320.                         if(e.keyCode == KEY_UP){
  321.                             snake[0][1] -= snake_width;
  322.                             snake_direction = DIR_UP;
  323.                         }
  324.                        
  325.                         // If LEFT key was pressed
  326.                         if(e.keyCode == KEY_LEFT){
  327.                             snake[0][0] -= snake_width;
  328.                             snake_direction = DIR_LEFT;
  329.                         }
  330.                        
  331.                         // If DOWN key was pressed
  332.                         if(e.keyCode == KEY_DOWN){
  333.                             snake[0][1] += snake_width;
  334.                             snake_direction = DIR_DOWN;
  335.                         }
  336.                        
  337.                         // If RIGHT key was pressed
  338.                         if(e.keyCode == KEY_RIGHT){
  339.                             snake[0][0] += snake_width;
  340.                             snake_direction = DIR_RIGHT;
  341.                         }
  342.                        
  343.                         // Wrap the snake at right egde
  344.                         if(snake[0][0] > ground_width){
  345.                             snake[0][0] = 0;
  346.                         }
  347.                        
  348.                         // Wrap the snake at bottom edge
  349.                         if(snake[0][1] > ground_height){
  350.                             snake[0][1] = 0;
  351.                         }
  352.                        
  353.                         // Wrap the snake at left edge
  354.                         if(snake[0][0] < 0){
  355.                             snake[0][0] = ground_width;
  356.                         }
  357.                        
  358.                         // Wrap the snake at top edge
  359.                         if(snake[0][1] < 0){
  360.                             snake[0][1] = ground_height;
  361.                         }
  362.                        
  363.                         for(var i = 1; i < snake.length; i++){
  364.                             if(snake[0][0] == snake[i][0] && snake[0][1] == snake[i][1]){
  365.                                 game_over = true;
  366.                             }
  367.                         }
  368.                        
  369.                     }
  370.                    
  371.                     // If snake's head has approached a food block
  372.                     if(Math.abs(snake[0][0] - food_position[0]) < snake_width && Math.abs(snake[0][1] - food_position[1]) < snake_width){
  373.                    
  374.                         // Add a new tail block
  375.                         snake[snake.length] = [last_x_position, last_y_position];
  376.                        
  377.                         game_score++;
  378.                         if(game_score != 0 && game_score%10 == 0 && game_level != 10){
  379.                             game_level++;
  380.                         }
  381.                        
  382.                         // Play the audio
  383.                         snake_audio.play();
  384.                        
  385.                         // Find and update food block's new position
  386.                         map_food_position();
  387.                         food.style.left = food_position[0] + 'px';
  388.                         food.style.top = food_position[1] + 'px';
  389.                     }
  390.                    
  391.                     game_stat_left.innerHTML = 'Score: ' + game_score;
  392.                     game_stat_right.innerHTML = 'Level: ' + (game_level + 1);
  393.                
  394.                     // Add or modify snake blocks on each event
  395.                     for(var i = 0; i < snake.length; i++){
  396.                         var snake_elem = document.getElementById("snake_"+i);
  397.                         if(snake_elem == null){
  398.                             snake_elem = document.createElement("div");
  399.                             snake_elem.setAttribute("id", "snake_"+i);
  400.                             snake_elem.style.position = "absolute";
  401.                             snake_elem.style.display = "block";
  402.                             snake_elem.style.width = snake_width + "px";
  403.                             snake_elem.style.height = snake_width + "px";
  404.                             snake_elem.style.background = "#00FF00";
  405.                             snake_elem.style.border = "2px solid #000000";
  406.                             snake_ground.appendChild(snake_elem);
  407.                         }
  408.                         snake_elem.style.left = snake[i][0] + "px";
  409.                         snake_elem.style.top = snake[i][1] + "px";
  410.                     }
  411.                
  412.                 };
  413.                
  414.             }
  415.             </script>
  416.     </head>
  417.     <body>
  418.     <noscript>
  419.         <h1>Please use a Javascript enabled web browser. Thank you.</h1>
  420.     </noscript>
  421.     </body>
  422. </html>
Add Comment
Please, Sign In to add comment