User prompt
Delete existing fishing rod asset and create new fishing rod asset.
User prompt
hook and line should move left and right But they must be tied to the fishing rod and not come out of the fishing rod. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
hook and line should move left and right ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
The fish that comes after 500 points and eats other fish should come with less intervals
User prompt
bigFish should come with less intervals
User prompt
Fish should come less frequently and randomly.
User prompt
There should be no time in the game
User prompt
After 500 points, a bigger fish should come and this fish should eat other fish.
User prompt
Fishing line should be under the fishing rod
User prompt
Add medium sized fish
User prompt
The fishing line must be tied to the fishing rod.
User prompt
The hook must be attached to the fishing line, below the fishing rod, that is, the fishing line. Also the hook should move in all directions.
User prompt
The tip of the fishing rod must be in line with the fishing rod and must be attached to the fishing rod.
User prompt
The fishing rod should remain stationary, but the tip of the fishing rod should move in all directions.
User prompt
The fishing rod should move in all directions.
Code edit (1 edits merged)
Please save this source code
User prompt
Deep Sea Fishing
Initial prompt
Make me a like Gold Mining but instead of golds player should collect fishes with a fishing rod
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Fish = Container.expand(function (fishType, depth) {
var self = Container.call(this);
var fishGraphics = self.attachAsset(fishType, {
anchorX: 0.5,
anchorY: 0.5
});
self.fishType = fishType;
self.depth = depth;
self.speed = 2;
self.direction = Math.random() > 0.5 ? 1 : -1;
self.value = fishType === 'smallFish' ? 10 : fishType === 'mediumFish' ? 25 : 50;
self.caught = false;
// Set fish speed based on type
if (fishType === 'smallFish') {
self.speed = 3;
} else if (fishType === 'mediumFish') {
self.speed = 2;
} else {
self.speed = 1.5;
}
self.update = function () {
if (!self.caught) {
self.x += self.speed * self.direction;
// Reverse direction if fish goes off screen
if (self.x < -100 || self.x > 2148) {
self.direction *= -1;
}
}
};
return self;
});
var FishingLine = Container.expand(function () {
var self = Container.call(this);
self.segments = [];
self.hook = self.addChild(LK.getAsset('hook', {
anchorX: 0.5,
anchorY: 0.5
}));
self.maxLength = 1500;
self.currentLength = 0;
self.isDropping = false;
self.isReeling = false;
self.caughtFish = null;
self.startDrop = function () {
if (!self.isDropping && !self.isReeling) {
self.isDropping = true;
LK.getSound('splash').play();
}
};
self.startReel = function () {
if (self.isDropping && !self.isReeling) {
self.isDropping = false;
self.isReeling = true;
}
};
self.update = function () {
// Drop line
if (self.isDropping && self.currentLength < self.maxLength) {
self.currentLength += 8;
self.hook.x = 0; // Keep hook centered on line
self.hook.y = self.currentLength;
// Add line segments
if (self.currentLength % 20 === 0) {
var segment = self.addChild(LK.getAsset('fishingLine', {
anchorX: 0.5,
anchorY: 0.5
}));
segment.x = 0; // Keep segments aligned with fishing line center
segment.y = self.currentLength - 10;
self.segments.push(segment);
}
}
// Reel in line
if (self.isReeling && self.currentLength > 0) {
self.currentLength -= 6;
self.hook.x = 0; // Keep hook centered on line
self.hook.y = self.currentLength;
// Remove line segments
if (self.segments.length > 0 && self.currentLength % 20 === 0) {
var segment = self.segments.pop();
if (segment) {
segment.destroy();
}
}
// Move caught fish with hook
if (self.caughtFish) {
self.caughtFish.x = self.x + self.hook.x;
self.caughtFish.y = self.y + self.hook.y;
}
// Check if fully reeled in
if (self.currentLength <= 0) {
self.isReeling = false;
if (self.caughtFish) {
// Score points
LK.setScore(LK.getScore() + self.caughtFish.value);
scoreTxt.setText(LK.getScore());
// Remove caught fish
self.caughtFish.destroy();
for (var i = fish.length - 1; i >= 0; i--) {
if (fish[i] === self.caughtFish) {
fish.splice(i, 1);
break;
}
}
self.caughtFish = null;
LK.getSound('catch').play();
}
}
}
// Check for fish collision
if (!self.caughtFish && self.currentLength > 0) {
for (var i = 0; i < fish.length; i++) {
var currentFish = fish[i];
if (!currentFish.caught && self.hook.intersects(currentFish)) {
self.caughtFish = currentFish;
currentFish.caught = true;
self.startReel();
break;
}
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
// Game variables
var fish = [];
var fishingLine;
var waterSurface = 500;
var gameTime = 60000; // 60 seconds
var gameTimer;
var fishSpawnTimer = 0;
// Create water
var water = game.addChild(LK.getAsset('water', {
anchorX: 0,
anchorY: 0,
x: 0,
y: waterSurface
}));
// Create fishing rod
var fishingRod = game.addChild(LK.getAsset('fishingRod', {
anchorX: 0.5,
anchorY: 1,
x: 1024,
y: waterSurface
}));
// Create fishing line
fishingLine = game.addChild(new FishingLine());
fishingLine.x = 1024; // Start at rod base, will be updated by move events
fishingLine.y = waterSurface + 10; // Position line below rod tip
// Create score display
var scoreTxt = new Text2('0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 50;
// Create timer display
var timerTxt = new Text2('60', {
size: 60,
fill: 0xFFFFFF
});
timerTxt.anchor.set(1, 0);
LK.gui.topRight.addChild(timerTxt);
timerTxt.x = -50;
timerTxt.y = 50;
// Initialize score and timer
scoreTxt.setText(LK.getScore());
var timeRemaining = gameTime;
// Game timer
gameTimer = LK.setInterval(function () {
timeRemaining -= 1000;
timerTxt.setText(Math.ceil(timeRemaining / 1000));
if (timeRemaining <= 0) {
LK.clearInterval(gameTimer);
LK.showGameOver();
}
}, 1000);
// Spawn fish function
function spawnFish() {
var fishTypes = ['smallFish', 'mediumFish', 'largeFish'];
var depths = [200, 400, 600]; // Shallow, medium, deep
var typeIndex = Math.floor(Math.random() * fishTypes.length);
var fishType = fishTypes[typeIndex];
var depth = depths[typeIndex] + Math.random() * 200;
var newFish = new Fish(fishType, depth);
newFish.x = Math.random() > 0.5 ? -50 : 2098;
newFish.y = waterSurface + depth;
fish.push(newFish);
game.addChild(newFish);
}
// Touch controls
game.down = function (x, y, obj) {
fishingLine.startDrop();
};
game.up = function (x, y, obj) {
if (fishingLine.isDropping) {
fishingLine.startReel();
}
};
game.move = function (x, y, obj) {
// Calculate angle from rod base to touch position
var rodBaseX = 1024; // Keep rod base at center
var rodBaseY = waterSurface;
var deltaX = x - rodBaseX;
var deltaY = y - rodBaseY;
var angle = Math.atan2(deltaY, deltaX) - Math.PI / 2; // Subtract PI/2 to correct for rod anchor point
// Limit rod rotation to reasonable angles (about 60 degrees each side)
var maxAngle = Math.PI / 3; // 60 degrees
angle = Math.max(-maxAngle, Math.min(maxAngle, angle));
// Rotate the fishing rod
fishingRod.rotation = angle;
// Calculate tip position based on rod rotation and anchor point
// Since rod anchor is at bottom center (0.5, 1), we calculate from the base
var rodLength = 200; // Rod height
var tipX = rodBaseX + Math.sin(angle) * rodLength;
var tipY = rodBaseY - Math.cos(angle) * rodLength; // Negative because we go up from base
// Move fishing line to below the rod tip position
fishingLine.x = tipX;
fishingLine.y = tipY + 10; // Position line slightly below rod tip
// Update all line segments to maintain relative position to fishing line
for (var i = 0; i < fishingLine.segments.length; i++) {
fishingLine.segments[i].x = 0; // Keep segments centered relative to fishing line
}
// Update hook position to move with fishing line
fishingLine.hook.x = 0; // Reset to relative position within fishing line
fishingLine.hook.y = fishingLine.currentLength;
// Move caught fish with the hook if there is one
if (fishingLine.caughtFish) {
fishingLine.caughtFish.x = fishingLine.x;
fishingLine.caughtFish.y = fishingLine.y + fishingLine.currentLength;
}
};
// Main game loop
game.update = function () {
// Spawn fish periodically
fishSpawnTimer++;
if (fishSpawnTimer >= 120) {
// Spawn every 2 seconds
spawnFish();
fishSpawnTimer = 0;
}
// Clean up fish that are off screen
for (var i = fish.length - 1; i >= 0; i--) {
var currentFish = fish[i];
if (currentFish.x < -200 || currentFish.x > 2248) {
currentFish.destroy();
fish.splice(i, 1);
}
}
// Increase difficulty over time
var currentScore = LK.getScore();
if (currentScore > 100 && fishSpawnTimer % 80 === 0) {
spawnFish(); // Spawn more frequently at higher scores
}
}; ===================================================================
--- original.js
+++ change.js
@@ -164,9 +164,9 @@
}));
// Create fishing line
fishingLine = game.addChild(new FishingLine());
fishingLine.x = 1024; // Start at rod base, will be updated by move events
-fishingLine.y = waterSurface;
+fishingLine.y = waterSurface + 10; // Position line below rod tip
// Create score display
var scoreTxt = new Text2('0', {
size: 80,
fill: 0xFFFFFF
@@ -233,11 +233,11 @@
// Since rod anchor is at bottom center (0.5, 1), we calculate from the base
var rodLength = 200; // Rod height
var tipX = rodBaseX + Math.sin(angle) * rodLength;
var tipY = rodBaseY - Math.cos(angle) * rodLength; // Negative because we go up from base
- // Move fishing line to rod tip position
+ // Move fishing line to below the rod tip position
fishingLine.x = tipX;
- fishingLine.y = tipY;
+ fishingLine.y = tipY + 10; // Position line slightly below rod tip
// Update all line segments to maintain relative position to fishing line
for (var i = 0; i < fishingLine.segments.length; i++) {
fishingLine.segments[i].x = 0; // Keep segments centered relative to fishing line
}
Rubber Hose Style Blue Fish. In-Game asset. 2d. High contrast. No shadows
Rubber Hose Style Green Medium-Sized fish. In-Game asset. 2d. High contrast. No shadows
Rubber Hose Style Orange Happy Fish. In-Game asset. 2d. High contrast. No shadows
Rubber Hose Style Swimming pose Shark. It's Angry. In-Game asset. 2d. High contrast. No shadows
Rubber Hose Style octopus. In-Game asset. 2d. High contrast. No shadows