a93febb5b7
* add image and deprecated arrow functions * update locales * map basic.showArrow * map arrow blocks * map & remove arrow images * remove arrow blocks * update locales * remove & patch: rgbw -> rgb button/pin pressed -> button/pin event loudness -> soundLevel * update ts mappings for arrows * add wip ts patch rules * update .blocks files * use Click instead of Down as default in Documentation and tests * patch test.blocks * fix lowercase name tag * update test.blocks * update blocks test files * update blocks test files * format block files * pass blocks file tests * fix ts mapping * fix color.defl value closes https://github.com/microsoft/pxt-calliope/issues/136 * fix ts mappings - add optional spacing at the end of rgbw() - map up to v4.0.19 * add suggested changes * replace innerText by textContent Co-authored-by: JW <gitkraken@juriwolf.de> Co-authored-by: Juri <info@juriwolf.de>
233 lines
6.3 KiB
TypeScript
233 lines
6.3 KiB
TypeScript
let correctBall: number
|
|
let ballRevealing: boolean
|
|
let cupSelect: string
|
|
let index: number
|
|
let score: number
|
|
let level: number
|
|
let swapSpeed: number
|
|
|
|
initializeGame()
|
|
input.onButtonEvent(Button.A, ButtonEvent.Click, () => {
|
|
if (ballRevealing) {
|
|
index = index + 1
|
|
if (index > 2) {
|
|
index = 0
|
|
}
|
|
basic.showString(cupSelect[index], 150)
|
|
}
|
|
})
|
|
input.onButtonEvent(Button.B, ButtonEvent.Click, () => {
|
|
if (ballRevealing) {
|
|
ballRevealing = false
|
|
if (correctBall == index) {
|
|
score = score + level
|
|
images.createImage(`
|
|
. . . . .
|
|
. . . . #
|
|
. . . # .
|
|
# . # . .
|
|
. # . . .
|
|
`).showImage(0)
|
|
basic.pause(1000)
|
|
basic.showString("+".concat(level.toString()), 150)
|
|
basic.pause(1000)
|
|
} else {
|
|
images.createImage(`
|
|
# . . . #
|
|
. # . # .
|
|
. . # . .
|
|
. # . # .
|
|
# . . . #
|
|
`).showImage(0)
|
|
basic.pause(1000)
|
|
basic.clearScreen()
|
|
revealBall(correctBall)
|
|
basic.pause(1000)
|
|
}
|
|
}
|
|
level = level + 1
|
|
if (level == 4) {
|
|
basic.showString("FINAL SCORE:", 75)
|
|
basic.showNumber(score, 150)
|
|
} else {
|
|
playLevel(level)
|
|
}
|
|
})
|
|
playLevel(1)
|
|
|
|
function revealBall(p: number) {
|
|
let xCoordinate = 2 * p
|
|
for (let j = 0; j < 3; j++) {
|
|
led.plot(j * 2, 2)
|
|
}
|
|
for (let i = 0; i < 3; i++) {
|
|
led.unplot(xCoordinate, 2)
|
|
led.plot(xCoordinate, 1)
|
|
basic.pause(100)
|
|
led.unplot(xCoordinate, 1)
|
|
led.plot(xCoordinate, 0)
|
|
basic.pause(200)
|
|
led.unplot(xCoordinate, 0)
|
|
led.plot(xCoordinate, 1)
|
|
basic.pause(100)
|
|
led.unplot(xCoordinate, 1)
|
|
led.plot(xCoordinate, 2)
|
|
basic.pause(75)
|
|
}
|
|
basic.pause(1000)
|
|
}
|
|
|
|
function initializeGame() {
|
|
ballRevealing = false
|
|
level = 1
|
|
score = 0
|
|
cupSelect = "LMR"
|
|
}
|
|
|
|
function swapCups(cup_1: number, cup_2: number, pauseDifficulty: number) {
|
|
let cup_1X = 2 * cup_1
|
|
let cup_2X = 2 * cup_2
|
|
let cupXAverage = (cup_1X + cup_2X) / 2
|
|
led.unplot(cup_1X, 2)
|
|
led.unplot(cup_2X, 2)
|
|
led.plot(cup_1X, 3)
|
|
led.plot(cup_2X, 1)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot(cup_1X, 3)
|
|
led.unplot(cup_2X, 1)
|
|
led.plot(cup_1X, 4)
|
|
led.plot(cup_2X, 0)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot(cup_1X, 4)
|
|
led.unplot(cup_2X, 0)
|
|
if (cupXAverage == 2) {
|
|
led.plot((cupXAverage + cup_1X) / 2, 4)
|
|
led.plot((cupXAverage + cup_2X) / 2, 0)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot((cupXAverage + cup_1X) / 2, 4)
|
|
led.unplot((cupXAverage + cup_2X) / 2, 0)
|
|
}
|
|
led.plot(cupXAverage, 4)
|
|
led.plot(cupXAverage, 0)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot(cupXAverage, 4)
|
|
led.unplot(cupXAverage, 0)
|
|
if (cupXAverage == 2) {
|
|
led.plot((cupXAverage + cup_2X) / 2, 4)
|
|
led.plot((cupXAverage + cup_1X) / 2, 0)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot((cupXAverage + cup_2X) / 2, 4)
|
|
led.unplot((cupXAverage + cup_1X) / 2, 0)
|
|
}
|
|
led.plot(cup_2X, 4)
|
|
led.plot(cup_1X, 0)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot(cup_2X, 4)
|
|
led.unplot(cup_1X, 0)
|
|
led.plot(cup_2X, 3)
|
|
led.plot(cup_1X, 1)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot(cup_2X, 3)
|
|
led.unplot(cup_1X, 1)
|
|
led.plot(cup_2X, 2)
|
|
led.plot(cup_1X, 2)
|
|
basic.pause(pauseDifficulty)
|
|
if (correctBall == cup_1) {
|
|
correctBall = cup_2
|
|
} else if (correctBall == cup_2) {
|
|
correctBall = cup_1
|
|
}
|
|
}
|
|
|
|
function swapFake(cup_1: number, cup_2: number, pauseDifficulty: number) {
|
|
let cup_1X = 2 * cup_1
|
|
let cup_2X = 2 * cup_2
|
|
let cupXAverage = (cup_1X + cup_2X) / 2
|
|
led.unplot(cup_1X, 2)
|
|
led.unplot(cup_2X, 2)
|
|
led.plot(cup_1X, 3)
|
|
led.plot(cup_2X, 1)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot(cup_1X, 3)
|
|
led.unplot(cup_2X, 1)
|
|
led.plot(cup_1X, 4)
|
|
led.plot(cup_2X, 0)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot(cup_1X, 4)
|
|
led.unplot(cup_2X, 0)
|
|
if (cupXAverage == 2) {
|
|
led.plot((cupXAverage + cup_1X) / 2, 4)
|
|
led.plot((cupXAverage + cup_2X) / 2, 0)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot((cupXAverage + cup_1X) / 2, 4)
|
|
led.unplot((cupXAverage + cup_2X) / 2, 0)
|
|
}
|
|
led.plot(cupXAverage, 4)
|
|
led.plot(cupXAverage, 0)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot(cupXAverage, 4)
|
|
led.unplot(cupXAverage, 0)
|
|
if (cupXAverage == 2) {
|
|
led.plot((cupXAverage + cup_1X) / 2, 4)
|
|
led.plot((cupXAverage + cup_2X) / 2, 0)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot((cupXAverage + cup_1X) / 2, 4)
|
|
led.unplot((cupXAverage + cup_2X) / 2, 0)
|
|
}
|
|
led.plot(cup_1X, 4)
|
|
led.plot(cup_2X, 0)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot(cup_1X, 4)
|
|
led.unplot(cup_2X, 0)
|
|
led.plot(cup_1X, 3)
|
|
led.plot(cup_2X, 1)
|
|
basic.pause(pauseDifficulty)
|
|
led.unplot(cup_1X, 3)
|
|
led.unplot(cup_2X, 1)
|
|
led.plot(cup_1X, 2)
|
|
led.plot(cup_2X, 2)
|
|
basic.pause(pauseDifficulty)
|
|
}
|
|
|
|
function playLevel(level1: number) {
|
|
basic.showNumber(level, 150)
|
|
basic.pause(3000)
|
|
basic.clearScreen()
|
|
for (let i = 0; i < 3; i++) {
|
|
led.plot(2 * i, 2)
|
|
}
|
|
basic.pause(1000)
|
|
correctBall = Math.randomInt(3)
|
|
revealBall(correctBall)
|
|
basic.pause(1000)
|
|
let swaps = 5 + 10 * level1
|
|
if (level1 == 1) {
|
|
swapSpeed = 80
|
|
} else if (level1 == 2) {
|
|
swapSpeed = 40
|
|
} else {
|
|
swapSpeed = 20
|
|
}
|
|
for (let i1 = 0; i1 < swaps; i1++) {
|
|
let swapType = Math.randomInt(3)
|
|
let not = Math.randomInt(3)
|
|
if (swapType < 2) {
|
|
let swapOrientation = Math.randomInt(2)
|
|
if (swapOrientation == 0) {
|
|
swapCups((not + 1) % 3, (not + 2) % 3, swapSpeed)
|
|
} else {
|
|
swapCups((not + 2) % 3, (not + 1) % 3, swapSpeed)
|
|
}
|
|
} else {
|
|
let swapOrientation1 = Math.randomInt(2)
|
|
if (swapOrientation1 == 0) {
|
|
swapFake((not + 1) % 3, (not + 2) % 3, swapSpeed)
|
|
} else {
|
|
swapFake((not + 2) % 3, (not + 1) % 3, swapSpeed)
|
|
}
|
|
}
|
|
}
|
|
index = -1
|
|
ballRevealing = true
|
|
}
|