Code edit (1 edits merged)
Please save this source code
User prompt
Dinozor'da "eğilme" olmayacak sadece " zıplama" olacak.
User prompt
oyunda eğilme olmasın. Ekranın neresine basarsam basayım sadece zıplasın. Ayrıca uzun süreli basarsam daha yüksek zıplamalı.
User prompt
Engel çeşitliliğini artır. Yani hep aynı sırada aynı konumda engeller çıkmasın random çıkabilir. Ayrıca puan çoğaldıkça oyun zorlaşmalı.
User prompt
dinozor aşağıya doğru zıplıyor. yukarı doğru zıplaması lazım.
Code edit (1 edits merged)
Please save this source code
User prompt
Dino Run!
Initial prompt
Chrome dinozor oyunu yap.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Cactus obstacle var Cactus = Container.expand(function () { var self = Container.call(this); var cactusSprite = self.attachAsset('cactus', { anchorX: 0.5, anchorY: 1 }); self.width = cactusSprite.width; self.height = cactusSprite.height; self.speed = 0; // Set by game self.update = function () { self.x -= self.speed; }; return self; }); // Dino (player) class var Dino = Container.expand(function () { var self = Container.call(this); var dinoSprite = self.attachAsset('dino', { anchorX: 0.5, anchorY: 1 }); self.width = dinoSprite.width; self.height = dinoSprite.height; // State self.isJumping = false; self.isDucking = false; self.velocityY = 0; self.gravity = 2.2; self.jumpStrength = -48; self.groundY = 0; // Set after adding to game // Ducking shrinks dino self.setDucking = function (ducking) { if (ducking && !self.isDucking && !self.isJumping) { self.isDucking = true; tween(self, { scaleY: 0.5 }, { duration: 120, easing: tween.easeIn }); tween(self, { y: self.groundY + self.height * 0.5 }, { duration: 120, easing: tween.easeIn }); LK.getSound('duck').play(); } else if (!ducking && self.isDucking) { self.isDucking = false; tween(self, { scaleY: 1 }, { duration: 120, easing: tween.easeOut }); tween(self, { y: self.groundY }, { duration: 120, easing: tween.easeOut }); } }; // Jump self.jump = function () { if (!self.isJumping && !self.isDucking) { self.isJumping = true; self.velocityY = self.jumpStrength; LK.getSound('jump').play(); } }; // Update per frame self.update = function () { if (self.isJumping) { self.y += self.velocityY; self.velocityY += self.gravity; if (self.y >= self.groundY) { self.y = self.groundY; self.isJumping = false; self.velocityY = 0; } } }; return self; }); // Pterodactyl obstacle var Ptero = Container.expand(function () { var self = Container.call(this); var pteroSprite = self.attachAsset('ptero', { anchorX: 0.5, anchorY: 0.5 }); self.width = pteroSprite.width; self.height = pteroSprite.height; self.speed = 0; // Set by game self.update = function () { self.x -= self.speed; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xf5f5f5 }); /**** * Game Code ****/ // Jump sound // Ground // Pterodactyl (obstacle) // Cactus (obstacle) // Dinosaur (player) // Game constants var GROUND_Y = 2200; var DINO_START_X = 400; var OBSTACLE_MIN_GAP = 700; var OBSTACLE_MAX_GAP = 1200; var PTERO_MIN_Y = GROUND_Y - 400; var PTERO_MAX_Y = GROUND_Y - 700; var GAME_SPEED_START = 22; var GAME_SPEED_MAX = 60; var GAME_SPEEDUP_EVERY = 600; // ticks var GAME_SPEEDUP_AMOUNT = 1.2; // Game state var dino; var ground; var obstacles = []; var gameSpeed = GAME_SPEED_START; var ticksSinceLastObstacle = 0; var nextObstacleGap = 0; var score = 0; var scoreTxt; var dragNode = null; var isTouching = false; var ducking = false; var lastObstacleType = null; // Add ground ground = LK.getAsset('ground', { anchorX: 0, anchorY: 0, x: 0, y: GROUND_Y + 1 }); game.addChild(ground); // Add dino dino = new Dino(); game.addChild(dino); dino.x = DINO_START_X; dino.groundY = GROUND_Y; dino.y = GROUND_Y; // Score text scoreTxt = new Text2('0', { size: 120, fill: "#222" }); scoreTxt.anchor.set(0.5, 0); LK.gui.top.addChild(scoreTxt); // Helper: spawn obstacle function spawnObstacle() { var type = Math.random() < 0.7 ? 'cactus' : 'ptero'; // Avoid two pteros in a row if (type === 'ptero' && lastObstacleType === 'ptero') type = 'cactus'; lastObstacleType = type; var obs; if (type === 'cactus') { obs = new Cactus(); obs.x = 2048 + obs.width; obs.y = GROUND_Y; obs.speed = gameSpeed; } else { obs = new Ptero(); obs.x = 2048 + obs.width; obs.y = PTERO_MIN_Y + Math.floor(Math.random() * (PTERO_MAX_Y - PTERO_MIN_Y)); obs.speed = gameSpeed + 2; } obstacles.push(obs); game.addChild(obs); } // Helper: reset game state function resetGame() { // Remove obstacles for (var i = 0; i < obstacles.length; i++) { obstacles[i].destroy(); } obstacles = []; gameSpeed = GAME_SPEED_START; ticksSinceLastObstacle = 0; nextObstacleGap = OBSTACLE_MIN_GAP + Math.floor(Math.random() * (OBSTACLE_MAX_GAP - OBSTACLE_MIN_GAP)); score = 0; scoreTxt.setText(score); dino.x = DINO_START_X; dino.y = GROUND_Y; dino.isJumping = false; dino.isDucking = false; dino.velocityY = 0; dino.setDucking(false); lastObstacleType = null; } // Touch/drag controls game.down = function (x, y, obj) { isTouching = true; // If touch is in lower half, duck; else, jump if (y > 1366) { ducking = true; dino.setDucking(true); } else { dino.jump(); } }; game.up = function (x, y, obj) { isTouching = false; ducking = false; dino.setDucking(false); }; game.move = function (x, y, obj) { // If holding and finger moves to lower half, duck if (isTouching) { if (y > 1366) { if (!ducking) { ducking = true; dino.setDucking(true); } } else { if (ducking) { ducking = false; dino.setDucking(false); } } } }; // Main game loop game.update = function () { // Speed up over time if (LK.ticks % GAME_SPEEDUP_EVERY === 0 && gameSpeed < GAME_SPEED_MAX) { gameSpeed += GAME_SPEEDUP_AMOUNT; if (gameSpeed > GAME_SPEED_MAX) gameSpeed = GAME_SPEED_MAX; } // Update dino dino.update(); // Update obstacles for (var i = obstacles.length - 1; i >= 0; i--) { var obs = obstacles[i]; obs.speed = gameSpeed + (obs instanceof Ptero ? 2 : 0); obs.update(); // Remove if off screen if (obs.x < -300) { obs.destroy(); obstacles.splice(i, 1); continue; } // Collision detection if (dino.intersects(obs)) { LK.getSound('hit').play(); LK.effects.flashScreen(0xff0000, 800); LK.showGameOver(); return; } } // Obstacle spawning ticksSinceLastObstacle += gameSpeed; if (ticksSinceLastObstacle >= nextObstacleGap) { spawnObstacle(); ticksSinceLastObstacle = 0; nextObstacleGap = OBSTACLE_MIN_GAP + Math.floor(Math.random() * (OBSTACLE_MAX_GAP - OBSTACLE_MIN_GAP)); } // Score increases with distance score += Math.floor(gameSpeed / 6); scoreTxt.setText(score); LK.setScore(score); }; // Reset game state on game start resetGame();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,285 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+// Cactus obstacle
+var Cactus = Container.expand(function () {
+ var self = Container.call(this);
+ var cactusSprite = self.attachAsset('cactus', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ self.width = cactusSprite.width;
+ self.height = cactusSprite.height;
+ self.speed = 0; // Set by game
+ self.update = function () {
+ self.x -= self.speed;
+ };
+ return self;
+});
+// Dino (player) class
+var Dino = Container.expand(function () {
+ var self = Container.call(this);
+ var dinoSprite = self.attachAsset('dino', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ self.width = dinoSprite.width;
+ self.height = dinoSprite.height;
+ // State
+ self.isJumping = false;
+ self.isDucking = false;
+ self.velocityY = 0;
+ self.gravity = 2.2;
+ self.jumpStrength = -48;
+ self.groundY = 0; // Set after adding to game
+ // Ducking shrinks dino
+ self.setDucking = function (ducking) {
+ if (ducking && !self.isDucking && !self.isJumping) {
+ self.isDucking = true;
+ tween(self, {
+ scaleY: 0.5
+ }, {
+ duration: 120,
+ easing: tween.easeIn
+ });
+ tween(self, {
+ y: self.groundY + self.height * 0.5
+ }, {
+ duration: 120,
+ easing: tween.easeIn
+ });
+ LK.getSound('duck').play();
+ } else if (!ducking && self.isDucking) {
+ self.isDucking = false;
+ tween(self, {
+ scaleY: 1
+ }, {
+ duration: 120,
+ easing: tween.easeOut
+ });
+ tween(self, {
+ y: self.groundY
+ }, {
+ duration: 120,
+ easing: tween.easeOut
+ });
+ }
+ };
+ // Jump
+ self.jump = function () {
+ if (!self.isJumping && !self.isDucking) {
+ self.isJumping = true;
+ self.velocityY = self.jumpStrength;
+ LK.getSound('jump').play();
+ }
+ };
+ // Update per frame
+ self.update = function () {
+ if (self.isJumping) {
+ self.y += self.velocityY;
+ self.velocityY += self.gravity;
+ if (self.y >= self.groundY) {
+ self.y = self.groundY;
+ self.isJumping = false;
+ self.velocityY = 0;
+ }
+ }
+ };
+ return self;
+});
+// Pterodactyl obstacle
+var Ptero = Container.expand(function () {
+ var self = Container.call(this);
+ var pteroSprite = self.attachAsset('ptero', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.width = pteroSprite.width;
+ self.height = pteroSprite.height;
+ self.speed = 0; // Set by game
+ self.update = function () {
+ self.x -= self.speed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0xf5f5f5
+});
+
+/****
+* Game Code
+****/
+// Jump sound
+// Ground
+// Pterodactyl (obstacle)
+// Cactus (obstacle)
+// Dinosaur (player)
+// Game constants
+var GROUND_Y = 2200;
+var DINO_START_X = 400;
+var OBSTACLE_MIN_GAP = 700;
+var OBSTACLE_MAX_GAP = 1200;
+var PTERO_MIN_Y = GROUND_Y - 400;
+var PTERO_MAX_Y = GROUND_Y - 700;
+var GAME_SPEED_START = 22;
+var GAME_SPEED_MAX = 60;
+var GAME_SPEEDUP_EVERY = 600; // ticks
+var GAME_SPEEDUP_AMOUNT = 1.2;
+// Game state
+var dino;
+var ground;
+var obstacles = [];
+var gameSpeed = GAME_SPEED_START;
+var ticksSinceLastObstacle = 0;
+var nextObstacleGap = 0;
+var score = 0;
+var scoreTxt;
+var dragNode = null;
+var isTouching = false;
+var ducking = false;
+var lastObstacleType = null;
+// Add ground
+ground = LK.getAsset('ground', {
+ anchorX: 0,
+ anchorY: 0,
+ x: 0,
+ y: GROUND_Y + 1
+});
+game.addChild(ground);
+// Add dino
+dino = new Dino();
+game.addChild(dino);
+dino.x = DINO_START_X;
+dino.groundY = GROUND_Y;
+dino.y = GROUND_Y;
+// Score text
+scoreTxt = new Text2('0', {
+ size: 120,
+ fill: "#222"
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+// Helper: spawn obstacle
+function spawnObstacle() {
+ var type = Math.random() < 0.7 ? 'cactus' : 'ptero';
+ // Avoid two pteros in a row
+ if (type === 'ptero' && lastObstacleType === 'ptero') type = 'cactus';
+ lastObstacleType = type;
+ var obs;
+ if (type === 'cactus') {
+ obs = new Cactus();
+ obs.x = 2048 + obs.width;
+ obs.y = GROUND_Y;
+ obs.speed = gameSpeed;
+ } else {
+ obs = new Ptero();
+ obs.x = 2048 + obs.width;
+ obs.y = PTERO_MIN_Y + Math.floor(Math.random() * (PTERO_MAX_Y - PTERO_MIN_Y));
+ obs.speed = gameSpeed + 2;
+ }
+ obstacles.push(obs);
+ game.addChild(obs);
+}
+// Helper: reset game state
+function resetGame() {
+ // Remove obstacles
+ for (var i = 0; i < obstacles.length; i++) {
+ obstacles[i].destroy();
+ }
+ obstacles = [];
+ gameSpeed = GAME_SPEED_START;
+ ticksSinceLastObstacle = 0;
+ nextObstacleGap = OBSTACLE_MIN_GAP + Math.floor(Math.random() * (OBSTACLE_MAX_GAP - OBSTACLE_MIN_GAP));
+ score = 0;
+ scoreTxt.setText(score);
+ dino.x = DINO_START_X;
+ dino.y = GROUND_Y;
+ dino.isJumping = false;
+ dino.isDucking = false;
+ dino.velocityY = 0;
+ dino.setDucking(false);
+ lastObstacleType = null;
+}
+// Touch/drag controls
+game.down = function (x, y, obj) {
+ isTouching = true;
+ // If touch is in lower half, duck; else, jump
+ if (y > 1366) {
+ ducking = true;
+ dino.setDucking(true);
+ } else {
+ dino.jump();
+ }
+};
+game.up = function (x, y, obj) {
+ isTouching = false;
+ ducking = false;
+ dino.setDucking(false);
+};
+game.move = function (x, y, obj) {
+ // If holding and finger moves to lower half, duck
+ if (isTouching) {
+ if (y > 1366) {
+ if (!ducking) {
+ ducking = true;
+ dino.setDucking(true);
+ }
+ } else {
+ if (ducking) {
+ ducking = false;
+ dino.setDucking(false);
+ }
+ }
+ }
+};
+// Main game loop
+game.update = function () {
+ // Speed up over time
+ if (LK.ticks % GAME_SPEEDUP_EVERY === 0 && gameSpeed < GAME_SPEED_MAX) {
+ gameSpeed += GAME_SPEEDUP_AMOUNT;
+ if (gameSpeed > GAME_SPEED_MAX) gameSpeed = GAME_SPEED_MAX;
+ }
+ // Update dino
+ dino.update();
+ // Update obstacles
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ var obs = obstacles[i];
+ obs.speed = gameSpeed + (obs instanceof Ptero ? 2 : 0);
+ obs.update();
+ // Remove if off screen
+ if (obs.x < -300) {
+ obs.destroy();
+ obstacles.splice(i, 1);
+ continue;
+ }
+ // Collision detection
+ if (dino.intersects(obs)) {
+ LK.getSound('hit').play();
+ LK.effects.flashScreen(0xff0000, 800);
+ LK.showGameOver();
+ return;
+ }
+ }
+ // Obstacle spawning
+ ticksSinceLastObstacle += gameSpeed;
+ if (ticksSinceLastObstacle >= nextObstacleGap) {
+ spawnObstacle();
+ ticksSinceLastObstacle = 0;
+ nextObstacleGap = OBSTACLE_MIN_GAP + Math.floor(Math.random() * (OBSTACLE_MAX_GAP - OBSTACLE_MIN_GAP));
+ }
+ // Score increases with distance
+ score += Math.floor(gameSpeed / 6);
+ scoreTxt.setText(score);
+ LK.setScore(score);
+};
+// Reset game state on game start
+resetGame();
\ No newline at end of file