Code edit (1 edits merged)
Please save this source code
User prompt
snake be very fast ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Let the snake's body turn smoothly in one piece, not in multiple pieces. And let the snake's speed increase. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
When the snake hits itself, the screen will display the message "You bit yourself" and the restart screen will appear.
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getElementById')' in or related to this line: 'var cnv = document.getElementById('gameCanvas'),' Line Number: 11
Code edit (2 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'addEventListener')' in or related to this line: 'document.addEventListener('DOMContentLoaded', function () {' Line Number: 12
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getElementById')' in or related to this line: 'var cnv = document.getElementById('gameCanvas'),' Line Number: 11
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getElementById')' in or related to this line: 'var cnv = document.getElementById('gameCanvas'),' Line Number: 11
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getElementById')' in or related to this line: 'var cnv = document.getElementById('gameCanvas'),' Line Number: 11
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getElementById')' in or related to this line: 'var cnv = document.getElementById('gameCanvas'),' Line Number: 11
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getElementById')' in or related to this line: 'var cnv = document.getElementById('gameCanvas'),' Line Number: 11
Code edit (1 edits merged)
Please save this source code
User prompt
restore the game to its previous state
User prompt
Please fix the bug: 'ReferenceError: appleWidth is not defined' in or related to this line: 'return Math.sqrt(dx * dx + dy * dy);' Line Number: 40
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getElementById')' in or related to this line: 'var cnv = document.getElementById('gameCanvas'),' Line Number: 11
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getElementById')' in or related to this line: 'var cnv = document.getElementById('gameCanvas'),' Line Number: 11
Code edit (2 edits merged)
Please save this source code
User prompt
The snake's head is not visible
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'getElementById')' in or related to this line: 'var cnv = document.getElementById('gameCanvas'),' Line Number: 11
/**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ var cnv = document.getElementById('gameCanvas'), ctx = cnv.getContext('2d'), segmentLength = 10, startingSegments = 20, spawn = { x: 0, y: cnv.height / 2 }, snakeSpeed = 5, maxApples = 5, appleLife = 500, segmentsPerApple = 3, snakeWidth = 5, appleWidth = 5, cursorSize = 10, snakeColor = [100, 255, 100, 1], appleColor = [0, 255, 0, 1], cursorColor = [255, 255, 255, 1], cursorColorMod = [0, -255, -255, 0], targetColor = [0, 0, 255, 1], targetColorMod = [255, 0, -255, 0], scoreColor = [255, 255, 255, 1], cursorSpin = 0.075, snake, cursor, target, apples, score, gameState, deathMeans; function distance(p1, p2) { var dx = p2.x - p1.x; var dy = p2.y - p1.y; return Math.sqrt(dx * dx + dy * dy); } function lineIntersect(p0_x, p0_y, p1_x, p1_y, p2_x, p2_y, p3_x, p3_y) { var s1_x = p1_x - p0_x, s1_y = p1_y - p0_y, s2_x = p3_x - p2_x, s2_y = p3_y - p2_y, s = (-s1_y * (p0_x - p2_x) + s1_x * (p0_y - p2_y)) / (-s2_x * s1_y + s1_x * s2_y), t = (s2_x * (p0_y - p2_y) - s2_y * (p0_x - p2_x)) / (-s2_x * s1_y + s1_x * s2_y); if (s >= 0 && s <= 1 && t >= 0 && t <= 1) { return true; } return false; } function SGM(angle, x, y) { this.x = x || 0; this.y = y || 0; this.angle = angle || 0; this.parent = null; } ; SGM.prototype.endX = function () { return this.x + Math.cos(this.angle) * segmentLength; }; SGM.prototype.endY = function () { return this.y + Math.sin(this.angle) * segmentLength; }; SGM.prototype.pointAt = function (x, y) { var dx = x - this.x, dy = y - this.y; this.angle = Math.atan2(dy, dx); }; SGM.prototype.target = function (x, y) { this.targetX = x; this.targetY = y; this.arrived = false; this.totalDist = distance({ x: this.endX(), y: this.endY() }, { x: this.targetX, y: this.targetY }); this.currentDist = parseInt(this.totalDist); }; SGM.prototype.gotoTarget = function () { if (!this.arrived) { if (this.targetX > this.x + segmentLength || this.targetX < this.x - segmentLength || this.targetY > this.y + segmentLength || this.targetY < this.y - segmentLength) { this.pointAt(this.targetX, this.targetY); } else { this.arrived = true; } this.currentDist = distance({ x: this.endX(), y: this.endY() }, { x: this.targetX, y: this.targetY }); } this.x += (this.endX() - this.x) / snakeSpeed; this.y += (this.endY() - this.y) / snakeSpeed; this.parent.drag(this.x, this.y); }; SGM.prototype.drag = function (x, y) { this.pointAt(x, y); this.x = x - Math.cos(this.angle) * segmentLength; this.y = y - Math.sin(this.angle) * segmentLength; if (this.parent) { this.parent.drag(this.x, this.y); } }; SGM.prototype.render = function (context) { context.lineTo(this.endX(), this.endY()); }; function IKR(x, y) { this.ix = x || 0; this.iy = y || 0; this.sgms = []; this.lastArm = null; } ; IKR.prototype.addSeg = function (angle) { var arm = new SGM(angle); if (this.lastArm !== null) { arm.x = this.lastArm.endX(); arm.y = this.lastArm.endY(); arm.parent = this.lastArm; } else { arm.x = this.ix; arm.y = this.iy; } this.sgms.push(arm); this.lastArm = arm; }; IKR.prototype.grow = function () { var tail = this.sgms[0], arm = new SGM(tail.angle); arm.x = tail.x - Math.cos(tail.angle) * segmentLength; arm.y = tail.y - Math.sin(tail.angle) * segmentLength; tail.parent = arm; this.sgms.unshift(arm); }; IKR.prototype.drag = function (x, y) { this.lastArm.drag(x, y); }; function CUR(x, y) { this.x = x; this.y = y; this.rotation = 0; } ; CUR.prototype.render = function (context) { context.save(); context.translate(this.x, this.y); context.rotate(this.rotation); context.beginPath(); context.moveTo(0, -cursorSize); context.lineTo(0, -cursorSize / 2); context.moveTo(0, cursorSize / 2); context.lineTo(0, cursorSize); context.moveTo(-cursorSize, 0); context.lineTo(-cursorSize / 2, 0); context.moveTo(cursorSize / 2, 0); context.lineTo(cursorSize, 0); context.stroke(); context.restore(); this.rotation = (this.rotation + cursorSpin) % 360; }; function Apple(x, y) { this.x = x; this.y = y; this.life = appleLife; this.rotation = 0; } Apple.prototype.update = function () { this.life--; }; Apple.prototype.render = function (context) { context.beginPath(); context.arc(this.x, this.y, appleWidth, 0, Math.PI * 2); context.fill(); if (gameState !== 'dead') { context.save(); context.fillStyle = 'white'; context.font = '8px sans-serif'; context.fillText(this.life, this.x + 10, this.y + 10); context.restore(); CUR.prototype.render.call(this, context); } }; function init() { snake = new IKR(spawn.x, spawn.y); cursor = new CUR(-20, -20); target = new CUR(spawn.x + segmentLength * (startingSegments + 5), spawn.y); apples = []; score = 0; for (var i = 0; i < startingSegments; i++) { snake.addSeg(); } snake.lastArm.target(target.x, target.y); gameState = 'play'; } init(); cnv.addEventListener('mousemove', function (e) { switch (gameState) { case 'play': cursor.x = e.offsetX; cursor.y = e.offsetY; break; } }); cnv.addEventListener('mousedown', function (e) { switch (gameState) { case 'play': target.x = e.offsetX; target.y = e.offsetY; snake.lastArm.target(target.x, target.y); break; case 'dead': init(); break; } }); function badPlacement(apple) { for (var s = 0; s < snake.sgms.length; s++) { var seg = snake.sgms[s]; if (Math.min(distance(apple, { x: seg.endX(), y: seg.endY() }), distance(apple, { x: seg.x, y: seg.y })) < appleWidth * 2) { return true; } } return false; } function addScoreSegments() { for (var i = 0; i < segmentsPerApple; i++) { snake.grow(); } } function update() { if (gameState !== 'dead') { snake.lastArm.gotoTarget(); if (snake.lastArm.endX() > cnv.width - 2 || snake.lastArm.endX() < 2 || snake.lastArm.endY() > cnv.height - 2 || snake.lastArm.endY() < 2) { gameState = 'dead'; deathMeans = 'Duvara çarptın...'; return; } for (var s = 0; s < snake.sgms.length - 2; s++) { var seg = snake.sgms[s]; if (lineIntersect(snake.lastArm.x, snake.lastArm.y, snake.lastArm.endX(), snake.lastArm.endY(), seg.x, seg.y, seg.endX(), seg.endY())) { gameState = 'dead'; deathMeans = 'Kendini ısırdın!'; return; } for (var a in apples) { var apple = apples[a]; if (Math.min(distance(apple, { x: seg.endX(), y: seg.endY() }), distance(apple, { x: seg.x, y: seg.y })) < appleWidth * 2) { score += Math.round(apple.life / 2); // half score if absorbed by the tail apples.splice(a, 1); addScoreSegments(); } } } for (var a in apples) { var apple = apples[a]; apple.update(); if (apple.life <= 0) { apples.splice(a, 1); continue; } if (distance(apple, { x: snake.lastArm.endX(), y: snake.lastArm.endY() }) < appleWidth * 2) { score += apple.life; apples.splice(a, 1); addScoreSegments(); } } if (apples.length < maxApples && Math.random() < .1) { var offset = appleWidth * 10, apple = new Apple(offset / 2 + Math.floor(Math.random() * (cnv.width - offset)), offset / 2 + Math.floor(Math.random() * (cnv.height - offset))); while (badPlacement(apple)) { apple.x = offset / 2 + Math.floor(Math.random() * (cnv.width - offset)); apple.y = offset / 2 + Math.floor(Math.random() * (cnv.height - offset)); } apples.push(apple); } } } function drawTarget(targetModFactor) { if (!snake.lastArm.arrived) { ctx.strokeStyle = 'rgba(' + (targetColor[0] + targetColorMod[0] * targetModFactor).toFixed(0) + ',' + (targetColor[1] + targetColorMod[1] * targetModFactor).toFixed(0) + ',' + (targetColor[2] + targetColorMod[2] * targetModFactor).toFixed(0) + ',' + (targetColor[3] + targetColorMod[3] * targetModFactor).toFixed(0) + ')'; ctx.lineWidth = 1; target.render(ctx); } } function drawSnake() { ctx.beginPath(); ctx.strokeStyle = ctx.fillStyle = 'rgba(' + snakeColor[0] + ',' + snakeColor[1] + ',' + snakeColor[2] + ',' + snakeColor[3] + ')'; ctx.lineWidth = snakeWidth; ctx.moveTo(snake.sgms[0].x, snake.sgms[0].y); for (var s in snake.sgms) { snake.sgms[s].render(ctx); } ctx.stroke(); ctx.beginPath(); ctx.arc(snake.lastArm.endX(), snake.lastArm.endY(), appleWidth * .75, 0, Math.PI * 2); ctx.fill(); } function drawCursor(targetModFactor) { ctx.strokeStyle = 'rgba(' + (cursorColor[0] + cursorColorMod[0] * targetModFactor).toFixed(0) + ',' + (cursorColor[1] + cursorColorMod[1] * targetModFactor).toFixed(0) + ',' + (cursorColor[2] + cursorColorMod[2] * targetModFactor).toFixed(0) + ',' + (cursorColor[3] + cursorColorMod[3] * targetModFactor).toFixed(0) + ')'; ctx.lineWidth = 1; cursor.render(ctx); } function drawApples() { ctx.fillStyle = 'rgba(' + appleColor[0] + ',' + appleColor[1] + ',' + appleColor[2] + ',' + appleColor[3] + ')'; for (var a in apples) { var apple = apples[a], appleTargetMod = 1 - apple.life / appleLife; ctx.strokeStyle = 'rgba(' + (cursorColor[0] + cursorColorMod[0] * appleTargetMod).toFixed(0) + ',' + (cursorColor[1] + cursorColorMod[1] * appleTargetMod).toFixed(0) + ',' + (cursorColor[2] + cursorColorMod[2] * appleTargetMod).toFixed(0) + ',' + (cursorColor[3] + cursorColorMod[3] * appleTargetMod).toFixed(0) + ')'; ctx.lineWidth = 1; apple.render(ctx); } } function render() { var targetModFactor = 1 - snake.lastArm.currentDist / snake.lastArm.totalDist; switch (gameState) { case 'play': ctx.clearRect(0, 0, cnv.width, cnv.height); drawTarget(targetModFactor); drawSnake(); drawApples(); drawCursor(targetModFactor); ctx.fillStyle = 'rgba(' + scoreColor[0] + ',' + scoreColor[1] + ',' + scoreColor[2] + ',' + scoreColor[3] + ')'; ctx.textAlign = 'left'; ctx.textBaseline = 'top'; ctx.fillText('Puan: ' + score, 10, 10); break; case 'dead': ctx.clearRect(0, 0, cnv.width, cnv.height); drawSnake(); drawApples(); ctx.fillStyle = 'rgba(255,0,0,0.5)'; ctx.fillRect(100, 100, cnv.width - 200, cnv.height - 200); ctx.textAlign = 'center'; ctx.textBaseline = 'middle'; ctx.fillStyle = ctx.strokeStyle = 'white'; ctx.font = 'bold 30px sans-serif'; ctx.fillText('Öldün', cnv.width / 2, cnv.height / 2 - 70); ctx.font = 'bold 25px sans-serif'; ctx.fillText(deathMeans, cnv.width / 2, cnv.height / 2 - 30); ctx.font = '20px sans-serif'; ctx.fillText('Puan:', cnv.width / 2, cnv.height / 2 + 15); ctx.font = 'bold 60px sans-serif'; ctx.fillText(score, cnv.width / 2, cnv.height / 2 + 60); ctx.font = 'lighter 10px sans-serif'; ctx.lineWidth = 1; ctx.strokeRect(103, 103, cnv.width - 206, cnv.height - 206); break; } } function animate() { update(); render(); requestAnimationFrame(animate); } snake.lastArm.target(target.x, target.y); animate();
===================================================================
--- original.js
+++ change.js
@@ -7,23 +7,33 @@
/****
* Game Code
****/
-// Game configuration
-var segmentLength = 40,
- startingSegments = 10,
+var cnv = document.getElementById('gameCanvas'),
+ ctx = cnv.getContext('2d'),
+ segmentLength = 10,
+ startingSegments = 20,
spawn = {
- x: 1024,
- y: 1366
+ x: 0,
+ y: cnv.height / 2
},
- snakeSpeed = 8,
- maxApples = 3,
- appleLife = 300,
- segmentsPerApple = 2,
- snakeWidth = 30,
- appleWidth = 25,
- cursorSize = 20,
+ snakeSpeed = 5,
+ maxApples = 5,
+ appleLife = 500,
+ segmentsPerApple = 3,
+ snakeWidth = 5,
+ appleWidth = 5,
+ cursorSize = 10,
+ snakeColor = [100, 255, 100, 1],
+ appleColor = [0, 255, 0, 1],
+ cursorColor = [255, 255, 255, 1],
+ cursorColorMod = [0, -255, -255, 0],
+ targetColor = [0, 0, 255, 1],
+ targetColorMod = [255, 0, -255, 0],
+ scoreColor = [255, 255, 255, 1],
+ cursorSpin = 0.075,
snake,
+ cursor,
target,
apples,
score,
gameState,
@@ -194,21 +204,28 @@
snake.lastArm.target(target.x, target.y);
gameState = 'play';
}
init();
-// Touch events handled by game object
-game.down = function (x, y, obj) {
+cnv.addEventListener('mousemove', function (e) {
switch (gameState) {
case 'play':
- target.x = x;
- target.y = y;
+ cursor.x = e.offsetX;
+ cursor.y = e.offsetY;
+ break;
+ }
+});
+cnv.addEventListener('mousedown', function (e) {
+ switch (gameState) {
+ case 'play':
+ target.x = e.offsetX;
+ target.y = e.offsetY;
snake.lastArm.target(target.x, target.y);
break;
case 'dead':
init();
break;
}
-};
+});
function badPlacement(apple) {
for (var s = 0; s < snake.sgms.length; s++) {
var seg = snake.sgms[s];
if (Math.min(distance(apple, {
@@ -230,12 +247,11 @@
}
function update() {
if (gameState !== 'dead') {
snake.lastArm.gotoTarget();
- if (snake.lastArm.endX() > 2048 - 50 || snake.lastArm.endX() < 50 || snake.lastArm.endY() > 2732 - 50 || snake.lastArm.endY() < 50) {
+ if (snake.lastArm.endX() > cnv.width - 2 || snake.lastArm.endX() < 2 || snake.lastArm.endY() > cnv.height - 2 || snake.lastArm.endY() < 2) {
gameState = 'dead';
- deathMeans = 'Hit the wall!';
- LK.showGameOver();
+ deathMeans = 'Duvara çarptın...';
return;
}
for (var s = 0; s < snake.sgms.length - 2; s++) {
var seg = snake.sgms[s];
@@ -274,144 +290,94 @@
apples.splice(a, 1);
addScoreSegments();
}
}
- if (apples.length < maxApples && Math.random() < 0.02) {
- var offset = appleWidth * 4,
- apple = new Apple(offset + Math.floor(Math.random() * (2048 - offset * 2)), offset + Math.floor(Math.random() * (2732 - offset * 2)));
+ if (apples.length < maxApples && Math.random() < .1) {
+ var offset = appleWidth * 10,
+ apple = new Apple(offset / 2 + Math.floor(Math.random() * (cnv.width - offset)), offset / 2 + Math.floor(Math.random() * (cnv.height - offset)));
while (badPlacement(apple)) {
- apple.x = offset + Math.floor(Math.random() * (2048 - offset * 2));
- apple.y = offset + Math.floor(Math.random() * (2732 - offset * 2));
+ apple.x = offset / 2 + Math.floor(Math.random() * (cnv.width - offset));
+ apple.y = offset / 2 + Math.floor(Math.random() * (cnv.height - offset));
}
apples.push(apple);
- // Create visual apple
- var appleVisual = LK.getAsset('apple', {
- width: appleWidth * 2,
- height: appleWidth * 2,
- color: 0x00ff00,
- shape: 'ellipse',
- anchorX: 0.5,
- anchorY: 0.5
- });
- appleVisual.x = apple.x;
- appleVisual.y = apple.y;
- game.addChild(appleVisual);
- appleObjects.push(appleVisual);
}
}
}
-// LK rendering system - visual elements handled by game objects
-var snakeSegments = [];
-var appleObjects = [];
-var targetObject = null;
-var scoreText = null;
-// Initialize visual elements
-function initVisuals() {
- // Clear existing visuals
- for (var i = 0; i < snakeSegments.length; i++) {
- snakeSegments[i].destroy();
+function drawTarget(targetModFactor) {
+ if (!snake.lastArm.arrived) {
+ ctx.strokeStyle = 'rgba(' + (targetColor[0] + targetColorMod[0] * targetModFactor).toFixed(0) + ',' + (targetColor[1] + targetColorMod[1] * targetModFactor).toFixed(0) + ',' + (targetColor[2] + targetColorMod[2] * targetModFactor).toFixed(0) + ',' + (targetColor[3] + targetColorMod[3] * targetModFactor).toFixed(0) + ')';
+ ctx.lineWidth = 1;
+ target.render(ctx);
}
- for (var i = 0; i < appleObjects.length; i++) {
- appleObjects[i].destroy();
+}
+function drawSnake() {
+ ctx.beginPath();
+ ctx.strokeStyle = ctx.fillStyle = 'rgba(' + snakeColor[0] + ',' + snakeColor[1] + ',' + snakeColor[2] + ',' + snakeColor[3] + ')';
+ ctx.lineWidth = snakeWidth;
+ ctx.moveTo(snake.sgms[0].x, snake.sgms[0].y);
+ for (var s in snake.sgms) {
+ snake.sgms[s].render(ctx);
}
- if (targetObject) targetObject.destroy();
- if (scoreText) scoreText.destroy();
- snakeSegments = [];
- appleObjects = [];
- // Create score text
- scoreText = new Text2('Score: 0', {
- size: 60,
- fill: 0xFFFFFF
- });
- scoreText.anchor.set(0, 0);
- LK.gui.topLeft.addChild(scoreText);
- scoreText.x = 120;
- scoreText.y = 20;
- // Create target indicator
- targetObject = LK.getAsset('target', {
- width: 30,
- height: 30,
- color: 0x0000ff,
- shape: 'ellipse',
- anchorX: 0.5,
- anchorY: 0.5
- });
- game.addChild(targetObject);
+ ctx.stroke();
+ ctx.beginPath();
+ ctx.arc(snake.lastArm.endX(), snake.lastArm.endY(), appleWidth * .75, 0, Math.PI * 2);
+ ctx.fill();
}
-// Initialize the game
-init();
-initVisuals();
-// LK game update loop
-game.update = function () {
- if (gameState === 'play') {
- update();
- // Update score display
- if (scoreText) {
- scoreText.setText('Score: ' + score);
- }
- // Update target position
- if (targetObject && !snake.lastArm.arrived) {
- targetObject.x = target.x;
- targetObject.y = target.y;
- targetObject.visible = true;
- } else if (targetObject) {
- targetObject.visible = false;
- }
- // Update snake visual segments
- updateSnakeVisuals();
- // Update apple visuals
- updateAppleVisuals();
+function drawCursor(targetModFactor) {
+ ctx.strokeStyle = 'rgba(' + (cursorColor[0] + cursorColorMod[0] * targetModFactor).toFixed(0) + ',' + (cursorColor[1] + cursorColorMod[1] * targetModFactor).toFixed(0) + ',' + (cursorColor[2] + cursorColorMod[2] * targetModFactor).toFixed(0) + ',' + (cursorColor[3] + cursorColorMod[3] * targetModFactor).toFixed(0) + ')';
+ ctx.lineWidth = 1;
+ cursor.render(ctx);
+}
+function drawApples() {
+ ctx.fillStyle = 'rgba(' + appleColor[0] + ',' + appleColor[1] + ',' + appleColor[2] + ',' + appleColor[3] + ')';
+ for (var a in apples) {
+ var apple = apples[a],
+ appleTargetMod = 1 - apple.life / appleLife;
+ ctx.strokeStyle = 'rgba(' + (cursorColor[0] + cursorColorMod[0] * appleTargetMod).toFixed(0) + ',' + (cursorColor[1] + cursorColorMod[1] * appleTargetMod).toFixed(0) + ',' + (cursorColor[2] + cursorColorMod[2] * appleTargetMod).toFixed(0) + ',' + (cursorColor[3] + cursorColorMod[3] * appleTargetMod).toFixed(0) + ')';
+ ctx.lineWidth = 1;
+ apple.render(ctx);
}
-};
-function updateSnakeVisuals() {
- // Clear existing snake segments
- for (var i = 0; i < snakeSegments.length; i++) {
- snakeSegments[i].destroy();
- }
- snakeSegments = [];
- // Create new snake segments
- for (var s = 0; s < snake.sgms.length; s++) {
- var seg = snake.sgms[s];
- var segmentVisual = LK.getAsset('snakeSegment', {
- width: snakeWidth,
- height: segmentLength,
- color: 0x64ff64,
- shape: 'box',
- anchorX: 0.5,
- anchorY: 0
- });
- segmentVisual.x = seg.x;
- segmentVisual.y = seg.y;
- segmentVisual.rotation = seg.angle + Math.PI / 2;
- game.addChild(segmentVisual);
- snakeSegments.push(segmentVisual);
- }
- // Create snake head with proper sizing
- var head = LK.getAsset('snakeHead', {
- width: 60,
- height: 60,
- anchorX: 0.5,
- anchorY: 0.5
- });
- head.x = snake.lastArm.endX();
- head.y = snake.lastArm.endY();
- game.addChild(head);
- snakeSegments.push(head);
}
-function updateAppleVisuals() {
- // Remove apples that no longer exist
- for (var i = appleObjects.length - 1; i >= 0; i--) {
- var found = false;
- for (var a = 0; a < apples.length; a++) {
- if (Math.abs(appleObjects[i].x - apples[a].x) < 5 && Math.abs(appleObjects[i].y - apples[a].y) < 5) {
- found = true;
- break;
- }
- }
- if (!found) {
- appleObjects[i].destroy();
- appleObjects.splice(i, 1);
- }
+function render() {
+ var targetModFactor = 1 - snake.lastArm.currentDist / snake.lastArm.totalDist;
+ switch (gameState) {
+ case 'play':
+ ctx.clearRect(0, 0, cnv.width, cnv.height);
+ drawTarget(targetModFactor);
+ drawSnake();
+ drawApples();
+ drawCursor(targetModFactor);
+ ctx.fillStyle = 'rgba(' + scoreColor[0] + ',' + scoreColor[1] + ',' + scoreColor[2] + ',' + scoreColor[3] + ')';
+ ctx.textAlign = 'left';
+ ctx.textBaseline = 'top';
+ ctx.fillText('Puan: ' + score, 10, 10);
+ break;
+ case 'dead':
+ ctx.clearRect(0, 0, cnv.width, cnv.height);
+ drawSnake();
+ drawApples();
+ ctx.fillStyle = 'rgba(255,0,0,0.5)';
+ ctx.fillRect(100, 100, cnv.width - 200, cnv.height - 200);
+ ctx.textAlign = 'center';
+ ctx.textBaseline = 'middle';
+ ctx.fillStyle = ctx.strokeStyle = 'white';
+ ctx.font = 'bold 30px sans-serif';
+ ctx.fillText('Öldün', cnv.width / 2, cnv.height / 2 - 70);
+ ctx.font = 'bold 25px sans-serif';
+ ctx.fillText(deathMeans, cnv.width / 2, cnv.height / 2 - 30);
+ ctx.font = '20px sans-serif';
+ ctx.fillText('Puan:', cnv.width / 2, cnv.height / 2 + 15);
+ ctx.font = 'bold 60px sans-serif';
+ ctx.fillText(score, cnv.width / 2, cnv.height / 2 + 60);
+ ctx.font = 'lighter 10px sans-serif';
+ ctx.lineWidth = 1;
+ ctx.strokeRect(103, 103, cnv.width - 206, cnv.height - 206);
+ break;
}
}
-;
-;
\ No newline at end of file
+function animate() {
+ update();
+ render();
+ requestAnimationFrame(animate);
+}
+snake.lastArm.target(target.x, target.y);
+animate();
\ No newline at end of file