add tower builing game
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
import { Instance } from 'cooljs'
|
||||
import { blockAction, blockPainter } from './block'
|
||||
import {
|
||||
checkMoveDown,
|
||||
getMoveDownValue,
|
||||
drawYellowString,
|
||||
getAngleBase
|
||||
} from './utils'
|
||||
import { addFlight } from './flight'
|
||||
import * as constant from './constant'
|
||||
|
||||
export const endAnimate = (engine) => {
|
||||
const gameStartNow = engine.getVariable(constant.gameStartNow)
|
||||
if (!gameStartNow) return
|
||||
const successCount = engine.getVariable(constant.successCount, 0)
|
||||
const failedCount = engine.getVariable(constant.failedCount)
|
||||
const gameScore = engine.getVariable(constant.gameScore, 0)
|
||||
const threeFiguresOffset = Number(successCount) > 99 ? engine.width * 0.1 : 0
|
||||
|
||||
drawYellowString(engine, {
|
||||
string: 'floor',
|
||||
size: engine.width * 0.06,
|
||||
x: (engine.width * 0.24) + threeFiguresOffset,
|
||||
y: engine.width * 0.12,
|
||||
textAlign: 'left',
|
||||
fontName: 'Arial',
|
||||
fontWeight: 'bold'
|
||||
})
|
||||
drawYellowString(engine, {
|
||||
string: successCount,
|
||||
size: engine.width * 0.17,
|
||||
x: (engine.width * 0.22) + threeFiguresOffset,
|
||||
y: engine.width * 0.2,
|
||||
textAlign: 'right'
|
||||
})
|
||||
const score = engine.getImg('score')
|
||||
const scoreWidth = score.width
|
||||
const scoreHeight = score.height
|
||||
const zoomedWidth = engine.width * 0.35
|
||||
const zoomedHeight = (scoreHeight * zoomedWidth) / scoreWidth
|
||||
engine.ctx.drawImage(
|
||||
score,
|
||||
engine.width * 0.61,
|
||||
engine.width * 0.038,
|
||||
zoomedWidth,
|
||||
zoomedHeight
|
||||
)
|
||||
drawYellowString(engine, {
|
||||
string: gameScore,
|
||||
size: engine.width * 0.06,
|
||||
x: engine.width * 0.9,
|
||||
y: engine.width * 0.11,
|
||||
textAlign: 'right'
|
||||
})
|
||||
const { ctx } = engine
|
||||
const heart = engine.getImg('heart')
|
||||
const heartWidth = heart.width
|
||||
const heartHeight = heart.height
|
||||
const zoomedHeartWidth = engine.width * 0.08
|
||||
const zoomedHeartHeight = (heartHeight * zoomedHeartWidth) / heartWidth
|
||||
for (let i = 1; i <= 3; i += 1) {
|
||||
ctx.save()
|
||||
if (i <= failedCount) {
|
||||
ctx.globalAlpha = 0.2
|
||||
}
|
||||
ctx.drawImage(
|
||||
heart,
|
||||
(engine.width * 0.66) + ((i - 1) * zoomedHeartWidth),
|
||||
engine.width * 0.16,
|
||||
zoomedHeartWidth,
|
||||
zoomedHeartHeight
|
||||
)
|
||||
ctx.restore()
|
||||
}
|
||||
}
|
||||
|
||||
export const startAnimate = (engine) => {
|
||||
const gameStartNow = engine.getVariable(constant.gameStartNow)
|
||||
if (!gameStartNow) return
|
||||
const lastBlock = engine.getInstance(`block_${engine.getVariable(constant.blockCount)}`)
|
||||
if (!lastBlock || [constant.land, constant.out].indexOf(lastBlock.status) > -1) {
|
||||
if (checkMoveDown(engine) && getMoveDownValue(engine)) return
|
||||
if (engine.checkTimeMovement(constant.hookUpMovement)) return
|
||||
const angleBase = getAngleBase(engine)
|
||||
const initialAngle = (Math.PI
|
||||
* engine.utils.random(angleBase, angleBase + 5)
|
||||
* engine.utils.randomPositiveNegative()
|
||||
) / 180
|
||||
engine.setVariable(constant.blockCount, engine.getVariable(constant.blockCount) + 1)
|
||||
engine.setVariable(constant.initialAngle, initialAngle)
|
||||
engine.setTimeMovement(constant.hookDownMovement, 500)
|
||||
const block = new Instance({
|
||||
name: `block_${engine.getVariable(constant.blockCount)}`,
|
||||
action: blockAction,
|
||||
painter: blockPainter
|
||||
})
|
||||
engine.addInstance(block)
|
||||
}
|
||||
const successCount = Number(engine.getVariable(constant.successCount, 0))
|
||||
switch (successCount) {
|
||||
case 2:
|
||||
addFlight(engine, 1, 'leftToRight')
|
||||
break
|
||||
case 6:
|
||||
addFlight(engine, 2, 'rightToLeft')
|
||||
break
|
||||
case 8:
|
||||
addFlight(engine, 3, 'leftToRight')
|
||||
break
|
||||
case 14:
|
||||
addFlight(engine, 4, 'bottomToTop')
|
||||
break
|
||||
case 18:
|
||||
addFlight(engine, 5, 'bottomToTop')
|
||||
break
|
||||
case 22:
|
||||
addFlight(engine, 6, 'bottomToTop')
|
||||
break
|
||||
case 25:
|
||||
addFlight(engine, 7, 'rightTopToLeft')
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user