/**** * 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('Y', { 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 ****/ // Center positions var centerX = 2048 / 2; var centerY = 2732 / 2; // Draw colorful background ellipses for a vibrant effect var bgEllipses = []; var ellipseColors = [0xffb347, 0x7ec8e3, 0xff5eae, 0x7fff7f, 0xf7b7f7, 0xffe156]; var ellipseAlphas = [0.18, 0.14, 0.13, 0.12, 0.11, 0.10]; var ellipseData = [{ x: 600, y: 700, w: 1200, h: 900, rot: 0.12 }, { x: 1500, y: 900, w: 900, h: 1200, rot: -0.18 }, { x: 1000, y: 1800, w: 1400, h: 800, rot: 0.22 }, { x: 400, y: 2000, w: 900, h: 900, rot: -0.09 }, { x: 1700, y: 2000, w: 800, h: 1000, rot: 0.18 }, { x: 1000, y: 400, w: 900, h: 700, rot: -0.15 }]; for (var i = 0; i < ellipseData.length; i++) { var ell = LK.getAsset('coin', { anchorX: 0.5, anchorY: 0.5, x: ellipseData[i].x, y: ellipseData[i].y, scaleX: ellipseData[i].w / 300, scaleY: ellipseData[i].h / 300 }); ell.alpha = ellipseAlphas[i]; ell.tint = ellipseColors[i]; ell.rotation = ellipseData[i].rot; // Insert at the bottom of the display list game.addChild(ell); bgEllipses.push(ell); } // Draw background "YAZI" and "TURA" words var bgWords = []; for (var i = 0; i < 6; i++) { var word = i % 2 === 0 ? "YAZI" : "TURA"; var txt = new Text2(word, { size: 220, fill: i % 2 === 0 ? 0xffffff : 0xcccccc, alpha: 0.08 }); txt.anchor.set(0.5, 0.5); // Staggered positions, diagonally txt.x = 400 + i * 300; txt.y = 600 + i * 350; txt.rotation = i % 2 === 0 ? -0.18 : 0.18; game.addChild(txt); bgWords.push(txt); } // --- Coin Flip Simulator UI --- // Number of flips options var flipOptions = [10, 100, 500, 1000, 5000]; var flipButtons = []; var resultsText = null; var coin = null; // Title var titleTxt = new Text2('Coin Flip Simulator', { size: 100, fill: 0xFFD700 }); titleTxt.anchor.set(0.5, 0); titleTxt.x = centerX; titleTxt.y = 120; LK.gui.top.addChild(titleTxt); // Prompt var promptTxt = new Text2('Kaç kez yazı-tura atılsın?', { size: 70, fill: 0xFFFFFF }); promptTxt.anchor.set(0.5, 0.5); promptTxt.x = centerX; promptTxt.y = centerY - 200; game.addChild(promptTxt); // Create flip buttons var btnY = centerY + 100; var btnSpacing = 260; for (var i = 0; i < flipOptions.length; i++) { var btn = LK.getAsset('coin', { anchorX: 0.5, anchorY: 0.5, x: centerX + (i - 2) * btnSpacing, y: btnY }); game.addChild(btn); var btnLabel = new Text2(flipOptions[i] + '', { size: 60, fill: 0x000000 }); btnLabel.anchor.set(0.5, 0.5); btn.addChild(btnLabel); flipButtons.push(btn); // Button event (function (n) { btn.down = function (x, y, obj) { startSimulation(n); }; })(flipOptions[i]); } // Results text resultsText = new Text2('', { size: 80, fill: 0xffffff }); resultsText.anchor.set(0.5, 0.5); resultsText.x = centerX; resultsText.y = centerY + 400; game.addChild(resultsText); // Coin display (for fun, shows last result) coin = new Coin(); coin.x = centerX; coin.y = centerY - 40; game.addChild(coin); // Simulate coin flips and show results function startSimulation(numFlips) { // Disable buttons during simulation for (var i = 0; i < flipButtons.length; i++) { flipButtons[i].interactive = false; flipButtons[i].alpha = 0.5; } promptTxt.setText(numFlips + ' kez atılıyor...'); resultsText.setText(''); coin.reset(); // Simulate flips var heads = 0; var tails = 0; var flipsDone = 0; // Animate a few flips visually, then do the rest instantly var visualFlips = Math.min(10, numFlips); function doVisualFlip() { if (flipsDone >= visualFlips) { // Do the rest instantly for (var j = flipsDone; j < numFlips; j++) { if (Math.random() < 0.5) heads++;else tails++; } showResults(); return; } coin.flip(function (face) { if (face === 'heads') heads++;else tails++; flipsDone++; if (flipsDone < visualFlips) { LK.setTimeout(doVisualFlip, 120); } else { // Do the rest instantly for (var j = flipsDone; j < numFlips; j++) { if (Math.random() < 0.5) heads++;else tails++; } showResults(); } }, 180); } doVisualFlip(); function showResults() { var percentHeads = Math.round(heads / numFlips * 1000) / 10; var percentTails = Math.round(tails / numFlips * 1000) / 10; resultsText.setText('YAZI: ' + heads + ' (' + percentHeads + '%)\n' + 'TURA: ' + tails + ' (' + percentTails + '%)'); promptTxt.setText('Tekrar denemek için bir sayı seçin!'); // Enable buttons for (var i = 0; i < flipButtons.length; i++) { flipButtons[i].interactive = true; flipButtons[i].alpha = 1; } } } // No drag or move needed game.down = function (x, y, obj) { // No-op, handled by buttons }; game.update = function () { // No per-frame logic needed };
/****
* 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('Y', {
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
****/
// Center positions
var centerX = 2048 / 2;
var centerY = 2732 / 2;
// Draw colorful background ellipses for a vibrant effect
var bgEllipses = [];
var ellipseColors = [0xffb347, 0x7ec8e3, 0xff5eae, 0x7fff7f, 0xf7b7f7, 0xffe156];
var ellipseAlphas = [0.18, 0.14, 0.13, 0.12, 0.11, 0.10];
var ellipseData = [{
x: 600,
y: 700,
w: 1200,
h: 900,
rot: 0.12
}, {
x: 1500,
y: 900,
w: 900,
h: 1200,
rot: -0.18
}, {
x: 1000,
y: 1800,
w: 1400,
h: 800,
rot: 0.22
}, {
x: 400,
y: 2000,
w: 900,
h: 900,
rot: -0.09
}, {
x: 1700,
y: 2000,
w: 800,
h: 1000,
rot: 0.18
}, {
x: 1000,
y: 400,
w: 900,
h: 700,
rot: -0.15
}];
for (var i = 0; i < ellipseData.length; i++) {
var ell = LK.getAsset('coin', {
anchorX: 0.5,
anchorY: 0.5,
x: ellipseData[i].x,
y: ellipseData[i].y,
scaleX: ellipseData[i].w / 300,
scaleY: ellipseData[i].h / 300
});
ell.alpha = ellipseAlphas[i];
ell.tint = ellipseColors[i];
ell.rotation = ellipseData[i].rot;
// Insert at the bottom of the display list
game.addChild(ell);
bgEllipses.push(ell);
}
// Draw background "YAZI" and "TURA" words
var bgWords = [];
for (var i = 0; i < 6; i++) {
var word = i % 2 === 0 ? "YAZI" : "TURA";
var txt = new Text2(word, {
size: 220,
fill: i % 2 === 0 ? 0xffffff : 0xcccccc,
alpha: 0.08
});
txt.anchor.set(0.5, 0.5);
// Staggered positions, diagonally
txt.x = 400 + i * 300;
txt.y = 600 + i * 350;
txt.rotation = i % 2 === 0 ? -0.18 : 0.18;
game.addChild(txt);
bgWords.push(txt);
}
// --- Coin Flip Simulator UI ---
// Number of flips options
var flipOptions = [10, 100, 500, 1000, 5000];
var flipButtons = [];
var resultsText = null;
var coin = null;
// Title
var titleTxt = new Text2('Coin Flip Simulator', {
size: 100,
fill: 0xFFD700
});
titleTxt.anchor.set(0.5, 0);
titleTxt.x = centerX;
titleTxt.y = 120;
LK.gui.top.addChild(titleTxt);
// Prompt
var promptTxt = new Text2('Kaç kez yazı-tura atılsın?', {
size: 70,
fill: 0xFFFFFF
});
promptTxt.anchor.set(0.5, 0.5);
promptTxt.x = centerX;
promptTxt.y = centerY - 200;
game.addChild(promptTxt);
// Create flip buttons
var btnY = centerY + 100;
var btnSpacing = 260;
for (var i = 0; i < flipOptions.length; i++) {
var btn = LK.getAsset('coin', {
anchorX: 0.5,
anchorY: 0.5,
x: centerX + (i - 2) * btnSpacing,
y: btnY
});
game.addChild(btn);
var btnLabel = new Text2(flipOptions[i] + '', {
size: 60,
fill: 0x000000
});
btnLabel.anchor.set(0.5, 0.5);
btn.addChild(btnLabel);
flipButtons.push(btn);
// Button event
(function (n) {
btn.down = function (x, y, obj) {
startSimulation(n);
};
})(flipOptions[i]);
}
// Results text
resultsText = new Text2('', {
size: 80,
fill: 0xffffff
});
resultsText.anchor.set(0.5, 0.5);
resultsText.x = centerX;
resultsText.y = centerY + 400;
game.addChild(resultsText);
// Coin display (for fun, shows last result)
coin = new Coin();
coin.x = centerX;
coin.y = centerY - 40;
game.addChild(coin);
// Simulate coin flips and show results
function startSimulation(numFlips) {
// Disable buttons during simulation
for (var i = 0; i < flipButtons.length; i++) {
flipButtons[i].interactive = false;
flipButtons[i].alpha = 0.5;
}
promptTxt.setText(numFlips + ' kez atılıyor...');
resultsText.setText('');
coin.reset();
// Simulate flips
var heads = 0;
var tails = 0;
var flipsDone = 0;
// Animate a few flips visually, then do the rest instantly
var visualFlips = Math.min(10, numFlips);
function doVisualFlip() {
if (flipsDone >= visualFlips) {
// Do the rest instantly
for (var j = flipsDone; j < numFlips; j++) {
if (Math.random() < 0.5) heads++;else tails++;
}
showResults();
return;
}
coin.flip(function (face) {
if (face === 'heads') heads++;else tails++;
flipsDone++;
if (flipsDone < visualFlips) {
LK.setTimeout(doVisualFlip, 120);
} else {
// Do the rest instantly
for (var j = flipsDone; j < numFlips; j++) {
if (Math.random() < 0.5) heads++;else tails++;
}
showResults();
}
}, 180);
}
doVisualFlip();
function showResults() {
var percentHeads = Math.round(heads / numFlips * 1000) / 10;
var percentTails = Math.round(tails / numFlips * 1000) / 10;
resultsText.setText('YAZI: ' + heads + ' (' + percentHeads + '%)\n' + 'TURA: ' + tails + ' (' + percentTails + '%)');
promptTxt.setText('Tekrar denemek için bir sayı seçin!');
// Enable buttons
for (var i = 0; i < flipButtons.length; i++) {
flipButtons[i].interactive = true;
flipButtons[i].alpha = 1;
}
}
}
// No drag or move needed
game.down = function (x, y, obj) {
// No-op, handled by buttons
};
game.update = function () {
// No per-frame logic needed
};