User prompt
make the background colorful
User prompt
Lets Restart The project. Change The Game To A Game Like Makes 10,100,500,1000,5000 coin flips and shows the percent results
User prompt
The Words On The Background Are Bugged
User prompt
Change Heads To Yazı And Tails To Tura
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'fill')' in or related to this line: 'feedbackTxt.style.fill = "#00FF00";' Line Number: 272
Code edit (1 edits merged)
Please save this source code
User prompt
Coin Flip Frenzy
Initial prompt
Make me a game for flipping coins
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Coin class: handles flipping animation and result display
var Coin = Container.expand(function () {
var self = Container.call(this);
// Coin base
var coinBase = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
// Heads overlay
var headsOverlay = self.attachAsset('heads', {
anchorX: 0.5,
anchorY: 0.5
});
// Heads text
var headsText = new Text2('H', {
size: 100,
fill: 0x000000
});
headsText.anchor.set(0.5, 0.5);
headsOverlay.addChild(headsText);
// Tails overlay
var tailsOverlay = self.attachAsset('tails', {
anchorX: 0.5,
anchorY: 0.5
});
// Tails text
var tailsText = new Text2('T', {
size: 100,
fill: 0x000000
});
tailsText.anchor.set(0.5, 0.5);
tailsOverlay.addChild(tailsText);
// Start with heads showing
headsOverlay.visible = true;
tailsOverlay.visible = false;
// Add overlays to coin
self.addChild(headsOverlay);
self.addChild(tailsOverlay);
// State
self.currentFace = 'heads'; // 'heads' or 'tails'
self.flipping = false;
// Show result
self.showFace = function (face) {
self.currentFace = face;
headsOverlay.visible = face === 'heads';
tailsOverlay.visible = face === 'tails';
};
// Flip animation: returns after animation, calls cb(face)
self.flip = function (cb, flipDuration) {
if (self.flipping) return;
self.flipping = true;
// Randomly pick heads or tails
var result = Math.random() < 0.5 ? 'heads' : 'tails';
// Animate: scaleX 1 -> 0 (hide), swap face, 0 -> 1 (show)
tween(self, {
scaleX: 0
}, {
duration: flipDuration / 2,
easing: tween.cubicIn,
onFinish: function onFinish() {
self.showFace(result);
tween(self, {
scaleX: 1
}, {
duration: flipDuration / 2,
easing: tween.cubicOut,
onFinish: function onFinish() {
self.flipping = false;
if (cb) cb(result);
}
});
}
});
};
// Reset to heads, scaleX 1
self.reset = function () {
self.scaleX = 1;
self.showFace('heads');
self.flipping = false;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a1a
});
/****
* Game Code
****/
// Sound for correct
// Tails text overlay
// Heads text overlay
// Tails: box, gray with T
// Heads: box, white with H
// Coin: ellipse, gold color
// Center positions
var centerX = 2048 / 2;
var centerY = 2732 / 2;
// Game state
var waitingForPrediction = true;
var prediction = null; // 'heads' or 'tails'
var canPredict = true;
var streak = 0;
var flipSpeed = 600; // ms, decreases as streak increases, min 250ms
var flipTimeout = null;
// Coin instance
var coin = new Coin();
coin.x = centerX;
coin.y = centerY - 100;
game.addChild(coin);
// Score text
var scoreTxt = new Text2('0', {
size: 120,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Streak text
var streakTxt = new Text2('', {
size: 60,
fill: 0xFFD700
});
streakTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(streakTxt);
streakTxt.y = 130;
// Prompt text
var promptTxt = new Text2('Tap HEADS or TAILS to predict!', {
size: 70,
fill: 0xFFFFFF
});
promptTxt.anchor.set(0.5, 0.5);
promptTxt.y = centerY + 350;
promptTxt.x = centerX;
game.addChild(promptTxt);
// Heads button
var headsBtn = LK.getAsset('heads', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX - 250,
y: centerY + 350
});
game.addChild(headsBtn);
var headsBtnText = new Text2('HEADS', {
size: 60,
fill: 0x000000
});
headsBtnText.anchor.set(0.5, 0.5);
headsBtn.addChild(headsBtnText);
// Tails button
var tailsBtn = LK.getAsset('tails', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX + 250,
y: centerY + 350
});
game.addChild(tailsBtn);
var tailsBtnText = new Text2('TAILS', {
size: 60,
fill: 0x000000
});
tailsBtnText.anchor.set(0.5, 0.5);
tailsBtn.addChild(tailsBtnText);
// Feedback text
var feedbackTxt = new Text2('', {
size: 100,
fill: 0x00FF00
});
feedbackTxt.anchor.set(0.5, 0.5);
feedbackTxt.x = centerX;
feedbackTxt.y = centerY - 350;
game.addChild(feedbackTxt);
// Helper: update score and streak
function updateScoreDisplay() {
scoreTxt.setText(LK.getScore());
if (streak > 1) {
streakTxt.setText('Streak: ' + streak);
} else {
streakTxt.setText('');
}
}
// Helper: reset game state
function resetGameState() {
waitingForPrediction = true;
prediction = null;
canPredict = true;
streak = 0;
flipSpeed = 600;
LK.setScore(0);
updateScoreDisplay();
feedbackTxt.setText('');
promptTxt.setText('Tap HEADS or TAILS to predict!');
coin.reset();
}
// Button event handlers
headsBtn.down = function (x, y, obj) {
if (!canPredict || coin.flipping) return;
makePrediction('heads');
};
tailsBtn.down = function (x, y, obj) {
if (!canPredict || coin.flipping) return;
makePrediction('tails');
};
// Main prediction logic
function makePrediction(face) {
if (!waitingForPrediction) return;
waitingForPrediction = false;
canPredict = false;
prediction = face;
promptTxt.setText('Flipping...');
feedbackTxt.setText('');
// Animate selected button
var btn = face === 'heads' ? headsBtn : tailsBtn;
tween(btn, {
scaleX: 1.15,
scaleY: 1.15
}, {
duration: 120,
easing: tween.cubicOut,
onFinish: function onFinish() {
tween(btn, {
scaleX: 1,
scaleY: 1
}, {
duration: 120
});
}
});
// Start coin flip
coin.flip(function (result) {
// Show result feedback
if (result === prediction) {
// Correct!
LK.getSound('correct').play();
streak += 1;
var bonus = streak > 1 ? streak : 1;
LK.setScore(LK.getScore() + bonus);
updateScoreDisplay();
feedbackTxt.setText('✔');
feedbackTxt.setStyle({
fill: 0x00FF00
});
promptTxt.setText('Correct! Tap to predict again');
// Increase speed, min 250ms
flipSpeed = Math.max(250, 600 - streak * 30);
// Next round after short delay
flipTimeout = LK.setTimeout(function () {
waitingForPrediction = true;
canPredict = true;
promptTxt.setText('Tap HEADS or TAILS to predict!');
feedbackTxt.setText('');
}, 700);
} else {
// Wrong!
LK.getSound('wrong').play();
feedbackTxt.setText('✖');
feedbackTxt.setStyle({
fill: 0xFF2222
});
promptTxt.setText('Wrong! Game Over');
// Flash screen red
LK.effects.flashScreen(0xff0000, 800);
// Show game over after short delay
LK.setTimeout(function () {
LK.showGameOver();
}, 900);
}
}, flipSpeed);
}
// Reset game state on game start
resetGameState();
// On game over, LK will reset the game and re-run this code
// Prevent accidental double taps
game.down = function (x, y, obj) {
// No-op, handled by buttons
};
// No drag or move needed
// Main update loop (not used for logic here)
game.update = function () {
// No per-frame logic needed
}; ===================================================================
--- original.js
+++ change.js
@@ -247,9 +247,11 @@
var bonus = streak > 1 ? streak : 1;
LK.setScore(LK.getScore() + bonus);
updateScoreDisplay();
feedbackTxt.setText('✔');
- feedbackTxt.style.fill = "#00FF00";
+ feedbackTxt.setStyle({
+ fill: 0x00FF00
+ });
promptTxt.setText('Correct! Tap to predict again');
// Increase speed, min 250ms
flipSpeed = Math.max(250, 600 - streak * 30);
// Next round after short delay
@@ -262,9 +264,11 @@
} else {
// Wrong!
LK.getSound('wrong').play();
feedbackTxt.setText('✖');
- feedbackTxt.style.fill = "#FF2222";
+ feedbackTxt.setStyle({
+ fill: 0xFF2222
+ });
promptTxt.setText('Wrong! Game Over');
// Flash screen red
LK.effects.flashScreen(0xff0000, 800);
// Show game over after short delay