/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Deer = Container.expand(function () {
var self = Container.call(this);
var deerGraphics = self.attachAsset('deer', {
anchorX: 0.5,
anchorY: 0.5
});
self.baseSpeed = 3;
self.currentSpeed = self.baseSpeed;
self.directionX = 1;
self.directionY = 0;
self.changeDirectionTimer = 0;
self.evasiveness = 1;
self.update = function () {
// Change direction periodically for unpredictable movement
self.changeDirectionTimer++;
if (self.changeDirectionTimer > 60 / self.evasiveness) {
self.changeDirectionTimer = 0;
// Random direction change
var angle = Math.random() * Math.PI * 2;
self.directionX = Math.cos(angle);
self.directionY = Math.sin(angle);
}
// Move deer
self.x += self.directionX * self.currentSpeed;
self.y += self.directionY * self.currentSpeed;
// Keep deer within bounds with some margin
var margin = 100;
if (self.x < margin) {
self.x = margin;
self.directionX = Math.abs(self.directionX);
}
if (self.x > 2048 - margin) {
self.x = 2048 - margin;
self.directionX = -Math.abs(self.directionX);
}
if (self.y < margin) {
self.y = margin;
self.directionY = Math.abs(self.directionY);
}
if (self.y > 2732 - margin) {
self.y = 2732 - margin;
self.directionY = -Math.abs(self.directionY);
}
};
self.increaseEvasiveness = function () {
self.evasiveness += 0.5;
self.currentSpeed = self.baseSpeed + self.evasiveness * 1.5;
};
self.escape = function () {
// Respawn deer at random edge position
var edge = Math.floor(Math.random() * 4);
switch (edge) {
case 0:
// Top
self.x = Math.random() * 2048;
self.y = 100;
break;
case 1:
// Right
self.x = 1948;
self.y = Math.random() * 2732;
break;
case 2:
// Bottom
self.x = Math.random() * 2048;
self.y = 2632;
break;
case 3:
// Left
self.x = 100;
self.y = Math.random() * 2732;
break;
}
// Flash effect when escaping
LK.effects.flashObject(self, 0xffff00, 500);
};
return self;
});
var Tree = Container.expand(function () {
var self = Container.call(this);
var treeGraphics = self.attachAsset('tree', {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Truck = Container.expand(function () {
var self = Container.call(this);
var truckGraphics = self.attachAsset('truck', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x228b22
});
/****
* Game Code
****/
// Game variables
var truck;
var deer;
var trees = [];
var dragNode = null;
var lastIntersecting = false;
var hitCount = 0;
var targetScore = 10;
// Create score display
var scoreTxt = new Text2('Score: 0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Create target display
var targetTxt = new Text2('Target: ' + targetScore, {
size: 60,
fill: 0xFFFF00
});
targetTxt.anchor.set(1, 0);
targetTxt.x = -20;
targetTxt.y = 100;
LK.gui.topRight.addChild(targetTxt);
// Initialize truck
truck = game.addChild(new Truck());
truck.x = 1024;
truck.y = 2400;
// Initialize deer
deer = game.addChild(new Deer());
deer.x = 1024;
deer.y = 400;
// Create some trees as obstacles/scenery
for (var i = 0; i < 8; i++) {
var tree = game.addChild(new Tree());
tree.x = Math.random() * 1800 + 124;
tree.y = Math.random() * 2400 + 200;
trees.push(tree);
}
// Move handler
function handleMove(x, y, obj) {
if (dragNode) {
dragNode.x = x;
dragNode.y = y;
}
// Check collision between truck and deer
var currentIntersecting = truck.intersects(deer);
if (!lastIntersecting && currentIntersecting) {
// Hit detected!
hitCount++;
LK.setScore(hitCount);
scoreTxt.setText('Score: ' + hitCount);
// Play hit sound
LK.getSound('hit').play();
// Flash screen briefly
LK.effects.flashScreen(0xff0000, 300);
// Make deer more evasive
deer.increaseEvasiveness();
// Deer escapes to new position
deer.escape();
// Play escape sound
LK.getSound('escape').play();
// Check win condition
if (hitCount >= targetScore) {
LK.showYouWin();
}
}
lastIntersecting = currentIntersecting;
}
// Touch controls
game.move = handleMove;
game.down = function (x, y, obj) {
dragNode = truck;
handleMove(x, y, obj);
};
game.up = function (x, y, obj) {
dragNode = null;
};
// Main game loop
game.update = function () {
// Keep truck within bounds
if (truck.x < 60) truck.x = 60;
if (truck.x > 1988) truck.x = 1988;
if (truck.y < 60) truck.y = 60;
if (truck.y > 2672) truck.y = 2672;
}; ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,200 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var Deer = Container.expand(function () {
+ var self = Container.call(this);
+ var deerGraphics = self.attachAsset('deer', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.baseSpeed = 3;
+ self.currentSpeed = self.baseSpeed;
+ self.directionX = 1;
+ self.directionY = 0;
+ self.changeDirectionTimer = 0;
+ self.evasiveness = 1;
+ self.update = function () {
+ // Change direction periodically for unpredictable movement
+ self.changeDirectionTimer++;
+ if (self.changeDirectionTimer > 60 / self.evasiveness) {
+ self.changeDirectionTimer = 0;
+ // Random direction change
+ var angle = Math.random() * Math.PI * 2;
+ self.directionX = Math.cos(angle);
+ self.directionY = Math.sin(angle);
+ }
+ // Move deer
+ self.x += self.directionX * self.currentSpeed;
+ self.y += self.directionY * self.currentSpeed;
+ // Keep deer within bounds with some margin
+ var margin = 100;
+ if (self.x < margin) {
+ self.x = margin;
+ self.directionX = Math.abs(self.directionX);
+ }
+ if (self.x > 2048 - margin) {
+ self.x = 2048 - margin;
+ self.directionX = -Math.abs(self.directionX);
+ }
+ if (self.y < margin) {
+ self.y = margin;
+ self.directionY = Math.abs(self.directionY);
+ }
+ if (self.y > 2732 - margin) {
+ self.y = 2732 - margin;
+ self.directionY = -Math.abs(self.directionY);
+ }
+ };
+ self.increaseEvasiveness = function () {
+ self.evasiveness += 0.5;
+ self.currentSpeed = self.baseSpeed + self.evasiveness * 1.5;
+ };
+ self.escape = function () {
+ // Respawn deer at random edge position
+ var edge = Math.floor(Math.random() * 4);
+ switch (edge) {
+ case 0:
+ // Top
+ self.x = Math.random() * 2048;
+ self.y = 100;
+ break;
+ case 1:
+ // Right
+ self.x = 1948;
+ self.y = Math.random() * 2732;
+ break;
+ case 2:
+ // Bottom
+ self.x = Math.random() * 2048;
+ self.y = 2632;
+ break;
+ case 3:
+ // Left
+ self.x = 100;
+ self.y = Math.random() * 2732;
+ break;
+ }
+ // Flash effect when escaping
+ LK.effects.flashObject(self, 0xffff00, 500);
+ };
+ return self;
+});
+var Tree = Container.expand(function () {
+ var self = Container.call(this);
+ var treeGraphics = self.attachAsset('tree', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ return self;
+});
+var Truck = Container.expand(function () {
+ var self = Container.call(this);
+ var truckGraphics = self.attachAsset('truck', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 8;
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x228b22
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var truck;
+var deer;
+var trees = [];
+var dragNode = null;
+var lastIntersecting = false;
+var hitCount = 0;
+var targetScore = 10;
+// Create score display
+var scoreTxt = new Text2('Score: 0', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Create target display
+var targetTxt = new Text2('Target: ' + targetScore, {
+ size: 60,
+ fill: 0xFFFF00
+});
+targetTxt.anchor.set(1, 0);
+targetTxt.x = -20;
+targetTxt.y = 100;
+LK.gui.topRight.addChild(targetTxt);
+// Initialize truck
+truck = game.addChild(new Truck());
+truck.x = 1024;
+truck.y = 2400;
+// Initialize deer
+deer = game.addChild(new Deer());
+deer.x = 1024;
+deer.y = 400;
+// Create some trees as obstacles/scenery
+for (var i = 0; i < 8; i++) {
+ var tree = game.addChild(new Tree());
+ tree.x = Math.random() * 1800 + 124;
+ tree.y = Math.random() * 2400 + 200;
+ trees.push(tree);
+}
+// Move handler
+function handleMove(x, y, obj) {
+ if (dragNode) {
+ dragNode.x = x;
+ dragNode.y = y;
+ }
+ // Check collision between truck and deer
+ var currentIntersecting = truck.intersects(deer);
+ if (!lastIntersecting && currentIntersecting) {
+ // Hit detected!
+ hitCount++;
+ LK.setScore(hitCount);
+ scoreTxt.setText('Score: ' + hitCount);
+ // Play hit sound
+ LK.getSound('hit').play();
+ // Flash screen briefly
+ LK.effects.flashScreen(0xff0000, 300);
+ // Make deer more evasive
+ deer.increaseEvasiveness();
+ // Deer escapes to new position
+ deer.escape();
+ // Play escape sound
+ LK.getSound('escape').play();
+ // Check win condition
+ if (hitCount >= targetScore) {
+ LK.showYouWin();
+ }
+ }
+ lastIntersecting = currentIntersecting;
+}
+// Touch controls
+game.move = handleMove;
+game.down = function (x, y, obj) {
+ dragNode = truck;
+ handleMove(x, y, obj);
+};
+game.up = function (x, y, obj) {
+ dragNode = null;
+};
+// Main game loop
+game.update = function () {
+ // Keep truck within bounds
+ if (truck.x < 60) truck.x = 60;
+ if (truck.x > 1988) truck.x = 1988;
+ if (truck.y < 60) truck.y = 60;
+ if (truck.y > 2672) truck.y = 2672;
+};
\ No newline at end of file