User prompt
Please fix the bug: 'frvr.Sound is not a constructor' in or related to this line: 'this.gunshotSound = new frvr.Sound("gunshot.mp3");' Line Number: 155
User prompt
Please fix the bug: 'frvr.Text is not a constructor' in or related to this line: 'this.scoreText = new frvr.Text("Score: 0", {' Line Number: 148
User prompt
Please fix the bug: 'this.addChild is not a function' in or related to this line: 'this.addChild(this.background);' Line Number: 138
User prompt
Please fix the bug: 'frvr.Sprite is not a constructor' in or related to this line: 'this.background = new frvr.Sprite("background.jpg");' Line Number: 124
User prompt
Please fix the bug: 'frvr.startGame is not a function' in or related to this line: 'frvr.startGame(BalloonShooterGame);' Line Number: 261
User prompt
Please fix the bug: 'TypeError is not a constructor' in or related to this line: 'throw new TypeError("Super expression must either be null or a function");' Line Number: 87
User prompt
Please fix the bug: 'frvr is not defined' in or related to this line: 'var BalloonShooterGame = /*#__PURE__*/function (_frvr$Game) {' Line Number: 104
Code edit (1 edits merged)
Please save this source code
User prompt
Balloon Shooter
Initial prompt
Title: Balloon Shooter Description: Step into the ultimate beachside fun with Balloon Shooter! šš« Pop colorful balloons floating in the air using your trusty beach gun. Aim, shoot, and score points as balloons drift across the sky. Watch out for special power-ups and obstacles like seagulls and strong winds! Can you become the top balloon shooter on the beach? šļø Features: ā Smooth shooting mechanics ā Colorful balloons with different point values ā Power-ups and obstacles for extra challenge ā Fun sound effects and beach-themed background music Ready to test your aim? Play now and pop your way to victory! šÆš„
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
function _typeof(o) {
"@babel/helpers - typeof";
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
return typeof o;
} : function (o) {
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
}, _typeof(o);
}
function _classCallCheck(a, n) {
if (!(a instanceof n)) {
throw new TypeError("Cannot call a class as a function");
}
}
function _defineProperties(e, r) {
for (var t = 0; t < r.length; t++) {
var o = r[t];
o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);
}
}
function _createClass(e, r, t) {
return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
writable: !1
}), e;
}
function _toPropertyKey(t) {
var i = _toPrimitive(t, "string");
return "symbol" == _typeof(i) ? i : i + "";
}
function _toPrimitive(t, r) {
if ("object" != _typeof(t) || !t) {
return t;
}
var e = t[Symbol.toPrimitive];
if (void 0 !== e) {
var i = e.call(t, r || "default");
if ("object" != _typeof(i)) {
return i;
}
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return ("string" === r ? String : Number)(t);
}
function _callSuper(t, o, e) {
return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));
}
function _possibleConstructorReturn(t, e) {
if (e && ("object" == _typeof(e) || "function" == typeof e)) {
return e;
}
if (void 0 !== e) {
throw new TypeError("Derived constructors may only return object or undefined");
}
return _assertThisInitialized(t);
}
function _assertThisInitialized(e) {
if (void 0 === e) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
return e;
}
function _isNativeReflectConstruct() {
try {
var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
} catch (t) {}
return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
return !!t;
})();
}
function _getPrototypeOf(t) {
return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
return t.__proto__ || Object.getPrototypeOf(t);
}, _getPrototypeOf(t);
}
function _inherits(t, e) {
if ("function" != typeof e && null !== e) {
throw new TypeError("Super expression must either be null or a function");
}
t.prototype = Object.create(e && e.prototype, {
constructor: {
value: t,
writable: !0,
configurable: !0
}
}), Object.defineProperty(t, "prototype", {
writable: !1
}), e && _setPrototypeOf(t, e);
}
function _setPrototypeOf(t, e) {
return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
return t.__proto__ = e, t;
}, _setPrototypeOf(t, e);
}
var frvr = {}; // Define frvr as an object
var BalloonShooterGame = /*#__PURE__*/function (_frvr$Game) {
function BalloonShooterGame() {
_classCallCheck(this, BalloonShooterGame);
return _callSuper(this, BalloonShooterGame, arguments);
}
_inherits(BalloonShooterGame, _frvr$Game);
return _createClass(BalloonShooterGame, [{
key: "init",
value: function init() {
var _this = this;
// Background
this.background = new frvr.Sprite("background.jpg");
this.addChild(this.background);
// Player Gun
this.gun = new frvr.Sprite("gun.png");
this.gun.position.set(250, 500);
this.addChild(this.gun);
// Score Display
this.score = 0;
this.scoreText = new frvr.Text("Score: 0", {
fontSize: 24,
fill: "#fff"
});
this.scoreText.position.set(10, 10);
this.addChild(this.scoreText);
// Sound Effects
this.gunshotSound = new frvr.Sound("gunshot.mp3");
this.popSound = new frvr.Sound("balloon_pop.mp3");
this.goldenBalloonSound = new frvr.Sound("golden_balloon.mp3");
this.spikyBalloonSound = new frvr.Sound("spiky_balloon.mp3");
this.explosionSound = new frvr.Sound("explosion.mp3");
this.gameOverSound = new frvr.Sound("game_over.mp3");
// Game Variables
this.bullets = [];
this.balloons = [];
this.obstacleHits = 0;
this.gameOver = false;
// Spawn Balloons Every 1 Second
this.setInterval(function () {
return _this.spawnBalloon();
}, 1000);
// Mouse Click to Shoot
this.onMouseDown(function (event) {
if (!_this.gameOver) {
_this.shootBullet(event.x);
}
});
}
}, {
key: "spawnBalloon",
value: function spawnBalloon() {
if (this.gameOver) {
return;
}
var balloon;
var randomType = Math.random();
if (randomType < 0.1) {
balloon = new frvr.Sprite("golden_balloon.png"); // 10% chance
balloon.isSpecial = true;
} else if (randomType < 0.2) {
balloon = new frvr.Sprite("spiky_balloon.png"); // 10% chance
balloon.isObstacle = true;
} else {
balloon = new frvr.Sprite("balloon.png"); // Normal balloon
}
balloon.position.set(Math.random() * 500, 600);
balloon.speedY = -2 - this.score / 50;
balloon.speedX = Math.random() > 0.5 ? 1.5 : -1.5;
this.balloons.push(balloon);
this.addChild(balloon);
}
}, {
key: "shootBullet",
value: function shootBullet(x) {
var bullet = new frvr.Sprite("bullet.png");
bullet.position.set(x, 550);
bullet.speed = -8;
this.bullets.push(bullet);
this.addChild(bullet);
this.gunshotSound.play(); // Play gunshot sound
}
}, {
key: "update",
value: function update(deltaTime) {
if (this.gameOver) {
return;
}
// Move Bullets
this.bullets.forEach(function (bullet) {
bullet.position.y += bullet.speed;
});
// Move Balloons
this.balloons.forEach(function (balloon) {
balloon.position.y += balloon.speedY;
balloon.position.x += balloon.speedX;
});
// Check for Collisions
this.checkCollisions();
}
}, {
key: "checkCollisions",
value: function checkCollisions() {
var _this2 = this;
this.bullets.forEach(function (bullet, bulletIndex) {
_this2.balloons.forEach(function (balloon, balloonIndex) {
if (_this2.isColliding(bullet, balloon)) {
if (balloon.isSpecial) {
_this2.goldenBalloonSound.play();
_this2.clearAllBalloons();
_this2.score += 50; // Bonus points
} else if (balloon.isObstacle) {
_this2.spikyBalloonSound.play();
_this2.obstacleHits += 1;
if (_this2.obstacleHits >= 3) {
_this2.gameOverScreen();
}
} else {
_this2.popSound.play();
_this2.score += 10;
}
// Update Score Display
_this2.scoreText.text = "Score: ".concat(_this2.score);
// Remove balloon and bullet
_this2.removeChild(bullet);
_this2.removeChild(balloon);
_this2.bullets.splice(bulletIndex, 1);
_this2.balloons.splice(balloonIndex, 1);
}
});
});
}
}, {
key: "clearAllBalloons",
value: function clearAllBalloons() {
var _this3 = this;
this.balloons.forEach(function (balloon) {
_this3.removeChild(balloon);
});
this.balloons = [];
}
}, {
key: "gameOverScreen",
value: function gameOverScreen() {
this.gameOverSound.play();
this.gameOver = true;
var gameOverText = new frvr.Text("Game Over!", {
fontSize: 48,
fill: 0xFF0000
});
gameOverText.position.set(200, 300);
this.addChild(gameOverText);
}
}]);
}(frvr.Game);
frvr.startGame(BalloonShooterGame); ===================================================================
--- original.js
+++ change.js
@@ -1,570 +1,258 @@
/****
-* Plugins
-****/
-var tween = LK.import("@upit/tween.v1");
-var storage = LK.import("@upit/storage.v1", {
- highScore: 0
-});
-
-/****
-* Classes
-****/
-var Balloon = Container.expand(function (type) {
- var self = Container.call(this);
- // Define balloon types and properties
- var types = {
- 'red': {
- color: 'balloon_red',
- points: 10,
- speed: 2
- },
- 'blue': {
- color: 'balloon_blue',
- points: 20,
- speed: 3
- },
- 'yellow': {
- color: 'balloon_yellow',
- points: 30,
- speed: 4
- },
- 'green': {
- color: 'balloon_green',
- points: 50,
- speed: 5
- }
- };
- var balloonType = types[type] || types['red'];
- self.type = type;
- self.points = balloonType.points;
- self.baseSpeed = balloonType.speed;
- self.speed = self.baseSpeed;
- self.active = true;
- // Create balloon body
- var balloonBody = self.attachAsset(balloonType.color, {
- anchorX: 0.5,
- anchorY: 0.5
- });
- // Create balloon string
- var balloonString = self.attachAsset('balloon_string', {
- anchorX: 0.5,
- anchorY: 0,
- y: balloonBody.height / 2
- });
- // Add a small random horizontal drift
- self.driftSpeed = (Math.random() * 2 - 1) * 0.5;
- self.update = function () {
- if (self.active) {
- self.y -= self.speed;
- self.x += self.driftSpeed;
- // Check if balloon is off-screen
- if (self.y < -200) {
- self.active = false;
- }
- }
- };
- self.pop = function () {
- if (self.active) {
- self.active = false;
- LK.getSound('pop').play();
- // Visual pop effect
- tween(balloonBody, {
- scaleX: 1.5,
- scaleY: 1.5,
- alpha: 0
- }, {
- duration: 300,
- easing: tween.easeOut,
- onFinish: function onFinish() {
- // Nothing needed here as cleanup happens in game loop
- }
- });
- // Make string fall
- tween(balloonString, {
- rotation: Math.PI / 4,
- alpha: 0
- }, {
- duration: 500,
- easing: tween.easeIn
- });
- return self.points;
- }
- return 0;
- };
- return self;
-});
-var Cloud = Container.expand(function () {
- var self = Container.call(this);
- var cloudGraphics = self.attachAsset('cloud', {
- anchorX: 0.5,
- anchorY: 0.5,
- alpha: 0.8
- });
- self.speed = 0.3 + Math.random() * 0.3;
- self.active = true;
- // Make clouds different sizes
- var scale = 0.8 + Math.random() * 1.2;
- cloudGraphics.scaleX = scale;
- cloudGraphics.scaleY = scale * 0.7;
- self.update = function () {
- if (self.active) {
- self.x += self.speed;
- // Loop cloud back to left side when it goes off screen
- if (self.x > 2200) {
- self.x = -200;
- self.y = 200 + Math.random() * 300;
- }
- }
- };
- return self;
-});
-var PowerUp = Container.expand(function () {
- var self = Container.call(this);
- var powerupGraphics = self.attachAsset('powerup', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- self.speed = 2;
- self.active = true;
- self.type = Math.random() > 0.5 ? 'rapid' : 'spread';
- // Set different color based on powerup type
- if (self.type === 'rapid') {
- powerupGraphics.tint = 0xff0000;
- } else {
- powerupGraphics.tint = 0x00ff00;
- }
- // Animate the powerup
- tween(powerupGraphics, {
- rotation: Math.PI * 2
- }, {
- duration: 3000,
- easing: tween.linear
- });
- self.update = function () {
- if (self.active) {
- self.y -= self.speed;
- // Check if powerup is off-screen
- if (self.y < -100) {
- self.active = false;
- }
- }
- };
- self.collect = function () {
- if (self.active) {
- self.active = false;
- LK.getSound('powerup_collect').play();
- // Visual collect effect
- tween(powerupGraphics, {
- scaleX: 2,
- scaleY: 2,
- alpha: 0
- }, {
- duration: 300,
- easing: tween.easeOut
- });
- return self.type;
- }
- return null;
- };
- return self;
-});
-var Seagull = Container.expand(function () {
- var self = Container.call(this);
- var seagullGraphics = self.attachAsset('seagull', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- self.speed = 4 + Math.random() * 2;
- self.active = true;
- self.direction = Math.random() > 0.5 ? 1 : -1;
- // Set initial direction
- if (self.direction < 0) {
- seagullGraphics.scaleX = -1;
- }
- self.update = function () {
- if (self.active) {
- self.x += self.speed * self.direction;
- // Check if seagull is off-screen
- if (self.direction > 0 && self.x > 2100 || self.direction < 0 && self.x < -50) {
- self.active = false;
- }
- }
- };
- return self;
-});
-var WaterBullet = Container.expand(function () {
- var self = Container.call(this);
- var bulletGraphics = self.attachAsset('bullet', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- self.speed = -15;
- self.active = true;
- self.update = function () {
- if (self.active) {
- self.y += self.speed;
- // Check if bullet is off-screen
- if (self.y < -50) {
- self.active = false;
- }
- }
- };
- return self;
-});
-var WaterGun = Container.expand(function () {
- var self = Container.call(this);
- var gunGraphics = self.attachAsset('watergun', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- self.canShoot = true;
- self.cooldown = 500; // ms between shots
- self.powerupActive = false;
- self.powerupType = null;
- self.powerupTimer = null;
- self.shoot = function () {
- if (!self.canShoot) {
- return null;
- }
- LK.getSound('shoot').play();
- var bullets = [];
- // Create main bullet
- var bullet = new WaterBullet();
- bullet.x = self.x;
- bullet.y = self.y - 30;
- bullets.push(bullet);
- // If spread powerup is active, create side bullets
- if (self.powerupActive && self.powerupType === 'spread') {
- var bulletLeft = new WaterBullet();
- bulletLeft.x = self.x - 30;
- bulletLeft.y = self.y - 20;
- bullets.push(bulletLeft);
- var bulletRight = new WaterBullet();
- bulletRight.x = self.x + 30;
- bulletRight.y = self.y - 20;
- bullets.push(bulletRight);
- }
- // Set cooldown unless rapid fire powerup is active
- if (!(self.powerupActive && self.powerupType === 'rapid')) {
- self.canShoot = false;
- LK.setTimeout(function () {
- self.canShoot = true;
- }, self.cooldown);
- }
- return bullets;
- };
- self.activatePowerup = function (type) {
- // Clear existing powerup if any
- if (self.powerupTimer) {
- LK.clearTimeout(self.powerupTimer);
- }
- self.powerupActive = true;
- self.powerupType = type;
- // Visual feedback
- tween(gunGraphics, {
- tint: type === 'rapid' ? 0xff0000 : 0x00ff00
- }, {
- duration: 300,
- easing: tween.easeOut
- });
- // Set powerup duration
- self.powerupTimer = LK.setTimeout(function () {
- self.powerupActive = false;
- self.powerupType = null;
- // Reset gun appearance
- tween(gunGraphics, {
- tint: 0x2299cc
- }, {
- duration: 300,
- easing: tween.easeIn
- });
- }, 8000); // 8 seconds
- };
- return self;
-});
-
-/****
* Initialize Game
****/
var game = new LK.Game({
- backgroundColor: 0x99ddff
+ backgroundColor: 0x000000
});
/****
* Game Code
****/
-// Game variables
-var score = 0;
-var waterGun;
-var bullets = [];
-var balloons = [];
-var seagulls = [];
-var powerups = [];
-var clouds = [];
-var windEffect = 0;
-var gameActive = true;
-var lastBalloonSpawn = 0;
-var lastSeagullSpawn = 0;
-var lastPowerupSpawn = 0;
-var balloonSpawnRate = 1500; // ms
-var seagullSpawnRate = 5000; // ms
-var powerupSpawnRate = 10000; // ms
-var touchPoint = null;
-// Background elements
-var skyBackground = game.addChild(LK.getAsset('sky', {
- anchorX: 0,
- anchorY: 0,
- x: 0,
- y: 0
-}));
-// Add some clouds
-for (var i = 0; i < 5; i++) {
- var cloud = new Cloud();
- cloud.x = Math.random() * 2048;
- cloud.y = 200 + Math.random() * 300;
- clouds.push(cloud);
- game.addChild(cloud);
+function _typeof(o) {
+ "@babel/helpers - typeof";
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
+ return typeof o;
+ } : function (o) {
+ return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
+ }, _typeof(o);
}
-// Water
-var water = game.addChild(LK.getAsset('water', {
- anchorX: 0,
- anchorY: 1,
- x: 0,
- y: 2732
-}));
-// Sand
-var sand = game.addChild(LK.getAsset('sand', {
- anchorX: 0,
- anchorY: 0,
- x: 0,
- y: 2732 - water.height
-}));
-// Create water gun
-waterGun = new WaterGun();
-waterGun.x = 1024;
-waterGun.y = 2732 - 200; // Position above the sand
-game.addChild(waterGun);
-// UI elements
-var scoreTxt = new Text2('Score: 0', {
- size: 50,
- fill: 0xFFFFFF
-});
-scoreTxt.anchor.set(0, 0);
-LK.gui.topRight.addChild(scoreTxt);
-scoreTxt.x = -200; // Offset from right edge
-var highScoreTxt = new Text2('High Score: ' + storage.highScore, {
- size: 40,
- fill: 0xFFFFFF
-});
-highScoreTxt.anchor.set(0, 0);
-LK.gui.topRight.addChild(highScoreTxt);
-highScoreTxt.x = -200;
-highScoreTxt.y = 60;
-// Wind indicator
-var windTxt = new Text2('Wind: 0', {
- size: 40,
- fill: 0xFFFFFF
-});
-windTxt.anchor.set(0, 0);
-LK.gui.top.addChild(windTxt);
-windTxt.y = 60;
-// Game functions
-function createBalloon() {
- var types = ['red', 'blue', 'yellow', 'green'];
- // Weight probabilities toward easier balloons
- var type = types[Math.floor(Math.pow(Math.random(), 1.5) * types.length)];
- var balloon = new Balloon(type);
- balloon.x = 200 + Math.random() * (2048 - 400);
- balloon.y = 2732 + 100;
- // Apply wind effect to drift speed
- balloon.driftSpeed += windEffect;
- balloons.push(balloon);
- game.addChild(balloon);
+function _classCallCheck(a, n) {
+ if (!(a instanceof n)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
}
-function createSeagull() {
- var seagull = new Seagull();
- // Start from either left or right edge based on direction
- seagull.x = seagull.direction > 0 ? -50 : 2100;
- seagull.y = 400 + Math.random() * 600;
- seagulls.push(seagull);
- game.addChild(seagull);
+function _defineProperties(e, r) {
+ for (var t = 0; t < r.length; t++) {
+ var o = r[t];
+ o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o);
+ }
}
-function createPowerup() {
- var powerup = new PowerUp();
- powerup.x = 200 + Math.random() * (2048 - 400);
- powerup.y = 2732 + 50;
- powerups.push(powerup);
- game.addChild(powerup);
+function _createClass(e, r, t) {
+ return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", {
+ writable: !1
+ }), e;
}
-function checkCollisions() {
- // Check bullet-balloon collisions
- for (var i = bullets.length - 1; i >= 0; i--) {
- var bullet = bullets[i];
- if (!bullet.active) {
- continue;
- }
- for (var j = balloons.length - 1; j >= 0; j--) {
- var balloon = balloons[j];
- if (!balloon.active) {
- continue;
- }
- if (bullet.intersects(balloon)) {
- // Score points for popping balloon
- var points = balloon.pop();
- score += points;
- scoreTxt.setText('Score: ' + score);
- // Update high score if needed
- if (score > storage.highScore) {
- storage.highScore = score;
- highScoreTxt.setText('High Score: ' + storage.highScore);
- }
- // Deactivate bullet
- bullet.active = false;
- break;
- }
- }
- // Check bullet-seagull collisions (no points, but deactivates bullet)
- for (var k = seagulls.length - 1; k >= 0; k--) {
- var seagull = seagulls[k];
- if (!seagull.active || !bullet.active) {
- continue;
- }
- if (bullet.intersects(seagull)) {
- bullet.active = false;
- break;
- }
- }
+function _toPropertyKey(t) {
+ var i = _toPrimitive(t, "string");
+ return "symbol" == _typeof(i) ? i : i + "";
+}
+function _toPrimitive(t, r) {
+ if ("object" != _typeof(t) || !t) {
+ return t;
}
- // Check watergun-powerup collisions
- for (var m = powerups.length - 1; m >= 0; m--) {
- var powerup = powerups[m];
- if (!powerup.active) {
- continue;
+ var e = t[Symbol.toPrimitive];
+ if (void 0 !== e) {
+ var i = e.call(t, r || "default");
+ if ("object" != _typeof(i)) {
+ return i;
}
- if (waterGun.intersects(powerup)) {
- var powerupType = powerup.collect();
- if (powerupType) {
- waterGun.activatePowerup(powerupType);
- }
- }
+ throw new TypeError("@@toPrimitive must return a primitive value.");
}
+ return ("string" === r ? String : Number)(t);
}
-function updateWind() {
- // Change wind every 10 seconds
- if (LK.ticks % 600 === 0) {
- windEffect = (Math.random() * 2 - 1) * 1.5;
- windTxt.setText('Wind: ' + (windEffect > 0 ? 'ā' : 'ā').repeat(Math.abs(Math.round(windEffect))));
- }
+function _callSuper(t, o, e) {
+ return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e));
}
-function cleanupInactiveObjects() {
- // Clean up inactive bullets
- for (var i = bullets.length - 1; i >= 0; i--) {
- if (!bullets[i].active) {
- bullets[i].destroy();
- bullets.splice(i, 1);
- }
+function _possibleConstructorReturn(t, e) {
+ if (e && ("object" == _typeof(e) || "function" == typeof e)) {
+ return e;
}
- // Clean up inactive balloons
- for (var j = balloons.length - 1; j >= 0; j--) {
- if (!balloons[j].active) {
- balloons[j].destroy();
- balloons.splice(j, 1);
- }
+ if (void 0 !== e) {
+ throw new TypeError("Derived constructors may only return object or undefined");
}
- // Clean up inactive seagulls
- for (var k = seagulls.length - 1; k >= 0; k--) {
- if (!seagulls[k].active) {
- seagulls[k].destroy();
- seagulls.splice(k, 1);
- }
- }
- // Clean up inactive powerups
- for (var m = powerups.length - 1; m >= 0; m--) {
- if (!powerups[m].active) {
- powerups[m].destroy();
- powerups.splice(m, 1);
- }
- }
+ return _assertThisInitialized(t);
}
-function handleTouch(x, y) {
- // Move water gun to touch position (with limits)
- waterGun.x = Math.max(100, Math.min(2048 - 100, x));
- // Shoot water
- var newBullets = waterGun.shoot();
- if (newBullets) {
- for (var i = 0; i < newBullets.length; i++) {
- game.addChild(newBullets[i]);
- bullets.push(newBullets[i]);
- }
+function _assertThisInitialized(e) {
+ if (void 0 === e) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}
+ return e;
}
-// Touch events
-game.down = function (x, y) {
- touchPoint = {
- x: x,
- y: y
- };
- handleTouch(x, y);
-};
-game.move = function (x, y) {
- if (touchPoint) {
- touchPoint = {
- x: x,
- y: y
- };
- handleTouch(x, y);
+function _isNativeReflectConstruct() {
+ try {
+ var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ } catch (t) {}
+ return (_isNativeReflectConstruct = function _isNativeReflectConstruct() {
+ return !!t;
+ })();
+}
+function _getPrototypeOf(t) {
+ return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) {
+ return t.__proto__ || Object.getPrototypeOf(t);
+ }, _getPrototypeOf(t);
+}
+function _inherits(t, e) {
+ if ("function" != typeof e && null !== e) {
+ throw new TypeError("Super expression must either be null or a function");
}
-};
-game.up = function () {
- touchPoint = null;
-};
-// Main game loop
-game.update = function () {
- if (!gameActive) {
- return;
- }
- // Spawn objects based on time
- var currentTime = LK.ticks * (1000 / 60); // Convert ticks to milliseconds
- // Spawn balloons
- if (currentTime - lastBalloonSpawn > balloonSpawnRate) {
- createBalloon();
- lastBalloonSpawn = currentTime;
- // Gradually increase balloon spawn rate
- balloonSpawnRate = Math.max(700, balloonSpawnRate - 10);
- }
- // Spawn seagulls
- if (currentTime - lastSeagullSpawn > seagullSpawnRate) {
- createSeagull();
- lastSeagullSpawn = currentTime;
- }
- // Spawn powerups
- if (currentTime - lastPowerupSpawn > powerupSpawnRate) {
- createPowerup();
- lastPowerupSpawn = currentTime;
- }
- // Update wind
- updateWind();
- // Check for collisions
- checkCollisions();
- // Clean up inactive objects
- cleanupInactiveObjects();
- // Shooting if touch is held
- if (touchPoint && LK.ticks % 10 === 0 && waterGun.powerupActive && waterGun.powerupType === 'rapid') {
- handleTouch(touchPoint.x, touchPoint.y);
- }
- // Game over condition: If too many balloons escape
- // Count escaped balloons (moved off the top of the screen)
- var escapedCount = 0;
- for (var i = 0; i < balloons.length; i++) {
- if (!balloons[i].active && balloons[i].y < 0) {
- escapedCount++;
+ t.prototype = Object.create(e && e.prototype, {
+ constructor: {
+ value: t,
+ writable: !0,
+ configurable: !0
}
+ }), Object.defineProperty(t, "prototype", {
+ writable: !1
+ }), e && _setPrototypeOf(t, e);
+}
+function _setPrototypeOf(t, e) {
+ return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) {
+ return t.__proto__ = e, t;
+ }, _setPrototypeOf(t, e);
+}
+var frvr = {}; // Define frvr as an object
+var BalloonShooterGame = /*#__PURE__*/function (_frvr$Game) {
+ function BalloonShooterGame() {
+ _classCallCheck(this, BalloonShooterGame);
+ return _callSuper(this, BalloonShooterGame, arguments);
}
- // If score reaches 500, player wins
- if (score >= 500) {
- gameActive = false;
- LK.showYouWin();
- }
-};
-// Start background music
-LK.playMusic('beach_music');
\ No newline at end of file
+ _inherits(BalloonShooterGame, _frvr$Game);
+ return _createClass(BalloonShooterGame, [{
+ key: "init",
+ value: function init() {
+ var _this = this;
+ // Background
+ this.background = new frvr.Sprite("background.jpg");
+ this.addChild(this.background);
+ // Player Gun
+ this.gun = new frvr.Sprite("gun.png");
+ this.gun.position.set(250, 500);
+ this.addChild(this.gun);
+ // Score Display
+ this.score = 0;
+ this.scoreText = new frvr.Text("Score: 0", {
+ fontSize: 24,
+ fill: "#fff"
+ });
+ this.scoreText.position.set(10, 10);
+ this.addChild(this.scoreText);
+ // Sound Effects
+ this.gunshotSound = new frvr.Sound("gunshot.mp3");
+ this.popSound = new frvr.Sound("balloon_pop.mp3");
+ this.goldenBalloonSound = new frvr.Sound("golden_balloon.mp3");
+ this.spikyBalloonSound = new frvr.Sound("spiky_balloon.mp3");
+ this.explosionSound = new frvr.Sound("explosion.mp3");
+ this.gameOverSound = new frvr.Sound("game_over.mp3");
+ // Game Variables
+ this.bullets = [];
+ this.balloons = [];
+ this.obstacleHits = 0;
+ this.gameOver = false;
+ // Spawn Balloons Every 1 Second
+ this.setInterval(function () {
+ return _this.spawnBalloon();
+ }, 1000);
+ // Mouse Click to Shoot
+ this.onMouseDown(function (event) {
+ if (!_this.gameOver) {
+ _this.shootBullet(event.x);
+ }
+ });
+ }
+ }, {
+ key: "spawnBalloon",
+ value: function spawnBalloon() {
+ if (this.gameOver) {
+ return;
+ }
+ var balloon;
+ var randomType = Math.random();
+ if (randomType < 0.1) {
+ balloon = new frvr.Sprite("golden_balloon.png"); // 10% chance
+ balloon.isSpecial = true;
+ } else if (randomType < 0.2) {
+ balloon = new frvr.Sprite("spiky_balloon.png"); // 10% chance
+ balloon.isObstacle = true;
+ } else {
+ balloon = new frvr.Sprite("balloon.png"); // Normal balloon
+ }
+ balloon.position.set(Math.random() * 500, 600);
+ balloon.speedY = -2 - this.score / 50;
+ balloon.speedX = Math.random() > 0.5 ? 1.5 : -1.5;
+ this.balloons.push(balloon);
+ this.addChild(balloon);
+ }
+ }, {
+ key: "shootBullet",
+ value: function shootBullet(x) {
+ var bullet = new frvr.Sprite("bullet.png");
+ bullet.position.set(x, 550);
+ bullet.speed = -8;
+ this.bullets.push(bullet);
+ this.addChild(bullet);
+ this.gunshotSound.play(); // Play gunshot sound
+ }
+ }, {
+ key: "update",
+ value: function update(deltaTime) {
+ if (this.gameOver) {
+ return;
+ }
+ // Move Bullets
+ this.bullets.forEach(function (bullet) {
+ bullet.position.y += bullet.speed;
+ });
+ // Move Balloons
+ this.balloons.forEach(function (balloon) {
+ balloon.position.y += balloon.speedY;
+ balloon.position.x += balloon.speedX;
+ });
+ // Check for Collisions
+ this.checkCollisions();
+ }
+ }, {
+ key: "checkCollisions",
+ value: function checkCollisions() {
+ var _this2 = this;
+ this.bullets.forEach(function (bullet, bulletIndex) {
+ _this2.balloons.forEach(function (balloon, balloonIndex) {
+ if (_this2.isColliding(bullet, balloon)) {
+ if (balloon.isSpecial) {
+ _this2.goldenBalloonSound.play();
+ _this2.clearAllBalloons();
+ _this2.score += 50; // Bonus points
+ } else if (balloon.isObstacle) {
+ _this2.spikyBalloonSound.play();
+ _this2.obstacleHits += 1;
+ if (_this2.obstacleHits >= 3) {
+ _this2.gameOverScreen();
+ }
+ } else {
+ _this2.popSound.play();
+ _this2.score += 10;
+ }
+ // Update Score Display
+ _this2.scoreText.text = "Score: ".concat(_this2.score);
+ // Remove balloon and bullet
+ _this2.removeChild(bullet);
+ _this2.removeChild(balloon);
+ _this2.bullets.splice(bulletIndex, 1);
+ _this2.balloons.splice(balloonIndex, 1);
+ }
+ });
+ });
+ }
+ }, {
+ key: "clearAllBalloons",
+ value: function clearAllBalloons() {
+ var _this3 = this;
+ this.balloons.forEach(function (balloon) {
+ _this3.removeChild(balloon);
+ });
+ this.balloons = [];
+ }
+ }, {
+ key: "gameOverScreen",
+ value: function gameOverScreen() {
+ this.gameOverSound.play();
+ this.gameOver = true;
+ var gameOverText = new frvr.Text("Game Over!", {
+ fontSize: 48,
+ fill: 0xFF0000
+ });
+ gameOverText.position.set(200, 300);
+ this.addChild(gameOverText);
+ }
+ }]);
+}(frvr.Game);
+frvr.startGame(BalloonShooterGame);
\ No newline at end of file
A soft gradient sky transitioning from light blue to white, with subtle fluffy clouds scattered across. The style should be cartoonish and visually appealing.". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
A glowing, floating power-up icon shaped like a lightning bolt, rotating in mid-air. Colors include blue, green, and red variants.". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
A cartoon-style toy gun with a futuristic design, mainly blue with white and black details, a large trigger, and a barrel that shoots darts.". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
A cartoon-style seagull in mid-flight, white feathers with a light gray beak and wings slightly spread out. Expressions should be fun and mischievous.". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows