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