User prompt
Arka plan asetelikle
User prompt
oyuna arka plana git
User prompt
Varlıklarda arka plan oluştur.
User prompt
Davulcuyu büyütsün.
User prompt
Yapamazsın. Bir süre geçtikten sonra davulu çalabilen
User prompt
Davul her çaldığında, insanlar her zaman çıkabilsin dışarı.
User prompt
İnsanlar her zaman pencereden çıksın.
User prompt
İnsanlar her zaman pencereden çıkabilsin.
User prompt
Davulu her çaldığımda insanlar çıksın pencereye.
User prompt
Davulu bir sürü kez çaldığımda, davulu her çaldığımda insanlar çıksın.
User prompt
Bavulu ikinci, üçüncü, dördüncü, beşinci, altıncı, yedinci, sekizinci, dokuzuncu, onuncu kez çaldığında da insanlar çıksın.
User prompt
Her pencerenin arasına boşluk çiz.
User prompt
Davul çalınca bir sürü insan çıksın.
User prompt
İnsanlar davul çalınca çıksın.
User prompt
Davul çalınca bir anda bir sürükşe çıkabilsin.
User prompt
Binadan fazla kişi çıksın.
User prompt
Generate the first version of the source code of my game: Ritmik Pencere: Müzikli Bina.
Code edit (1 edits merged)
Please save this source code
User prompt
Ritmik Pencere: Müzikli Bina
Initial prompt
Bana bir müzik oyunu yap. Bir bina olsun, pencerelerinden insanlar çıksın. O insanlara dokunduğumuzda puanımız onar olarak artsın. Ve bir davulcu çalsın. O davulcuya dokunduğumuzda davulcu çalsın.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Drummer class: sits in front of building, can be tapped to play drum var Drummer = Container.expand(function () { var self = Container.call(this); self.scaleX = 1.5; self.scaleY = 1.5; // Drummer body var body = self.attachAsset('drummer', { anchorX: 0.5, anchorY: 1 }); // Drum var drum = self.attachAsset('drum', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -40 }); // Drumstick (left) var stickL = self.attachAsset('drumstick', { anchorX: 0.5, anchorY: 0.1, x: -40, y: -120, rotation: -0.3 }); // Drumstick (right) var stickR = self.attachAsset('drumstick', { anchorX: 0.5, anchorY: 0.1, x: 40, y: -120, rotation: 0.3 }); // Animate drum hit self.hit = function () { // Animate both sticks down and up tween(stickL, { rotation: -1.2, y: -60 }, { duration: 80, easing: tween.cubicIn, onFinish: function onFinish() { tween(stickL, { rotation: -0.3, y: -120 }, { duration: 120, easing: tween.cubicOut }); } }); tween(stickR, { rotation: 1.2, y: -60 }, { duration: 80, easing: tween.cubicIn, onFinish: function onFinish() { tween(stickR, { rotation: 0.3, y: -120 }, { duration: 120, easing: tween.cubicOut }); } }); // Animate drum scale tween(drum, { scaleY: 0.7 }, { duration: 60, easing: tween.linear, onFinish: function onFinish() { tween(drum, { scaleY: 1 }, { duration: 100, easing: tween.linear }); } }); }; // On tap: play drum sound and animate self.down = function (x, y, obj) { LK.getSound('drumhit').play(); self.hit(); // Track drum tap count globally if (typeof drumTapCount === "undefined") { drumTapCount = 0; } drumTapCount++; // Burst: spawn 8-12 people instantly on every drum tap if (typeof spawnPerson === "function" && typeof people !== "undefined") { // Always spawn a random number of people (8-12) on every drum tap var burstCount = 8 + Math.floor(Math.random() * 5); // 8,9,10,11,12 for (var i = 0; i < burstCount; i++) { spawnPerson(); } } }; return self; }); // Person class: appears in a window, can be tapped for points var Person = Container.expand(function () { var self = Container.call(this); // Attach person asset (random color) var colors = [0x3498db, 0xe74c3c, 0x2ecc71, 0xf1c40f, 0x9b59b6, 0x1abc9c]; var color = colors[Math.floor(Math.random() * colors.length)]; var personAsset = self.attachAsset('person', { anchorX: 0.5, anchorY: 0.5, tint: color }); // State: is this person already tapped? self.tapped = false; // Animate person popping up personAsset.scaleY = 0.1; tween(personAsset, { scaleY: 1 }, { duration: 200, easing: tween.bounceOut }); // On tap: collect points, animate out, destroy self.down = function (x, y, obj) { if (self.tapped) return; self.tapped = true; // Animate shrink and fade tween(personAsset, { scaleX: 0.1, scaleY: 0.1, alpha: 0 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { self.destroy(); } }); // Add points LK.setScore(LK.getScore() + 10); scoreTxt.setText(LK.getScore()); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x22223b }); /**** * Game Code ****/ // Sound: drum hit // Drumstick (rectangle, yellow) // Drum (ellipse, white) // Drummer (rectangle, brown) // Person (circle, random color) // Window (smaller rectangles for people to appear in) // Building (large rectangle) // Background asset (behind building) var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0, x: 2048 / 2, y: 0 }); game.addChild(background); // Centered building var building = LK.getAsset('building', { anchorX: 0.5, anchorY: 0, x: 2048 / 2, y: 180 }); game.addChild(building); // Window grid (positions for people to appear) var windowRows = 8; var windowCols = 6; var windowSpacingX = 170; var windowSpacingY = 220; var windowStartX = building.x - building.width / 2 + 160; var windowStartY = building.y + 120; var windowPositions = []; for (var row = 0; row < windowRows; row++) { for (var col = 0; col < windowCols; col++) { var wx = windowStartX + col * windowSpacingX; var wy = windowStartY + row * windowSpacingY; // Optionally, draw window frames (for visual) var win = LK.getAsset('window', { anchorX: 0.5, anchorY: 0.5, x: wx, y: wy }); game.addChild(win); windowPositions.push({ x: wx, y: wy }); } } // Draw vertical lines between each window column (except the last column) for (var col = 1; col < windowCols; col++) { var lineX = windowStartX + col * windowSpacingX - windowSpacingX / 2; var lineHeight = windowRows * windowSpacingY - windowSpacingY / 2; var line = LK.getAsset('window', { width: 10, height: lineHeight, color: 0x888888, shape: 'box', anchorX: 0.5, anchorY: 0, x: lineX, y: windowStartY }); game.addChild(line); } // Drummer in front of building, centered horizontally, near bottom var drummer = new Drummer(); drummer.x = 2048 / 2; drummer.y = building.y + building.height + 60; game.addChild(drummer); // Score text (top center, avoid top left 100x100) var scoreTxt = new Text2('0', { size: 120, fill: "#fff" }); scoreTxt.anchor.set(0.5, 0); // Track how many times the drum has been tapped var drumTapCount = 0; // Array to track current people var people = []; // Function to spawn a person in a random window function spawnPerson() { // Find available windows (not already occupied) var occupied = {}; for (var i = 0; i < people.length; i++) { occupied[people[i].windowIdx] = true; } var freeWindows = []; for (var i = 0; i < windowPositions.length; i++) { if (!occupied[i]) freeWindows.push(i); } // Always pick a random window, even if all are full var idx = Math.floor(Math.random() * windowPositions.length); // Animate out and destroy the person currently in that window, but do not remove from array here for (var i = people.length - 1; i >= 0; i--) { if (people[i].windowIdx === idx) { if (!people[i].destroyed) { people[i].tapped = true; tween(people[i].children[0], { scaleX: 0.1, scaleY: 0.1, alpha: 0 }, { duration: 200, easing: tween.easeIn, onFinish: function (p) { return function () { p.destroy(); }; }(people[i]) }); } break; } } var pos = windowPositions[idx]; // Create person var p = new Person(); p.x = pos.x; p.y = pos.y; p.windowIdx = idx; people.push(p); game.addChild(p); } // Remove destroyed people from array function cleanupPeople() { for (var i = people.length - 1; i >= 0; i--) { if (people[i].destroyed) { people.splice(i, 1); } } } // People now only spawn when drum is tapped, not periodically // Periodically clean up destroyed people var cleanupTimer = LK.setInterval(cleanupPeople, 500); // Remove people after a while if not tapped var personLifetimes = {}; game.update = function () { // Remove people after 3 seconds if not tapped for (var i = people.length - 1; i >= 0; i--) { var p = people[i]; if (!personLifetimes[p.windowIdx]) { personLifetimes[p.windowIdx] = LK.ticks; } if (!p.tapped && LK.ticks - personLifetimes[p.windowIdx] > 180) { // Animate out p.tapped = true; tween(p.children[0], { scaleX: 0.1, scaleY: 0.1, alpha: 0 }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { p.destroy(); } }); } if (p.destroyed) { delete personLifetimes[p.windowIdx]; } } }; // Touch handling: handled by LK via .down on Person and Drummer classes // No need for game.move, as all interaction is via tapping people or drummer // No music, pause, or game over logic needed per guidelines;
===================================================================
--- original.js
+++ change.js
@@ -170,19 +170,16 @@
// Drummer (rectangle, brown)
// Person (circle, random color)
// Window (smaller rectangles for people to appear in)
// Building (large rectangle)
-// Background behind building
-var backgroundRect = LK.getAsset('building', {
+// Background asset (behind building)
+var background = LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0,
x: 2048 / 2,
- y: 0,
- width: 2048,
- height: 2732,
- color: 0x87ceeb // light blue sky
+ y: 0
});
-game.addChild(backgroundRect);
+game.addChild(background);
// Centered building
var building = LK.getAsset('building', {
anchorX: 0.5,
anchorY: 0,
pencere. In-Game asset. 2d. High contrast. No shadows
meme kurbağa. In-Game asset. 2d. High contrast. No shadows
davul. In-Game asset. 2d. High contrast. No shadows
davul çubuğu. In-Game asset. 2d. High contrast. No shadows
kemal sunal. In-Game asset. 2d. High contrast. No shadows
Cami ve masmavi gokyuzu. In-Game asset. 2d. High contrast. No shadows