User prompt
yan yana yada alt alta en az 2 balon oyunun verdiği renle aynı ise tıklayınca patlayacak
User prompt
balonlar tıklanınca patlayıp kaybolmuyor
User prompt
hata var
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'fill')' in or related to this line: 'colorTxt.style.fill = '#' + color.toString(16).padStart(6, '0');' Line Number: 151
Code edit (1 edits merged)
Please save this source code
User prompt
Renkli Balon Patlatmaca
Initial prompt
ekranda random balonlar olsun boşluksuz yanyana ve farklı renklerde olsun 2 renkli balon alt alta yada yanyana isepatlayabilir 2. şart balonların patlaması için oyun 3saniyede bir renk verecek oyunun verdiği renklerdeki balonlar tıklatılarak patlatılabilir
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Balloon class
var Balloon = Container.expand(function () {
var self = Container.call(this);
// Attach balloon asset (ellipse shape)
var balloonGraphics = self.attachAsset('balloon_' + self.color, {
anchorX: 0.5,
anchorY: 0.5
});
// Store color for logic
self.color = self.color || 0xff0000; // Default red, will be overwritten on creation
// Store grid position
self.gridX = 0;
self.gridY = 0;
// Is this balloon popped?
self.popped = false;
// Pop animation and logic
self.pop = function () {
if (self.popped) return;
self.popped = true;
// Animate scale down and fade out
tween(self, {
scaleX: 0,
scaleY: 0,
alpha: 0
}, {
duration: 250,
easing: tween.easeIn,
onFinish: function onFinish() {
self.destroy();
}
});
};
// Down event (touch/click)
self.down = function (x, y, obj) {
if (self.popped) return;
// Only allow popping if this is the current color
if (self.color !== currentColor) return;
// Find all connected balloons of the same color
var group = findConnectedBalloons(self.gridX, self.gridY, self.color);
if (group.length < 2) return; // Only pop if at least 2 connected
for (var i = 0; i < group.length; i++) {
group[i].pop();
}
// Update score
LK.setScore(LK.getScore() + group.length);
scoreTxt.setText(LK.getScore());
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xffffff
});
/****
* Game Code
****/
// Balloon grid settings
var GRID_COLS = 10;
var GRID_ROWS = 12;
var BALLOON_COLORS = [0xff4d4d,
// red
0x4db8ff,
// blue
0x4dff4d,
// green
0xffe14d,
// yellow
0xff4df7 // pink
];
var BALLOON_COLOR_NAMES = ['red', 'blue', 'green', 'yellow', 'pink'];
// Balloon size and spacing
var balloonSize = Math.floor(2048 / GRID_COLS);
var balloonSpacing = 0; // No gap
// Store balloons in a 2D array
var balloons = [];
// Store all balloon objects for easy iteration
var allBalloons = [];
// Current color to pop
var currentColor = null;
var currentColorIdx = 0;
// Score text
var scoreTxt = new Text2('0', {
size: 120,
fill: 0x222222
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Color indicator text
var colorTxt = new Text2('', {
size: 90,
fill: 0x222222
});
colorTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(colorTxt);
colorTxt.y = 140;
// Helper: create balloon asset for each color
for (var i = 0; i < BALLOON_COLORS.length; i++) {}
// Helper: get color name from color value
function getColorName(color) {
for (var i = 0; i < BALLOON_COLORS.length; i++) {
if (BALLOON_COLORS[i] === color) return BALLOON_COLOR_NAMES[i];
}
return 'unknown';
}
// Helper: get color display text
function getColorDisplayText(color) {
var idx = BALLOON_COLORS.indexOf(color);
if (idx === -1) return '';
var name = BALLOON_COLOR_NAMES[idx];
var display = '';
if (name === 'red') display = 'KIRMIZI';else if (name === 'blue') display = 'MAVİ';else if (name === 'green') display = 'YEŞİL';else if (name === 'yellow') display = 'SARI';else if (name === 'pink') display = 'PEMBE';
return display;
}
// Helper: set color indicator
function setColorIndicator(color) {
colorTxt.setText('Patlat: ' + getColorDisplayText(color));
colorTxt.style.fill = '#' + color.toString(16).padStart(6, '0');
}
// Helper: find all connected balloons of the same color (DFS)
function findConnectedBalloons(x, y, color) {
var visited = {};
var group = [];
function dfs(cx, cy) {
var key = cx + ',' + cy;
if (visited[key]) return;
if (cx < 0 || cy < 0 || cx >= GRID_COLS || cy >= GRID_ROWS) return;
var b = balloons[cx][cy];
if (!b || b.popped || b.color !== color) return;
visited[key] = true;
group.push(b);
// Check neighbors (up, down, left, right)
dfs(cx - 1, cy);
dfs(cx + 1, cy);
dfs(cx, cy - 1);
dfs(cx, cy + 1);
}
dfs(x, y);
return group;
}
// Helper: pick a new color (random, but must exist on board)
function pickNewColor() {
// Find all colors still present
var present = {};
for (var i = 0; i < allBalloons.length; i++) {
var b = allBalloons[i];
if (!b.popped) present[b.color] = true;
}
var presentColors = [];
for (var i = 0; i < BALLOON_COLORS.length; i++) {
if (present[BALLOON_COLORS[i]]) presentColors.push(BALLOON_COLORS[i]);
}
if (presentColors.length === 0) {
// Win condition: all balloons popped
LK.showYouWin();
return;
}
// Pick random color
var idx = Math.floor(Math.random() * presentColors.length);
currentColor = presentColors[idx];
setColorIndicator(currentColor);
}
// Build the balloon grid
function buildGrid() {
// Center grid
var offsetX = Math.floor((2048 - GRID_COLS * balloonSize) / 2) + balloonSize / 2;
var offsetY = Math.floor((2732 - GRID_ROWS * balloonSize) / 2) + balloonSize / 2;
balloons = [];
allBalloons = [];
for (var x = 0; x < GRID_COLS; x++) {
balloons[x] = [];
for (var y = 0; y < GRID_ROWS; y++) {
// Pick random color
var colorIdx = Math.floor(Math.random() * BALLOON_COLORS.length);
var color = BALLOON_COLORS[colorIdx];
var name = BALLOON_COLOR_NAMES[colorIdx];
var balloon = new Balloon();
balloon.color = color;
balloon.gridX = x;
balloon.gridY = y;
// Set asset to correct color
balloon.removeChildren();
balloon.attachAsset('balloon_' + name, {
anchorX: 0.5,
anchorY: 0.5
});
balloon.x = offsetX + x * (balloonSize + balloonSpacing);
balloon.y = offsetY + y * (balloonSize + balloonSpacing);
balloons[x][y] = balloon;
allBalloons.push(balloon);
game.addChild(balloon);
}
}
}
// Reset game state
function resetGame() {
LK.setScore(0);
scoreTxt.setText('0');
// Remove all balloons
for (var i = 0; i < allBalloons.length; i++) {
allBalloons[i].destroy();
}
buildGrid();
pickNewColor();
}
// Timer for color change
var colorTimer = null;
function startColorTimer() {
if (colorTimer) LK.clearInterval(colorTimer);
colorTimer = LK.setInterval(function () {
pickNewColor();
}, 3000);
}
// Start game
resetGame();
startColorTimer();
// Game update (not much needed)
game.update = function () {
// Check win condition
var remaining = 0;
for (var i = 0; i < allBalloons.length; i++) {
if (!allBalloons[i].popped) remaining++;
}
if (remaining === 0) {
LK.showYouWin();
}
};
// On game over or win, reset game
game.onGameOver = function () {
resetGame();
startColorTimer();
};
game.onYouWin = function () {
resetGame();
startColorTimer();
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,247 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Balloon class
+var Balloon = Container.expand(function () {
+ var self = Container.call(this);
+ // Attach balloon asset (ellipse shape)
+ var balloonGraphics = self.attachAsset('balloon_' + self.color, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Store color for logic
+ self.color = self.color || 0xff0000; // Default red, will be overwritten on creation
+ // Store grid position
+ self.gridX = 0;
+ self.gridY = 0;
+ // Is this balloon popped?
+ self.popped = false;
+ // Pop animation and logic
+ self.pop = function () {
+ if (self.popped) return;
+ self.popped = true;
+ // Animate scale down and fade out
+ tween(self, {
+ scaleX: 0,
+ scaleY: 0,
+ alpha: 0
+ }, {
+ duration: 250,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ self.destroy();
+ }
+ });
+ };
+ // Down event (touch/click)
+ self.down = function (x, y, obj) {
+ if (self.popped) return;
+ // Only allow popping if this is the current color
+ if (self.color !== currentColor) return;
+ // Find all connected balloons of the same color
+ var group = findConnectedBalloons(self.gridX, self.gridY, self.color);
+ if (group.length < 2) return; // Only pop if at least 2 connected
+ for (var i = 0; i < group.length; i++) {
+ group[i].pop();
+ }
+ // Update score
+ LK.setScore(LK.getScore() + group.length);
+ scoreTxt.setText(LK.getScore());
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0xffffff
+});
+
+/****
+* Game Code
+****/
+// Balloon grid settings
+var GRID_COLS = 10;
+var GRID_ROWS = 12;
+var BALLOON_COLORS = [0xff4d4d,
+// red
+0x4db8ff,
+// blue
+0x4dff4d,
+// green
+0xffe14d,
+// yellow
+0xff4df7 // pink
+];
+var BALLOON_COLOR_NAMES = ['red', 'blue', 'green', 'yellow', 'pink'];
+// Balloon size and spacing
+var balloonSize = Math.floor(2048 / GRID_COLS);
+var balloonSpacing = 0; // No gap
+// Store balloons in a 2D array
+var balloons = [];
+// Store all balloon objects for easy iteration
+var allBalloons = [];
+// Current color to pop
+var currentColor = null;
+var currentColorIdx = 0;
+// Score text
+var scoreTxt = new Text2('0', {
+ size: 120,
+ fill: 0x222222
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Color indicator text
+var colorTxt = new Text2('', {
+ size: 90,
+ fill: 0x222222
+});
+colorTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(colorTxt);
+colorTxt.y = 140;
+// Helper: create balloon asset for each color
+for (var i = 0; i < BALLOON_COLORS.length; i++) {}
+// Helper: get color name from color value
+function getColorName(color) {
+ for (var i = 0; i < BALLOON_COLORS.length; i++) {
+ if (BALLOON_COLORS[i] === color) return BALLOON_COLOR_NAMES[i];
+ }
+ return 'unknown';
+}
+// Helper: get color display text
+function getColorDisplayText(color) {
+ var idx = BALLOON_COLORS.indexOf(color);
+ if (idx === -1) return '';
+ var name = BALLOON_COLOR_NAMES[idx];
+ var display = '';
+ if (name === 'red') display = 'KIRMIZI';else if (name === 'blue') display = 'MAVİ';else if (name === 'green') display = 'YEŞİL';else if (name === 'yellow') display = 'SARI';else if (name === 'pink') display = 'PEMBE';
+ return display;
+}
+// Helper: set color indicator
+function setColorIndicator(color) {
+ colorTxt.setText('Patlat: ' + getColorDisplayText(color));
+ colorTxt.style.fill = '#' + color.toString(16).padStart(6, '0');
+}
+// Helper: find all connected balloons of the same color (DFS)
+function findConnectedBalloons(x, y, color) {
+ var visited = {};
+ var group = [];
+ function dfs(cx, cy) {
+ var key = cx + ',' + cy;
+ if (visited[key]) return;
+ if (cx < 0 || cy < 0 || cx >= GRID_COLS || cy >= GRID_ROWS) return;
+ var b = balloons[cx][cy];
+ if (!b || b.popped || b.color !== color) return;
+ visited[key] = true;
+ group.push(b);
+ // Check neighbors (up, down, left, right)
+ dfs(cx - 1, cy);
+ dfs(cx + 1, cy);
+ dfs(cx, cy - 1);
+ dfs(cx, cy + 1);
+ }
+ dfs(x, y);
+ return group;
+}
+// Helper: pick a new color (random, but must exist on board)
+function pickNewColor() {
+ // Find all colors still present
+ var present = {};
+ for (var i = 0; i < allBalloons.length; i++) {
+ var b = allBalloons[i];
+ if (!b.popped) present[b.color] = true;
+ }
+ var presentColors = [];
+ for (var i = 0; i < BALLOON_COLORS.length; i++) {
+ if (present[BALLOON_COLORS[i]]) presentColors.push(BALLOON_COLORS[i]);
+ }
+ if (presentColors.length === 0) {
+ // Win condition: all balloons popped
+ LK.showYouWin();
+ return;
+ }
+ // Pick random color
+ var idx = Math.floor(Math.random() * presentColors.length);
+ currentColor = presentColors[idx];
+ setColorIndicator(currentColor);
+}
+// Build the balloon grid
+function buildGrid() {
+ // Center grid
+ var offsetX = Math.floor((2048 - GRID_COLS * balloonSize) / 2) + balloonSize / 2;
+ var offsetY = Math.floor((2732 - GRID_ROWS * balloonSize) / 2) + balloonSize / 2;
+ balloons = [];
+ allBalloons = [];
+ for (var x = 0; x < GRID_COLS; x++) {
+ balloons[x] = [];
+ for (var y = 0; y < GRID_ROWS; y++) {
+ // Pick random color
+ var colorIdx = Math.floor(Math.random() * BALLOON_COLORS.length);
+ var color = BALLOON_COLORS[colorIdx];
+ var name = BALLOON_COLOR_NAMES[colorIdx];
+ var balloon = new Balloon();
+ balloon.color = color;
+ balloon.gridX = x;
+ balloon.gridY = y;
+ // Set asset to correct color
+ balloon.removeChildren();
+ balloon.attachAsset('balloon_' + name, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ balloon.x = offsetX + x * (balloonSize + balloonSpacing);
+ balloon.y = offsetY + y * (balloonSize + balloonSpacing);
+ balloons[x][y] = balloon;
+ allBalloons.push(balloon);
+ game.addChild(balloon);
+ }
+ }
+}
+// Reset game state
+function resetGame() {
+ LK.setScore(0);
+ scoreTxt.setText('0');
+ // Remove all balloons
+ for (var i = 0; i < allBalloons.length; i++) {
+ allBalloons[i].destroy();
+ }
+ buildGrid();
+ pickNewColor();
+}
+// Timer for color change
+var colorTimer = null;
+function startColorTimer() {
+ if (colorTimer) LK.clearInterval(colorTimer);
+ colorTimer = LK.setInterval(function () {
+ pickNewColor();
+ }, 3000);
+}
+// Start game
+resetGame();
+startColorTimer();
+// Game update (not much needed)
+game.update = function () {
+ // Check win condition
+ var remaining = 0;
+ for (var i = 0; i < allBalloons.length; i++) {
+ if (!allBalloons[i].popped) remaining++;
+ }
+ if (remaining === 0) {
+ LK.showYouWin();
+ }
+};
+// On game over or win, reset game
+game.onGameOver = function () {
+ resetGame();
+ startColorTimer();
+};
+game.onYouWin = function () {
+ resetGame();
+ startColorTimer();
+};
\ No newline at end of file