GameDesign 板


LINE

组译器实在太无聊了, 整天和 elf section, x86 machine code 搏斗, 真苦! 我写了太 多练功型的程式, 这些程式大多是帮助我理解某个概念, 实用性不高, 成就感也不大, 我 决定先暂停组译器, 来写个自己也会用的程式。 就是你了, 皮卡丘, 阿, 不是 ... 是俄罗斯方块。 俄罗斯方块大家都会玩, 但不是每个人都会写俄罗斯方块, 稍微思考後, 觉得还蛮难的, 没有任何突破点, 丝毫无法下手写程式。 ( https://goo.gl/v7epTz ) fig 0. 决战俄罗斯 这个程式我 200x 年就想写了, 不过直到最近 (201706) 我才真的动手, 大概是练功型程 式我真的有点腻了, fig 0 是决战俄罗斯, 我想写的是这个版本, 和一般的俄罗斯方块有 什麽不同呢? 他有一些特殊方块, 会有特殊功能。我很喜欢那些特殊功能的方块, 能增加 游戏性, 当然还有其双人的对战功能, 也很有趣, 在同一个萤幕上就可以 2 人对战, 不 用透过网路。 俄罗斯方块要完成好多部份, 把目标简化很重要, 这个步骤我已经非常熟悉, 第一个想到 的就是, 先来实作移动方块吧! 这样感觉简单了一些, 但其实还是没方向 ... 俄罗斯方块有很多不同的方块, 英文术语是 - Tetromino ( https://goo.gl/2QH42E ), 我决定先实作 z Tetromino。 ( https://goo.gl/2EGPPi ): two stacked horizontal dominoes with the top one offset to the left. 最後的成果就是 fig 1。 ( https://goo.gl/MDmSa1 ) fig 1. 移动 z Tetromino 这个 console mode 程式应该吓坏你了, 怎麽这麽丑, 但他包含了整个概念, 把绘制漂亮 的 UI 功能抽离出来, 这样会比较容易专住在主要核心上, 要画出好看的图形可不是件容 易的事情, 先不把焦点放在图形处理上。只要 c++ 标准程式库就可以执行了, 其中用到 了 sleep, 这个可能不是标准, 但用 for loop 也可以完成 delay 的动作。 z Tetromino 可以顺利的移动, 也可以旋转, 并且不会超过边界。这一回合就只做这件 事, 感觉简单了一些, 但实际上我在笔记本上画了不少方块图, 才得以想到方法, 完成这 个功能。 ( https://goo.gl/kVzrmN ) fig 2. z Tetromino 设计方式 一个方块是由 4 个点构成, 只要好好的描述好这 4 个点, 就可以完成移动、旋转。 z Tetromino 由 fig 2 那 4 个点构成, p0, p1, p2, p3: p0: (2,3) p1: (3,3) p2: (3,4) p3: (4,4) 往右移动就是在改变 p0, p1, p2, p3 这些座标, 你一定也想到要怎麽做了吧! 把所有点 的 x 加 1 就搞定了。 p0: (3,3) p1: (4,3) p2: (4,4) p3: (5,4) 换成程式码就是这样: int right() { ++p0_.x_; ++p1_.x_; ++p2_.x_; ++p3_.x_; } 简单到不用说明, 上、下、左也是一样的道理。 再来要怎麽画出画面呢? 宣告 2X2 array container_[10][20] 来处理, 把 p0: (2,3) p1: (3,3) p2: (3,4) p3: (4,4) 的座标标成 1, 其他标 0, 就会有类似的东西: 1111111111 1000000001 1000000001 1011000001 1001100001 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001 1000000001 1111111111 程式只要去检查这个 array 所有值, 是 1 的就画 1, 0 的就画 0, 这样就可以画出整个 俄罗斯方块的画面。 另外一个难题是碰撞侦测, 我怎麽知道方块到底了, 外围的 1 是我的边框, 在 down() 的函式会更新 4 个点的座标, 检查新座标的位置是不是 1, 若是, 就表示遇到边框或是 其他方块, 原理就是这样。 下次再来谈谈旋转, 其实也一样, 把 4 个点的座标改动而已。 我本来打算参考 fig 3 的书来实做俄罗斯方块, 不过我收到时, 已经做出 2 个方块可以 移动、旋转, 也可以消掉方块的版本了, 尽管如此, 此书还是有不少可以参考的地方, 厄 ... 这本书是使用 trubo pascal 完成俄罗斯方块。 不过我也不打算看别人的想法, 我要自己想出来怎麽写俄罗斯方块。 ( https://goo.gl/XxS4VE ) fig 3. 2017/06/20 09:23:17 订购於 https://tw.bid.yahoo.com/item/100125001955, 0170623 收到 200+80 目前的版本: 可以2人一起玩了。 一人玩 2 个部份还真的有点手忙脚乱。 画面是用 printf 印出来的。 这个程式用到了 c++17, 所以要用 g++-7 编译。 而画面绘制用到了 coroutine。 支援3种特殊方块, 2 种普通方块。 画面: https://goo.gl/photos/KgsrChwmZoPYdDDJ8 // 本文使用 Blog2BBS 自动将Blog文章转成缩址的BBS纯文字 http://goo.gl/TZ4E17 // -- 纸上得来终觉浅,绝知此事要躬行。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.217.6.159
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/GameDesign/M.1499176796.A.654.html
1F:→ pttworld: Tetris和Snake Off都是初学游戏编程的练习题目 07/05 21:32
2F:推 cjcat2266: 推认真,我记得旋转模式有两种的样子,日本某个竞技版 07/05 22:40
3F:→ cjcat2266: 可让玩家选,其中一个好像可以透过旋转让方块往上爬一 07/05 22:41
4F:→ cjcat2266: 格,看到强者快速用这招会看到眼花 07/05 22:42
5F:推 GALINE: console 录影推荐用 asciinema~ 07/07 08:35
感谢分享。 我想做这种的俄罗斯方块。 https://goo.gl/photos/EUtbLxTeLnUJXbW88 ※ 编辑: descent (101.11.16.85), 07/07/2017 22:59:23







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP