作者softwind (software everywhere)
看板GameDesign
标题Re: [请益] 请问使用C语言写俄罗斯方块
时间Tue Dec 15 01:01:47 2009
※ 引述《boyen3 (Mentirosa!!)》之铭言:
: 之前也交过俄罗斯方块当作业
: 我的想法是这样:
: 先看范围要多大 用一个二维阵列表示
: 数值用 0:代表那一格没有方块
: 1:代表那一格有方块
: 一直更新阵列值 值是1的地方 看要用什麽东西代表贴上去就可以了
: 然後大概有几个要注意的地方:
: 方块移动 变形 满行消除 边界 碰撞判断 下降速度
: 大概都很好处理 但是弄起来很烦...
:
: 原po学校真拼
我还没有实作~ 我大概设计了一下
我觉得关键点两个部份:
1. 变型(这个预structure描述方块可能得转向 不过我忘了...)
2. 整行消除(其实这个要硬作最简单...)
---------------------------------------
先谈2. 整行消除 就方块碰撞後 直接Scan 整条row
连续检查 是不是都有 block存在即可
不过 我的想法是
使用 pair<int,int> 做成 "短棒" (左边界,右边界)
然後用 list<> 来串 每次insert入list 进行短棒"融合"
ex: 某行如下
## ## ###
0123456789
其中存在短棒 (0,1)(3,4)(7,9)
他的list会形如
(0,1)->(3,4)->(7,9)
当一个block 插入2的位置 把 (2,2) insert into list<> 後变成
(0,4)->(7,9)
这样的话 就可以... 节能减炭...
说真得 这个方法除了implement较有难度
大量的mem alloc 似乎没有多省能...
变型的部分 我再找一下 我记得我有描述方块动作的草图...
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.166.112.129
※ 编辑: softwind 来自: 118.166.112.129 (12/15 01:03)
1F:→ hala932:消除用递回做也只要O(n) 你的作法比较复杂也没比较快 12/15 03:16
2F:→ hala932:至少你第一步求现有的短棒就需要O(n) 12/15 03:18