- 浏览: 203311 次
- 性别:
- 来自: 湖南
文章分类
最新评论
本面使用jquery-1.3.2和面定位map.jsp,支持一人和双人游戏,实现如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <title>山寨坦克大战... 主坦克方向:WASD,空格发射. 副坦克方向:上下左右.L发射.</title> <script src="jquery-1.3.2.min.js"></script> <script src="map.js"></script> <script> ~function(){ var mainTank; //主坦克 var subTank; //副坦克 var eTanks = []; //敌坦克 var plays; //单人或者双人模式 var eTankLife = 20; //敌坦克总数量 var level = 1; //当前关数 var eTanksLength = 3; //每次显示的敌坦克数量 var maps = [map1, map2, map3]; //地图 var map; //当前地图 var u; //长定时器 var xs = [[0,12,22], [0, 8, 16, 22], [0, 6, 12, 18, 22] ]; var Gb = { attr : function(){ if (arguments.length == 1){ return Gb[arguments[0]]; }else if (arguments.length == 2){ Gb[arguments[1]] = arguments[0] return Gb; } } } //--------------------------------------Mover类--------------------------------------------- function Mover(){}; Mover.prototype = { locked : false //是否允许移动 ,stepLocked : false //移动间隔锁 ,der : false //移动方向 ,obj : null //占位,子类对应的dom ,speed : 20 //移动速度 ,moveRepeat : false //是否重复移动,默认否 ,setXy : function(y, x){this.obj.css({top:y, left:x}); return this;} ,useGird : function(){ //占据网格 var x = this.x, y = this.y; map[y][x].type = map[y][x+1].type = map[y+1][x].type = map[y+1][x+1].type = this.type; map[y][x].span = map[y][x+1].span = map[y+1][x].span = map[y+1][x+1].span = this; } ,freeGird : function(){ //释放网格 var x = this.x, y = this.y; map[y][x].type = map[y][x+1].type = map[y+1][x].type = map[y+1][x+1].type = 0; return this; } ,move : function(fn){ //移动, fn: 撞击之后触发函数 if (this.stepLocked || this.locked || this.reliveLocked) return; //如果被锁定 if (this.toBorder(this.der, fn)) { //如果撞到边界 return; } this.freeGird(); if (this.hit(fn) == 1) return; //如果遇到障碍 this.stepLocked = true; //加锁 var der = this.der, w, d; switch(der){ //计算下个网格的x,y case 0: this.x -= 1; w = 'left'; d = -2; break; case 2: this.x += 1; w = 'left'; d = 2; break; case 1: this.y -= 1; w = 'top'; d = -2; break; case 3: this.y += 1; w = 'top'; d = 2; break; } this.useGird(); //占据网格 var obj = this.obj.get(0); for (var i = 0; i < 10; i++){ //移动 var closure = ~function(i, t){ var s = setTimeout(function(){ obj.style[w] = parseInt(obj.style[w]) + d + 'px'; clearTimeout(s); if (i == 9){ closure = null; t.stepLocked = false; //移动完成的时候释放移动锁 t.moveRepeat && t.move(fn); //是否重复移动 } }, i*t.speed) }(i, this); } } ,toBorder : function(der, fn){ //撞到边界 if (der == 1 && this.y == 0 || der == 3 && this.y == 22 || der == 0 && this.x == 0 || der == 2 && this.x == 22) { if (jQuery.isFunction(fn)) fn(); return true; } } ,probe : function(){ //探测 var x = this.x, y = this.y; var baffles = []; //前方障碍 switch(this.der){ case 0 : baffles[0] = [y, x-1]; baffles[1] = [y+1, x-1]; break; //左 case 2 : baffles[0] = [y, x+2]; baffles[1] = [y+1, x+2]; break; //右 case 1 : baffles[0] = [y-1, x]; baffles[1] = [y-1, x+1]; break; //上 case 3 : baffles[0] = [y+2, x]; baffles[1] = [y+2, x+1]; break; //下 } return baffles; } } //--------------------------------------------------------坦克-------------------------------------- function Tank(obj, speed, x, y, der){ this.obj = obj; //span this.type = 5; this.speed = speed; this.x = x; this.y = y; this.der = der; //移动方向 this.fx = x; //初始x,坦克复活的时候使用 this.fy = y; //初始y this.fder = der; //初始移动方向 this.clipLength = 3; //弹夹大小,最多存放3个子弹 this.clip = []; //弹夹 this.clipLocked = false; //弹夹锁 this.fireLocked = true; this.life = 3; this.exp = []; //爆炸效果 this.invTime = 2000; //无敌时间 this.reliveLocked = false; //复活锁,复活期间不能移动 } Tank.prototype = new Mover; //继承Mover Tank.prototype.init = function(){ this.setPos(this.der); //设置坦克方向 this.setXy(this.y*20, this.x*20); //设置位置 this.useGird(this); //占据网格 this.initClip(); //初始化弹夹 if (this.invTime) this.invincible(this.invTime); //无敌 return this; } Tank.prototype.initClip = function(){ //初始化弹夹 for (var i = 0;i < this.clipLength; i++) { this.exp.push($('.explode').eq(0).clone().appendTo(Gb.attr('gameMap'))); //爆炸效果 this.clip.push(new Ball(this, 7)); } } Tank.prototype.setPos = function(der){ //设置移动方向 if (der == 0) this.der = 0; else this.der = der || this.fder; this.obj.css('background-position', '0px -'+ [3, 0, 1, 2][this.der]*40 +'px'); this.bobDer = der; //记录子弹方向 return this; } Tank.prototype.hit = function(){ //碰撞 var baffles = this.probe(); //前方物体 for (var i = 0; i < baffles.length; i++){ var type = map[baffles[i][0]][baffles[i][1]].type; if ( (/^2|3|4|5|6|7$/).test(type)) return 1; //遇到障碍 if (type == 'speed' || type == 'hide' || type == 'life' || type == 'power' || type == 'defense') { if (this == mainTank || this == subTank){ Gb.attr('.prop').hide(); Props[type](this); //吃道具 } } } return 0; } Tank.prototype.fire = function(){ //开火 if (this.reliveLocked || this.clipLocked == true || this.clip.length <= 0) { return; } this.clipLocked = true; //发射后锁定弹夹 this.clip.pop().init(); //取出一个子弹并发射 var self = this; setTimeout(function(){ //子弹间隔时间 self.clipLocked = false; }, 600) return this; } Tank.prototype.relive = function(){ //复活 this.life ? this.life-- : eTankLife--; if (this.showInfo() == 1){ this.freeGird(); if (this == mainTank){ mainTank = false; }else if (this == subTank){ subTank = false; } return; }; this.locked = true; this.der = this.fder; var me = this; setTimeout(function(){ me.freeGird(); me.x = me.fx; me.y = me.fy; if( me != mainTank && me != subTank ) me.locked = false; me.reliveLocked = false; me.clipLocked = false; me.setXy(me.y*20, me.x*20); me.setPos(me.fder); me.useGird(); me.invincible(me == mainTank ? 3000 : 1500); }, 500); return this; } Tank.prototype.showInfo = function(){ if ((plays == 1 && !mainTank.life) || (plays == 2 && !mainTank.life && !subTank.life)){ setTimeout(function(){ $('#gameOver').show(); return}, 1000); } var ary = this == mainTank ? [Gb.attr('P1'), '1P'] : [Gb.attr('P2'), '2P']; ary[0].html(ary[1]+' * ' +this.life); if (this.life <= 0) return 1; } Tank.prototype.invincible = function(time){ //坦克无敌 this.invTime = time; var i = 0, me = this; var u = setInterval(function(){ me.obj[i++ % 2 == 0 ? 'show' : 'hide'](); if (i >= time/150){ me.obj.show(); me.invTime = 0; clearTimeout(u); } }, 150); } //---------------------------------------------敌方坦克----------------------------------------------- var ETank = function(obj, speed, x, y, der){ this.obj = obj; //span this.speed = speed; this.x = x; this.y = y; this.type = 6; this.der = der; this.fx = x; this.fy = y; this.fder = der; this.life = false; this.clip = []; //弹夹 this.exp = []; //爆炸效果 this.invTime = 0; //无敌状态 } ETank.prototype = new Tank; ETank.prototype.showInfo = function(){ $('.etankSam').eq(0).remove(); if (eTankLife <= 0){ if (level == 3){ alert ('没有地图了,算你过关 - -!'); window.location.reload(); return; } level++; setTimeout(function(){mapReload()}, 100); return 1; } if (eTankLife <= eTanksLength-1){ this.freeGird(); return 1; } } ETank.prototype.Ai = function(){ this.move(); var self = this; var m = Math.round(Math.random()*100); var ary = $.grep([0,1,2,3,3,2,3,1], function(n, i){ return n != self.der; }); var len = ary.length; for (var i = 0 ; i < len ; i++){ //洗牌,下一次的方向 var num = parseInt(Math.random()*len); var tmp = ary[num]; ary[num] = ary[i]; ary[i] = tmp; } var nextDer = ary[0]; if (this.toBorder(this.der) || this.hit() == 1){ var s1 = setTimeout(function(){ self.setPos(nextDer).fire(); self.move(); var s2 = setTimeout(function(){ self.Ai(); clearTimeout(s2); }, 400) clearTimeout(s1); }, 400); return; } if (m < 20){ this.setPos(nextDer).fire(); } else if (m < 60) this.fire(); var s3 = setTimeout(function(){ self.Ai(); clearTimeout(s3); }, 200) } //---------------------------------------------------------------------------------------------------- //---------------------------------------------------------炮弹--------------------------------------- function Ball(pTank, speed){ this.obj = $('.ball').eq(0).clone().appendTo(Gb.attr('gameMap')); this.speed = speed; this.pTank = pTank; this.type = 10; this.moveRepeat = true; } Ball.prototype = new Mover; Ball.prototype.init = function(){ this.reviseXy(); var self = this; this.move(function(){ self.freeGird(); self.explode(); self.recover(); //爆炸并回收子弹 }); self.pTank.useGird(); //还原坦克所占网格 } Ball.prototype.reviseXy = function(){ //调整子弹位置 var x = this.x = this.pTank.x, y = this.y = this.pTank.y; this.der = this.pTank.bobDer || 0; //确认子弹发射方向 switch(this.der){ case 0: x -= 1; break; //左 case 1: y -= 1; break; //上 case 2: x += 1; break; //右 case 3: y += 1; break; //下 } this.setXy(y*20, x*20); } Ball.prototype.hit = function(fn){ var ret = 0; var baffles = this.probe(); //前方物体 for (var i = 0; i < baffles.length; i++){ var y = baffles[i][0], x = baffles[i][1], baffle = map[y][x], type = baffle.type, span = baffle.span; if (type == 'speed' || type == 'hide' || type == 'life' || type == 'power' || type == 'defense'){ //击中道具 if ($.isFunction(fn)) { fn()}; //爆炸 this.clearUi(y, x, span); Gb.attr('.prop').hide(); //隐藏物品 return 1; } if ((/^2|3|4|5|6|7$/).test(type)) { //爆炸 if (type == 4) { this.freeGird().recover(); //击中海洋,回收子弹但不爆炸. return 1; } if (type == 6 && this.pTank.type == 6) { //敌方坦克互相击中无效 this.freeGird().recover(); return 1; } if (type == 5 || type == 6) { if (span.invTime) { //如果处在无敌状态 this.freeGird().recover(); //回收子弹但不爆炸. return 1; } if ($.isFunction(fn)) { fn()}; span.obj.hide(); span.reliveLocked = true; span.invTime = 1; //无敌 span.relive(); //坦克复活 return 1; } if ($.isFunction(fn)) { fn()}; if (type == 7) { $('#gameOver').show(); return}; if (type == 2 || (this.type == 11 && type == 3)) { this.clearUi(y, x, span); //清除砖块 ret = 1; } else if (type == 3){ return 1; } } } return ret; } Ball.prototype.explode = function(){ //子弹爆炸 var explode = this.pTank.exp.pop(); if (!explode) return; var x = this.x, y = this.y, der = this.der; der == 0 ? x -= 1 : (der == 1 ? y -= 1 : ''); //调整爆炸位置 explode.show().css( {top: y*20, left: x*20} ); var m = Math.random()>.2; for (var i = 0; i < 8; i++){ var closure = ~function(i, t){ var s = setTimeout(function(){ explode.css('background-position', '0px -'+i*60+'px'); if (i == 7) { explode.hide(); t.pTank.exp.push(explode); } clearTimeout(s); closure = null; }, (m ? Math.sqrt(i): i*1.2)*100) }(i, this); } return this; }; Ball.prototype.clearUi = function(y, x, span){ map[y][x].type = 0; if (span.length) span.attr('className', 'aa'); } Ball.prototype.recover = function(){ //回收子弹 this.obj.css('left', '-1000px'); //扔到屏幕外 var clip = this.pTank.clip; if(clip.length < 3) clip.push(this); //回收子弹,重新装入弹夹 } //------------------------------------------道具----------------------------------------------- $(document).ready(function(){ Gb.attr($('#gameMap'), 'gameMap'); $('#bottomBg img').each(function(i){ $(this).click(function(){ plays = i == 0 ? 1 : 2; $('#gameBg').remove(); createMap(); }); $(this).hover(function(){ $(this).attr('src', i == 0 ? 'img/play12.jpg' : 'img/play22.jpg'); },function(){ $(this).attr('src', i == 0 ? 'img/play11.jpg' : 'img/play21.jpg'); }) }); $(document).keydown(function(event){ var k = event.keyCode; if ( (/^65|87|68|83$/).test(k) ) { mainTank.der = {'65':0,'87':1,'68':2,'83':3}[k]; mainTank.locked = false; } if (k == 32) mainTank.fireLocked = false; if (plays == 1) return; if ( (/^37|38|39|40$/).test(k) ) { subTank.der = k - 37; subTank.locked = false; } if (k == 76) subTank.fireLocked = false; }) $(document).keyup(function(event){ var k = event.keyCode; if ( (/^65|87|68|83$/).test(k) ) mainTank.locked = true; if (k == 32) mainTank.fireLocked = true; if (plays == 1) return; if ((/^37|38|39|40$/).test(k) ) subTank.locked = true; if (k == 76) subTank.fireLocked = true; }) }) function createMap(){ var _class = ['aa', 'wall', 'ston', 'steel', 'sea']; map = maps[level-1]; $(map).each(function(i, n){ $(n).each(function(j, n){ map[i][j] = { type : n, span : $('<span class='+_class[n]+'></span>').appendTo(Gb.attr('gameMap'))}; }) }) $('<span class=AC></span>').appendTo(Gb.attr('gameMap')); $('<span class=tank></span>').appendTo(Gb.attr('gameMap')); $('<span class=etank></span>').appendTo(Gb.attr('gameMap')); $('<span class=ball></span>').appendTo(Gb.attr('gameMap')); $('<span class=explode></span>').appendTo(Gb.attr('gameMap')); $('<span class=props></span>').appendTo(Gb.attr('gameMap')); Gb.attr($('#infoBottom'), '#infoBottom').attr($('.props'), '.prop').attr($('#gameInfo'), 'gameInfo').attr($('.tank'), '.tank').attr($('.etank'), '.etank').attr('$(.ball)', '.ball'); $('.AC').css({top : '440px',left : '240px'}); mainTank = new Tank(Gb.attr('.tank'), 15, 8, 22, 1).init(); mainTank.locked = true; if (plays == 2){ subTank = new Tank(Gb.attr('.tank').clone().appendTo(Gb.attr('gameMap')), 15, 16, 22, 1).init(); subTank.locked = true; } for (var i = 0; i < eTanksLength; i++){ var x = xs[level -1]; eTanks[i] = new ETank(Gb.attr('.etank').eq(0).clone().appendTo(Gb.attr('gameMap')), 20, x[i], 0, 3).init().Ai(); } for (var i = 0; i < eTankLife; i++){ $('<span class=etankSam></span>').appendTo(Gb.attr('gameInfo')); } $('<span class=play1>1P * ' +mainTank.life+ '</span>').appendTo(Gb.attr('#infoBottom')); if (plays == 2) $('<span class=play2>2P * ' +subTank.life+ '</span>').appendTo(Gb.attr('#infoBottom')); $('<span class=level>第 ' +level+ ' 关</span>').appendTo(Gb.attr('#infoBottom')); Gb.attr($('.play1'), 'P1').attr($('.play2'), 'P2'); Props.init(); //道具初始化 u = setInterval(function(){ if (mainTank) mainTank.setPos(mainTank.der).move(); if (mainTank && !mainTank.fireLocked) mainTank.fire(); if (plays == 1) return; if (subTank) subTank.setPos(subTank.der).move(); if (subTank && !subTank.fireLocked) subTank.fire(); }, 19); } var Props = { //道具类 Ui : [0, 0] ,init : function(){ setInterval(function(){ if (Props.use) { Gb.attr('.prop').hide(); Props.use = false; return; } var fn = ['speed', 'hide', 'life', 'power', 'defense'][Math.round(Math.random()*4)]; var Ui = Props.getUi(); Props.Ui = Ui; map[Ui[0]][Ui[1]].type = fn; Props.use = true; Gb.attr('.prop').css({'background' : 'url(img/'+ fn +'.jpg)', top : Ui[0]*20, left : Ui[1]*20} ).show(); }, Math.max(10000, Math.round(Math.random()*20000))); } ,use : false ,speed : function(obj){ obj.speed = obj.speed / 2; setTimeout(function(){ obj.speed = obj.speed * 2; Props.use = false; map[Props.Ui[0]][Props.Ui[1]].type = 0; }, 15000); } ,hide : function(obj){ obj.invincible(5000); setTimeout(function(){ Props.use = false; map[Props.Ui[0]][Props.Ui[1]].type = 0; }, 10000); } ,life : function(obj){ obj.life++; obj.showInfo(); Props.use = false; map[Props.Ui[0]][Props.Ui[1]].type = 0; } ,power : function(obj){ for (var i = 0; i < obj.clip.length; i++){ obj.clip[i].type = 11; } setTimeout(function(){ for (var i = 0; i < obj.clip.length; i++){ obj.clip[i].type = 10; } }, 10000) } ,defense : function(obj){ var ary = [[21, 11], [21, 12], [21, 13], [21, 14], [22, 11], [22, 14], [23, 11], [23, 14]]; for (var i = 0; i < ary.length; i++){ var y = ary[i][0], x = ary[i][1]; map[y][x].type = 3; map[y][x].span.attr('className', 'steel'); } setTimeout(function(){ for (var i = 0; i < ary.length; i++){ var y = ary[i][0], x = ary[i][1]; map[y][x].type = 2; map[y][x].span.attr('className', 'ston'); } }, 15000) } ,fn : false ,getUi : function(){ var i = Math.round(Math.random()*23); var j = Math.round(Math.random()*23); if (map[j][i].type == 0) { return [j, i]; } else { return this.getUi(); } } } function mapReload(){ Gb.attr('gameMap').empty(); Gb.attr('#infoBottom').empty(); $(document).keydown(function(event){ return false; }); $(document).keyup(function(event){ return false; }); clearInterval(u); mainTank = null; subTank = null; eTanks = []; eTankLife = 20; map = maps[level-1]; eTanksLength++; if (level == 3) { eTanksLength = 12; xs[2] = [0,2,4,6,8,10,12,14,16,18,20,22]; } createMap(); } }(); </script> <style> html, body{overflow:hidden} #gameBg{height:480px;width:650px;margin:3px auto;border:10px ridge #eee;background:#000;overflow:hidden;position:absolute;left:300px;top:8%;z-index:1000} #gameBg div {width:100%;height:50%} #gameBg #topBg img {margin:30px auto;display:block} #gameBg #bottomBg img {margin:20px auto;display:block;cursor:pointer;height:40px;width:150px} #gameMap{height:480px;width:480px;margin:3px auto;border:10px ridge #eee;background:#000;overflow:hidden;position:absolute;left:300px;top:8%;float:left} #gameInfo{height:480px;width:150px;margin:3px auto;border:10px ridge #eee;background:#000;overflow:hidden;position:absolute;left:790px;top:8%} #gameMap span{width:20px;height:20px;float:left} #gameMap span.steel{background:url(img/steel.gif) no-repeat} #gameMap span.sea{background:url(img/sea.gif) no-repeat} #gameMap span.wall{background:url(img/wall.gif) no-repeat;position:relative;z-index:104} #gameMap span.ston{background:url(img/ston.gif) no-repeat} #gameMap span.tank{position:absolute;background:url(img/tank.gif) no-repeat; width:40px; height:40px;z-index:101} #gameMap span.etank{background:url(img/etank.gif) no-repeat; position:absolute; width:40px; height:40px;z-index:101} #gameMap span.ball{background:url(img/ball.gif) no-repeat; position:absolute; width:40px; height:40px;z-index:103} #gameMap span.aa{background:url(); width:20px; height:20px} #gameMap span.explode{background:url(img/explode.gif) no-repeat; position:absolute; width:60px; height:60px;z-index:103} #gameMap span.props{background:url(); width:20px; height:20px; position:absolute;z-index:101} #gameMap span.info{position:absolute; width:60px; height:60px; top:100;left:100;z-index:102} #gameMap span.AC{background:url(img/1.gif) no-repeat;position:absolute; width:40px; height:40px;z-index:102} #gameInfo span.etankSam{background:url(img/etank.gif) no-repeat 0px -80px; width:40px; height:40px;float:left;margin-right:10px} #gameInfo span.play1, .play2{background:url(img/tank.gif) no-repeat; width:100%; height:40px;float:left;margin-top:25px;margin-left:10px;color:#fff;text-indent:60px;Font-weight:bold;font-size:1.2em;line-height:40px} #gameInfo span.level{width:100%;height:30px;float:left;margin-top:20px;color:#fff;text-align:center;font-weight:bold;font-size:1.2em;line-height:30px;letter-spacing:5px} #gameInfo #infoBottom{position:absolute; width:100%; height:200px; top:295px;left:0px} #gameOver{height:480px;width:650px;margin:3px auto;border:10px ridge #eee;background:#000;overflow:hidden;position:absolute;left:300px;top:8%;display:none;z-index:1001} #gameOver img{height:100%;width:100%} </style> <body> <div id="gameBg"> <div id="topBg"><img src="img/bg.jpg"></img></div> <div id="bottomBg"><img src="img/play11.jpg"></img><img src="img/play21.jpg"></img></div> </div> <div id="gameMap"> </div> <div id="gameInfo"> <div id="infoBottom"></div></div> <div id="gameOver"><img src="img/gameover.jpg"></img></div> </body> </html>
发表评论
-
万能js表单骓证
2011-05-09 13:17 965万能js表单骓证是一款比较好的表单js代码,你只需要了解基本用 ... -
ext-js基础
2011-04-25 22:43 1050javascript的关键字 关键 ... -
具备闹钟功能js日历
2011-04-22 17:50 1731日历写得太多,没有什么好说的,这个是能够保存备忘信息,具备闹钟 ... -
js 广告
2011-01-14 17:03 7501、悬浮页面流动广告(code.zip) 2、头部文横显隐广告 ... -
开始ExtJS
2011-01-12 15:27 27191、获得ExtJS 要使用ExtJS,那么首先要得到ExtJS ... -
DWR详解
2010-11-30 13:10 976什么是DWR(Direct Web Remote)? DWR是 ... -
万能日历制作
2010-01-15 13:33 1201万能日历制作: <!DOCTYPE HTML PUB ... -
俄罗斯方块
2009-09-29 20:35 14421.初始化下方块组合的图形阶面 //方块的大小 SQUARE ... -
javascript小甜饼_cookie方法
2009-09-24 19:28 830<!DOCTYPE html PUBLIC " ... -
javascript日历
2009-09-23 21:21 1186<!DOCTYPE html PUBLIC " ...
相关推荐
C++大作业坦克大战源码C++大作业坦克大战源码C++大作业坦克大战源码C++大作业坦克大战源码C++大作业坦克大战源码。C++大作业坦克大战源码C++大作业坦克大战源码C++大作业坦克大战源码C++大作业坦克大战源码C++大作业...
【Python坦克大战源代码坦克大战.zip】是一个包含Python语言实现的坦克大战小游戏的源代码集合。这个项目旨在提供一个互动的、基于文本的娱乐体验,让玩家能够享受经典的坦克战斗游戏,同时学习和理解Python编程的...
Java语言编写的经典坦克大战游戏.zipJava语言编写的经典坦克大战游戏.zip Java语言编写的经典坦克大战游戏.zipJava语言编写的经典坦克大战游戏.zip Java语言编写的经典坦克大战游戏.zipJava语言编写的经典坦克大战...
期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业...
Unity3d 多人在线坦克大战源码 Unity精品小游戏源码 , Unity完整项目源码 是完整项目的压缩包,可直接运行,无需其他操作。 适合二次开发和学习使用,都是经典游戏,需要其他游戏源码包可以看我主页。 直接可以运行 , ...
C++ 控制台版坦克大战游戏简介 内容概要 C++ 控制台版坦克大战游戏是一款基于C++编程语言开发的经典射击游戏。 通过键盘控制坦克移动攻击,躲避敌方坦克的攻击,同时消灭它们以完成关卡任务,支持地图编辑。 适用...
资源名:vb.net 坦克大战 小游戏程序源码 资源类型:程序源代码 源码说明: FC经典坦克大战(VB.NET)源码 源码描述: 一、源码特点 1、采用VB.NET开发的经典坦克大战(FC),仿任天堂的坦克大战。全开源代码,测试请...
《坦克大战素材及源码解析》 坦克大战,这款经典的街机游戏,承载了许多人的童年记忆。对于JAVA初学者来说,通过分析和学习坦克大战的源码,不仅可以深入理解编程基础,还能掌握游戏开发的基本流程和技术。下面我们...
【FC红白机坦克大战素材】是一套专为游戏开发者或复古游戏爱好者准备的资源集合,主要用于重现或创作与红白机(Family Computer)平台上经典游戏"坦克大战"相关的项目。红白机,又被称为FC,是80年代末至90年代初...
【坦克大战图片素材】是一个与经典游戏"90坦克大战"相关的资源集合,包含了游戏中的图像素材和可能的背景音乐。这个压缩包旨在为游戏开发者、设计师或爱好者提供参考资料,帮助他们在自己的项目中重现或创新这款深受...
基于C++语言开发的坦克大战游戏源代码(含exe可执行文件) 基于C++语言开发的坦克大战游戏源代码(含exe可执行文件) 基于C++语言开发的坦克大战游戏源代码(含exe可执行文件) 基于C++语言开发的坦克大战游戏源代码(含exe...
【坦克大战素材包】是一个专为游戏制作设计的资源集合,包含了丰富的素材,适用于开发以“坦克大战”为主题的游戏项目。这个素材包以其全面性和高质量,为开发者提供了制作游戏所需的图形、音效以及可能的逻辑元素,...
《C++实现坦克大战游戏详解》 坦克大战是一款经典的双人对战小游戏,深受程序员和游戏爱好者的喜爱。本文将围绕使用C++编程语言实现的坦克大战游戏进行深入解析,帮助读者理解游戏背后的编程思想和技术。 首先,...
《C语言实现的坦克大战小游戏详解》 C语言是一种基础且强大的编程语言,它以其简洁的语法和高效性被广泛应用于系统开发、嵌入式系统以及各种软件开发中。在这个项目中,我们将深入探讨如何使用C语言来创建一个坦克...
《Python游戏坦克大战》是一款利用Python编程语言开发的复古风格射击游戏,深受编程爱好者和游戏迷们的喜爱。在这个项目中,我们将深入探讨Python在游戏开发中的应用,以及如何利用Python来实现坦克大战的核心功能。...
【坦克大战游戏背景与历史】 坦克大战是一款深受全球玩家喜爱的经典电子游戏,源自于1985年日本的任天堂FC(Family Computer)平台。这款游戏以其简单易上手的操作、富有挑战性的关卡设计和双人合作模式,成为了80...
《Java实现的坦克大战游戏详解》 坦克大战是一款深受玩家喜爱的经典游戏,它结合了策略、射击和竞技的元素,让玩家在紧张刺激的战斗中体验到无尽的乐趣。本项目是用Java语言开发的坦克大战游戏,下面将详细介绍其...
《FC坦克大战素材》是一个专为游戏开发爱好者和学习者准备的资源集合,主要用于了解和研究经典的FC(Family Computer,任天堂家用游戏机)坦克大战游戏。在这个压缩包中,你将找到一系列与FC坦克大战相关的素材,...
《C语言坦克大战源码解析》 C语言作为一种基础且强大的编程语言,广泛应用于系统开发、软件工程以及游戏编程等领域。本项目“C语言坦克大战”是针对C语言初学者和爱好者的一个实战项目,旨在通过实际的游戏开发,...
在坦克大战中,CSS使得游戏画面更加生动,坦克的移动、碰撞效果、背景的动态变化等都离不开CSS的精心设计。 JavaScript作为前端开发的核心语言,承担了游戏的主要逻辑和交互功能。它处理游戏的事件响应,如用户输入...