/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Fighter = Container.expand(function (isPlayer) { var self = Container.call(this); self.isPlayer = isPlayer || false; self.maxHealth = 100; self.health = self.maxHealth; self.isBlocking = false; self.isAttacking = false; self.attackCooldown = 0; self.comboCount = 0; self.comboTimer = 0; var fighterGraphics = self.attachAsset(self.isPlayer ? 'player' : 'enemy', { anchorX: 0.5, anchorY: 1.0 }); self.takeDamage = function (damage) { if (self.isBlocking) { damage = Math.floor(damage * 0.3); LK.getSound('block').play(); } else { LK.getSound('hit').play(); LK.effects.flashObject(self, 0xff0000, 300); } self.health = Math.max(0, self.health - damage); return self.health <= 0; }; self.punch = function () { if (self.attackCooldown > 0 || self.isAttacking) return false; self.isAttacking = true; self.attackCooldown = 30; self.comboCount++; self.comboTimer = 60; LK.getSound('punch').play(); var originalX = self.x; var moveDistance = self.isPlayer ? 50 : -50; tween(self, { x: originalX + moveDistance }, { duration: 150, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { x: originalX }, { duration: 150, easing: tween.easeIn, onFinish: function onFinish() { self.isAttacking = false; } }); } }); return true; }; self.kick = function () { if (self.attackCooldown > 0 || self.isAttacking) return false; self.isAttacking = true; self.attackCooldown = 45; self.comboCount++; self.comboTimer = 60; LK.getSound('kick').play(); var originalY = self.y; tween(self, { y: originalY - 30 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { y: originalY }, { duration: 200, easing: tween.easeIn, onFinish: function onFinish() { self.isAttacking = false; } }); } }); return true; }; self.block = function (blocking) { self.isBlocking = blocking; fighterGraphics.tint = blocking ? 0x888888 : 0xffffff; }; self.update = function () { if (self.attackCooldown > 0) { self.attackCooldown--; } if (self.comboTimer > 0) { self.comboTimer--; if (self.comboTimer <= 0) { self.comboCount = 0; } } }; return self; }); var HealthBar = Container.expand(function (fighter, isPlayer) { var self = Container.call(this); self.fighter = fighter; self.isPlayer = isPlayer; var bgBar = self.attachAsset('healthBarBg', { anchorX: isPlayer ? 0 : 1, anchorY: 0 }); var healthBar = self.attachAsset('healthBar', { anchorX: isPlayer ? 0 : 1, anchorY: 0 }); healthBar.x = isPlayer ? 2 : -2; healthBar.y = 2; self.update = function () { var healthPercent = self.fighter.health / self.fighter.maxHealth; healthBar.width = 400 * healthPercent; if (healthPercent > 0.6) { healthBar.tint = 0x00cc00; } else if (healthPercent > 0.3) { healthBar.tint = 0xcccc00; } else { healthBar.tint = 0xcc0000; } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ // Game state variables var gameState = 'playing'; var playerWins = 0; var enemyWins = 0; var roundsToWin = 2; var aiDifficulty = 1; var aiTimer = 0; var aiAction = 'idle'; var blockHeld = false; var lastTapTime = 0; var tapCount = 0; // Create ground var ground = game.addChild(LK.getAsset('ground', { anchorX: 0.5, anchorY: 0 })); ground.x = 2048 / 2; ground.y = 2632; // Create fighters var player = game.addChild(new Fighter(true)); player.x = 400; player.y = 2632; var enemy = game.addChild(new Fighter(false)); enemy.x = 1648; enemy.y = 2632; // Create health bars var playerHealthBar = LK.gui.topLeft.addChild(new HealthBar(player, true)); playerHealthBar.x = 50; playerHealthBar.y = 150; var enemyHealthBar = LK.gui.topRight.addChild(new HealthBar(enemy, false)); enemyHealthBar.x = -50; enemyHealthBar.y = 150; // Create invisible control areas var punchArea = game.addChild(LK.getAsset('punchArea', { anchorX: 0, anchorY: 0 })); punchArea.x = 0; punchArea.y = 300; punchArea.alpha = 0; var kickArea = game.addChild(LK.getAsset('kickArea', { anchorX: 0, anchorY: 0 })); kickArea.x = 0; kickArea.y = 1500; kickArea.alpha = 0; // Score display var scoreText = new Text2('Round 1 - Fight!', { size: 80, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); scoreText.y = 50; // Combat functions function checkCombat() { var distance = Math.abs(player.x - enemy.x); var attackRange = 170; if (distance < attackRange && player.isAttacking && !enemy.isBlocking) { var damage = player.comboCount >= 3 ? 25 : 15; var enemyDead = enemy.takeDamage(damage); if (enemyDead) { endRound('player'); } } if (distance < attackRange && enemy.isAttacking && !player.isBlocking) { var damage = 12 + aiDifficulty * 3; var playerDead = player.takeDamage(damage); if (playerDead) { endRound('enemy'); } } } function endRound(winner) { if (gameState !== 'playing') return; gameState = 'roundEnd'; if (winner === 'player') { playerWins++; LK.setScore(LK.getScore() + 100); scoreText.setText('You Win Round ' + (playerWins + enemyWins) + '!'); } else { enemyWins++; scoreText.setText('Enemy Wins Round ' + (playerWins + enemyWins) + '!'); } LK.setTimeout(function () { if (playerWins >= roundsToWin) { LK.setScore(LK.getScore() + 500); aiDifficulty++; startNewMatch(); } else if (enemyWins >= roundsToWin) { LK.showGameOver(); } else { startNewRound(); } }, 2000); } function startNewRound() { player.health = player.maxHealth; enemy.health = enemy.maxHealth; player.x = 400; enemy.x = 1648; player.block(false); enemy.block(false); gameState = 'playing'; scoreText.setText('Round ' + (playerWins + enemyWins + 1) + ' - Fight!'); } function startNewMatch() { playerWins = 0; enemyWins = 0; startNewRound(); scoreText.setText('New Opponent! Round 1 - Fight!'); } function updateAI() { if (gameState !== 'playing') return; aiTimer++; var distance = Math.abs(player.x - enemy.x); var reactionTime = Math.max(5, 30 - aiDifficulty * 5); if (aiTimer >= reactionTime) { aiTimer = 0; if (player.isAttacking && distance < 200) { enemy.block(true); aiAction = 'block'; } else if (distance < 170 && Math.random() < 0.3 + aiDifficulty * 0.1) { enemy.block(false); if (Math.random() < 0.6) { enemy.punch(); } else { enemy.kick(); } aiAction = 'attack'; } else { enemy.block(false); aiAction = 'idle'; } } } // Touch controls punchArea.down = function (x, y, obj) { if (gameState !== 'playing') return; var currentTime = LK.ticks; if (currentTime - lastTapTime < 20) { tapCount++; } else { tapCount = 1; } lastTapTime = currentTime; player.punch(); }; kickArea.down = function (x, y, obj) { if (gameState !== 'playing') return; var currentTime = LK.ticks; if (currentTime - lastTapTime < 20) { tapCount++; } else { tapCount = 1; } lastTapTime = currentTime; player.kick(); }; game.down = function (x, y, obj) { if (gameState !== 'playing') return; blockHeld = true; player.block(true); }; game.up = function (x, y, obj) { if (gameState !== 'playing') return; blockHeld = false; player.block(false); }; // Main game loop game.update = function () { if (gameState !== 'playing') return; updateAI(); checkCombat(); // Reset tap count after delay if (LK.ticks - lastTapTime > 60) { tapCount = 0; } };
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,323 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Fighter = Container.expand(function (isPlayer) {
+ var self = Container.call(this);
+ self.isPlayer = isPlayer || false;
+ self.maxHealth = 100;
+ self.health = self.maxHealth;
+ self.isBlocking = false;
+ self.isAttacking = false;
+ self.attackCooldown = 0;
+ self.comboCount = 0;
+ self.comboTimer = 0;
+ var fighterGraphics = self.attachAsset(self.isPlayer ? 'player' : 'enemy', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.takeDamage = function (damage) {
+ if (self.isBlocking) {
+ damage = Math.floor(damage * 0.3);
+ LK.getSound('block').play();
+ } else {
+ LK.getSound('hit').play();
+ LK.effects.flashObject(self, 0xff0000, 300);
+ }
+ self.health = Math.max(0, self.health - damage);
+ return self.health <= 0;
+ };
+ self.punch = function () {
+ if (self.attackCooldown > 0 || self.isAttacking) return false;
+ self.isAttacking = true;
+ self.attackCooldown = 30;
+ self.comboCount++;
+ self.comboTimer = 60;
+ LK.getSound('punch').play();
+ var originalX = self.x;
+ var moveDistance = self.isPlayer ? 50 : -50;
+ tween(self, {
+ x: originalX + moveDistance
+ }, {
+ duration: 150,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(self, {
+ x: originalX
+ }, {
+ duration: 150,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ self.isAttacking = false;
+ }
+ });
+ }
+ });
+ return true;
+ };
+ self.kick = function () {
+ if (self.attackCooldown > 0 || self.isAttacking) return false;
+ self.isAttacking = true;
+ self.attackCooldown = 45;
+ self.comboCount++;
+ self.comboTimer = 60;
+ LK.getSound('kick').play();
+ var originalY = self.y;
+ tween(self, {
+ y: originalY - 30
+ }, {
+ duration: 200,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(self, {
+ y: originalY
+ }, {
+ duration: 200,
+ easing: tween.easeIn,
+ onFinish: function onFinish() {
+ self.isAttacking = false;
+ }
+ });
+ }
+ });
+ return true;
+ };
+ self.block = function (blocking) {
+ self.isBlocking = blocking;
+ fighterGraphics.tint = blocking ? 0x888888 : 0xffffff;
+ };
+ self.update = function () {
+ if (self.attackCooldown > 0) {
+ self.attackCooldown--;
+ }
+ if (self.comboTimer > 0) {
+ self.comboTimer--;
+ if (self.comboTimer <= 0) {
+ self.comboCount = 0;
+ }
+ }
+ };
+ return self;
+});
+var HealthBar = Container.expand(function (fighter, isPlayer) {
+ var self = Container.call(this);
+ self.fighter = fighter;
+ self.isPlayer = isPlayer;
+ var bgBar = self.attachAsset('healthBarBg', {
+ anchorX: isPlayer ? 0 : 1,
+ anchorY: 0
+ });
+ var healthBar = self.attachAsset('healthBar', {
+ anchorX: isPlayer ? 0 : 1,
+ anchorY: 0
+ });
+ healthBar.x = isPlayer ? 2 : -2;
+ healthBar.y = 2;
+ self.update = function () {
+ var healthPercent = self.fighter.health / self.fighter.maxHealth;
+ healthBar.width = 400 * healthPercent;
+ if (healthPercent > 0.6) {
+ healthBar.tint = 0x00cc00;
+ } else if (healthPercent > 0.3) {
+ healthBar.tint = 0xcccc00;
+ } else {
+ healthBar.tint = 0xcc0000;
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+// Game state variables
+var gameState = 'playing';
+var playerWins = 0;
+var enemyWins = 0;
+var roundsToWin = 2;
+var aiDifficulty = 1;
+var aiTimer = 0;
+var aiAction = 'idle';
+var blockHeld = false;
+var lastTapTime = 0;
+var tapCount = 0;
+// Create ground
+var ground = game.addChild(LK.getAsset('ground', {
+ anchorX: 0.5,
+ anchorY: 0
+}));
+ground.x = 2048 / 2;
+ground.y = 2632;
+// Create fighters
+var player = game.addChild(new Fighter(true));
+player.x = 400;
+player.y = 2632;
+var enemy = game.addChild(new Fighter(false));
+enemy.x = 1648;
+enemy.y = 2632;
+// Create health bars
+var playerHealthBar = LK.gui.topLeft.addChild(new HealthBar(player, true));
+playerHealthBar.x = 50;
+playerHealthBar.y = 150;
+var enemyHealthBar = LK.gui.topRight.addChild(new HealthBar(enemy, false));
+enemyHealthBar.x = -50;
+enemyHealthBar.y = 150;
+// Create invisible control areas
+var punchArea = game.addChild(LK.getAsset('punchArea', {
+ anchorX: 0,
+ anchorY: 0
+}));
+punchArea.x = 0;
+punchArea.y = 300;
+punchArea.alpha = 0;
+var kickArea = game.addChild(LK.getAsset('kickArea', {
+ anchorX: 0,
+ anchorY: 0
+}));
+kickArea.x = 0;
+kickArea.y = 1500;
+kickArea.alpha = 0;
+// Score display
+var scoreText = new Text2('Round 1 - Fight!', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+scoreText.y = 50;
+// Combat functions
+function checkCombat() {
+ var distance = Math.abs(player.x - enemy.x);
+ var attackRange = 170;
+ if (distance < attackRange && player.isAttacking && !enemy.isBlocking) {
+ var damage = player.comboCount >= 3 ? 25 : 15;
+ var enemyDead = enemy.takeDamage(damage);
+ if (enemyDead) {
+ endRound('player');
+ }
+ }
+ if (distance < attackRange && enemy.isAttacking && !player.isBlocking) {
+ var damage = 12 + aiDifficulty * 3;
+ var playerDead = player.takeDamage(damage);
+ if (playerDead) {
+ endRound('enemy');
+ }
+ }
+}
+function endRound(winner) {
+ if (gameState !== 'playing') return;
+ gameState = 'roundEnd';
+ if (winner === 'player') {
+ playerWins++;
+ LK.setScore(LK.getScore() + 100);
+ scoreText.setText('You Win Round ' + (playerWins + enemyWins) + '!');
+ } else {
+ enemyWins++;
+ scoreText.setText('Enemy Wins Round ' + (playerWins + enemyWins) + '!');
+ }
+ LK.setTimeout(function () {
+ if (playerWins >= roundsToWin) {
+ LK.setScore(LK.getScore() + 500);
+ aiDifficulty++;
+ startNewMatch();
+ } else if (enemyWins >= roundsToWin) {
+ LK.showGameOver();
+ } else {
+ startNewRound();
+ }
+ }, 2000);
+}
+function startNewRound() {
+ player.health = player.maxHealth;
+ enemy.health = enemy.maxHealth;
+ player.x = 400;
+ enemy.x = 1648;
+ player.block(false);
+ enemy.block(false);
+ gameState = 'playing';
+ scoreText.setText('Round ' + (playerWins + enemyWins + 1) + ' - Fight!');
+}
+function startNewMatch() {
+ playerWins = 0;
+ enemyWins = 0;
+ startNewRound();
+ scoreText.setText('New Opponent! Round 1 - Fight!');
+}
+function updateAI() {
+ if (gameState !== 'playing') return;
+ aiTimer++;
+ var distance = Math.abs(player.x - enemy.x);
+ var reactionTime = Math.max(5, 30 - aiDifficulty * 5);
+ if (aiTimer >= reactionTime) {
+ aiTimer = 0;
+ if (player.isAttacking && distance < 200) {
+ enemy.block(true);
+ aiAction = 'block';
+ } else if (distance < 170 && Math.random() < 0.3 + aiDifficulty * 0.1) {
+ enemy.block(false);
+ if (Math.random() < 0.6) {
+ enemy.punch();
+ } else {
+ enemy.kick();
+ }
+ aiAction = 'attack';
+ } else {
+ enemy.block(false);
+ aiAction = 'idle';
+ }
+ }
+}
+// Touch controls
+punchArea.down = function (x, y, obj) {
+ if (gameState !== 'playing') return;
+ var currentTime = LK.ticks;
+ if (currentTime - lastTapTime < 20) {
+ tapCount++;
+ } else {
+ tapCount = 1;
+ }
+ lastTapTime = currentTime;
+ player.punch();
+};
+kickArea.down = function (x, y, obj) {
+ if (gameState !== 'playing') return;
+ var currentTime = LK.ticks;
+ if (currentTime - lastTapTime < 20) {
+ tapCount++;
+ } else {
+ tapCount = 1;
+ }
+ lastTapTime = currentTime;
+ player.kick();
+};
+game.down = function (x, y, obj) {
+ if (gameState !== 'playing') return;
+ blockHeld = true;
+ player.block(true);
+};
+game.up = function (x, y, obj) {
+ if (gameState !== 'playing') return;
+ blockHeld = false;
+ player.block(false);
+};
+// Main game loop
+game.update = function () {
+ if (gameState !== 'playing') return;
+ updateAI();
+ checkCombat();
+ // Reset tap count after delay
+ if (LK.ticks - lastTapTime > 60) {
+ tapCount = 0;
+ }
+};
\ No newline at end of file