/****
* 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
};