/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Knife = Container.expand(function () { var self = Container.call(this); var knifeGraphics = self.attachAsset('knife', { anchorX: 0.5, anchorY: 0.5 }); self.isActive = false; self.isThrown = false; self.throwSpeed = 20; self.targetX = 0; self.targetY = 0; self.resetPosition = function () { self.isActive = true; self.isThrown = false; self.x = 1024; self.y = 2200; }; self["throw"] = function () { if (!self.isThrown && self.isActive) { self.isThrown = true; LK.getSound('knifeHit').play(); } }; self.update = function () { if (self.isThrown && self.isActive) { self.y -= self.throwSpeed; // Check if knife reached the target if (self.y <= self.targetY + 150) { self.isThrown = false; return true; } } return false; }; return self; }); var Target = Container.expand(function () { var self = Container.call(this); var targetGraphics = self.attachAsset('target', { anchorX: 0.5, anchorY: 0.5 }); var targetInnerGraphics = self.attachAsset('targetInner', { anchorX: 0.5, anchorY: 0.5 }); var targetCoreGraphics = self.attachAsset('targetCore', { anchorX: 0.5, anchorY: 0.5 }); self.stuckKnives = []; self.rotationSpeed = 0.01; self.level = 1; self.obstacles = []; self.addKnife = function (knife, angle) { knife.x = 0; knife.y = 150; knife.rotation = angle; knife.isActive = true; self.stuckKnives.push(knife); self.addChild(knife); }; self.addObstacle = function (count) { for (var i = 0; i < count; i++) { var obstacle = self.attachAsset('obstacleRect', { anchorX: 0.5, anchorY: 0.5 }); var angle = Math.PI * 2 / count * i; obstacle.x = Math.cos(angle) * 110; obstacle.y = Math.sin(angle) * 110; obstacle.rotation = angle + Math.PI / 2; self.obstacles.push(obstacle); } }; self.resetTarget = function () { // Remove all stuck knives for (var i = 0; i < self.stuckKnives.length; i++) { self.removeChild(self.stuckKnives[i]); } self.stuckKnives = []; // Remove obstacles for (var i = 0; i < self.obstacles.length; i++) { self.removeChild(self.obstacles[i]); } self.obstacles = []; // Reset rotation self.rotation = 0; }; self.levelUp = function () { self.level++; self.resetTarget(); // Increase rotation speed with level self.rotationSpeed = 0.01 + self.level * 0.002; // Add obstacles based on level if (self.level > 2) { var obstacleCount = Math.min(Math.floor(self.level / 2), 6); self.addObstacle(obstacleCount); } LK.getSound('levelUp').play(); }; self.checkCollision = function (knife) { // Check collision with stuck knives for (var i = 0; i < self.stuckKnives.length; i++) { var stuckKnife = self.stuckKnives[i]; // Convert the angle of the stuck knife to global coordinates var stuckAngle = (stuckKnife.rotation + self.rotation) % (Math.PI * 2); if (stuckAngle < 0) { stuckAngle += Math.PI * 2; } // Check if the new knife would hit any stuck knife // Allow for small tolerance in the angle var tolerance = 0.3; if (stuckAngle < tolerance || stuckAngle > Math.PI * 2 - tolerance) { return true; } } // Check collision with obstacles for (var i = 0; i < self.obstacles.length; i++) { var obstacle = self.obstacles[i]; var obstacleGlobalAngle = (obstacle.rotation - Math.PI / 2 + self.rotation) % (Math.PI * 2); if (obstacleGlobalAngle < 0) { obstacleGlobalAngle += Math.PI * 2; } var tolerance = 0.3; if (obstacleGlobalAngle < tolerance || obstacleGlobalAngle > Math.PI * 2 - tolerance) { return true; } } return false; }; self.update = function () { self.rotation += self.rotationSpeed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x444444 }); /**** * Game Code ****/ // Game variables var currentLevel = 1; var knivesPerLevel = 5; var knifeCount = 0; var score = 0; var target; var currentKnife; var knives = []; var gameActive = false; var knivesLeft = 0; // Initialize the game function initGame() { // Reset variables currentLevel = 1; knifeCount = 0; score = 0; knivesLeft = knivesPerLevel; LK.setScore(0); // Create target target = new Target(); target.x = 1024; target.y = 900; game.addChild(target); // Create initial knife currentKnife = new Knife(); currentKnife.targetX = target.x; currentKnife.targetY = target.y; currentKnife.resetPosition(); game.addChild(currentKnife); // Create UI createUI(); // Start game gameActive = true; // Play background music LK.playMusic('bgMusic'); } // Create user interface function createUI() { // Score display var scoreTxt = new Text2('SCORE: 0', { size: 80, fill: 0xFFFFFF }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Level display var levelTxt = new Text2('LEVEL: 1', { size: 60, fill: 0xFFFFFF }); levelTxt.anchor.set(0, 0); levelTxt.x = 100; levelTxt.y = 100; LK.gui.addChild(levelTxt); // Knives left display var knivesLeftTxt = new Text2('KNIVES: ' + knivesLeft, { size: 60, fill: 0xFFFFFF }); knivesLeftTxt.anchor.set(1, 0); knivesLeftTxt.x = 1948; // Keeping it within visible screen area knivesLeftTxt.y = 100; LK.gui.addChild(knivesLeftTxt); // Update UI in game loop game.updateUI = function () { scoreTxt.setText('SCORE: ' + score); levelTxt.setText('LEVEL: ' + currentLevel); knivesLeftTxt.setText('KNIVES: ' + knivesLeft); }; } // Game input handling game.down = function (x, y, obj) { if (gameActive && currentKnife && !currentKnife.isThrown) { currentKnife["throw"](); knivesLeft--; } }; // Main game update loop game.update = function () { if (!gameActive) { return; } // Update target rotation if (target) { target.update(); } // Update current knife if (currentKnife && currentKnife.isThrown) { var hitTarget = currentKnife.update(); if (hitTarget) { // Check if knife hit another knife or obstacle if (target.checkCollision(currentKnife)) { // Game over LK.getSound('gameOver').play(); gameActive = false; LK.showGameOver(); return; } // Calculate points based on where knife hit var points = 10; // Higher points for inner rings (not implemented in this simple version) score += points; LK.setScore(score); // Add knife to target target.addKnife(currentKnife, target.rotation); // Check if level completed if (knivesLeft <= 0) { currentLevel++; knivesLeft = knivesPerLevel; target.levelUp(); } // Create new knife currentKnife = new Knife(); currentKnife.targetX = target.x; currentKnife.targetY = target.y; currentKnife.resetPosition(); game.addChild(currentKnife); } } // Update UI if (game.updateUI) { game.updateUI(); } }; // Initialize game on start initGame();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,282 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var Knife = Container.expand(function () {
+ var self = Container.call(this);
+ var knifeGraphics = self.attachAsset('knife', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.isActive = false;
+ self.isThrown = false;
+ self.throwSpeed = 20;
+ self.targetX = 0;
+ self.targetY = 0;
+ self.resetPosition = function () {
+ self.isActive = true;
+ self.isThrown = false;
+ self.x = 1024;
+ self.y = 2200;
+ };
+ self["throw"] = function () {
+ if (!self.isThrown && self.isActive) {
+ self.isThrown = true;
+ LK.getSound('knifeHit').play();
+ }
+ };
+ self.update = function () {
+ if (self.isThrown && self.isActive) {
+ self.y -= self.throwSpeed;
+ // Check if knife reached the target
+ if (self.y <= self.targetY + 150) {
+ self.isThrown = false;
+ return true;
+ }
+ }
+ return false;
+ };
+ return self;
+});
+var Target = Container.expand(function () {
+ var self = Container.call(this);
+ var targetGraphics = self.attachAsset('target', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var targetInnerGraphics = self.attachAsset('targetInner', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var targetCoreGraphics = self.attachAsset('targetCore', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.stuckKnives = [];
+ self.rotationSpeed = 0.01;
+ self.level = 1;
+ self.obstacles = [];
+ self.addKnife = function (knife, angle) {
+ knife.x = 0;
+ knife.y = 150;
+ knife.rotation = angle;
+ knife.isActive = true;
+ self.stuckKnives.push(knife);
+ self.addChild(knife);
+ };
+ self.addObstacle = function (count) {
+ for (var i = 0; i < count; i++) {
+ var obstacle = self.attachAsset('obstacleRect', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var angle = Math.PI * 2 / count * i;
+ obstacle.x = Math.cos(angle) * 110;
+ obstacle.y = Math.sin(angle) * 110;
+ obstacle.rotation = angle + Math.PI / 2;
+ self.obstacles.push(obstacle);
+ }
+ };
+ self.resetTarget = function () {
+ // Remove all stuck knives
+ for (var i = 0; i < self.stuckKnives.length; i++) {
+ self.removeChild(self.stuckKnives[i]);
+ }
+ self.stuckKnives = [];
+ // Remove obstacles
+ for (var i = 0; i < self.obstacles.length; i++) {
+ self.removeChild(self.obstacles[i]);
+ }
+ self.obstacles = [];
+ // Reset rotation
+ self.rotation = 0;
+ };
+ self.levelUp = function () {
+ self.level++;
+ self.resetTarget();
+ // Increase rotation speed with level
+ self.rotationSpeed = 0.01 + self.level * 0.002;
+ // Add obstacles based on level
+ if (self.level > 2) {
+ var obstacleCount = Math.min(Math.floor(self.level / 2), 6);
+ self.addObstacle(obstacleCount);
+ }
+ LK.getSound('levelUp').play();
+ };
+ self.checkCollision = function (knife) {
+ // Check collision with stuck knives
+ for (var i = 0; i < self.stuckKnives.length; i++) {
+ var stuckKnife = self.stuckKnives[i];
+ // Convert the angle of the stuck knife to global coordinates
+ var stuckAngle = (stuckKnife.rotation + self.rotation) % (Math.PI * 2);
+ if (stuckAngle < 0) {
+ stuckAngle += Math.PI * 2;
+ }
+ // Check if the new knife would hit any stuck knife
+ // Allow for small tolerance in the angle
+ var tolerance = 0.3;
+ if (stuckAngle < tolerance || stuckAngle > Math.PI * 2 - tolerance) {
+ return true;
+ }
+ }
+ // Check collision with obstacles
+ for (var i = 0; i < self.obstacles.length; i++) {
+ var obstacle = self.obstacles[i];
+ var obstacleGlobalAngle = (obstacle.rotation - Math.PI / 2 + self.rotation) % (Math.PI * 2);
+ if (obstacleGlobalAngle < 0) {
+ obstacleGlobalAngle += Math.PI * 2;
+ }
+ var tolerance = 0.3;
+ if (obstacleGlobalAngle < tolerance || obstacleGlobalAngle > Math.PI * 2 - tolerance) {
+ return true;
+ }
+ }
+ return false;
+ };
+ self.update = function () {
+ self.rotation += self.rotationSpeed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x444444
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var currentLevel = 1;
+var knivesPerLevel = 5;
+var knifeCount = 0;
+var score = 0;
+var target;
+var currentKnife;
+var knives = [];
+var gameActive = false;
+var knivesLeft = 0;
+// Initialize the game
+function initGame() {
+ // Reset variables
+ currentLevel = 1;
+ knifeCount = 0;
+ score = 0;
+ knivesLeft = knivesPerLevel;
+ LK.setScore(0);
+ // Create target
+ target = new Target();
+ target.x = 1024;
+ target.y = 900;
+ game.addChild(target);
+ // Create initial knife
+ currentKnife = new Knife();
+ currentKnife.targetX = target.x;
+ currentKnife.targetY = target.y;
+ currentKnife.resetPosition();
+ game.addChild(currentKnife);
+ // Create UI
+ createUI();
+ // Start game
+ gameActive = true;
+ // Play background music
+ LK.playMusic('bgMusic');
+}
+// Create user interface
+function createUI() {
+ // Score display
+ var scoreTxt = new Text2('SCORE: 0', {
+ size: 80,
+ fill: 0xFFFFFF
+ });
+ scoreTxt.anchor.set(0.5, 0);
+ LK.gui.top.addChild(scoreTxt);
+ // Level display
+ var levelTxt = new Text2('LEVEL: 1', {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ levelTxt.anchor.set(0, 0);
+ levelTxt.x = 100;
+ levelTxt.y = 100;
+ LK.gui.addChild(levelTxt);
+ // Knives left display
+ var knivesLeftTxt = new Text2('KNIVES: ' + knivesLeft, {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ knivesLeftTxt.anchor.set(1, 0);
+ knivesLeftTxt.x = 1948; // Keeping it within visible screen area
+ knivesLeftTxt.y = 100;
+ LK.gui.addChild(knivesLeftTxt);
+ // Update UI in game loop
+ game.updateUI = function () {
+ scoreTxt.setText('SCORE: ' + score);
+ levelTxt.setText('LEVEL: ' + currentLevel);
+ knivesLeftTxt.setText('KNIVES: ' + knivesLeft);
+ };
+}
+// Game input handling
+game.down = function (x, y, obj) {
+ if (gameActive && currentKnife && !currentKnife.isThrown) {
+ currentKnife["throw"]();
+ knivesLeft--;
+ }
+};
+// Main game update loop
+game.update = function () {
+ if (!gameActive) {
+ return;
+ }
+ // Update target rotation
+ if (target) {
+ target.update();
+ }
+ // Update current knife
+ if (currentKnife && currentKnife.isThrown) {
+ var hitTarget = currentKnife.update();
+ if (hitTarget) {
+ // Check if knife hit another knife or obstacle
+ if (target.checkCollision(currentKnife)) {
+ // Game over
+ LK.getSound('gameOver').play();
+ gameActive = false;
+ LK.showGameOver();
+ return;
+ }
+ // Calculate points based on where knife hit
+ var points = 10;
+ // Higher points for inner rings (not implemented in this simple version)
+ score += points;
+ LK.setScore(score);
+ // Add knife to target
+ target.addKnife(currentKnife, target.rotation);
+ // Check if level completed
+ if (knivesLeft <= 0) {
+ currentLevel++;
+ knivesLeft = knivesPerLevel;
+ target.levelUp();
+ }
+ // Create new knife
+ currentKnife = new Knife();
+ currentKnife.targetX = target.x;
+ currentKnife.targetY = target.y;
+ currentKnife.resetPosition();
+ game.addChild(currentKnife);
+ }
+ }
+ // Update UI
+ if (game.updateUI) {
+ game.updateUI();
+ }
+};
+// Initialize game on start
+initGame();
\ No newline at end of file
Cartoon flat dart board. Single Game Texture. In-Game asset. 2d. White background. High contrast. No shadows.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
artoon knife pointing up. Symmetrical. Vertical. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows