QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2464|回复: 21

坦克大战 (练习项目,谁都有机会说两句)

[复制链接]
发表于 2004-7-19 14:33:57 | 显示全部楼层 |阅读模式
在此我并不是想做一个全新的游戏(所以直接使用街机版坦克的素材),只是想通过做一些简单的项目来让大家一起学习,共同进步。
以下是游戏画面:
 楼主| 发表于 2004-7-19 14:34:35 | 显示全部楼层
项目采用c和SDL库作为开发工具,现在的代码还没有做出游戏的框架,而只是作一个简单演示,试验一些基础算法而已,所以请不要奇怪代码为何没有整理。

    目前暂时使用两层背景和一层卡通,bg1为底层背景,为了实现简单采用整张图形,暂不分离出阴影层;bg2为上层背景,游戏中可以被破坏,图片大小为16x16,场景大小为34x27,图片编码OO为空地,Ax、Bx、Cx等指同一建筑块的各张图片,用一数组表示,同时此数组亦用于标识道路,坦克的位置将映射至此坐标系(34x27)来判断能否移动;卡通层sp1主要为坦克和炮弹的运行层,坦克大小为32x32,炮弹大小为12x12,与bg2的图片大小单位不一致,所以需通过坐标转换来检测碰撞。

源代码:http://linside.8u8.com/download/software/tank-demo.tar.bz2

想要学习SDL编程的朋友请看教程:http://www.libsdl.org/intro.cn/toc.html
回复

使用道具 举报

发表于 2004-7-19 14:47:28 | 显示全部楼层
   

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2004-7-19 16:34:20 | 显示全部楼层
我想加入,但是我需要一点SDL的文档 或指导
联系我 [email protected]
回复

使用道具 举报

发表于 2004-7-19 17:30:04 | 显示全部楼层
不顶不行啊 :-)
回复

使用道具 举报

发表于 2004-7-19 20:17:00 | 显示全部楼层
加油.
回复

使用道具 举报

发表于 2004-7-19 22:01:59 | 显示全部楼层
+U
回复

使用道具 举报

发表于 2004-7-19 22:23:00 | 显示全部楼层
坦克拐弯好像难度比较大,不知任天堂那个的胡同有多宽,
应该稍微加大点

好东西!
回复

使用道具 举报

发表于 2004-7-20 00:12:30 | 显示全部楼层

我也只够顶顶帖子的份了~
回复

使用道具 举报

发表于 2004-7-20 06:17:16 | 显示全部楼层
汗……刚才想加入我的一段代码……突然发现……你的程序是完全由输入驱动的……我的还有时间的驱动……
想看看你的图形绘制的代码……看不懂……
回复

使用道具 举报

发表于 2004-7-20 13:05:07 | 显示全部楼层
???怎么玩啊????
回复

使用道具 举报

 楼主| 发表于 2004-7-20 14:08:24 | 显示全部楼层
[quote:d85adb7ed4="laziogo"]坦克拐弯好像难度比较大,不知任天堂那个的胡同有多宽,
应该稍微加大点
[/quote]
呵呵,代码中已对这个问题作过处理的,即左右偏差两个象素(坦克运动的步进单位)坦克亦会自动调整位置进入胡同的,也许是我自己清楚地每次都能走到恰好的位置罢,看来现在还得加大调整的范围。

[quote:d85adb7ed4="sjinny"]汗……刚才想加入我的一段代码……突然发现……你的程序是完全由输入驱动的……我的还有时间的驱动……
想看看你的图形绘制的代码……看不懂……[/quote]
我已经描述得很清楚了呀,只是象两个背景层其实也只是概念上的东西,在实现时为了简便还是作了不少调整的。你想加入什么功能,可以提出来大家一起讨论、学习,但只需将方法或算法表达清楚,无须涉及代码细节。


我比较忙,一般只在周未添加新的代码。
回复

使用道具 举报

发表于 2004-7-20 22:12:20 | 显示全部楼层

偶也发一个……

出于简单就是美的原则……我就不费心去搞什么局部刷新了……我用整屏刷新了……
我做了一个程序,能简单地模拟物体的运动,就是模拟速度、加速度和受力(没有模拟旋转,只模拟了平移)。
下载后解包,先打开src/tank.cpp这个文件,把里面两个bmp文件的路径改了,里面的那个“back”是用来做背景的,那个另一个是代表了可运动的物体,找两个bmp文件用着先……
改好路径后,在tank目录里./configure;make;就可以了……
执行src/tank,运行时:
使用键盘上的上下左右四个键来控制物体在水平和竖直两个方向所受的“力”……
空格是在全屏和窗口模式间切换
Esc键是推出

主意:运行时程序会不停在终端输出那个物体的坐标等信息,请做好心理准备……

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2004-7-20 22:27:52 | 显示全部楼层
我还是再做个说明吧:
文件:
map.* 定义了Map类,用来实现地图对象
obj.* 定义了Obj类,用来实现对物体运动的模拟,同时也包括了对象自身的绘制(目前只是blit一个surface)
screen.* 定义了Screen类,Screen在实例化的过程中将调用SDL_SetVideoMode()函数
tank.* 没有定义类,tank.cpp里有main()函数,用到的头文件我用tank.h来管理

先说说Obj类的数据成员:
[code:1]
    float m; //质量
    float fx; //x方向的受力
    float fy; //y方向的受力
    float ax; //x方向的加速度
    float ay; //y方向的加速度
    float vx; //x方向的速度
    float vy; //y方向的速度
    float x; //x坐标
    float y; //y坐标
[/code:1]
Obj里的成员函数:
[code:1]
    void update(); //每次调用,都会更新对象的运动状态,但不绘制对象
                                                                                                                             
    void redraw(); //绘制对象
[/code:1]

重要的是Map类,它还没有完成,不过是搭了个架子:
成员函数:
[code:1]
    int check(Obj *obj); //每次调用,都会检查obj当前的状态下是否发生了事件(如碰撞、触发机关等),并且在发生了事件后对obj或地图进行操作。

    void redraw(int x, int y, int w, int h); //绘制地图
[/code:1]



程序总体上是:
[code:1]
初试化
游戏循环
        处理键盘事件
        更新对象并进行绘制
结束
[/code:1]
回复

使用道具 举报

发表于 2004-7-21 01:06:53 | 显示全部楼层
没人回复吗?
我顶~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 20:51 , Processed in 0.048214 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表