求教,坦克大战的问题,求思路

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)坦克大战网络版游戏开发的探索
一、游戏的起源及背景80年代出现的游戏《Battle City》在国内又称《坦克大战》,以其极为出色的游戏性令全球众多玩家为之疯狂。然而时至今日,单纯的坦克大战单机与对战电脑和博弈已经不能满足人们的需求了,显得较为单调。随着互联网出现并不断发展,网络游戏逐步兴起,游戏玩家们逐步产生了与人沟通、竞技的需要,因此坦克大战的网络版需求也被提出,需要能够实现可供多人联网共同游戏的战略、射击的单机坦克大战游戏的网络版本。二、游戏系统开发的技术分析游戏中客户端之间的数据传递是此项目开发的难点,如何将各个客户端的坦克数据,发射炮弹的数据等信息传送给其他所有的客户端以及如何能保证数据包的准确传输,即导弹消息,爆炸消息的传送,是实现游戏正常运转的关键问题。使用面向对象的程序设计方法来设计游戏系统是一条合理的路线。通过对数据和代码建立分块的内存区域来提供对程序进行模块化,这些模块可以被用作样板在需要时建立其拷贝。使用Socket(套接字)完成游戏客...&
(本文共1页)
权威出处:
1某型坦克炮击发机构的特点和工作原理1.1某型坦克炮击发机构为了提高击发的可靠性,某型坦克炮采用了不同于传统单机械击发和单电击发的击发机构,而采用电击发和机械击发双功能击发机构。与这种机构相匹配,弹药的底火也具备机械发火和电击发火的双重功能。它具有3种击发方式[1]:1)电击发方式。通过击发按钮-击发配电盒-电击发板座-炮尾中的电击发顶杆-闩体中的电击发回路导通实施。在这个电击发回路中与机械击发方式共用的零件是击针。2)电磁铁机械击发方式。通过击发按扭-击发配电盒-电磁铁-击发顶板-炮尾中的击发顶杆-击发顶铁-闩体中的拨动子驻栓-解脱拨动子-释放击发弹簧和击发重锤-撞击击针-撞击底火完成机械击发任务。3)手动机械击发方式。通过手击发压杆-击发顶板-下同电磁铁机械击发的击发方式。手动机械击发方式主要用于当坦克不能用电来实施击发的情况。1.2机构功能特征1.2.1电击发反应时间短电击发方式反应时间短,有利于提高火炮对运动目标的射击精...&
(本文共3页)
权威出处:
前段时间,《战狼2》在各地代军迷卓亦凡正在带领华资工厂的再加上影片中坦克行驶速度较快影院热播且票房一路势如破竹,屡员工逃离,其后非洲反叛军的一辆(四档,时速50千米/小时以上)、破记录,不愧是国产电影的一个奇坦克紧追不舍。在这千钧一发的坦克自身重量所带来的强大惯性以迹。探究其成功的秘诀,一方面在时刻,吴京饰演的冷锋开着缴获的及在坚硬水泥路面上摩擦力相对“强国梦,强军梦”逐步走向现实坦克犹从天降,先是一发炮弹命中较小等原因,都为实现“坦克漂的今天,影片恰如其分地激发和满敌方坦克,紧接着又是一个漂亮的移”动作创造了良好的外部条件。足了国民的民族自豪感;另一方面“神龙摆尾”将其撞到一边,成功军迷们也许在影片中头一次目睹就是作为一部动作片,其真实的打地化解了危险局势。这里冷锋所使“坦克漂移”的真容,而对我军装斗场景融合电影特效的艺术加工,出的坦克炫酷动作实际上是“坦克甲部队的坦克驾驶员而言,这个动不由得让广大观众肾上腺素飙升的漂移”,也...&
(本文共2页)
权威出处:
~~俄罗斯P...&
(本文共1页)
权威出处:
初识坦克日,我在18岁那年光荣入伍,在第一坦克学校学习时,开始接受成为一名坦克驾驶员的必要训练。在正式驾驶训练之前,基地领导要先组织我们这些“新兵蛋子”参观坦克驾驶表演,先让我们直观地初步了解一下坦克的面貌和性能,然后再让我们轮流上车接触这个庞然大物。记得第一次看见坦克的那天是在第一坦克学校的车场上,九辆坦克“一”字形摆开,当时的直观印象是这些庞然大物高高仰起威武的火炮,在我面前隆隆驶过,听着那振耳欲聋的轰鸣声,看着那被坦克扬起的滚滚烟尘,我觉得当一个坦克兵,将来在战场上驾驶着这样的钢铁巨兽冲锋陷阵,真是威风。现在每每想起来,激动的心情还会油然而生。听教员说这是一个坦克连的车辆,我们排长把队伍带到一辆坦克跟前,成一排横队站好,他下达了“立正”的口令后,跑步来到了李教员的面前,立正敬礼后说:“报它在第二次世界大战中可是立下了告教员同志:四营二十二连二排学汗马功劳的最著名的坦克。在广阔兵全部到齐,请你讲课。”我们第的...&
(本文共5页)
权威出处:
~~苏联/俄罗斯...&
(本文共1页)
权威出处:
扩展阅读:
CNKI手机学问
有学问,才够权威!
xuewen.cnki.net
出版:《中国学术期刊(光盘版)》电子杂志社有限公司
地址:北京清华大学 84-48信箱 大众知识服务
京ICP证040431号&
服务咨询:400-810--9993
订购咨询:400-819-9993
传真:010-java做坦克大战的碰撞检测问题,求解决方法_百度知道
java做坦克大战的碰撞检测问题,求解决方法
画出来后怎么检测坦克有没有撞上钢板呢?求详细点的方法,我是刚入门的菜鸟!比如数组元素1代表的是钢板,就是地图用二维数组画出来的不懂怎么检测用Rectangle可以检测一些
我有更好的答案求助知道网友
长和宽。当坦克运动时:x%block_x==0时即坦克的x坐标运动到了方块的边界,从地图数据map数组中获取map[x&#47:block_x;_y分别是你的绘画长宽,block&#39。其次,对你的坦克的X坐标和Y坐标进行求余。假设首先你需要确定你的地图方块的规格
不好意思!是点错了!采纳了上面那个的!!还是感谢你的帮忙!!
那假设你的坦克类是这样的class&Tank{&&&&public&static&final&int&UP=1;&&&&public&static&final&int&DOWN=3;&&&&public&static&final&int&LEFT=0;&&&&public&static&final&int&RIGHT=2;&&&&boolean&stop[]=new&boolean[4];//这四个控制允许坦克移动的四个方向&&&&int&x=0,y=0;}接下来是移动public&boolean&move(int&dire,int&[][]map){//参数是移动的方向与地图数据&&&&if(stop[dire])//如果这个方向是禁止移动的直接返回&&&&&&&&return&&&&&int&off_x=dire%2!=0?0:dire-1;&&&&int&off_y=dire%2==0?0:dire-2;&&&&this.x+=off_x;&&&&this.y+=off_y;&&&&if(this.x%60==0||this.y%60==0){//移动之后的坦克位与方块的边界&&&&&&&&int&x=this.x/60;&&&&&&&&int&y=this.y/60;&&&&&&&&if(x-1&=0&&map[x-1][y]!=1){//对坦克左边的方块进行判断&&&&&&&&&&&&stop[LEFT]=true//设置左方向可移动&&&&&&&&}else{&&&&&&&&&&&&stop[LEFT]=//设置左方向不可移动&&&&&&&&}&&&&&&&&.......依次类推&&&&}&&&&return&}
简单说下思路吧其实思路很简单按方向键上,有,坦克向上移动,判断是否遇到障碍代码就不写了,则退回来。其他方向也是如此
这是网上复制的!!
本回答被提问者和网友采纳
1条折叠回答
为您推荐:
其他类似问题
坦克大战的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。游戏说明:
玩家可以操纵自己的坦克,通过发射子弹击毁敌机,敌机用同样的方式击毁玩家的坦克。&&&&
基于java版的坦克大战实现思路:
1.0:游戏界面设计
&&&&&&&& --游戏的界面采用JPanel 游戏的主要活动区在这个JPanel上进行
&&&&&&&& --游戏的界面素材采用java代码的paint方法绘制坦克 炸弹效果导入外部图片素材
首先常见一个JPanel,绘制出坦克和子弹,主意,坦克的绘制必须确定一个基准点,此后坦克的位置依赖与此坐标。
因此,现在需要一个MyPanel类来承载游戏的界面可视化区域。该类继承自JPanel类。
MyPanel类的paint()方法可以很有效的绘制出坦克和子弹,注意到repaint()方法可以很方便的执行paint()方法,游戏的核心就是让显示器不停的刷新当前页面。通过repaint()很方便能做到这点。
而让MyPanel是很有必要的,游戏开始之后,我们让repaint()可以自动的运行,而不是通过响应某种事件。
现在,有了坦克和子弹之后,下一步就是让JFrame能监听到玩家按下空格键,这个很容易可以实现,当监听到玩家的事件之后,监视器马上执行发射子弹行为。这个行为是由坦克自身发出的,并且考虑到所有的坦克都有发射子弹的功能,为此,需要先写我们的Tank类。这个类是敌人坦克和我方坦克共有的,其余两者均继承自(Class) Tank类。
这个类的设计思路如下
该类定义的坦克的初始速度,方向,子弹的速度,并且具有发射子弹的功能。代码如下:
public class Tank {
&&& int positionX;&&& &&& //坦克的初始位置x
&&& int positionY;&&& &&& //坦克的初始位置y
&&& int&&&&&& &&& //坦克的方向
&&& int&&& &&& &&& //坦克速度
&&& int bulletSpeed=10;& //子弹速度
&&& public int getPositionX() {
&&&&&& return positionX;
&&& public void setPositionX(int positionX) {
&&&&&& this.positionX = positionX;
&&& public int getPositionY() {
&&&&&& return positionY;
&&& public void setPositionY(int positionY) {
&&&&&& this.positionY = positionY;
&&& public int getDirect() {
&&&&&& return
&&& public void setDirect(int direct) {
&&&&&& this.direct =
&&& public int getSpeed() {
&&&&&& return
&&& public void setSpeed(int speed) {
&&&&&& this.speed =
&&& //坦克上移
&&& public void moveUp()
&&& //坦克向右
&&& public void moveRight(){
&&& //坦克下移
&&& public void moveDown(){
&&& //坦克左移
&&& public void moveLeft(){
&&& //坦克射击子弹行为
&&& public void shout()
注意到shout这个方法,在用户按下空格键之后,通过监视器调用而发射子弹,但注意,子弹发射出去之后便不再受控制,为此,需要将每一个子弹都做成一个线程。出于这个缘故,并且考虑到子弹仍旧有属于自己的特性,比如速度、方向、初始位置等,需要将子弹单独做成一个类,这个类实现Runnable接口(为了后面产生其他武器,这里通过接口实现线程而不是继承而来)。当一个子弹杯创建之后,应当马上启动子弹的线程。
现在可以让我方的子弹在按下空格之后实现发射一个子弹,下一步是让玩家可以通过上下左右键控制坦克的方向。当玩家敲下相应的键之后,监视器马上调用继承自Tank的MTank(我方坦克)。这点很容易就试下,代码类似地:&
//坦克上移
&&& public void moveUp()
if(this.positionY&0) //保证用户不出界
&&&&&& this.positionY-=this.
下面的任务是让敌人也可以发射子弹,注意,敌人的子弹是不受玩家控制的,并且要求敌人子弹不能连发,也就是说,敌人的一个子弹在死亡之前,是不容许在产生新的子弹的,为了让敌人自动发射子弹,我们改变思路,找一个容器来存放敌人的子弹,在paint里面,通过遍历容器里面的子弹来模拟自动发射,注意:一旦程序执行,paint总是在不停的调用,因为JPanel已经是个线程,在它的run()函数中,用while循环来保证paint永远运转。
考虑到线程的安全问题,采用Vector 向量来存放子弹,
&&& Vector&Bullet& bullets=new Vector&Bullet&();
注意,每辆坦克都有自己的子弹容器,它是Tank类的一个属性。下一步,让坦克动起来,理所当然地,将敌方坦克做成一个线程,该线程让坦克自动运行,类似地在线程run中这样做:&&&&&&
while(true){
Thread.sleep(30);
&&& catch(Exception e){
&&& this.aotoMove();
&&&&&&&&&& }
到目前为止:我方的坦克可以通过控制自由移动并发射子弹,敌人的坦克也实现了自由移动并自动发射子弹。
下面要做的就是,当我方坦克击中敌人坦克之后,敌人坦克消失,反之亦然。
实现这一切比想象中的还要容易,只需要在paint中加入碰撞检测。
hitTest()函数将提供检测机制。当我方的坦克发射的子弹落在敌人坦克所在的区域,我们应该让敌方的坦克消失。
为了统一并实现该要求,需要定义一个Vector存放这个游戏中所有的敌方坦克,这样在paint绘制的时候,只需要读取Vector向量来动态的产生坦克。
下面,开始具体碰撞检测:
一旦检测到我方的坦克的子弹落在敌方坦克的区域,执行某操作,产生击毁效果。
一旦检测道敌方坦克的子弹落在我方坦克的区域,执行某操作,产生击毁效果。
一旦检测到子弹飞出游戏区域,执行某操作,从向量中移除该子弹
一旦检测到敌人的坦克互相碰撞或者遇到墙壁,执行某操作,改变方向
碰撞检测的过程必须要注意的是,由于碰撞检测放在paint类,执行速度过快,在检测完毕改变方向之后,一定要有一个延迟,不能马上判断,否则会出现&无头坦克&,到处乱撞。
解决的方法有:在坦克移动的时候,用for循环+Thread.sleep来控制坦克在一次移动中必须走完指定的路线。
2:在改变方向后,有一个小小的延迟,保证在此期间,坦克有一个微小的挣脱力来挣脱碰撞带来的困扰。
最后,在增加游戏开始的画面:新建一个JPanel,当游戏开始的时候显示这个界面,通过times%2的方法让这个界面的字符串有个闪的过程。
将MyPanel的创建放到一个合适的逻辑中。而不是一开始就。当执行MyPanel的时候,记得先移除新建的JPanel。
截止目前:游戏的基本功能已经完结。V_1.0
阅读(...) 评论()

我要回帖

更多关于 牛年求牛问题解题思路 的文章

 

随机推荐