最后献上完整的1000行代码,基本功能已经完成,可以通过配置小怪和矿的位置和大小控制玩家时长和难度:

--------------------------------------------------------------------------------------------
-- Added by ???
--------------------------------------------------------------------------------------------
require("CommonFunction")
require("CommonVariables")
require("FontHelper")
--------------------------------------------------------------------------------------------
local MineSecretDialog = class( "MineSecretDialog", function()return ModalDialogBase:create()
end)local Tag = {MainBg = 50,LevelLabel = 100,SkillDotLabel = 101,MoneyLabel = 102,IronKeyLabel = 103,SilverKeyLabel = 104,GoldKeyLabel = 105,CollectionLabel = 110,  -- 110-120ExpNumLabel = 200,HpNumLabel = 201,ActiveNumLabel = 202,RecoverNumLabel = 203,AtkNumLabel = 204,DefNumLabel = 205,BonusNumLabel = 250,BonusLockLabel = 251,BonusSprite = 252,SysNumLabel = 260,SysCostLabel = 270,SysNameLabel = 271,
}local userData = {floor = 1,      -- 楼层level = 0,      -- 等级curExp = 0,     -- 当前经验maxExp = 0,     -- 升级经验money = 0,      -- 金钱ironKey = 0,    -- 铁钥匙silverKey = 0,  -- 银钥匙goldKey = 0,    -- 金钥匙skillDot = 0,   -- 升级点curActive = 0,  -- 当前体力maxActive = 0,  -- 体力curHp = 0,      -- 当前生命maxHp = 0,      -- 生命recover = 0,    -- 恢复atk = 0,        -- 攻击def = 0,        -- 防御collection = {  -- 收藏{letter = "S", num = 0},{letter = "H", num = 0},{letter = "O", num = 0},{letter = "W", num = 0},{letter = "E", num = 0},{letter = "R", num = 0},},
}
local ColorList = {H_Font_GrowUpSmall_10,H_Font_BrightYellow_10,G_Font_Purple_10,H_Font_LightBlue_10,H_Font_ORANGE_10,H_Font_DarkYellowLittle,
}
local ColorLock = {H_Font_LightBlue_10,H_Font_ORANGE_10,G_Font_Purple_10,
}
local BarMaxNum = {HP = 1000,ACTIVE = 500,RECOVER = 200,ATK = 200,DEF = 200,KEY = 99,COLLECT = 1,
}local BonusType = CreateEnumTable({"MINE", "ENEMY", "SYSTEM", "BOSS"})
local SysType = CreateEnumTable({"AACT", "AATK", "ADEF", "AKEY", "ADOT", "ROCK"})
local sz = CCDirector:sharedDirector():getVisibleSize()
local posX, posX2, posY, gap = 150, 320, sz.height - 13, 15
local barSize = CCSizeMake(120,12)
--------------------------------------------------------------------------------------------
function MineSecretDialog:init()self:registerScriptHandler( self.onNodeEvent )self:setContentSize( sz );CFModuleReload("MineSecretConfig")local menu = ScrollMenu:create()menu:setContentSize(sz);self:addChild( menu, 2 );menu:setPosition( ccp(0,0) );self.m_menu = menuAddSprite("p_diabg_common.png", ccp(sz.width/2, sz.height/2), self, Tag.MainBg, -10)local bgKuang = CCScale9Sprite:create( "p_pvpol_bg_blue.png", CCRectMake(0, 0, 485/2, 173/2), CCRectMake(282/2, 90/2, 10, 10) )bgKuang:setContentSize( CCSizeMake(sz.width, sz.height) )self:addChild( bgKuang, 1 )bgKuang:setPosition( sz.width/2, sz.height/2 )self.m_bgKuang = bgKuanglocal arrowup = AddSprite("p_cmn_arrow_up.png", ccp(posX2 + 175, posY + 5), bgKuang)arrowup:setScale(0.5)arrowup:runAction(CCRepeatForever:create(CCSequence:createWithTwoActions(CCEaseSineInOut:create(CCMoveBy:create(0.8, ccp(0, 2))), CCEaseSineInOut:create(CCMoveBy:create(0.8, ccp(0, -2))))))AddSprite("yaoshi1.png", ccp(posX2 + 150, posY - gap * 2), bgKuang):setScale(0.25)AddSprite("yaoshi2.png", ccp(posX2 + 177, posY - gap * 2), bgKuang):setScale(0.25)AddSprite("yaoshi3.png", ccp(posX2 + 204, posY - gap * 2), bgKuang):setScale(0.25)AddLabel( "经验", ccp(posX - 12, posY), bgKuang, 0, ColorList[1] )self.m_expBar = AddScale9Sprite("p_purecolor_green.png", ccp(posX, posY), CCRectMake(0, 0, 10, 10), CCRectMake(2, 2, 6, 6), barSize, bgKuang)self.m_expBar:setAnchorPoint(ccp(0, 0.5))AddLabel( "生命", ccp(posX - 12, posY - gap), bgKuang, 0, ColorList[2] )self.m_hpBar = AddScale9Sprite("p_purecolor_brightyellow.png", ccp(posX, posY - gap), CCRectMake(0, 0, 10, 10), CCRectMake(2, 2, 6, 6), barSize, bgKuang)self.m_hpBar:setAnchorPoint(ccp(0, 0.5))AddButton( "p_followpet_detail_addbtn.png", "p_followpet_detail_addbtn.png", menu, ccp(posX + 130, posY - gap), self.onAddHp, self )AddLabel( "体力", ccp(posX - 12, posY - gap * 2), bgKuang, 0, ColorList[3] )self.m_activeBar = AddScale9Sprite("p_purecolor_purple.png", ccp(posX, posY - gap * 2), CCRectMake(0, 0, 10, 10), CCRectMake(2, 2, 6, 6), barSize, bgKuang)self.m_activeBar:setAnchorPoint(ccp(0, 0.5))AddButton( "p_followpet_detail_addbtn.png", "p_followpet_detail_addbtn.png", menu, ccp(posX + 130, posY - gap*2), self.onAddActive, self )AddLabel( "恢复", ccp(posX2 - 12, posY), bgKuang, 0, ColorList[4] )self.m_recoverBar = AddScale9Sprite("p_purecolor_blue.png", ccp(posX2, posY), CCRectMake(0, 0, 10, 10), CCRectMake(2, 2, 6, 6), barSize, bgKuang)self.m_recoverBar:setAnchorPoint(ccp(0, 0.5))AddButton( "p_followpet_detail_addbtn.png", "p_followpet_detail_addbtn.png", menu, ccp(posX2 + 130, posY), self.onAddRecover, self )AddLabel( "攻击", ccp(posX2 - 12, posY - gap), bgKuang, 0, ColorList[5] )self.m_atkBar = AddScale9Sprite("p_purecolor_orange.png", ccp(posX2, posY - gap), CCRectMake(0, 0, 10, 10), CCRectMake(2, 2, 6, 6), barSize, bgKuang)self.m_atkBar:setAnchorPoint(ccp(0, 0.5))AddButton( "p_followpet_detail_addbtn.png", "p_followpet_detail_addbtn.png", menu, ccp(posX2 + 130, posY - gap), self.onAddAtk, self )AddLabel( "防御", ccp(posX2 - 12, posY - gap * 2), bgKuang, 0, ColorList[6] )self.m_defBar = AddScale9Sprite("p_purecolor_darkyellow.png", ccp(posX2, posY - gap * 2), CCRectMake(0, 0, 10, 10), CCRectMake(2, 2, 6, 6), barSize, bgKuang)self.m_defBar:setAnchorPoint(ccp(0, 0.5))AddButton( "p_followpet_detail_addbtn.png", "p_followpet_detail_addbtn.png", menu, ccp(posX2 + 130, posY - gap*2), self.onAddDef, self )self:initUserData(1)self:updateUserData()self:addMineAndEnemy()-- 关闭按钮local pClose = ImageButton:create("p_btn_close.png", "p_btn_close_down.png", nil, self)menu:addChild( pClose, 0 )pClose:setPosition( ccp(sz.width - 1, sz.height - 1) ) pClose:registerScriptTapHandler( self.onClose )pClose:setAnchorPoint(ccp(1, 1))
end-- 更新所有UserData
function MineSecretDialog:updateUserData()self:addUserExp(0, 0, true)self:updateUserHp(0, 0, true)self:updateUserActive(0, 0, true)self:addUserRecoverAtkDef(0, 0, 0, true)self:updateUserMoney(0, true)self:updateUserKey(0, 0, 0, true)self:updateUserCollection(nil, 0, true)
end
-- 初始化固定等级的最大值
function MineSecretDialog:initUserData(level)userData.level = leveluserData.maxExp = getUserMaxExp(level)if level == 1 thenlocal initBattleData = getInitBattleData()userData.curActive = initBattleData.activeuserData.maxActive = initBattleData.activeuserData.curHp = initBattleData.hpuserData.maxHp = initBattleData.hpuserData.recover = initBattleData.recoveruserData.atk = initBattleData.atkuserData.def = initBattleData.defend
end
-- 更新等级,经验条和升级点
function MineSecretDialog:addUserExp(addExp, addSkillDot, isInit)addExp = addExp or 0addSkillDot = addSkillDot or 0isInit = isInit or falselocal updateLevel, updateSkillDot, updateExp = false, false, falseif addExp > 0 thenif userData.curExp + addExp >= userData.maxExp thenself:updateUserLevel(addExp)updateLevel, updateSkillDot = true, trueelseuserData.curExp = userData.curExp + addExpendupdateExp = trueendif addSkillDot ~= 0 thenuserData.skillDot = math.max(0, userData.skillDot + addSkillDot)updateSkillDot = trueendif updateLevel or isInit then AddLabel( userData.floor.." F    ".."LV. "..userData.level, ccp(48, sz.height - 16), self.m_bgKuang, Tag.LevelLabel, H_Font_Btn_Cancle_Stroke ) endif updateSkillDot or isInit then AddLabel( userData.skillDot, ccp(posX2 + 162, posY), self.m_bgKuang, Tag.SkillDotLabel, ColorList[1] ) endif updateExp or isInit thenself.m_expBar:setScaleX(userData.curExp/userData.maxExp)AddLabel( userData.curExp.."/"..userData.maxExp, ccp(posX + 5, posY), self.m_bgKuang, Tag.ExpNumLabel, ColorList[1], ccp(0, 0.5) )end
end
-- 计算增加的经验能够连升几级
function MineSecretDialog:updateUserLevel(addExp)userData.curExp = userData.curExp + addExp - userData.maxExpself:initUserData(userData.level + 1)userData.skillDot = userData.skillDot + getLevelUpAddSkillDot(userData.level)if userData.curExp >= userData.maxExp thenself:updateUserLevel(0)end
end
-- 更新血量
function MineSecretDialog:updateUserHp(addHp, addMaxHp, isInit)addHp = addHp or 0addMaxHp = addMaxHp or 0isInit = isInit or falselocal updateHp = falseif addMaxHp > 0 thenuserData.maxHp = userData.maxHp + addMaxHpupdateHp = trueendif addHp ~= 0 thenuserData.curHp = math.min(userData.maxHp, math.max(0, userData.curHp + addHp))updateHp = trueendif updateHp or isInit thenself.m_hpBar:setScaleX(countBarScaleX(userData.curHp/userData.maxHp, userData.maxHp/BarMaxNum.HP))AddLabel( userData.curHp.."/"..userData.maxHp, ccp(posX + 5, posY - gap), self.m_bgKuang, Tag.HpNumLabel, ColorList[2], ccp(0, 0.5) )end
end
-- 更新体力
function MineSecretDialog:updateUserActive(addActive, addMaxActive, isInit)addActive = addActive or 0addMaxActive = addMaxActive or 0isInit = isInit or falselocal updateActive = falseif addMaxActive > 0 thenuserData.maxActive = userData.maxActive + addMaxActiveupdateActive = trueendif addActive ~= 0 thenuserData.curActive = math.min(userData.maxActive, math.max(0, userData.curActive + addActive))updateActive = trueendif updateActive or isInit thenself.m_activeBar:setScaleX(countBarScaleX(userData.curActive/userData.maxActive, userData.maxActive/BarMaxNum.ACTIVE))AddLabel( userData.curActive.."/"..userData.maxActive, ccp(posX + 5, posY - gap * 2), self.m_bgKuang, Tag.ActiveNumLabel, ColorList[3], ccp(0, 0.5) )end
end
-- 更新恢复,攻击,防御
function MineSecretDialog:addUserRecoverAtkDef(addRecover, addAtk, addDef, isInit)addRecover = addRecover or 0addAtk = addAtk or 0addDef = addDef or 0isInit = isInit or falseif addRecover > 0 or isInit thenuserData.recover = userData.recover + addRecoverself.m_recoverBar:setScaleX(countBarScaleX(userData.recover/BarMaxNum.RECOVER))AddLabel( userData.recover, ccp(posX2 + 5, posY), self.m_bgKuang, Tag.RecoverNumLabel, ColorList[4], ccp(0, 0.5) )endif addAtk > 0 or isInit thenuserData.atk = userData.atk + addAtkself.m_atkBar:setScaleX(countBarScaleX(userData.atk/BarMaxNum.ATK))AddLabel( userData.atk, ccp(posX2 + 5, posY - gap), self.m_bgKuang, Tag.AtkNumLabel, ColorList[5], ccp(0, 0.5) )endif addDef > 0 or isInit thenuserData.def = userData.def + addDefself.m_defBar:setScaleX(countBarScaleX(userData.def/BarMaxNum.DEF))AddLabel( userData.def, ccp(posX2 + 5, posY - gap * 2), self.m_bgKuang, Tag.DefNumLabel, ColorList[6], ccp(0, 0.5) )end
end
-- 更新金币
function MineSecretDialog:updateUserMoney(addMoney, isInit)addMoney = addMoney or 0isInit = isInit or falseif addMoney ~= 0 or isInit thenuserData.money = math.max(0, userData.money + addMoney)AddLabel( "$ "..userData.money, ccp(posX2 + 151, posY - gap), self.m_bgKuang, Tag.MoneyLabel, ColorList[2], ccp(0, 0.5) )end
end
-- 更新铜,银,金钥匙
function MineSecretDialog:updateUserKey(addIronKey, addSilverKey, addGoldKey, isInit)addIronKey = addIronKey or 0addSilverKey = addSilverKey or 0addGoldKey = addGoldKey or 0isInit = isInit or falseif addIronKey ~= 0 or isInit thenuserData.ironKey = math.min(BarMaxNum.KEY, math.max(0, userData.ironKey + addIronKey))AddLabel( userData.ironKey, ccp(posX2 + 163, posY - gap * 2), self.m_bgKuang, Tag.IronKeyLabel, H_Font_Gray_Stroke_10, ccp(0.5, 0.5) )endif addSilverKey ~= 0 or isInit thenuserData.silverKey = math.min(BarMaxNum.KEY, math.max(0, userData.silverKey + addSilverKey))AddLabel( userData.silverKey, ccp(posX2 + 190, posY - gap * 2), self.m_bgKuang, Tag.SilverKeyLabel, H_Font_Gray_Stroke_10, ccp(0.5, 0.5) )endif addGoldKey ~= 0 or isInit thenuserData.goldKey = math.min(BarMaxNum.KEY, math.max(0, userData.goldKey + addGoldKey))AddLabel( userData.goldKey, ccp(posX2 + 217, posY - gap * 2), self.m_bgKuang, Tag.GoldKeyLabel, H_Font_Gray_Stroke_10, ccp(0.5, 0.5) )end
end
-- 更新收藏品
function MineSecretDialog:updateUserCollection(collectLetter, addNum, isInit)addNum = addNum or 1isInit = isInit or falselocal count = 0if collectLetter ~= nil then for i=1,#(userData.collection) doif userData.collection[i].letter == collectLetter then userData.collection[i].num = math.min(BarMaxNum.COLLECT, userData.collection[i].num + addNum)local color = H_Font_WhiteSmallif userData.collection[i].num > 0 then color = ColorList[i] endAddLabel( userData.collection[i].letter, ccp(15 + (i-1)*20, posY - gap * 2), self.m_bgKuang, Tag.CollectionLabel+i, color, ccp(0.5, 0.5) )endif userData.collection[i].num > 0 then count = count + 1 endendif count == #(userData.collection) then-- TODO: 集齐七龙珠,召唤神龙for i=1,#(userData.collection) douserData.collection[i].num = userData.collection[i].num - 1endisInit = trueendendif isInit thenfor i=1,#(userData.collection) dolocal color = H_Font_WhiteSmallif userData.collection[i].num > 0 then color = ColorList[i] endAddLabel( userData.collection[i].letter, ccp(15 + (i-1)*20, posY - gap * 2), self.m_bgKuang, Tag.CollectionLabel+i, color, ccp(0.5, 0.5) )endend
end
-- 增加矿,敌人和系统
function MineSecretDialog:addMineAndEnemy()local bonusList = getBonusListInfo()for i,v in ipairs(bonusList) doif v.types == BonusType.MINE thenself:initMineStatus(v)elseif v.types == BonusType.ENEMY thenself:initEnemyStatus(v)elseif v.types == BonusType.SYSTEM thenself:initSystemStatus(v)elseif v.types == BonusType.BOSS thenendend
end
-- 初始化矿的信息和状态
function MineSecretDialog:initMineStatus(v)local times = 0local haveRunAction = false local itemSize = CCSizeMake(v.width, v.height)local mineData = getMineActivendRecover(v.width, v.height)local sprite = CCScale9Sprite:create("p_purecolor_gray.png", CCRectMake(0, 0, 10, 10), CCRectMake(2, 2, 6, 6))sprite:setContentSize(itemSize)local mineItem = CCMenuItemSprite:create( sprite, sprite )self.m_menu:addChild(mineItem, 1)mineItem:setPosition(v.pos)mineItem:setAnchorPoint(ccp(0, 1))local itemBar = AddScale9Sprite("p_purecolor_blue.png", ccp(0, v.height/2), CCRectMake(0, 0, 10, 10), CCRectMake(2, 2, 6, 6), itemSize, mineItem)itemBar:setAnchorPoint(ccp(0, 0.5))if v.locked then AddLabel( "锁", ccp(v.width/2, v.height/2), mineItem, Tag.BonusLockLabel, ColorLock[v.key or 1] ) endif v.digged == false then itemBar:setScaleX(0)AddLabel( "0%", ccp(3, v.height/2), mineItem, Tag.BonusNumLabel, G_Font_Black_8, ccp(0, 0.5) ) endmineItem:registerScriptTapHandler(function ()game.fleetingLabelManager:pushLabel( "posX "..v.pos.x.." posY "..v.pos.y, self )cclog("the mine data is",mineData.life,v.digged,v.curlife)if v.locked thenif self:checkKeyEnough(v.key) thenv.locked = falsegame.fleetingLabelManager:pushLabel( "解锁成功", self )mineItem:removeChildByTag( Tag.BonusLockLabel, true )endelseif v.digged and self.m_timer - times < 0.6 thenreturnelseif v.digged thentimes = self.m_timerend-- 判断剩余的体力是否足够此次点击消耗local cost = mineData.clickCostif v.digged == false then cost = math.ceil(math.min(mineData.life - v.curlife, mineData.clickCost)) endif userData.curActive < cost thengame.fleetingLabelManager:pushLabel( "体力不足", self, "error" )returnendself:updateUserActive(0 - cost)if v.digged then-- 收获金币,并有1%概率获得收藏品local collectPercent = self:getRandomNum(0.8, 1.2)self:updateUserMoney(math.floor((mineData.clickMoney)*collectPercent))if v.collect and self:getRandomResult(1) then self:updateUserCollection(v.collect) endelsev.curlife = v.curlife + costitemBar:setScaleX(v.curlife/mineData.life)AddLabel( math.floor(100*v.curlife/mineData.life).."%", ccp(3, v.height/2), mineItem, Tag.BonusNumLabel, G_Font_Black_8, ccp(0, 0.5) ) if v.curlife == mineData.life thenv.digged = truemineItem:stopAllActions()mineItem:removeChildByTag( Tag.BonusNumLabel, true )-- 开发完成,开始收获金币、经验,并有20%概率获得收藏品self:addUserExp(mineData.digExp)self:updateUserMoney(mineData.digMoney)if v.collect and self:getRandomResult(20) then self:updateUserCollection(v.collect) endelseif haveRunAction == false thenhaveRunAction = truelocal array = CCArray:create()array:addObject(CCDelayTime:create(0.2))                    array:addObject(CCCallFunc:create(function ()if v.curlife > 0 then v.curlife = math.max(0, v.curlife - mineData.recover) itemBar:setScaleX(v.curlife/mineData.life)AddLabel( math.floor(100*v.curlife/mineData.life).."%", ccp(3, v.height/2), mineItem, Tag.BonusNumLabel, G_Font_Black_8, ccp(0, 0.5) ) endif v.curlife == 0 thenhaveRunAction = falsemineItem:stopAllActions()endend))   mineItem:runAction(CCRepeatForever:create(CCSequence:create(array)))                        endendendendend)
end
-- 初始化敌人的信息和状态
function MineSecretDialog:initEnemyStatus(v)local haveRunAction = false local itemSize = CCSizeMake(v.width, v.height)local enemyData = getEnemyLifeAndRecover(v.width, v.height)local sprite = CCScale9Sprite:create("p_purecolor_red.png", CCRectMake(0, 0, 10, 10), CCRectMake(2, 2, 6, 6))sprite:setContentSize(itemSize)local enemyItem = CCMenuItemSprite:create( sprite, sprite )self.m_menu:addChild(enemyItem, 1)enemyItem:setPosition(v.pos)enemyItem:setAnchorPoint(ccp(0, 1))local itemBar = AddScale9Sprite("p_purecolor_brightyellow.png", ccp(0, v.height/2), CCRectMake(0, 0, 10, 10), CCRectMake(2, 2, 6, 6), itemSize, enemyItem)itemBar:setAnchorPoint(ccp(0, 0.5))if v.locked then AddLabel( "锁", ccp(v.width/2, v.height/2), enemyItem, Tag.BonusLockLabel, ColorLock[v.key or 1] ) endif v.digged == false then v.curlife = enemyData.life enditemBar:setScaleX(v.curlife/enemyData.life)AddLabel( v.curlife.."/"..enemyData.life, ccp(3, v.height/2), enemyItem, Tag.BonusNumLabel, G_Font_Black_8, ccp(0, 0.5) ) enemyItem:registerScriptTapHandler(function ()game.fleetingLabelManager:pushLabel( "posX "..v.pos.x.." posY "..v.pos.y, self )cclog("the enemy data is",v.locked,v.digged,v.curlife)if v.locked thenif self:checkKeyEnough(v.key) thenv.locked = falsegame.fleetingLabelManager:pushLabel( "解锁成功", self )enemyItem:removeChildByTag( Tag.BonusLockLabel, true )endelseif v.digged == false then-- 根据攻击和防御计算消耗的血量local userDamage = math.ceil(math.max(enemyData.atk/4, enemyData.atk - userData.def))local enemyDamage = math.ceil(math.max(userData.atk/4, userData.atk - enemyData.def))if userData.curHp < userDamage thenself:updateUserHp(0 - userData.curHp)-- game.fleetingLabelManager:pushLabel( "血量不足", self, "error" )returnelseself:updateUserHp(0 - userDamage)endv.curlife = math.max(0, v.curlife - enemyDamage)itemBar:setScaleX(v.curlife/enemyData.life)AddLabel( v.curlife.."/"..enemyData.life, ccp(3, v.height/2), enemyItem, Tag.BonusNumLabel, G_Font_Black_8, ccp(0, 0.5) ) if v.curlife == 0 thenv.digged = trueenemyItem:stopAllActions()-- 开发完成,开始收获金币、经验,并有50%概率获得收藏品self:addUserExp(enemyData.digExp)self:updateUserMoney(enemyData.digMoney)if v.collect and self:getRandomResult(50) then self:updateUserCollection(v.collect) endelseif haveRunAction == false thenhaveRunAction = truelocal array = CCArray:create()array:addObject(CCDelayTime:create(0.2))                    array:addObject(CCCallFunc:create(function ()if v.curlife < enemyData.life then v.curlife = math.min(enemyData.life, v.curlife + enemyData.recover) itemBar:setScaleX(v.curlife/enemyData.life)AddLabel( v.curlife.."/"..enemyData.life, ccp(3, v.height/2), enemyItem, Tag.BonusNumLabel, G_Font_Black_8, ccp(0, 0.5) ) endif v.curlife == enemyData.life thenhaveRunAction = falseenemyItem:stopAllActions()endend))   enemyItem:runAction(CCRepeatForever:create(CCSequence:create(array)))                        endendendendend)
end
-- 初始化系统的信息和状态
function MineSecretDialog:initSystemStatus(v)local times = 0local haveRunAction = false G_Font_Purple = { name = DefaultFont, size = 15, color = FontColor.Purple }G_Font_Orange = { name = DefaultFont, size = 15, color = FontColor.Orange }G_Font_Blue = { name = DefaultFont, size = 15, color = FontColor.Blue }local rockBonus = {"6", "8", "9", "E", "$", "@", "*"}local itemSize = CCSizeMake(v.width, v.height)local sprite = CCScale9Sprite:create("p_purecolor_"..v.color..".png", CCRectMake(0, 0, 10, 10), CCRectMake(2, 2, 6, 6))sprite:setContentSize(itemSize)local sysItem = CCMenuItemSprite:create( sprite, sprite )self.m_menu:addChild(sysItem, 1)sysItem:setPosition(v.pos)sysItem:setAnchorPoint(ccp(0, 1))local clickCost,addNum,sysName = 0,0,""if v.sys == SysType.AACT thenclickCost,addNum,sysName = v.cost[v.curst],v.curst*5,"ACT"elseif v.sys == SysType.AATK thenclickCost,addNum,sysName = v.cost[v.curst],v.curst*5,"ATK"elseif v.sys == SysType.ADEF thenclickCost,addNum,sysName = v.cost[v.curst],v.curst*5,"DEF"elseif v.sys == SysType.ADOT thenclickCost,addNum,sysName = v.cost[v.curst],v.curst*5,"DOT"elseif v.sys == SysType.AKEY thenclickCost,sysName = v.cost[1],"KEY"AddLabel( " ? ", ccp(v.width/2, v.height/2), sysItem, Tag.SysNumLabel+1, G_Font_Purple, ccp(0.5, 0.5) )elseif v.sys == SysType.ROCK thenclickCost,sysName = v.cost[1],"ROCK"AddLabel( " ? ", ccp(v.width/2 - 20, v.height/2), sysItem, Tag.SysNumLabel+1, G_Font_Purple, ccp(0.5, 0.5) )AddLabel( " ? ", ccp(v.width/2, v.height/2), sysItem, Tag.SysNumLabel+2, G_Font_Purple, ccp(0.5, 0.5) )AddLabel( " ? ", ccp(v.width/2 + 20, v.height/2), sysItem, Tag.SysNumLabel+3, G_Font_Purple, ccp(0.5, 0.5) )endAddLabel( "$"..clickCost, ccp(5, v.height-10), sysItem, Tag.SysCostLabel, G_Font_Black_8, ccp(0, 0.5) )AddLabel( sysName, ccp(v.width-5, 10), sysItem, Tag.SysNameLabel, G_Font_Black_8, ccp(1, 0.5) ) if addNum > 0 then AddLabel( "+"..addNum, ccp(v.width/2, v.height/2), sysItem, Tag.SysNumLabel, G_Font_Purple, ccp(0.5, 0.5) ) endsysItem:registerScriptTapHandler(function ()if self.m_timer - times < 1 thenreturnelsetimes = self.m_timerendlocal clickcost = v.cost[1]if #v.cost > 1 and v.curst <= #v.cost thenclickcost = v.cost[v.curst]endgame.fleetingLabelManager:pushLabel( "posX "..v.pos.x.." posY "..v.pos.y.." cost "..clickcost, self )local redMoney = trueif v.sys == SysType.ROCK and v.curst > 0 thenredMoney = falseendif userData.money < clickcost and redMoney thengame.fleetingLabelManager:pushLabel( "金币不足", self, "error" )returnelseif redMoney thenself:updateUserMoney(0 - clickcost)endlocal addnum = 0if v.sys == SysType.AACT thenself:updateUserActive(0, v.curst*5)v.curst = v.curst + 1addnum = v.curst*5elseif v.sys == SysType.AATK thenself:addUserRecoverAtkDef(0, v.curst*5, 0)v.curst = v.curst + 1addnum = v.curst*5elseif v.sys == SysType.ADEF thenself:addUserRecoverAtkDef(0, 0, v.curst*5)v.curst = v.curst + 1addnum = v.curst*5elseif v.sys == SysType.ADOT thenself:addUserExp(0, v.curst*5)v.curst = v.curst + 1addnum = v.curst*5elseif v.sys == SysType.AKEY thenif self:getRandomResult(1) thenAddLabel( " 紫 ", ccp(v.width/2, v.height/2), sysItem, Tag.SysNumLabel+1, G_Font_Purple, ccp(0.5, 0.5) )self:updateUserKey(0, 0, 1)elseif self:getRandomResult(10) thenAddLabel( " 橙 ", ccp(v.width/2, v.height/2), sysItem, Tag.SysNumLabel+1, G_Font_Orange, ccp(0.5, 0.5) )self:updateUserKey(0, 1, 0)elseAddLabel( " 蓝 ", ccp(v.width/2, v.height/2), sysItem, Tag.SysNumLabel+1, G_Font_Blue, ccp(0.5, 0.5) )self:updateUserKey(1, 0, 0)endelseif v.sys == SysType.ROCK thenif v.curst == 0 then v.curst = v.curst + 1 endif haveRunAction then v.curst = v.curst + 1sysItem:stopAllActions() haveRunAction = falseendif v.curst < 4 thenlocal array = CCArray:create()array:addObject(CCDelayTime:create(0.1))                    array:addObject(CCCallFunc:create(function ()v.result[v.curst] = v.result[v.curst] + 1if v.result[v.curst] > #rockBonus then v.result[v.curst] = 1 endAddLabel( rockBonus[v.result[v.curst]], ccp(v.width/2 + (v.curst-2)*20, v.height/2), sysItem, Tag.SysNumLabel+v.curst, G_Font_Purple, ccp(0.5, 0.5) )haveRunAction = trueend))   if haveRunAction == false thensysItem:runAction(CCRepeatForever:create(CCSequence:create(array))) endelse-- 进行结算game.fleetingLabelManager:pushLabel( v.result[1].." "..v.result[2].." "..v.result[3], self, "error" )if v.result[1] == v.result[2] and v.result[2] == v.result[3] and v.result[3] == 1 thenelseif v.result[1] == v.result[2] and v.result[2] == v.result[3] and v.result[3] == 2 thenelseif v.result[1] == v.result[2] and v.result[2] == v.result[3] and v.result[3] == 3 thenelseif v.result[1] == v.result[2] and v.result[2] == v.result[3] and v.result[3] == 4 thenelseif v.result[1] == v.result[2] and v.result[2] == v.result[3] and v.result[3] == 5 thenelseif v.result[1] == v.result[2] and v.result[2] == v.result[3] and v.result[3] == 6 thenelseif v.result[1] == v.result[2] and v.result[2] == v.result[3] and v.result[3] == 7 thenendv.curst = 0v.result = {0,0,0}endendif #v.cost > 1 thenif v.curst > #v.cost  thenAddLabel( "完", ccp(v.width/2, v.height/2), sysItem, Tag.SysNumLabel, G_Font_Purple, ccp(0.5, 0.5) )sysItem:removeChildByTag( Tag.SysCostLabel, true )sysItem:setEnabled(false)returnelseAddLabel( "$"..v.cost[v.curst], ccp(5, v.height-10), sysItem, Tag.SysCostLabel, G_Font_Black_8, ccp(0, 0.5) )AddLabel( "+"..addnum, ccp(v.width/2, v.height/2), sysItem, Tag.SysNumLabel, G_Font_Purple, ccp(0.5, 0.5) )endendend)
end-- 检查对应种类的钥匙是否足够,不足进行提示,足够扣除钥匙、更新数量并解锁
function MineSecretDialog:checkKeyEnough(keyId, needNum)local keyList = {"ironKey", "silverKey", "goldKey"}local keyStr = {"蓝钥匙", "橙钥匙", "紫钥匙"}local costNum = {0, 0, 0}keyId = keyId or 1keyId = math.max(1, math.min(3, keyId))needNum = needNum or 1if (userData[keyList[keyId]] - needNum) >= 0 thencostNum[keyId] = 0 - needNumself:updateUserKey(costNum[1], costNum[2], costNum[3])return trueelsegame.fleetingLabelManager:pushLabel( keyStr[keyId].."不足", self, "error" )return falseend
end
-- 随机生成传入概率数的随机结果
function MineSecretDialog:getRandomResult(percentage)math.randomseed(tostring(os.time()):reverse():sub(1, 6))  local random = math.random(1, 100)if random <= percentage thenreturn trueelsereturn falseend
end
-- 随机生成两个数之间的数
function MineSecretDialog:getRandomNum(from, to)math.randomseed(tostring(os.time()):reverse():sub(1, 6))  local random = math.random(from*10, to*10)/10return random
endfunction MineSecretDialog:onEnter()self.schedulerId = CCDirector:sharedDirector():getScheduler():scheduleScriptFunc(function()-- 恢复体力值if userData.curActive < userData.maxActive thenself:updateUserActive(1)end-- 恢复生命值if userData.curHp < userData.maxHp thenself:updateUserHp(math.floor(userData.recover/10))endself.m_timer = self.m_timer + 0.2end, 0.2, false)
endfunction MineSecretDialog:onExit()CCDirector:sharedDirector():getScheduler():unscheduleScriptEntry(self.schedulerId)
endfunction MineSecretDialog:onEnterTransitionDidFinish()
endfunction MineSecretDialog:create()local instance = MineSecretDialog:new()instance.m_menu = nilinstance.m_bgKuang = nilinstance.m_expBar = nilinstance.m_hpBar = nilinstance.m_activeBar = nilinstance.m_recoverBar = nilinstance.m_atkBar = nilinstance.m_defBar = nilinstance.m_timer = 0function instance.onNodeEvent(event)if event == 'enter' theninstance:onEnter()elseif event == 'exit' then instance:onExit()elseif event == 'enterTransitionFinish' theninstance:onEnterTransitionDidFinish()endendfunction instance.onAddHp()if userData.skillDot > 0 theninstance:addUserExp(0, -1)instance:updateUserHp(0, 1)elsegame.fleetingLabelManager:pushLabel( "技能点不足", instance, "error" )endendfunction instance.onAddActive()if userData.skillDot > 0 theninstance:addUserExp(0, -1)instance:updateUserActive(0, 1)elsegame.fleetingLabelManager:pushLabel( "技能点不足", instance, "error" )endendfunction instance.onAddRecover()if userData.skillDot > 0 theninstance:addUserExp(0, -1)instance:addUserRecoverAtkDef(1, 0, 0)elsegame.fleetingLabelManager:pushLabel( "技能点不足", instance, "error" )endendfunction instance.onAddAtk()if userData.skillDot > 0 theninstance:addUserExp(0, -1)instance:addUserRecoverAtkDef(0, 1, 0)elsegame.fleetingLabelManager:pushLabel( "技能点不足", instance, "error" )endendfunction instance.onAddDef()if userData.skillDot > 0 theninstance:addUserExp(0, -1)instance:addUserRecoverAtkDef(0, 0, 1)elsegame.fleetingLabelManager:pushLabel( "技能点不足", instance, "error" )endendfunction instance.onClose()instance:close(false)end-- 初始化instance:init()return instance
endreturn MineSecretDialog

PS:有些函数可能没有列全,请参考之前文章写的lua函数

1000行代码写小游戏(终)相关推荐

  1. 1000行代码写小游戏(一)

    用lua写的小游戏,主要玩法是点击进行采矿并和怪物搏斗等操作,人物属性有体力,血量,恢复,攻击,防御 采矿可以挖到金币和经验,打怪升级最后决战boss赢取胜利,升级可以获得技能点增加属性,还有老虎机系 ...

  2. 1000行代码写小游戏(二)

    玩家属性Table数据格式: local userData = {floor = 1, -- 楼层level = 0, -- 等级curExp = 0, -- 当前经验maxExp = 0, -- 升 ...

  3. 1000行代码写小游戏(四)

    更新金币.钥匙和收藏品: -- 更新金币 function MineSecretDialog:updateUserMoney(addMoney, isInit)addMoney = addMoney ...

  4. 1000行代码写小游戏(五)

    主角的一些属性更新和展示都已经做完了,下面主要做玩法方面的,添加小怪.矿和系统,并增加点击逻辑: -- 增加矿,敌人和系统 function MineSecretDialog:addMineAndEn ...

  5. FFmpegSDL教程:用不到1000行代码写一个播放器

    序 更新:本教程最近一次更新于2015年2月. FFmpeg是一个创建视频应用,甚至更通用程序的强大音视频工具库.FFmpeg能够完成视频处理过程中解码,编码,封装和解封装所有这些棘手工作.借助它,可 ...

  6. C/C++编程学习:百行代码实现小游戏(剪刀石头布)

    这是一个简单的小游戏(剪刀石头布),让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负. 启动程序后,让你出拳 出拳之后,显示对决结果 代码实现: #include<stdio ...

  7. [教你做小游戏] 用86行代码写一个联机五子棋WebSocket后端

    我是HullQin,公众号线下聚会游戏的作者(欢迎关注公众号,发送加微信,交个朋友),转发本文前需获得作者HullQin授权.我独立开发了<联机桌游合集>,是个网页,可以很方便的跟朋友联机 ...

  8. 用c语言400行代码小游戏,程序员400行代码制作翻牌游戏解决无聊时间

    原标题:程序员400行代码制作翻牌游戏解决无聊时间 上班感觉累,很想放假,但是放假在家又感觉非常无聊,总是不知道干什么,又感觉还不如上班呢,反正无聊不如练练写小游戏吧,即练习了代码,做完后还能接着玩, ...

  9. 让你少写 1000 行代码的正则全攻略来了!

    说起正则表达式,相信大家都不陌生.在很多程序员的认知中,这东西并不难,在工作中用的也不多,每次用的时候去 Google 搜一搜,然后复制过来改一改,问题就解决了,看起来效率特别高,好像完全没必要专门花 ...

最新文章

  1. VS2015不显示工程文本信息
  2. 『TensorFlow』卷积层、池化层详解
  3. 【强烈推荐】如何给TortoiseGit 配置密钥?
  4. 关于SAP物流和供应链模块发展的一点思考
  5. 2016 排行前20 的编程语言
  6. 正则表达式:获取一串字符串中,某个字符串到某个字符串之间的字符串,不包含左右,只取中间
  7. 剑指Offer - 面试题12. 矩阵中的路径(DFS回溯)
  8. BigDecimal 运用示例 与 DecimalFormat
  9. 自定义ElementUI风格树形组件,详解递归组件的使用及事件数据传递,视图更新等问题
  10. DTLS协议中的509证书和密钥如何传输
  11. sql数据类型_SQL数据类型
  12. 数据分析师如何正确地提意见?
  13. The partial sum problem
  14. 【UVA10129】Play on Words(欧拉回路+有向图连通性判断+打印欧拉道路)
  15. 蓝桥杯历年省赛真题汇总及题目详解
  16. NI CompactRIO9035与elmo电机驱动联合仿真系统搭建教程(二)
  17. 一文了解几十万年的科技史
  18. 从哥尼斯堡“七桥问题”到盖洛普“优势识别器”
  19. xml文件转json文件
  20. 信息与计算机科学学校排名,2021中国信息与计算科学专业大学排名 最好的高校排行榜...

热门文章

  1. 拼多多发布商家信用管理规则,为守信经营者保驾护航
  2. B05 - 033、元数据信息FSimage以及edits和secondaryNN的作用
  3. 电子电路、射频(高频)通信系统实验装置
  4. ssh StrictHostKeyChecking
  5. 直击JDD | 王振辉:技术是驱动物流革新的第一要素
  6. 扫码枪扫码后触发方法
  7. 1.魔金商城-会员登录注册相关
  8. linux配置网络yum源
  9. MjAyMDAzMDk=
  10. css入门知识点总结三--布局+动画