花了一天才搞出来的JS版贪吃蛇!

cokeyang 2005-08-21 11:15:32
今天看了看JS的数组!想用一下!JS初学者,见笑了!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>

<head>
<title>贪吃蛇 Ver 1.0</title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="Coke.Yang">
<meta name="Keywords" content>
<meta name="Description" content>
<style>
<!--
.map td { width: 8; height: 8 }
body { font-size: 8pt; font-family: Arial }
-->
</style>
<script language="JavaScript">
<!--
function Snake(){
//Property
this.mapMax = 25;
this.body = new Array();
this.arrow;
this.speed = 5;//1-10
this.Length = 1;
this.Mx=0;
this.My=0;
this.active=0;
//Method
this.createMap = function(){
document.write("<table border=\"1\" cellspacing=\"0\" cellpadding=\"3\" style=\"border-collapse: collapse\" bordercolor=\"#8F8F8F\"><tr><td>");
document.write("<table class=\"map\" border=\"1\" cellspacing=\"0\" cellpadding=\"0\" style=\"border-collapse: collapse\" bordercolor=\"#EFEFEF\">");
for(y=1;y<=this.mapMax;y++){
document.write("<tr>");
for(x=1;x<=this.mapMax;x++){
document.write("<td id=x"+x+"y"+y+" type=\"Map\"></td>");
}
document.write("</tr>");
}
document.write("</table></td></tr></table>");
}
this.createSnake = function(){
this.body[0] = new Array(this.random(),this.random());
this.set(this.body[0][0],this.body[0][1],"Snake");
}
this.createFood = function(){
var food = new Array(this.random(),this.random());
if(this.getType(food[0],food[1])!="Snake"){
this.set(food[0],food[1],"Food");
}else{
this.createFood();
}
}
this.turn = function(Arrow){
if(this.Length>1){
if(Arrow=="L" & this.Arrow!="R") this.Arrow = Arrow;
if(Arrow=="R" & this.Arrow!="L") this.Arrow = Arrow;
if(Arrow=="U" & this.Arrow!="D") this.Arrow = Arrow;
if(Arrow=="D" & this.Arrow!="U") this.Arrow = Arrow;
}else{
this.Arrow = Arrow;
}
switch(this.Arrow){
case "L":this.Mx=-1;this.My=0;break//左
case "R":this.Mx= 1;this.My=0;break//右
case "U":this.Mx=0;this.My=-1;break//上
case "D":this.Mx=0;this.My= 1;break//下
}
this.active=1;
}
this.move = function(){
if(this.active)
{
var x = this.body[0][0]+this.Mx;
var y = this.body[0][1]+this.My;

var moveTo = new Array(x,y);

this.body.unshift(moveTo);
if((this.getType(x,y)=="Snake"&this.Length>1)||this.getType(x,y)=="Null"){
this.die();
}
if(this.getType(x,y)=="Food"){
this.set(moveTo[0],moveTo[1],"Snake");
this.eat();
}

if(this.getType(x,y)=="Map"){
var temp = new Array();
temp = this.body.pop();
this.set(moveTo[0],moveTo[1],"Snake");
this.set(temp[0],temp[1],"Map");
}
var point = "x"+this.body[0][0]+"y"+this.body[0][1];
}

//-----------Debug----------------
var str="";
str="Length: "+this.Length+" Speed: "+this.speed;
document.all.ospan.innerText =str;
//-----------Debug----------------
}
this.eat = function(){
this.Length++;
this.createFood();
}

this.die = function(){
if(this.active){
window.alert("Sorry!你挂了!再来一次");
this.active = 0;
window.location.reload();
}
//this.reset();
}

this.getType = function(x,y){
var point = "x"+x+"y"+y;
if(x<1||x>this.mapMax||y<1||y>this.mapMax) return "Null";
return document.getElementById(point).type;
}
this.set = function(x,y,type){
var point = "x"+x+"y"+y;
if(type == "Snake"){
document.getElementById(point).bgColor="#787878";
}
if(type == "Map"){
document.getElementById(point).bgColor="";
}
if(type == "Food"){
document.getElementById(point).bgColor="#FF0000";
}
document.getElementById(point).type=type;
}
this.reset = function(){
//this.run();
}
this.random = function(){
return parseInt(Math.random()*this.mapMax)+1;
}
this.getSpeed = function(){
var x= parseInt(4-(this.speed/3))*100;
return x;
}
this.run = function(){
this.createMap();
this.createSnake();
this.createFood();
}
}

var iSnake = new Snake();
iSnake.run();
document.onkeydown=KeyDown;
window.setInterval("iSnake.move();",iSnake.getSpeed());
function KeyDown(){
var Key=window.event.keyCode;
switch(Key){
case 37:iSnake.turn("L");break//左
case 39:iSnake.turn("R");break//右
case 38:iSnake.turn("U");break//上
case 40:iSnake.turn("D");break//下
}
return false
}

//-->
</script>
</head>

<body>
<FONT COLOR="#FF0000">·</FONT><span id="ospan"></span>
<font size="6" face="Arial Black">·</font> 蛇
<font size="6" face="Arial Black" color="#FF0000">·</font>食物
</body>

</html>
...全文
167 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cokeyang 2005-08-22
  • 打赏
  • 举报
回复
....太晚了!都没有人!
cokeyang 2005-08-22
  • 打赏
  • 举报
回复
顺便问一下高手!
window.setInterval("iSnake.move();",iSnake.getSpeed());

我如果把这句话写在类的函数里!
用window.setInterval("this.move();",this.getSpeed());
提示错误,还有就是如果在类的方法里定义KeyDown,提示错误居然是尚未实现?

难道是JavaScript语言的先天不足?还是我孤陋寡闻?
ayukowa 2005-08-22
  • 打赏
  • 举报
回复
不错啊
原来编游戏的代码也不多的
提个建议,最好图形居中,大一点表格,背景搞点醒目的颜色
Meteorlet 2005-08-22
  • 打赏
  • 举报
回复
顶一下
precipitant 2005-08-22
  • 打赏
  • 举报
回复
不错。有时间研究一下,升升级
robot2005 2005-08-22
  • 打赏
  • 举报
回复
不错,挺好~
wesheng 2005-08-22
  • 打赏
  • 举报
回复
顶。强
cokeyang 2005-08-22
  • 打赏
  • 举报
回复
我的问题怎么没有人回答?
cokeyang 2005-08-21
  • 打赏
  • 举报
回复
感觉JS类的定义其实挺有意思的!哈哈!
有什么BUG大家告诉我一下!

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧