51CTO技术论坛 » Web开发 » JavaScript写的贪吃蛇        上一帖     下一帖    查看完整版本

页: [1]

ddsbn2007-4-13 13:46
JavaScript写的贪吃蛇

[code]
   function cbsnake(){
   
    //Pixels to move at once
    this.jump = 8;
    //Size of snake. Make this one less than jump. Doesn't have to be,but adds good effect
    this.sos = 7;
    //Size of board
    //DANGER!!! this.sofb must be EVENLY dividable by this.jump DANGER!!!!
    this.sofb = 400;
    //Set things up
    this.daway = this.sofb - this.jump;
    this.correct = new Array();
    this.correct[0] = 0;
    while(this.correct[this.correct.length -1] != this.daway){
     this.correct[this.correct.length] = this.correct[this.correct.length -1]+this.jump
    }
    this.zero = 0;
    var gameboard = '   This is a simple game of Snake. Select a speed then use your arrow keys to attempt and eat the apple(red block), but watch out for the walls and yourself. At any time you can pause the game by pressing the space bar.This game is available at Web'>http://www.webtech101.com">Web Tech 101 and Dynamic'>http://www.dynamicdrive.com">Dynamic Drive   0  Slow Medium Fast ';
    document.write(gameboard);
   }
   
    cbsnake.prototype.setup = function(setspeed){
     var thisObj = this;
     //Score...
     this.score = 0;
     //Snake Direction
     this.sdir = 'none';
     this.sdirb = 'none';
     this.sdirp = 'none';
     //Snake arrays
     this.ctop = new Array();
     this.cleft = new Array();
     //Top of snake class
     this.ctop[0] = 200;
     this.ctop[1] = -8;
     //Left of Snake class
     this.cleft[0] = 200;
     this.cleft[1] = -8;
     //current top of apple
     this.atop = 0;
     //current left of apple
     this.aleft = 0;
     //Milliseconds between move
     this.speed = setspeed;
     document.getElementById('board').innerHTML = '';
     this.moveapple();
     this.stopgame = false;
     setTimeout(function(){ thisObj.msnake() },this.speed);
     document.onkeydown = function(e){ return thisObj.snakedir(e); };
    }
    cbsnake.prototype.slow = function(){
     this.setup(100);
     this.buttons('true');
     document.getElementById('slow').blur();
    }
    cbsnake.prototype.medium = function(){
     this.setup(70);
     this.buttons('true');
     document.getElementById('medium').blur();
    }
    cbsnake.prototype.fast = function(){
     this.setup(30);
     this.buttons('true');
     document.getElementById('fast').blur();
    }
    cbsnake.prototype.rannum = function(num1,num2){
     num1 = parseInt(num1);
     num2 = parseInt(num2);
     var generator = Math.random()*(Math.abs(num2-num1));
     generator = Math.round(num1+generator);
     return generator;
    }
    cbsnake.prototype.moveapple = function(){
     var usethis = false;
     while(!usethis){
      this.atop = this.correct[this.rannum(0,this.correct.length-1)];
      this.aleft = this.correct[this.rannum(0,this.correct.length-1)];
      if(this.numInArray(this.ctop,this.cleft,this.atop,this.aleft) == 0){
       usethis = true;
      }   
     }
     document.getElementById('apple').style.top = this.atop+"px";
     document.getElementById('apple').style.left = this.aleft+"px";
    }
    cbsnake.prototype.snakedir = function(e){  
      if(!e){
       //IE...
       e = window.event;
      }
      switch(e.keyCode){
       case 38:
        if(this.sdir != 'down' && this.sdirp != 'down'){
         this.sdirb = 'up';
         this.sdirp = 'up';
        }
        break;
       case 40:
        if(this.sdir != 'up' && this.sdirp != 'up'){
        this.sdirb = 'down';
        this.sdirp = 'down';
        }
        break;
       case 37:
        if(this.sdir != 'right' && this.sdirp != 'right'){
        this.sdirb = 'left';
        this.sdirp = 'left';
        }
        break;
       case 39:
        if(this.sdir != 'left' && this.sdirp != 'left'){
        this.sdirb = 'right';
        this.sdirp = 'right';
        }
        break;
       case 32:
        if(this.sdir == 'none' && this.sdirp != 'none'){
         this.sdirb = this.sdirp;
         this.sdirp = 'none';
        }
        else{
        this.sdirp = this.sdir;
        this.sdirb = 'none';
        }
        break;
      }
      return this.stopgame;
      
    }
    cbsnake.prototype.msnake = function(){
     if(this.stopgame === false){
      if(this.sdir != 'none'){
       this.moveall();
      }
      var thisObj = this;
      switch(this.sdir){
        case 'up':
         this.ctop[0] = this.ctop[0] - this.jump;
         document.getElementById('snake0').style.top = this.ctop[0]+"px";
         if((this.ctop[0] == this.zero && this.sdirb == 'up') || this.ctop[0]  this.daway){
          this.gover();
         }
         break;
        case 'left':
         this.cleft[0] = this.cleft[0] - this.jump;
         document.getElementById('snake0').style.left = this.cleft[0]+"px";
         if((this.cleft[0] == this.zero && this.sdirb == 'left') || this.cleft[0]  this.daway){
          this.gover();
         }
         break;
      }
      if(this.sdir != 'none'){
       this.hitself();
       this.happle();
      }
     this.sdir = this.sdirb
     setTimeout(function(){ thisObj.msnake() },this.speed);
     }
    }
    cbsnake.prototype.gover = function(){
     if(!this.stopgame){
      this.stopgame = true;
      var inner = document.getElementById('board').innerHTML;
      document.getElementById('board').innerHTML = inner+'Game Over! Your Score was '+this.score+'This is a simple game of Snake. Select a speed then use your arrow keys to attempt and eat the apple(red block), but watch out for the walls and yourself. At any time you can pause the game by pressing the space bar.This game is available at Web'>http://www.webtech101.com">Web Tech 101 and Dynamic'>http://www.dynamicdrive.com">Dynamic Drive';
      document.getElementById('apple').style.backgroundColor = '#D7BEBE';
      for(i=0;i 1){
      this.gover();
     }
    }
    cbsnake.prototype.buttons = function(setto){
     document.getElementById('slow').disabled = setto;
     document.getElementById('medium').disabled = setto;
     document.getElementById('fast').disabled = setto;
    }
  
  
   .board{
   width: 399px;
   background-color: lightgrey;
   border: 1px solid gray;
   position: relative;
   margin-left: 0;
   margin-top: 0;
   }
   #board{
   height: 399px;
   border-bottom: 0px;
   }
   #apple{
   position: absolute;
   background-color: red;
   height: 7px;
   width: 7px;
   overflow: hidden;
   }
   .snake{
   position: absolute;
   top: 200px;
   left: 200px;
   background-color: black;
   height: 7px;
   width: 7px;
   overflow: hidden;
   }
   .snake2{
   position: absolute;
   top: -10px;
   left: -10px;
   background-color: black;
   height: 7px;
   width: 7px;
   overflow: hidden;
   }
   #score{
   height: 50px;
   margin-top: 0px;
   }
   #cscore{
   color: black;
   padding-left: 10px;
   float: left;
   width: 25%;
   font-size: xx-large;
   }
   #buttons{
   float: right;
   width: 50%;
   text-align: right;
   padding-top: 10px;
   }
   #notice{
   position: absolute;
   top: 1em;
   left: 1em;
   right: 1em;
   text-align: center;
   font-size: 150%;
   }
   #i2{
   position: absolute;
   bottom: 1em;
   left: 1em;
   right: 1em;
   text-align: center;
   font-size: 95%;
   }
  



var snake = new cbsnake();



[/code]

关键词: javascript       c       RIP       JAVA       t       

相关文章:
精通struts.基于MVC的.java.web设计与开发
rip协议理解『原创』一、概述
Microsoft.Windows.Longhorn.Server.32Bit.Build.6001.16497.April.CTP.DVD
好奇怪的vsftpd问题! 前几天还好用,突然就上传不了啦!
SAP Interactive Excel

查看完整版本: JavaScript写的贪吃蛇


Powered by 51CTO.COM