html PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
Insert title here#container{
position:absolute;
top:10px;
left:300px;
}
#canvas{
position:absolute;
top:0px;
left:px;
}
#d{
height:20px;
width:20px;
background-color:#F7FCF7;
border-style:groove;
border-width:15px;
border-color:#667560;
}
varctx;
varx;
vary;
varscreenHeight;
varscreenWidth;
varwoodImg=newImage();
varhardImg=newImage();
vargrassImg=newImage();
varmyTankImg=newImage();
vareagleImg=newImage();
varTankData={speed:10,direction:"up"};
vartime=8;
//坦克
varGameObject=function(){this.x=0;this.y=0;this.p_w_picpath=null;};
varTank=function(){};Tank.prototype=newGameObject();
varmyTank=newTank();
//×××
varbulletFun=function(){
this.x=0;
this.y=0;
this.direction="";
this.speed=2;
this.strong=1;
}
varbulletArr=newArray(0);
$(window).ready(function(){
ctx=document.getElementById("canvas").getContext("2d");
screenWidth=parseInt($("#canvas").attr("width"));
screenHeight=parseInt($("#canvas").attr("height"));
keyDownEven();
mouseClick();
LoadData();
GameStart();
});
//初始化相关数据
varLoadData=function(){
myTank.x=200;
myTank.y=560;
mapArrayVal();
}
//游戏开始加载所有图形
varGameStart=function(){
ctx.clearRect(0,0,screenWidth,screenHeight);
ctx.save();
loadImg();
drawMap();
drawMyTank();
ctx.restore();
}
//加载图片
varloadImg=function(){
woodImg.src="p_w_picpaths/wood.jpg";
hardImg.src="p_w_picpaths/hard.jpg";
grassImg.src="p_w_picpaths/grass.jpg";
myTankImg.src="p_w_picpaths/tank.png";
eagleImg.src="p_w_picpaths/eagle.jpg";
myTank.p_w_picpath=myTankImg;
}
//地图用二维数组表示,0表示空,1表示红砖,2表示铁砖,3表示草皮,4未定(暂用草皮)
varmapArray=newArray(30);
varmapArrayVal=function(){
for(vari=0;i
mapArray[i]=newArray(30);
for(varj=0;j
mapArray[i][j]=parseInt(10*Math.random());
}
}
//地图有些地方时不能有红砖,草皮等东西的
mapArray[0][0]=0;mapArray[1][0]=0;mapArray[13][0]=0;mapArray[14][0]=0;mapArray[28][0]=0;mapArray[29][0]=0;
mapArray[0][1]=0;mapArray[1][1]=0;mapArray[13][1]=0;mapArray[14][1]=0;mapArray[28][1]=0;mapArray[29][1]=0;
mapArray[12][27]=1;mapArray[13][27]=1;mapArray[14][27]=1;mapArray[15][27]=1;mapArray[16][27]=1;mapArray[17][27]=1;
mapArray[10][28]=0;mapArray[11][28]=0;mapArray[12][28]=1;mapArray[13][28]=1;mapArray[14][28]=0;mapArray[15][28]=0;mapArray[16][28]=1;mapArray[17][28]=1;mapArray[18][28]=0;mapArray[19][27]=0;
mapArray[10][29]=0;mapArray[11][29]=0;mapArray[12][29]=1;mapArray[13][29]=1;mapArray[14][29]=0;mapArray[15][29]=0;mapArray[16][29]=1;mapArray[17][29]=1;mapArray[18][29]=0;mapArray[19][29]=0;
}
//绘制地图
vardrawMap=function(){
for(vari=0;i
for(varj=0;j
x=i*20;
y=j*20;
if(mapArray[i][j]==1){
ctx.drawImage(woodImg,x,y);
}elseif(mapArray[i][j]==2){
ctx.drawImage(hardImg,x,y);
}elseif(mapArray[i][j]==3){
ctx.drawImage(grassImg,x,y);
}
}
}
ctx.drawImage(eagleImg,280,560);
};
//绘制我的坦克
vardrawMyTank=function(){
ctx.translate(myTank.x+myTank.p_w_picpath.width/2,myTank.y+myTank.p_w_picpath.height/2);
ctx.rotate(turnToAngle(TankData.direction) * Math.PI/180);
ctx.drawImage(myTank.p_w_picpath,-myTank.p_w_picpath.width/2,-myTank.p_w_picpath.height/2);
}
//绘制×××
vardrawBullet=function(x,y,direction){
ctx.fillStyle="#339900";
ctx.beginPath();
ctx.arc(x,y,4,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
}
/*
*以下是相关事件
*/
//按键事件坦克移动转向
varkeyDownEven=function(){
$("html").keydown(function(e){
varkey=e.which;
if(key==37)key="left";
elseif(key==38)key="up";
elseif(key==39)key="right";
elseif(key==40)key="down";
elsekey="no";
turnDirection(key,e);
})
}
//坦克转向移动以及边界检测
varturnDirection=function(key,e){
if(key!="no"){
e.preventDefault();
//物体边界检测
if(checkObject(key)==true){
//边界检测
if(key=="left"){
myTank.x=myTank.x<=0?0:myTank.x-TankData.speed;
}elseif(key=="up"){
myTank.y=myTank.y<=0?0:myTank.y-TankData.speed;
}elseif(key=="right"){
myTank.x=myTank.x>=screenWidth-myTank.p_w_picpath.width?myTank.x:myTank.x+TankData.speed;
}elseif(key=="down"){
myTank.y=myTank.y>=screenHeight-myTank.p_w_picpath.height?myTank.y:myTank.y+TankData.speed;
}
}
ctx.clearRect(0, 0, screenWidth, screenHeight);
ctx.save();
drawMap();
TankData.direction=key;
drawMyTank();
ctx.restore();
}
}//将方向转成角度
varturnToAngle=function(direction){
if(direction=="right")return90;
if(direction=="down")return180;
if(direction=="left")return270;
if(direction=="up")return360;
}
//鼠标点击事件(发射×××)
varresult;
varmouseClick=function(){
$("html").mousedown(function(){
clearInterval(result);
createBullet(myTank.x+myTank.p_w_picpath.width/2,myTank.y+myTank.p_w_picpath.height/2,TankData.direction);
result=setInterval(drawBulletLoop,time);
})
};
//射击,创建×××
varcreateBullet=function(_x,_y,_d){
varbullet=newbulletFun();
bullet.x=_x;
bullet.y=_y;
bullet.direction=_d;
bulletArr.push(bullet);
};
//循环绘画×××
vardrawBulletLoop=function(){
ctx.clearRect(0, 0, screenWidth, screenHeight);
ctx.save();
drawMap();
varobj_x;
varobj_y;
for(vari=0;i
drawBullet(bulletArr[i].x,bulletArr[i].y,bulletArr[i].direction);
if(bulletArr[i].direction=="left"){
obj_x=parseInt(bulletArr[i].x/20)-1<0?0:parseInt(bulletArr[i].x/20)-1;
obj_y=parseInt(bulletArr[i].y/20);
bulletArr[i].x-=bulletArr[i].speed;
if(bulletArr[i].x>0){
if(obj_x*20+20>=bulletArr[i].x){
if(bulletArr[i].y%20==0){
if(mapArray[obj_x][obj_y]==1||mapArray[obj_x][obj_y]==2){
mapArray[obj_x][obj_y]=0;
bulletArr.splice(i,1);
}
if(mapArray[obj_x][obj_y-1]==1||mapArray[obj_x][obj_y-1]==2){
mapArray[obj_x][obj_y-1]=0;
bulletArr.splice(i,1);
}
}else{
if(mapArray[obj_x][obj_y]==1||mapArray[obj_x][obj_y]==2){
mapArray[obj_x][obj_y]=0;
bulletArr.splice(i,1);
}
}
}
}elseif(bulletArr[i].x<=0){
bulletArr.splice(i,1);
}
}elseif(bulletArr[i].direction=="up"){
obj_x=parseInt(bulletArr[i].x/20);
obj_y=parseInt(bulletArr[i].y/20)-1<0?0:parseInt(bulletArr[i].y/20)-1;
bulletArr[i].y-=bulletArr[i].speed;
if(bulletArr[i].y>0){
if(obj_y*20+20>=bulletArr[i].y){
if(bulletArr[i].x%20==0){
if(mapArray[obj_x][obj_y]==1||mapArray[obj_x][obj_y]==2){
mapArray[obj_x][obj_y]=0;
bulletArr.splice(i,1);
}
if(mapArray[obj_x-1][obj_y]==1||mapArray[obj_x-1][obj_y]==2){
mapArray[obj_x-1][obj_y]=0;
bulletArr.splice(i,1);
}
}else{
if(mapArray[obj_x][obj_y]==1||mapArray[obj_x][obj_y]==2){
mapArray[obj_x][obj_y]=0;
bulletArr.splice(i,1);
}
}
}
}elseif(bulletArr[i].y<=0){
bulletArr.splice(i,1);
}
}elseif(bulletArr[i].direction=="right"){
obj_x=parseInt(bulletArr[i].x/20)>29?29:parseInt(bulletArr[i].x/20);
obj_y=parseInt(bulletArr[i].y/20);
bulletArr[i].x+=bulletArr[i].speed;
if(bulletArr[i].x
if(obj_x*20<=bulletArr[i].x){
if(bulletArr[i].y%20==0){
if(mapArray[obj_x][obj_y]==1||mapArray[obj_x][obj_y]==2){
mapArray[obj_x][obj_y]=0;
bulletArr.splice(i,1);
}
if(mapArray[obj_x][obj_y-1]==1||mapArray[obj_x][obj_y-1]==2){
mapArray[obj_x][obj_y-1]=0;
bulletArr.splice(i,1);
}
}else{
if(mapArray[obj_x][obj_y]==1||mapArray[obj_x][obj_y]==2){
mapArray[obj_x][obj_y]=0;
bulletArr.splice(i,1);
}
}
}
}elseif(bulletArr[i].x>=screenWidth){
bulletArr.splice(i,1);
}
}elseif(bulletArr[i].direction=="down"){
obj_x=parseInt(bulletArr[i].x/20);
obj_y=parseInt(bulletArr[i].y/20)<0?0:parseInt(bulletArr[i].y/20);
bulletArr[i].y+=bulletArr[i].speed;
if(bulletArr[i].y
if(obj_y*20<=bulletArr[i].y){
if(bulletArr[i].x%20==0){
if(mapArray[obj_x][obj_y]==1||mapArray[obj_x][obj_y]==2){
mapArray[obj_x][obj_y]=0;
bulletArr.splice(i,1);
}
if(mapArray[obj_x-1][obj_y]==1||mapArray[obj_x-1][obj_y]==2){
mapArray[obj_x-1][obj_y]=0;
bulletArr.splice(i,1);
}
}else{
if(mapArray[obj_x][obj_y]==1||mapArray[obj_x][obj_y]==2){
mapArray[obj_x][obj_y]=0;
bulletArr.splice(i,1);
}
}
}
}elseif(bulletArr[i].x>=screenHeight){
bulletArr.splice(i,1);
}
}
}
drawMyTank();
ctx.restore();
}
//坦克和物体边界的检测
varcheckObject=function(direction){
varobject_x;
varobject_y;
varloop;
if(direction=="left"){
object_x=myTank.x%20==0?myTank.x-20:myTank.x-30;
if(object_x<0)object_x=0;
if(myTank.y%20==0){
object_y=myTank.y;
loop=2;
}else{
object_y=myTank.y-myTank.y%20;
loop=3;
}
for(vari=0;i
if((mapArray[object_x/20][object_y/20+i]==1||mapArray[object_x/20][object_y/20+i]==2)&&(object_x+20)>=myTank.x){
returnfalse;
}
}
}elseif(direction=="up"){
object_y=myTank.y%20==0?myTank.y-20:myTank.y-30;
if(myTank.x%20==0){
object_x=myTank.x;
loop=2;
}else{
object_x=myTank.x-myTank.x%20;
loop=3;
}
for(vari=0;i
if((mapArray[object_x/20+i][object_y/20]==1||mapArray[object_x/20+i][object_y/20]==2)&&(object_y+20)>=myTank.y){
returnfalse;
}
}
}elseif(direction=="right"){
object_x=myTank.x%20==0?myTank.x+myTank.p_w_picpath.width:myTank.x+myTank.p_w_picpath.width+10;
if(object_x>=600)object_x=580;
if(myTank.y%20==0){
object_y=myTank.y;
loop=2;
}else{
object_y=myTank.y-myTank.y%20;
loop=3;
}
for(vari=0;i
if((mapArray[object_x/20][object_y/20+i]==1||mapArray[object_x/20][object_y/20+i]==2)&&object_x<=(myTank.x+myTank.p_w_picpath.width)){
returnfalse;
}
}
}elseif(direction=="down"){
object_y=myTank.y%20==0?myTank.y+40:myTank.y+50;
if(myTank.x%20==0){
object_x=myTank.x;
loop=2;
}else{
object_x=myTank.x-myTank.x%20;
loop=3;
}
for(vari=0;i
if((mapArray[object_x/20+i][object_y/20]==1||mapArray[object_x/20+i][object_y/20]==2)&&(object_y)<=(myTank.y+myTank.p_w_picpath.width)){
returnfalse;
}
}
}
returntrue;
}