网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月03日漏签0天
汇编吧 关注:45,333贴子:164,068
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 8回复贴,共1页
<<返回汇编吧
>0< 加载中...

Win32汇编写FlappyBird (重貼)

  • 只看楼主
  • 收藏

  • 回复
  • ZandraWoo
  • 数据结构
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
貼子太旧好象看不見,重貼一下
Win32汇编写FlappyBird
FlappyBird未完成版,尚欠碰撞测试,拿金币,计分,生命,
GameOver,音乐,音效,关卡设计等等,完成度20%
材料:-
1.masm32版,网上自找,最好用 \MASM32 作为文件夹
2.FlappyBird背景图,文字图,柱子及小鸟图,网上抓
3.Photoshop任何版本,把背景图裁剪为游戏窗口的1/4大小
若游戏窗口是800x400,背景图做成200x400,(见压缩包里的4back.bmp)
注意左右拼合起来时,不要看见接驳痕迹.
把抓回来的小鸟褪去背景色,改为全黑背景(透明色),
利用旋转另制作七个小鸟的方向图,分别为
右,右下,下,左下,左,左上,上,右上
合拼八图,增加版面,把flappybird横牌和上下柱子合成一图
(见压缩包里的birdAA.bmp)
记录每一个图像在合拼图的位置和宽长(参看代码中的birdA_offset)
原理:-
1.这种横向2D游戏通常同时有背景卷动和主角移动,我们设定了一个55ms的计时器
invoke SetTimer,NULL,NULL,55,addr _ProcTimer
即是说, 每55ms(1/18秒)系统会呼叫 _ProcTimer 一次,大部份工作都在这程序完成.
2.读取背景图,4个背景图合成一张游戏窗口背景图,
invoke LoadBitmap,hInstance,100 其中100是背景图编号,由rsrc.rc指定
为什么要合拼而不完整一张呢?原因是bmp挺大,一个大bmp随时1m以上,
若改为jpg需额外代码处理,不如bmp方便
用BitBlt函数连续做12(4x3)次合拼,做了一张3个窗口大小的背景暂存(memDC2)
我们叫它1号窗口,2号窗口和3号窗口
另外建立一个窗口大小的显示暂存(memDC3)
设定一个卷动变数var1,每1/18秒轮到_ProcTimer运行时,var1+5
1,2号窗口是一张1600宽的暂存图(memDC2的1和2),每次显示时,
由x=var1,y=0的位置开始搬(memDC2)800x400的资料出来放显示暂存(memDC3)
再把小鸟动作,柱子,金币或各种物件依位置放在显示暂存(memDC3)
最后刷新屏幕时由显示暂存(memDC3)一次置入当前窗口中,
由于var1不断增加,x不断变动,这样就会做成背景卷动和主角移动的效果
当var1累加到达800,视界也到达第2号窗口,这时var1置0,
2号窗口资料搬到1号窗口,3号窗的原始背景移到2号窗口,重新绘上柱子或其他物件
这样,柱子和新物件就源源不断由右方卷出来
3.原代码中有详细注解,在这里也不再多说了,若有不明白地方欢迎提出,
更欢迎指出不足之处,毕竟俺也少写这类程式,错漏难免....
4注意:这只是一个范例程式,若你需要其他功能或加入或删减任何代码,
请随便,但不能要求作者为你订制特定的功能或,根据功课要求而改变这
个子程序改变那个子程序,若是代码错误或优化代码的意见,
则欢迎提出:)
源码:
https://git.oschina.net/zhishi/asm_for_all/blob/master/example/x86/win32/fbird.asm
压缩包,有源码,资源档,图档和make.bat
运行make.bat即可完成编译


  • ZandraWoo
  • 数据结构
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼



2025-07-03 03:08:00
广告
  • ZandraWoo
  • 数据结构
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼


  • 多重嵌套递归
  • 过程
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
欸嘿,有趣 话说你录屏转GIF怎么转的?


  • ZandraWoo
  • 数据结构
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
游戏工具:
为游戏写工具挺常见,比如编辑地图,编辑人物动作等等,都是在主体游戏程式之外另写工具协作,但为上面这个小小的烂游戏写工具,有必要吗?
工具其中一个目的,是用来减省重复而沈闷的工作,刚巧碰到这样情况,我宁愿花一小时写个工具,也不想用十分钟做重复无聊的动作。
在这游戏里,我原本设计了一套叫动作模式的东西,按上、下、左、右、空白,小鸟就会做对应的动作,比如按「下键」,程式会去找「下」的动作表:
Down_No,0,20,Down_No,0,20.........StopAction
Down_No是小鸟头向下,0,20 中0是x-坐标(正值向下,负值向上),20是y-坐标(正值向右,负值向左),0,20表示垂直向下移20个像素。
整个「下」便由这一串动作连贯起来,其他方向键亦有长短不一的动作,这些动作不会超过十数个,简单的动手加加减减就是,但....若想做横贯整个屏幕的大回环飞行,或者大八字飞行呢?
手动逐个加right_no,right_up_no等动作编号和加减偏移量,不单沈闷,而且容易出错,于是就写了这个工具,它可以自动输出小鸟方向编号和偏移量到记事本,只要用鼠标画一次飞行路径就是。
若看过罗云彬的Win32汇编语言,应该记得附录B里有一套输出视窗讯息到记事本
的代码,俺老实不客气拿来用了,还顺手借了第7章的绘线子程序,画下飞行路线,炒炒冷饭不到一小时就收工。
值得一提是偏移量,要维持小鸟均速飞行,偏移量最好每次一样,现在的方法是用MouseMove检查x和y的变化(偏移量^2 = x^ 2+ y^2),偏移量超过20像素(可变更以加快或减慢速度)记录一次,输出到记事本。
程式Rpath.exe用法:先开一个空白记事本
右键=清空并设定起点,左键=记录当前位置,中键=暂停记录和画线
鼠标右键按一下(不用按着),拖行以记录飞行路线,回到起点位置,按左键复合,把记事本里长长的路线放到游戏程式中待用。
这版本的flappybird,加了两套飞行动作,按F2是八字乱飞,按F3是大回圈飞,飞行时是无敌的,不怕柱子和地面,但每局只有两次,每过五个画面加1次。

链接:http冒号//pan点baidu点com/s/1kTvRQQF
密码:4ozp


  • 莲铃儿
  • 输入输出
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
额。。。我没找到图片素材和编译器


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 8回复贴,共1页
<<返回汇编吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示