以前写的一个面向对象的贪吃蛇游戏

原创 2014年08月24日 15:14:43
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title> 贪吃蛇 </title>
<style>
#mapbox {
  font-family: 宋体; font-size: 17px; line-height:100%;
  height:360; width:430;
}
</style>

<script language="JavaScript">
/////////////////////
//     贪吃蛇      //
//   OO+TextBox    //
//  程序作者:海浪  //
/////////////////////

var map;
var gott;

function play()
{
  clearInterval(gott);
  map = new mapClass(25,20);
  document.onkeydown = keydown;
  gott = setInterval("map.snake.go()",150);
}

function keydown(e)
{
  e = e||event;
  switch (e.keyCode)
  {
    case 38: map.snake.refx(0); break;
    case 39: map.snake.refx(1); break;
    case 40: map.snake.refx(2); break;
    case 37: map.snake.refx(3); break;
    case 17: map.snake.stoporrun(); break;
  }
}
////////////////////////////////////////////

function mapClass(x,y)
{
  this.x = x;
  this.y = y;
  this.sq = "■";
  this.sk = " ";
  this.marr = [];
  for(var iy=0; iy<this.y; iy++)
  {
    this.marr[iy] = [];
    for(var ix=0; ix<this.x; ix++)
      this.marr[iy][ix] = (ix==0||iy==0||ix==this.x-1||iy==this.y-1)?this.sq:this.sk;
  }
  this.snake = new snakeClass(this);
  this.bean = new beanClass(this);
  this.bean.newbean();
  this.bean.addn();
}

mapClass.prototype.write = function()
{
  var str = "";
  for(var ii=0; ii<this.y; ii++)
    str += this.marr[ii].join("")+"<br />";
  document.getElementById("mapbox").innerHTML = str;
}

mapClass.prototype.rexy = function(x,y,s)
{
  var str = s || this.sk;
  this.marr[y][x] = str;
}

mapClass.prototype.jcxy = function(x,y,s)
{
  var str = s || this.sk;
  return this.marr[y][x] == str;
}

////////////////////////////////////////////

function snakeClass(po)
{
  this.parent = po;
  this.mt = "●";
  this.boarr = [];
  this.bolength = 4;
  this.fang = 1;
  this.fangtt = 1;
  this.stop = false;
  this.boarr[0] = this.addbody(3,5);
  this.parent.rexy(this.boarr[0].x,this.boarr[0].y,this.mt);
}

snakeClass.prototype.go = function()
{
  if(this.stop) return;
  this.fang = this.fangtt;
  var x = this.boarr[0].x + [0,1,0,-1][this.fang];
  var y = this.boarr[0].y + [-1,0,1,0][this.fang];
  var chi = this.parent.jcxy(x,y,this.parent.bean.mt);
  if(!this.parent.jcxy(x,y) && !chi)
  {
    clearInterval(gott);
    alert("Game Over!");
    return;
  }
  if(chi)
  {
    this.bolength++;
    this.parent.bean.addn();
    this.parent.bean.newbean();
  }
  this.parent.rexy(x,y,this.mt);
  this.boarr = [].concat(this.addbody(x,y),this.boarr);
  if(this.boarr.length>this.bolength)
  {
    var tb = this.boarr.pop();
    this.parent.rexy(tb.x,tb.y);
  }
  this.parent.write();
}

snakeClass.prototype.addbody = function(x,y)
{
  return { x:x, y:y };
}

snakeClass.prototype.refx = function(n)
{
  if(Math.abs(this.fang-n)!=2)
    this.fangtt=n;
}

snakeClass.prototype.stoporrun = function()
{
  this.stop = !this.stop;
}

////////////////////////////////////////////

function beanClass(po)
{
  this.parent = po;
  this.mt = "◎";
  this.sne = -100;
}

beanClass.prototype.addn = function()
{
  this.sne+=100;
  document.getElementById("fan").innerHTML = this.sne;
}

beanClass.prototype.newbean = function()
{
  var x = Math.floor(Math.random()*(this.parent.x-2))+1;
  var y = Math.floor(Math.random()*(this.parent.y-2))+1;
  if(this.parent.jcxy(x,y))
    this.parent.rexy(x,y,this.mt);
  else
    this.newbean();
}
</script>
</head>

<body>
<center>
<h2>贪吃蛇</h2><hr>
<div id="mapbox"></div>
<input type="button" value="开始" onclick="play()"> 得分:<span id="fan"></span>
<hr>
程序作者:海浪
</center>
</body>
</html>


以前写的一个面向对象的贪吃蛇游戏,修改了一下,以适应新的浏览器

版权声明:本文为博主原创文章,未经博主允许不得转载。

原生JS实现贪吃蛇项目,附源码下载!

运行于谷歌浏览器。主要是利用了函数的封装思想,把每一个小功能分别封装在一个函数中,大大提高了代码的可扩展性!!提高了代码的可维护性!!!提高了代码的可阅读性!!!项目要求:1:有边界,碰到边界就gam...

javascript开发贪吃蛇小游戏练习

对于javascript语言,经过一段时间努力,有些入门,所以捣鼓一些小游戏练手。和之前的canvas相比,只能说有些进步,对于游戏图层分布渐渐有了模糊的认知。 对于设计模式,编程开发,算法之类的,...

html5 js 贪吃蛇游戏(基于面向对象)

其实严格意义上也不算太面向对象   初学js的话还是写写这类的回收或很大的! js小游戏之贪吃蛇 如有什么错误请留言,或者联系qq:1...

贪吃蛇小游戏(面向对象)

  • 2009年08月26日 09:44
  • 184KB
  • 下载

面向对象方法编一个简易的控制台版贪吃蛇(二)

在《 面向对象方法编一个简易的控制台版贪吃蛇(一)》中,我们已经让食物、地图蛇等可以在控制台上显示出来。下面我们应该考虑的问题是:如何通过键盘操作让蛇动起来。只有先把这个问题解决了,你在以后实现诸如吃...

一个基于HTML5的canvas的js面向对象贪吃蛇

下面是一个使用canvas API加JS面向对象的方式编写的一个贪吃蛇的简单实现,实现了穿墙、吃食物后智能加速,还缺少障碍物,地图切换,还有就是太丑了,有兴趣的朋友可以修改一下,我觉得这个还算好扩展,...

学C++ 写面向对象贪吃蛇(作风一贯::懒)

#include #include #include using namespace std; class data { private: int x; int y; public: ...

C#贪吃蛇(完全面向对象)

  • 2010年05月14日 15:17
  • 49KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:以前写的一个面向对象的贪吃蛇游戏
举报原因:
原因补充:

(最多只允许输入30个字)