lua写三消游戏(一)

本文档介绍了如何使用Lua语言来实现一款三消游戏,包括游戏资源、玩法和逻辑的详细讲解。通过链接提供的教程,读者可以了解到游戏的具体实现细节,并查看作者转换后的Lua代码示例,涉及SushiSprite类的实现。
摘要由CSDN通过智能技术生成

关于游戏的资源,玩法,逻辑在这份教程里面写的很清楚:http://www.tairan.com/archives/5839


在这里我贴出自己转成lua写法后的代码:

SushiSprite类:

require "Cocos2d"
require "Cocos2dConstants"

local SushiSprite = class("SushiSprite", function(...)
    local str = select(1,...)
    return cc.Sprite:createWithSpriteFrameName(str)
end)

sushiNormal = {
    "sushi_1n.png",
    "sushi_2n.png",
    "sushi_3n.png",
    "sushi_4n.png",
    "sushi_5n.png",
    "sushi_6n.png"
}
sushiVertical = {
    "sushi_1v.png",
    "sushi_2v.png",
    "sushi_3v.png",
    "sushi_4v.png",
    "sushi_5v.png",
    "sushi_6v.png"
}
sushiHorizontal = {
    "sushi_1h.png",
    "sushi_2h.png",
    "sushi_3h.png",
    "sushi_4h.png",
    "sushi_5h.png",
    "sushi_6h.png"
}
DISPLAY_MODE_NORMAL = 0
DISPLAY_MODE_HORIZONTAL = 1
DISPLAY_MODE_VERTICAL = 2

function SushiSprite.create(row, col)
    local index = math.random(1,6)
    local sprite = SushiSprite.new(sushiNormal[index], row, col, index);
    return sprite
end

function SushiSprite:ctor(str, row, col, index)
    self.m_row = row
    self.m_col = col
    self.m_imgIndex = index
    self.m_isNeedRemove = false
    self.m_ignoreCheck = false
    self.m_displayMode = DISPLAY_MODE_NORMAL
end

function SushiSprite.getContentWidth()
    local itemWidth = 0;
    if 0 == itemWidth then
        local sprite = cc.Sprite:createWithSpriteFrameName(sushiNormal[1])
        itemWidth = sprite:getContentSize().width
    end
    return itemWidth;
end

function SushiSprite:getCol()
    return self.m_col
end

function SushiSprite:setCol(value)
    self.m_col = value
end

function SushiSprite:getRow()
    return self.m_row
end

function SushiSprite:setRow(value)
    self.m_row = value
end

function SushiSprite:getImgIndex()
    return self.m_imgIndex
end

function SushiSprite:getIgnoreCheck()
    return self.m_ignoreCheck
end

function SushiSprite:setIgnoreCheck(value)
    self.m_ignoreCheck = value
end

function SushiSprite:getIsNeedRemove()
    return self.m_isNeedRemove
end

function SushiSprite:setIsNeedRemove(value)
    self.m_isNeedRemove = value
end

function SushiSprite:setDisplayMode(value)
    self.m_displayMode = value
    local frame
    if value == DISPLAY_MODE_VERTICAL then
    	frame = cc.SpriteFrameCache:getInstance():getSpriteFrame(sushiVertical[self.m_imgIndex])
    elseif value == DISPLAY_MODE_HORIZONTAL then
        frame = cc.SpriteFrameCache:getInstance():getSpriteFrame(sushiHorizontal[self.m_imgIndex])
    else
        return
    end
    self:setSpriteFrame(frame)
end

function SushiSprite:getDisplayMode()
    return self.m_displayMode
end

return SushiSprite

PlayerLayer类:

require "Cocos2d"
require "Cocos2dConstants"
require "src.SushiSprite"

Sushi = require("SushiSprite")

local PlayerLayer = class("PlayerLayer", function()
    return cc.Layer:create()
end)

function PlayerLayer:createScene()
    local scene = cc.Scene:create();
    local layer = PlayerLayer:create();
    scene:addChild(layer);
    return scene
end

function PlayerLayer.create()
    local layer = PlayerLayer.new();
    layer:init();
    return layer;
end

function PlayerLayer:ctor()
    self.spriteSheet = nil
    self.m_isNeedFillVacancies = false
    self.m_isAnimationing = true
    self.m_isTouchEnable = true
    self.m_srcSushi = nil
    self.m_destSushi = nil 
    self.m_movingVertical = true
    self.m_hasCanSushi = true
end

function PlayerLayer:init() 
    math.randomseed(os.time())
    
    --创建游戏背景
    local winSize = cc.Director:getInstance():getWinSize()
    local background = cc.Sprite:create("background.png")
    background:setAnchorPoint(0,1)
    background:setPosition(0,winSize.height)
    self:addChild(background)
    
    --初始化寿司精灵表单
    cc.SpriteFrameCache:getInstance():addSpriteFrames("sushi.plist","sushi.pvr.ccz")
    
    --初始化矩阵的宽和高
    self.m_width = 5
    self.m_height = 7
    
    --初始化寿司矩阵左下角的点
    self.m_matrixLeftBottomX = (background:getContentSize().width - Sushi.getContentWidth() * self.m_width - (self.m_width - 1) * 6) / 2
    self.m_matrixLeftBottomY = 0
    
    --初始化数组
    self.m_matrix = {}

    --初始化寿司矩阵
    self:initMatrix();
    
    --每帧刷新
    local function update(delta)
        self:update(delta)
    end
    self:scheduleUpdateWithPriorityLu
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值