基于Lua的清除类游戏算法
最近在开发游戏,用Lua语言。习惯了其它的语言,然后对Lua的一些语法很不习惯。
比如table的元素个数的取值,比switch语句等等。
不过没有办法,还是要运用Lua来写游戏的。看来学C++还真的挺有用的,大学也没算白学啊。回头也得补一下C++才行,还得看cocos2d-x的代码,没办法。啊。
言归正传。
这两天要写个游戏,结果同个名称的游戏,玩法都不一样的。
然后我写的一个算法居然是另外一种玩法的方案,没办法,明天还得继续想解决方法。不过已经有点思路了。特拿出来分享。
原创首发于:
http://www.zzzzy.com/201408063254.html
http://www.oupag.com/bbs/thread-7817-1-1.html
-------自己写的算法开始-------
--检查横向是否相同的精灵,根据num编码来
local function checkCols(m_num, m_tag)
--往左
local toLeft = m_num % col --左边余下个数
for i = 1, toLeft, 1 do
local toLnum = m_num - i
local l_star = starObject:objectAtIndex(toLnum) --取出对象中的精灵
if l_star:getTag() == m_tag then
--clearStars(toRnum, m_tag)
if isInTable(l_star, deleteStars) == 1 then
table.insert(deleteStars, toLnum, l_star)
end
else
break
end
end
--往右
local toRight = col - toLeft - 1 --右边余下个数
for i = 1, toRight, 1 do
local toRnum = m_num + i
local r_star = starObject:objectAtIndex(toRnum) --取出对象中的精灵
if r_star:getTag() == m_tag then
--clearStars(toRnum, m_tag)
if isInTable(r_star, deleteStars) == 1 then
table.insert(deleteStars, toRnum, r_star)
end
else
break
end
end
end
--检查纵向是否相同的精灵
local function checkRows(m_num, m_tag)
--往下
local toBottom = math.ceil(m_num / row) - 1 --下边余下个数
for i = 1, toBottom, 1 do
local toBnum = m_num - i * col
local b_star = starObject:objectAtIndex(toBnum) --取出对象中的精灵
if b_star:getTag() == m_tag then
--clearStars(toBnum, m_tag)
if deleteStars[toBnum] == nil then
table.insert(deleteStars, toBnum, b_star)
end
else
break
end
end
--往上
local toTop = row - toBottom - 1 --上边余下个数
for i = 1, toTop, 1 do
local toTnum = m_num + i * col
local t_star = starObject:objectAtIndex(toTnum) --取出对象中的精灵
if t_star:getTag() == m_tag then
--clearStars(toTnum, m_tag)
if deleteStars[toTnum] == nil then
table.insert(deleteStars, toTnum, t_star)
end
else
break
end
end
end
function clearStars(m_num, m_tag)
checkCols(m_num, m_tag)
checkRows(m_num, m_tag)
end
-------算法结束-------
基于Lua的清除类游戏算法的更多相关文章
- 基于Lua的游戏服务端框架简介
基于Lua的游戏服务端框架简介 [转]https://gameinstitute.qq.com/community/detail/106396 基于lua的游戏服务端框架简介 1. 引言 笔者目前在参 ...
- 对弈类游戏的人工智能(4)--游戏AI的落地
前言: 对弈类游戏的智能算法, 网上资料颇多, 大同小异. 然而书上得来终觉浅, 绝知此事要躬行. 结合了自己的工程实践, 简单汇总整理下. 一方面是对当年的经典<<PC游戏编程(人机博弈 ...
- 24分钟让AI跑起飞车类游戏
本文由云+社区发表 作者:WeTest小编 WeTest 导读 本文主要介绍如何让AI在24分钟内学会玩飞车类游戏.我们使用Distributed PPO训练AI,在短时间内可以取得不错的训练效果. ...
- 为什么MOBA和吃鸡类游戏不推荐用tcp协议 延迟不利于实时游戏
http://news.gamedog.cn/a/20171221/2287418.html 我们知道,不同类型的游戏因为玩法.竞技程度不一样,采用的同步算法不一样,对网络延迟的要求也不一样.例如,M ...
- Minecraft类游戏地形生成机制
目录 前言 生成地形高度 生成生物群落 模拟雨水侵蚀.生成河流(未完) 生成洞穴.裂谷 生成植被 放置树木(Bezier曲线) 生成建筑 生成发展域(元胞自动机模型) 放置建筑(DFS) 连接道路(A ...
- 基于DFA敏感词查询的算法简析
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要对敏感词做一个过滤,首先有几个方案可以选择: a.直 ...
- UE4开发神秘海域类游戏原型 初阶(二):动画资源的整合
前一篇已经确定神海类游戏原型的目标,首先要做的就是3C's(Character, Controls, Camera)的开发. UE4的3C's的程序部分开发主要也就是基于他的GamePlay Fr ...
- 对弈类游戏的人工智能(5)--2048游戏AI的解读
前言: 闲得没事, 网上搜"游戏AI", 看到一篇<<2048游戏的最佳算法是?来看看AI版作者的回答>>的文章. 而这篇文章刚好和之前讲的对弈类游戏AI对 ...
- 项目源码--Android答题类游戏源码
下载源码 技术要点: 1. 精致的答题UI 2. Android的Http通信技术 3. Android数据库QLITE与其他数据存储技术 4. Android在线音乐背景技术 5. Android答 ...
随机推荐
- (转)在Mac下使用OpenCV, 在Xcode下使用OpenCV (非常基础,详细)
转自:http://blog.sciencenet.cn/home.php?COLLCC=3456986939&COLLCC=3456885714&mod=space&uid= ...
- JavaFX 3D部分介绍(3) Lights
声明: 本博客文章原创类别的均为个人原创,版权所有.转载请注明出处: http://blog.csdn.net/ml3947,另外本人的个人博客:http://www.wjfxgame.com. ...
- 部署war包到tomcat服务器
1.首先通过eclipse的maven install生成项目的war包 2.然后把war包解压到tomcat目录下的webapps目录下 3.然后运行tomcat下的bin目录下的startup.b ...
- 2016-5-19模拟测试 bzoj3652 bzoj3653 bzoj3654
T1 description 给定正整数\(n\),定义\(f(x) = \max{y \ \mathrm{xor}\ x}(y<n)\) \(x\)在\([0,n)\)随机取值,求\(f(x) ...
- Servlet小知识点
1. Sevlet是一个java类,供以其他程序调用,不能独立运行,需要Servlet引擎(Servlet容器)来管理和调度. 2. 服务器启动后,一般只会创建一个Servlet实例对象,init方法 ...
- ctrl+z的JAVA实现,借助了命令模式(command pattern)
前些天学习<<JAVA与模式>>,到命令模式时,随带给了一个CTRL+Z案例的实现,想来学习编程这么久,CTRL+Z还没有认真实现过. 因此,借助JAVA与模式里面的源代码,自 ...
- 介绍几种大型的Oracle/SQL Server数据库免费版
我们知道,Oracle和SQL Server等大型数据库也都存在一些免费的版本,这些免费的版本已经能够满足许多中小项目的需求.对于在校大学生来说,从学习的目标上来讲,安装免费版的大型数据库也就足够用了 ...
- oracle用户管理实例
oracle中的用户角色分为预定义角色和自定义角色. 角色是把常用的权限集中起来形成角色. 授权/分配角色命令 grant 权限/角色 to 用户 收回权限命令: revoke 综合案例: 创建一个用 ...
- 能发送http请求(get,post)的工具
能发送http请求(get,post)的工具, 1. fiddler 前端自己模拟发送请求 2. 其他 链接:https://www.zhihu.com/question/20367546/ans ...
- Oracle存储过程中不支持DML语言的解决方法(针对遇见的DROP关键字)
---存储过程中的原语句: ---删除表 DROP TABLE A_NEWTDDATA; --报错 经查询:存储过程不支持DML语言: 解决方法: execute immediate 'DROP TA ...