因为坐标不是很大,弄一个二维数组有来保存什么坐标有墙应该是个非常好的选择,既不耗内存,又有非常快的速度
用wall[x][y]==true来表示x,y坐标是一堵墙
谢谢,坦克在二维数组的位置这个又该怎么实现呢?然后我按鼠标键,坦克的位置就会上下移动,还望多指点
@绝对菜鸟: 用x,y两个变量来记录它的当前位置啊,在移动的时候,判断前进方向有没有墙(我上面说的那个数组),坦克的位置怎么动,这是界面的事情,得看你是怎么画坦克了,一般来讲,应该有个从模式坐标转换为屏幕坐标的过程
@trytocatch: 从模式坐标转换为屏幕坐标? 这个怎么实现的啊?
按上下键是事件,使用position[x][y]这个数组来确定哪里有墙,坦克在哪里,按一次上就x+1同理下就x-1,懂了吧
谢谢诶,那么我的坦克在哪个位置,这个应该怎么确定呢? 也就是我的坦克在地图上的位置怎么转换到坐标位置呢?
最简单的方法用矩形碰撞检测。
用x、y两个变量来设置坦克的位置,而页面也有总的宽度和长度,当点击按键的时候, x和y发生变化,测试坦克的位置与页面边框的距离,如果为0,就不能操作某个方向键。你是在看视频学习吗?我也在做这个游戏。有空交流一下。
您好,算盘,不好意思,我才回复,我没有视频学习,只是在CSDN上看到有个家伙实现了,就想找这方面的视频,可以也没有找到啊
@绝对菜鸟: 有空交流一下,我家里没网络,今天才回,我的QQ381546192
马士兵视频教程有讲解坦克大战的,不过采用的是java语言。你可以参考一些。
首先定义一个宽度给高度的一个地区, 然后遍历输出数组,数组可以为0,1,2,3,4,
0.可以代表是路。
1.可以代表是贴墙(不可破坏)
2.可以代表是土墙(可破坏)
3.可以代表是草丛(可穿越,不可破坏)
4.可以代表是河流,子弹可以穿越,(不可破坏)
这件就可以输出一个地图,
然后使用_kbint()函数接收按键。switch循环没一个按键,
COORD POS 定义一个窗口的x,y代表坐标
如果按了w键,那么x--,循环,就可以实现坦克走起来。
使用if else if都可以实现, 不过使用switch更好一点,个人觉得。
曾经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