首页 新闻 会员 周边 捐助

C#做坦克大战的问题

0
悬赏园豆:10 [待解决问题]

我想问的问题是,坦克大战里的墙有各种图形,按住坦克,如果遇到墙就不能前进了,只能拐弯或后退,我想知道这样的情况,程序员是如何设计这个程序的,用什么语句或者方法来实现呢?应该不会用if...else语句吧,如果是你,你会考虑怎么实现这个功能?

绝对菜鸟的主页 绝对菜鸟 | 初学一级 | 园豆:27
提问于:2013-01-09 09:46
< >
分享
所有回答(7)
0

因为坐标不是很大,弄一个二维数组有来保存什么坐标有墙应该是个非常好的选择,既不耗内存,又有非常快的速度

用wall[x][y]==true来表示x,y坐标是一堵墙

trytocatch | 园豆:373 (菜鸟二级) | 2013-01-09 10:50

谢谢,坦克在二维数组的位置这个又该怎么实现呢?然后我按鼠标键,坦克的位置就会上下移动,还望多指点

支持(0) 反对(0) 绝对菜鸟 | 园豆:27 (初学一级) | 2013-01-09 14:02

@绝对菜鸟: 用x,y两个变量来记录它的当前位置啊,在移动的时候,判断前进方向有没有墙(我上面说的那个数组),坦克的位置怎么动,这是界面的事情,得看你是怎么画坦克了,一般来讲,应该有个从模式坐标转换为屏幕坐标的过程

支持(0) 反对(0) trytocatch | 园豆:373 (菜鸟二级) | 2013-01-09 19:59

@trytocatch: 从模式坐标转换为屏幕坐标? 这个怎么实现的啊?

支持(0) 反对(0) 绝对菜鸟 | 园豆:27 (初学一级) | 2013-01-11 09:43
0

按上下键是事件,使用position[x][y]这个数组来确定哪里有墙,坦克在哪里,按一次上就x+1同理下就x-1,懂了吧

羽商宫 | 园豆:2490 (老鸟四级) | 2013-01-09 19:37

谢谢诶,那么我的坦克在哪个位置,这个应该怎么确定呢? 也就是我的坦克在地图上的位置怎么转换到坐标位置呢?

支持(0) 反对(0) 绝对菜鸟 | 园豆:27 (初学一级) | 2013-01-10 15:13
0

最简单的方法用矩形碰撞检测。

百零八1900 | 园豆:229 (菜鸟二级) | 2013-01-15 10:52
0

用x、y两个变量来设置坦克的位置,而页面也有总的宽度和长度,当点击按键的时候, x和y发生变化,测试坦克的位置与页面边框的距离,如果为0,就不能操作某个方向键。你是在看视频学习吗?我也在做这个游戏。有空交流一下。

算盘 | 园豆:230 (菜鸟二级) | 2013-01-15 16:48

您好,算盘,不好意思,我才回复,我没有视频学习,只是在CSDN上看到有个家伙实现了,就想找这方面的视频,可以也没有找到啊

支持(0) 反对(0) 绝对菜鸟 | 园豆:27 (初学一级) | 2013-02-07 22:50

@绝对菜鸟: 有空交流一下,我家里没网络,今天才回,我的QQ381546192

支持(0) 反对(0) 算盘 | 园豆:230 (菜鸟二级) | 2013-02-18 16:10
0

马士兵视频教程有讲解坦克大战的,不过采用的是java语言。你可以参考一些。

薛遗山 | 园豆:106 (初学一级) | 2013-07-24 17:40
0

首先定义一个宽度给高度的一个地区, 然后遍历输出数组,数组可以为0,1,2,3,4,

0.可以代表是路。

1.可以代表是贴墙(不可破坏)

2.可以代表是土墙(可破坏)

3.可以代表是草丛(可穿越,不可破坏)

4.可以代表是河流,子弹可以穿越,(不可破坏)

这件就可以输出一个地图,

然后使用_kbint()函数接收按键。switch循环没一个按键,

COORD POS   定义一个窗口的x,y代表坐标

如果按了w键,那么x--,循环,就可以实现坦克走起来。

使用if else if都可以实现, 不过使用switch更好一点,个人觉得。

王_远 | 园豆:202 (菜鸟二级) | 2014-11-06 16:39
0

曾经vb6写的坦克大战, 移动代码 给你参考下吧,,,
If Xi.KeyInput(DIK_W) Then
Tan1.PicNe = 1
If OrZou(Tan1.X, Tan1.Y, 1) Then
Tan1.Y = Tan1.Y - 3
OrZh IntC(Tan1.X), IntC(Tan1.Y)
End If
ElseIf Xi.KeyInput(DIK_S) Then
Tan1.PicNe = 3
If OrZou(Tan1.X, Tan1.Y, 2) Then
Tan1.Y = Tan1.Y + 3
OrZh IntC(Tan1.X), IntC(Tan1.Y)
End If
ElseIf Xi.KeyInput(DIK_A) Then
Tan1.PicNe = 5
If OrZou(Tan1.X, Tan1.Y, 3) Then
Tan1.X = Tan1.X - 3
OrZh IntC(Tan1.X), IntC(Tan1.Y)
ElseIf Not OrZou(Tan1.X, Tan1.Y, 3) And OrZou(Tan1.X, Tan1.Y + 2, 1) And OrXiuZh Then
Tan1.Y = Tan1.Y - 3
OrXiuZh = False
End If
ElseIf Xi.KeyInput(DIK_D) Then
Tan1.PicNe = 7
If OrZou(Tan1.X, Tan1.Y, 4) Then
Tan1.X = Tan1.X + 3
OrZh IntC(Tan1.X), IntC(Tan1.Y)
ElseIf Not OrZou(Tan1.X, Tan1.Y, 4) And OrZou(Tan1.X, Tan1.Y + 2, 1) And OrXiuZh Then
Tan1.Y = Tan1.Y - 3
OrXiuZh = False
End If
End If

Function OrZou(X As Integer, Y As Integer, F As Integer) As Boolean
Dim XzuoB As Integer, YzuoB As Integer
Select Case F
Case 1
If OrGo(IntN(X + 4), IntN(Y + 5)) And OrGo(IntN(X + SanE - 4), IntN(Y - 5)) Then
OrZou = True
Else
OrZou = False
End If
Case 2
If OrGo(IntN(X + 4), IntN(Y + SanE - 5)) And OrGo(IntN(X + SanE - 5), IntN(Y + SanE - 5)) Then
OrZou = True
Else
OrZou = False
End If
Case 3
If OrGo(IntN(X + 4), IntN(Y + 2)) And OrGo(IntN(X + 4), IntN(Y + SanE - 3)) Then
OrZou = True
Else
OrZou = False
End If
Case 4
If OrGo(IntN(X + SanE - 4), IntN(Y + 3)) And OrGo(IntN(X + SanE - 5), IntN(Y + SanE - 3)) Then
OrZou = True
Else
OrZou = False
End If
End Select
End Function

Function OrZhu(Px As Integer, Py As Integer, Tx As Integer, Ty As Integer) As Boolean
If Px > Tx And Px < Tx + 32 And Py > Ty And Py < Ty + 32 Then
OrZh = True
Else
OrZh = False
End If
End Function

风中的雪糕 | 园豆:418 (菜鸟二级) | 2020-01-19 23:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册