vb vb怎么做数据库管理坦克大战

“坦克大战”游戏源代码下载_游戏编程类源码_VB
当前位置 &
“坦克大战”游戏源代码
运行环境:Windows/Linux
软件大小:95KB
发布日期:.6431
人气浏览:12643
“坦克大战”游戏源代码
上海网通FTP下载
上海电信HTTP下载
下载此源码的会员还关注过:
一套基于accsee的cs数据库..财务管理系统..goodicon图标制作软件 ..1、适合初学者浏览的英文单词发音软件。采用access数据库存放单词信息,wav文件存放发音信息;单词量大约二万多条,具备发音的有一万七千多条;即使程序编得不怎么样,但单词发音信息我觉得值得大家收集..vb中的字都是水平的可否想过作出有角度的字在这里演示了作旋转的字的方法 ..
站长工具:
实用工具:
Copyright &
all rights reservedvb.net编写坦克大战遇到困难,求指教。。_vb.net吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:5,489贴子:
vb.net编写坦克大战遇到困难,求指教。。收藏
怎样让子弹击中敌方坦克时坦克消失?我能编出当我方坦克碰到敌方坦克时就输了的代码,为什么同样的方法不能用于判定子弹是否击中敌方坦克上?
多数互联网小贷公司不知道:这样的系统,能一站解决风控、授信和放款!
求代码指点。。
同样的方法可以的
vb6写的 坦克大战,看一看吧
定义几个类(Class)来管理方便些。
lz试试xna吧,直接可以写手机游戏了。如果lz写桌面程序,那就把大多数的程序放在一个Timer里,按键通过改变若干个boolean变量值的方式影响Timer里主要程序的行为。
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或1549人阅读
Unity3D(18)
对于AI,我的初始想法很简单,首先他要能动,并且是在地图里面动, 懂得撞墙后转弯,然后懂得射击,其他的没有了,基于这个想法,我首先创建了一个MyTank类,用于管理玩家的坦克的活动,然后创建AITank类,AITank类继承MyTank类,这样的话,在AITank类上,只需要增加AI就可以了,具体的状态机实现,就放到MyTank类上即可。
首先来分析一下MyTank这个类,就从有限状态机开始吧。
一辆坦克的状态有下面几个:
protected enum State
RightWalk,
分别是:站立,向左走,向右走,向上走,向下走,开火。
然后就是分别实现每个状态,首先是转向:
protected void UpdateRotate(State state)
switch (state)
case State.LeftWalk:
this.transform.rotation = Quaternion.
this.transform.Rotate(Vector3.forward * m_fAngle);
m_curAngle = Vector3.
case State.RightWalk:
this.transform.rotation = Quaternion.
this.transform.Rotate(Vector3.forward * -m_fAngle);
m_curAngle = Vector3.
case State.UpWalk:
this.transform.rotation = Quaternion.
m_curAngle = Vector3.
case State.DownWalk:
this.transform.rotation = Quaternion.
this.transform.Rotate(Vector3.forward * m_fAngle * 2);
m_curAngle = Vector3.
然后是行走和开火:
public virtual void UpdateState()
Debug.Log(m_sName + &:UpdateState()&);
switch (m_curState)
case State.Idle:
case State.LeftWalk:
this.transform.position += Vector3.left * Time.deltaTime * m_fMoveS
case State.UpWalk:
this.transform.position += Vector3.up * Time.deltaTime * m_fMoveS
case State.DownWalk:
this.transform.position += Vector3.down * Time.deltaTime * m_fMoveS
case State.RightWalk:
this.transform.position += Vector3.right * Time.deltaTime * m_fMoveS
case State.Fire:
} 其中,doFire的函数实现如下:
protected virtual void doFire()
GameObject bullet = Instantiate(m_gBullet) as GameO
bullet.name = m_sName + &Bullet&;
bullet.GetComponent&CBullet&().m_vDirection = m_curA
bullet.GetComponent&CBullet&().m_fMoveSpeed = m_fMoveSpeed + 1.0f;
bullet.transform.position = new Vector3(this.transform.position.x, this.transform.position.y,0);
Destroy(bullet, 5.0f);
设计为虚函数的原因是,AITank需要重写这个函数。
然后就需要监听各个按键,我设定为,按下A,W,S,D为方向键,松开就停止移动,然后按下K则开火,所以在Update函数里面应该这么实现:
void Update()
SetCurState(State.Idle);
if (Input.GetKey(KeyCode.A))
UpdateRotate(State.LeftWalk);
SetCurState(State.LeftWalk);
if (Input.GetKey(KeyCode.W))
UpdateRotate(State.UpWalk);
SetCurState(State.UpWalk);
if (Input.GetKey(KeyCode.S))
UpdateRotate(State.DownWalk);
SetCurState(State.DownWalk);
if (Input.GetKey(KeyCode.D))
UpdateRotate(State.RightWalk);
SetCurState(State.RightWalk);
if (Input.GetKeyDown(KeyCode.K))
SetCurState(State.Fire);
UpdateState();
其中SetCurState这个函数是用来设置当前状态的,并且把上一次的状态也存储起来,方便使用。
protected void SetCurState(State curState)
if (curState != m_curState)
m_lastState = m_curS
m_curState = curS
最后就到了一些碰撞检测的函数了,例如,碰到敌人的子弹就生命值减一,生命值为0了就宣布游戏结束。
void OnTriggerEnter2D(Collider2D other)
Debug.Log(m_sName + & OnTriggerEnter : & + other.gameObject.name);
//被打中了
if (other.gameObject.name == &AIBullet&)
Destroy(other.gameObject);
if (Camera.main.GetComponent&CCamera&().ReduceMyLeft() & 0)
GameObject temp = Instantiate(m_BoomAnimation, this.gameObject.transform.position, Quaternion.identity) as GameO
Destroy(temp, 0.5f);
string name = this.gameObject.
GameObject temp_tank = Instantiate(this.gameObject, m_initPosition, Quaternion.identity) as GameO
temp_tank.name =
Camera.main.GetComponent&CCamera&().m_bIsLose =
Destroy(this.gameObject);
上面就是整个MyTank的实现过程了
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面到了AITank的实现,AITank主要是添加一些触发器,例如检测到碰撞就转弯,每隔两秒就发射子弹等等,作为一个非常简单的AI,就不需要考虑那么多。首先是碰撞检测:
void OnCollisionEnter2D(Collision2D coll)
Debug.Log(m_sName + & OnCollisionEnter2D : & + coll.gameObject.name);
ChangeStateFromWall();
} 遇到碰撞就转向,然后ChangeStateFromWall的具体实现如下:
void ChangeStateFromWall()
switch (m_curState)
case State.Idle:
SetCurState(State.DownWalk);
case State.LeftWalk:
SetCurState(State.UpWalk);
case State.UpWalk:
SetCurState(State.RightWalk);
case State.DownWalk:
SetCurState(State.LeftWalk);
case State.RightWalk:
SetCurState(State.DownWalk);
case State.Fire:
SetCurState(m_lastState);
this.UpdateRotate(m_curState);
这是一个循环转向的函数,如果当前方向是左边,就往上走,如果当前方向是上边,就往右走....;如果在开火状态的话,就返回上一状态;最后更新AI的角度。
然后到开火,开火的设定非常简单,调用到一个函数:InvokeRepeating,这个是一个重复定时器,函数原型为:
void InvokeRepeating (string methodName,float time,float repeatRate)
第一个参数是传入的方法,第二个参数是在几秒后开始,第三个参数是开始后每隔几秒重复执行。
我们需要的是在AI坦克生成后一秒发射子弹 然后周期是每隔两秒发射一次,所以在Start函数中应该这么写:
//每隔2秒开一次火
InvokeRepeating(&doFire&, 1, 2); 然后,我们需要重写doFire这个函数:
protected override void doFire()
base.doFire();
这样,就完成了每两秒发射一发子弹的功能了。
上面就是AI的基本功能了,以后可以慢慢优化它,使它成为一个强大的AI。
项目源码:
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:61783次
积分:1146
积分:1146
排名:千里之外
原创:60篇
评论:26条
(1)(2)(1)(1)(4)(3)(1)(1)(9)(2)(2)(2)(3)(8)(6)(2)(1)(2)(6)(2)(2)| Copyright &
. All Rights Reserved .}

我要回帖

更多关于 vb可以做什么 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信