一个俄罗斯方块扩展游戏的消除算法问题

whoseking 2008-04-21 07:22:40
整个游戏的游戏界面数据保存在一个BYTE map[M][N]数组里,每一项都可能是不同颜色(姑且用1、2、3等来表示,0表示什么也没有)。如当前的游戏界面内容为:
{0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,1,1,2,3,1,
1,1,2,3,1,3,
2,12,2,2,3}
问题是:现在要把当前界面上,竖方向和横方向的有三个或三个以上相连的且颜色相同的项消去,消去后要把所消去项的上面部分下移。
如上述的游戏界面则变为:
{0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,1,
1,0,1,2,3,3,
2,0,2,3,1,3}
...全文
483 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
awanghero 2009-03-29
  • 打赏
  • 举报
回复
最基本的搜索算法问题,深度优先用堆栈,广度优先用队列
whoseking 2008-04-24
  • 打赏
  • 举报
回复
晕,闹了半天都是说自己的思路,看法,你们说的我都想到了,
关键是要去怎么遍历,怎么查找,怎么消,递归也好,堆栈也好,
能不能说具体一点,能不能用代码实现一下看看,可以的话,
把代码贴出来看看。
AFIC 2008-04-23
  • 打赏
  • 举报
回复
其实也不麻烦,就是从上边开始消……
AFIC 2008-04-23
  • 打赏
  • 举报
回复
要注意顺序问题
{0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,1,0,0,
0,1,1,2,2,2
2,2,2,3,1,3}

先消红色的222就消不了111了
必须先消蓝色的222
有这种考虑的话,也挺麻烦的。
yichuankun 2008-04-23
  • 打赏
  • 举报
回复
要注意这种情况
{0,0,0,0,0,0,
0,0,0,0,0,0,
0,0,0,0,0,0,
0,3,1,2,3,1,
1,1,2,2,1,3,
2,1,2,2,2,3}
以及边界情况
rodney1983 2008-04-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 heartbeast 的回复:]
肯定是有数据改变的时候才需要执行这个算法,所以就很简单了,有数据改变时,执行一次上下左右的搜索,发现一致的就把上方的数据往下移就可以了。
[/Quote]
有数据消去的话,继续执行上下左右搜索,直到无方块可以消去
夜雨_倚琴 2008-04-22
  • 打赏
  • 举报
回复
楼上说的只上最基本的情况,建议LZ从两个方向来考虑:
1 当有多项需要消除的时候,采用的是多项同时消除之后再下移,还是按照一定策略消除一项就下移。

2 在消除一项之后,例如消除一行的时候需要对下移的每个方块都要进行判断,但只用针对 行 进判断就可以了。这个应该不难。
  • 打赏
  • 举报
回复
只有横向或者竖向三个连在一起的同色方块才能消,那么只需要对矩阵的行和列进行扫描就可以了。可以进一步优化的是:当新落下一个方块之后,只扫描受这个方块“影响”的行和列,而不用扫描整个矩阵。

另外需要注意的是,当消去之后上面的部分下移,这时候可能会产生新的三色连在一起的情况,还得接着往下判断。
realduke2000 2008-04-22
  • 打赏
  • 举报
回复
写一个函数,检查它周围的数是否跟它一个颜色,注意检查边界值
heartbeast 2008-04-21
  • 打赏
  • 举报
回复
肯定是有数据改变的时候才需要执行这个算法,所以就很简单了,有数据改变时,执行一次上下左右的搜索,发现一致的就把上方的数据往下移就可以了。
《仙剑奇侠传》之父姚壮宪热情推荐,技术作家孟岩高度评价! 云风也是我在中国最佩服的游戏开发者。看了云风的研发历程,我觉得就是一部中国的游戏程序史,从最早的 Z80 , 6502 , PC8088 , 286 , 386…DOS ,保护模式, Assembler 到 C++ 的整个发展轨迹。这本书可以说横跨了游戏程序的过去、现在和未来。 书中传达的不仅是一些实用的技术经验,更是传达一种理念——虽然研发的环境随着时代而变,但研发的精神是不变的,那就是“在实践中积累”。 ——《仙剑奇侠传》之父 姚壮宪 之前我经常奇怪,云风还非常年轻,他程序思想中的那种老练的智慧是从何处得来的呢?读完这本书之后,我终于明白,还是那句话:“无他,唯手熟耳”。 面对这沉甸甸的作品,我确实感到,这是云风用心写的书。用心写的书,当然出色。 ——技术作家 孟岩 我现在是中国并不成熟的游戏制作行业中的一员,游戏给了我太多,我告诉自己需要做一点事情。分享知识和经验是我的义务,别无它。 ——云风 内容简介 本书忠实地记录了作者十余年来对游戏编程的所思、所感、所悟。全书按照作者本人学习和实践的过程,带着读者从基础的计算机知识到高级的编程技术,从非常专业的汇编优化到非常实际的项目管理进行了一次游戏开发的全景探索。 本书不仅适合游戏开发者阅读,也会给所有的开发者和程序爱好者带来启示。 作者简介 云风,时年二十七岁。自幼学习编程,十数年从未间断,对程序设计有所领悟。大学时代开发的游戏图像引擎“风魂”曾用于多家游戏公司的游戏项目。参与过《大话西游》系列、《梦幻西游》、《网易泡泡游戏》的开发。现从事新一代网络游戏引擎的研究与开发,并在游戏模式上做一些新的尝试。 性格开朗,兴趣广泛,好交友,绝非沉浸在计算机世界中的书呆子。国学、历史书籍常备案头,以先贤之教诲修其心;休息时常作户外运动,尤其喜爱攀岩。 目录 第1章 计算机,游戏,我 1 1.1 计算机 2 1.2 计算机游戏 3 1.3 计算机与我 7 1.3.1 启蒙 7 1.3.2 编程 9 第2章 算法,程序的灵魂 13 2.1 程序=算法+数据结构 14 2.1.1 算法 15 2.1.2 数据结构 17 2.2 搜索算法 23 2.2.1 地图寻路问题 23 2.2.2 博弈问题 27 2.2.3 更为广泛的运用 28 2.3 智能算法 29 2.3.1 遗传算法(Genetic Algorithm) 29 2.3.2 模拟退火算法(Simulated Annealing) 31 2.3.3 禁忌搜索(Tabu Search) 33 2.3.4 人工神经网络 (Artificial Neural Network) 34 2.4 优化 36 2.4.1 质数问题 36 1.4.2 俄罗斯方块竞赛 37 2.5 Apple II上的编程之路 39 第3章 编程语言 45 3.1 C 语言 46 3.2 BASIC 50 3.3 C++ 51 3.4 汇编语言 54 3.4.1 概述 55 3.4.2 程序的本质 57 3.4.3 寄存器 58 3.4.4 寻址方式 60 3.4.5 汇编指令 61 3.4.6 C/C++ 语言和汇编 62 3.4.7 小结 63 3.5 其他语言 63 3.5.1 Forth 63 3.5.2 Lisp 64 3.5.3 Java 64 3.5.4 Python、Lua、更多 65 第4章 前Windows 时代 67 4.1 386保护模式 68 4.2 VGA 到VESA 70 4.2.1 超越 BGI 70 4.2.2 VGA 72 4.2.3 VESA 标准 72 4.2.4 花絮 74 4.3 保护模式下的开发工具 75 4.4 闲话 Allegro 81 4.4.1 用C与汇编写成的程序库 81 4.4.2 BITMAP 82 4.4.3 Sprite 85 4.4.4 几何图形和 3D 89 4.4.5 数据文件 91 4.4.6 声音 92 4.4.7 其他的部分 93 4.4.8 小结 94 4.5 cfido 中国惠多网 94 第5章 Windows 编程 101 5.1 Windows编程入门 104 5.1.1 Windows版本综述 105 5.1.2 操作系统的核心 107 5.1.3 Windows API和DLL 110 5.1.4 COM 111 5.1.5 Windows的窗口和消息处理与传递 114 5.1.6 Windows GDI 125 5.2 控制游戏的速度 130 5.3 浅谈MFC 132 5.4 小结 132 第6章 汇编优化 135 6.1 浅谈代码优化 138 6.2 并不仅仅是汇
本版本与网上其他资源不同之处在于,此版本可进行编辑,搜索,已进行内容识别扫描。可全选,可编辑,可剪切文字。 部分目录如下: 第1 章计算机,游戏,我_ 我,云风,从二十年前的计 算机游戏萌芽阶段一路走来。计 算机,并不神秘。程序,也只是 表达计算机控制逻辑的符号而 巳。 第2 章算法,程序的灵魂 算法,先千计算机存在于世, 比编程语言本身更为蜇要C 语言 只是工具,算法才是灵魂。这里 简单介绍了数据结构的基本知 识、算法放率的评估方法、几种 NP 问题的定义。 这里对游戏中最常用的搜索 算法问题之一寻路问题做了些许 探讨,并展开介绍了在以后可能 被广泛使用的智能算法。最后用 几个实例探讨了优化问题。 1.1 计算机...................................................................... 2 1.2 计算机游戏............................................................., 3 1.3 计算机与我......................, ... , ................................... 7 1.3 .1 启蒙............................................................... 7 1.3 .2 编程..... , .................................... , .......... , ......... 9 13 2.1 程序=算法+数据结构............................................ 14 2.1.1 算法,.......................................................... ,, 15 2.1.2 数据结构,.................................................... 17 2.2 搜索算法,.............. . ............ .... ..................... . .. . ....... 23 2.2.l 地图寻路问题................................................ 23 2.2.2 博弈问题,...................................................... 27 2.2.3 更为广泛的运用............................................ 28 2.3 智能算法,............................................................... 29 2.3.1 遗传算法(Genetic Algorithm) .... ·........ …... 29 2.3.2 模拟退火算法(Simulated Annealing) ....... 31 2.3.3 禁忌搜索(Tabu Search) ............................. 33 2.3.4 人工神经网络 (Artificial Neural Network) …..... ….............. 34 2.4 优化,....................................................................... 36 2.4.1 质数问题....................................................... 36 1.4.2 俄罗斯方块竞赛............................................ 37 2.5 Apple II 上的编程之路.......................................... 39 XIII 第1 章计算机,游戏,我_ 我,云风,从二十年前的计 算机游戏萌芽阶段一路走来。计 算机,并不神秘。程序,也只是 表达计算机控制逻辑的符号而 巳。 第2 章算法,程序的灵魂 算法,先千计算机存在于世, 比编程语言本身更为蜇要C 语言 只是工具,算法才是灵魂。这里 简单介绍了数据结构的基本知 识、算法放率的评估方法、几种 NP 问题的定义。 这里对游戏中最常用的搜索 算法问题之一寻路问题做了些许 探讨,并展开介绍了在以后可能 被广泛使用的智能算法。最后用 几个实例探讨了优化问题。 1.1 计算机...................................................................... 2 1.2 计算机游戏............................................................., 3 1.3 计算机与我......................, ... , ................................... 7 1.3 .1 启蒙............................................................... 7 1.3 .2 编程..... , .................................... , .......... , ......... 9 13 2.1 程序=算法+数据结构............................................ 14 2.1.1 算法,.......................................................... ,, 15 2.1.2 数据结构,.................................................... 17 2.2 搜索算法,.............. . ............ .... ..................... . .. . ....... 23 2.2.l 地图寻路问题................................................ 23 2.2.2 博弈问题,...................................................... 27 2.2.3 更为广泛的运用............................................ 28 2.3 智能算法,............................................................... 29 2.3.1 遗传算法(Genetic Algorithm) .... ·........ …... 29 2.3.2 模拟退火算法(Simulated Annealing) ....... 31 2.3.3 禁忌搜索(Tabu Search) ............................. 33 2.3.4 人工神经网络 (Artificial Neural Network) …..... ….............. 34 2.4 优化,....................................................................... 36 2.4.1 质数问题....................................................... 36 1.4.2 俄罗斯方块竞赛............................................ 37 2.5 Apple II 上的编程之路.......................................... 39 XIII 第3 章编程语言 至少要学会一种编程语言, 才可能编写游戏软件。流传于世 的编程语言数以百计,但真正流 行的却不多。各种编程语言之间 有它们的共通性,但也并非能够 一通百通,甚至也不存在一种适 合娇决所有问题的语言。 我认为大部分游戏程序员都 应该掌握工作平台的汇编语言。 这对理解硬件, 写出更好的代码, 还有软件调试都有莫大的帮助。 第4 章前Windows 时代 现在, Win d ows 一统江山, 它帮我们稳藏了硬件的许多东西。 这一章是对1 0 年前知识的一个回 顾,它们如今已经沉寂在历史中, 或是被Windows 掩盖。但是, 作 为喜爱创根l河底的程序员,我们有 必要对Window s 之前的时代有一 些了解。 XIV 3.1 C 语言................................................, .. ,, .......... ,.,,. 46 3.2 BASIC ..................................................................... 50 3.3 Ct+ ......................................................................... 51 3 .4 汇编语言,............................................................... 54 3.4.1 概述.............................., ... , ....................... ,,, .. 55 3.4.2 程序的本质....., .. , ... , ...................................... 57 3.4.3 寄存器........................................................... 58 3.4.4 寻址方式....................................................... 60 3.4.5 汇编指令....................................................... 61 3.4.6 CIC++ 语言和汇编....................................... 62 3.4.7 ,J 、结... . .. .. . .. .. .... .... ....... .... .. . . .. ............ .. ........... 63 3.5 其他语言................................................................ 63 3.5.1 Forth .............................................................. 63 3.5.2 Lisp ................................................................ 64 3.5.3 Java····..................................................... ....... 64 3.5.4 Python 、Lua 、更多...................................... 65 4.1 386 保护模式......................................................... 68 4.2 VGA 至U VESA ...................................................... 70 4.2.1 超越BGI ...................................................... 70 4.2.2 VGA·....... ··· · ···............................................... 72 4.2.3 VESA 标准................................................... 72 4.2.4 花絮............................................................... 74 4.3 保护模式下的开发工具.... …... ……............. ………··75 4.4 闲话Allegro .......................................................... 81 4.4.1 用C 与汇编写成的程序库….... …·….............. 81 442 BITMAP···.....................................................8 2 4.4.3 Sprite···.. ·.. ·.... ·.. ·.. ··.. ·.. ·········.. ··.... ···············.. ··85 4.4.4 几何图形和3D··........................................... 89 4.4.5 数据文件............... .-....................................... 91 4.4.6 声音............................................................... 92 4.4.7 其他的部分................................................... 93 45 67 第5 章Windows 编程 如果我们在Window s 下开 发游戏,那么理惮Window s 系统 就是尤为重要的事情。Window s 只是一个操作系统的特例,不属 子计算机理论知识的范畴。这导 致了许多已经掌握了编程知识, 理论功底也很扎实的程序员, 面 对Window s 下的开发无可适从。 第6 章汇编优化 汇编优化, 是在高性能游戏 引擎设计中很难避免的一个环 节。虽然不用汇编去做优化依然 可以写出高性能的程序,但优化 却可以变得更好。 但是,这一章并非从汇编开 始谈起。相反,一开始我就花了 不少笔墨谈汇编之外的知识。即 使是一些技巧性的细节, 也并非 必须用汇编才可以做到。 这一章着重介绍了在CIC++ 中和汇编进行混合编程的方法和 技巧,然后才具体谈到汇编指令 的高效使用策略。 4.4.8 ,J 、结............................................................... 94 4.5 cfido 中国惠多网.................................................. 94 5.1 Windows 编程入门............................, ................. 104 5.1.1 Windows 版本综述...... ,, ..... , ........................ 105 5.1.2 操作系统的核心................ ., ........................ 107 5.1.3 Windows API 和DLL.. ·······......................... 110 5.14 COM··........................................................... 111 5.1.5 Windows 的窗口和消息处理与传递........... 114 5.1.6 Windows GDI .................................. ............ 125 5.2 控制游戏的速度,................................................. 130 5 .3 浅谈M FC .................. .. ......................................... 132 5.4 小结,............................................................. . ....... 132 6.1 浅谈代码优化............................................... ..... .. 138 6.2 并不仅仅是汇编.................................................. 139 6.2.1 在算法实现时减少上下文的依赖关系.. ….. 139 6.2.2 低效的静态变量.................................... ... ... 140 6.2.3 数据的组织.................................... ... .......... 141 6.2.4 消除除法..................................................... 142 6.2.5 避免过大的循环.......................................... 144 6.3 汇编和CIC++ 的混合编程.................................. 146 6.3.1 使用外置的汇编编译器.. . ....... …............. …·146 6.3.2 使用内嵌汇编·· ·· · ··· ···········........................... 148 6.3.3 C++ 的函数调用规则........ ……..................... 150 6.3.4 寄存器的使用...................................... ........ 152 6.3.5 _declspec(naked)· ·· ·.... · · ·· · · ··... ·... ·.... · ·· · · ·· · ··.... 152 6.4 指令使用的技巧.................................................. 153 6.4.1 LEA: 别样的内存寻址指令................……·153 6.4.2 BSWAP: 扩展寄存器的个数......... ….... …··154 101 135 XV 第7 章S-I M D 指令 单指令多数据(SIMD , Single Instructio n-Mu l tiple- D ata) 编程是 现代CP U 高速处理多媒体数据 的发展方向。好的工具摆在一边 不去用就是一种浪费。 这里介绍得多的是MMX 使 用技巧,这方而也是我用得比较 多的,勉强算得上经验丰富。 第8 章引擎中的优化 单从内容来看,这一章是本 书的独家内容。我得以成名的开 源游戏引擎“风魂”的几乎所有 优化策略都在这章公开出来。虽 然引擎源码一直都是公开的, 想 研究的人自然可以通过阅读代码 来学习,但是,由作者本人来解 释其中的优化策略,这是第一次 的文字记录。 XVI 6.4.3 缩短指令的宇节数............ . .... . .................…155 6.4.4 避免跳转指令............................................. 159 6.5 Pentium 的汇编优化策略...... ….......................... 161 6.5.1 UV 流水线................................................... 163 6.5.2 AGI 地址生成互锁 ( Address Generation Interlock)· · ………... 167 6.5.3 Pentium Pro, Pentium II 和Pentium III 的汇编优化策略......................................... 168 6.5.4 Pentium 4 的汇编优化策略…...... …............. 178 6.5.5 如何测试代码的速度…............................... 181 6.5.6 汇编能干的事情.......................................... 183 7.1 单指令多数据编程...... .. ..... ...... .. .. . .. .. ..... ... .. .. ...... 186 7.1.1 Alpha 混合.................................................. 187 7.2 MMX .................................................................... 191 7.2.1 MMX 的指令概况....................................... 192 7.2.2 SSE 及其对MMX 的扩展,......................... 194 7.2.3 SIMD 技术在C 语言环境下的使用...…….. 196 7.2.4 MMX 编码技巧.......................................... 197 7.2.5 SIMD 的应用举例...................................... 201 7.2.6 SIMD 编程注意要点. .................................. 203 7.2.7 SIMD 的性能检测....................................... 204 8.1 Blit 的优化........................................................... 207 8.2 脏矩形优化............................ . ............................. 209 8.2.1 "风魂”中改进的脏矩形算法...........…..... 215 8.2.2 滚动优化..................................................... 219 8.2.3 覆盖优化............................................. . ....... 222 8.2.4 脏矩形在3D 游戏界面中的运用....... .. .. . .... 224 8.2.5 时间和空间的权衡...................................... 229 8.2.6 关于估算..................................................... 230 185 205
《仙剑奇侠传》之父姚壮宪热情推荐,技术作家孟岩高度评价! 云风也是我在中国最佩服的游戏开发者。看了云风的研发历程,我觉得就是一部中国的游戏程序史,从最早的 Z80 , 6502 , PC8088 , 286 , 386…DOS ,保护模式, Assembler 到 C++ 的整个发展轨迹。这本书可以说横跨了游戏程序的过去、现在和未来。 书中传达的不仅是一些实用的技术经验,更是传达一种理念——虽然研发的环境随着时代而变,但研发的精神是不变的,那就是“在实践中积累”。 ——《仙剑奇侠传》之父 姚壮宪 之前我经常奇怪,云风还非常年轻,他程序思想中的那种老练的智慧是从何处得来的呢?读完这本书之后,我终于明白,还是那句话:“无他,唯手熟耳”。 面对这沉甸甸的作品,我确实感到,这是云风用心写的书。用心写的书,当然出色。 ——技术作家 孟岩 我现在是中国并不成熟的游戏制作行业中的一员,游戏给了我太多,我告诉自己需要做一点事情。分享知识和经验是我的义务,别无它。 ——云风 内容简介 本书忠实地记录了作者十余年来对游戏编程的所思、所感、所悟。全书按照作者本人学习和实践的过程,带着读者从基础的计算机知识到高级的编程技术,从非常专业的汇编优化到非常实际的项目管理进行了一次游戏开发的全景探索。 本书不仅适合游戏开发者阅读,也会给所有的开发者和程序爱好者带来启示。 作者简介 云风,时年二十七岁。自幼学习编程,十数年从未间断,对程序设计有所领悟。大学时代开发的游戏图像引擎“风魂”曾用于多家游戏公司的游戏项目。参与过《大话西游》系列、《梦幻西游》、《网易泡泡游戏》的开发。现从事新一代网络游戏引擎的研究与开发,并在游戏模式上做一些新的尝试。 性格开朗,兴趣广泛,好交友,绝非沉浸在计算机世界中的书呆子。国学、历史书籍常备案头,以先贤之教诲修其心;休息时常作户外运动,尤其喜爱攀岩。 目录 第1章 计算机,游戏,我 1 1.1 计算机 2 1.2 计算机游戏 3 1.3 计算机与我 7 1.3.1 启蒙 7 1.3.2 编程 9 第2章 算法,程序的灵魂 13 2.1 程序=算法+数据结构 14 2.1.1 算法 15 2.1.2 数据结构 17 2.2 搜索算法 23 2.2.1 地图寻路问题 23 2.2.2 博弈问题 27 2.2.3 更为广泛的运用 28 2.3 智能算法 29 2.3.1 遗传算法(Genetic Algorithm) 29 2.3.2 模拟退火算法(Simulated Annealing) 31 2.3.3 禁忌搜索(Tabu Search) 33 2.3.4 人工神经网络 (Artificial Neural Network) 34 2.4 优化 36 2.4.1 质数问题 36 1.4.2 俄罗斯方块竞赛 37 2.5 Apple II上的编程之路 39 第3章 编程语言 45 3.1 C 语言 46 3.2 BASIC 50 3.3 C++ 51 3.4 汇编语言 54 3.4.1 概述 55 3.4.2 程序的本质 57 3.4.3 寄存器 58 3.4.4 寻址方式 60 3.4.5 汇编指令 61 3.4.6 C/C++ 语言和汇编 62 3.4.7 小结 63 3.5 其他语言 63 3.5.1 Forth 63 3.5.2 Lisp 64 3.5.3 Java 64 3.5.4 Python、Lua、更多 65 第4章 前Windows 时代 67 4.1 386保护模式 68 4.2 VGA 到VESA 70 4.2.1 超越 BGI 70 4.2.2 VGA 72 4.2.3 VESA 标准 72 4.2.4 花絮 74 4.3 保护模式下的开发工具 75 4.4 闲话 Allegro 81 4.4.1 用C与汇编写成的程序库 81 4.4.2 BITMAP 82 4.4.3 Sprite 85 4.4.4 几何图形和 3D 89 4.4.5 数据文件 91 4.4.6 声音 92 4.4.7 其他的部分 93 4.4.8 小结 94 4.5 cfido 中国惠多网 94 第5章 Windows 编程 101 5.1 Windows编程入门 104 5.1.1 Windows版本综述 105 5.1.2 操作系统的核心 107 5.1.3 Windows API和DLL 110 5.1.4 COM 111 5.1.5 Windows的窗口和消息处理与传递 114 5.1.6 Windows GDI 125 5.2 控制游戏的速度 130 5.3 浅谈MFC 132 5.4 小结 132 第6章 汇编优化 135 6.1 浅谈代码优化 138 6.2 并不仅仅是汇

33,007

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧