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