User prompt
karakter öldüğünde level 1'den başlansın
User prompt
karakter öldüğünde level 1'den başlasın
User prompt
arti varlıkları karakterin dibinde doğmasın
User prompt
karakter 30 saniye boyunca ölmez ise level 2 ye geçsin
User prompt
sol üst köşede bir level sayacı olsun
User prompt
karakter 15 saniye boyunca hareket etmez ise karakter ölsün
User prompt
arti varlıkları zeminde oluşmaya sonsuza dek devam etsin
User prompt
karakter ölünce sayaç sıfırlansın ve arti varlıkları gelmeye her zaman devam etsin
User prompt
30 saniyelik sayaç ve arti varlıklarının gelmesi oyun bitince ve tekrar başla butonuna basınca bile devam etsin
User prompt
karakter öldükten sonra her şey yeniden başlasın ve arti varlıkları gelmeye devam etsin
User prompt
karakter öldükten sonra arti varlıkları gelmeye devam etsin
User prompt
30 saniyelik süre karakter ölünce sıfırlansın
User prompt
yukarıda bir 30 saniye sayacı olsun
User prompt
eğer karakter 30 saniye boyunca ölmezse level atlasın
User prompt
arti varlıkları daha hızlı gelsin
User prompt
zeminde arti olarak adlandırdığım varlık gelsin ve karakter arti varlığına değdiğinde oyun bitsin
User prompt
zeminde arti olarak adlandırdığım varlık gelsin ve 3 saniye sonra gitsin. karakter ona değdiğinde karakter ölsün
User prompt
kamera karakteri takip etmesin
User prompt
kamera karakter ile birlikte hareket etsin
User prompt
karakter haraket edebilsin
User prompt
çimen ve hamster dışında tüm varlıkları sil
User prompt
karakter hep ölüp durmasın
User prompt
çimenli bir arazi olsun
User prompt
arka planda çimen olsun
User prompt
arka plan çimenli olsun ve sonsuz olsun
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// Hamster (player) class
var Hamster = Container.expand(function () {
var self = Container.call(this);
var hamsterSprite = self.attachAsset('hamster', {
anchorX: 0.5,
anchorY: 0.5
});
self.radius = hamsterSprite.width * 0.5;
// For collision, use self.x, self.y, self.radius
// No per-instance update needed; movement is handled by drag
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xffffff
});
/****
* Game Code
****/
// Game constants
var GAME_WIDTH = 2048;
var GAME_HEIGHT = 2732;
var HAMSTER_START_X = GAME_WIDTH / 2;
var HAMSTER_START_Y = GAME_HEIGHT - 500;
// Game state
var hamster = null;
var dragNode = null;
// --- Infinite grass background ---
var bgGrass1 = LK.getAsset('grass', {
anchorX: 0,
anchorY: 0,
width: GAME_WIDTH,
height: GAME_HEIGHT
});
var bgGrass2 = LK.getAsset('grass', {
anchorX: 0,
anchorY: 0,
width: GAME_WIDTH,
height: GAME_HEIGHT
});
bgGrass1.y = 0;
bgGrass2.y = -GAME_HEIGHT;
game.addChild(bgGrass1);
game.addChild(bgGrass2);
// --- Hamster ---
hamster = new Hamster();
hamster.x = HAMSTER_START_X;
hamster.y = HAMSTER_START_Y;
game.addChild(hamster);
// --- Drag controls ---
game.down = function (x, y, obj) {
var dx = x - hamster.x;
var dy = y - hamster.y;
if (dx * dx + dy * dy < hamster.radius * hamster.radius) {
dragNode = hamster;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.move = function (x, y, obj) {
if (dragNode) {
// Clamp hamster to game area
var nx = x;
var ny = y;
var r = hamster.radius;
if (nx < r) nx = r;
if (nx > GAME_WIDTH - r) nx = GAME_WIDTH - r;
if (ny < r + 100) ny = r + 100; // Don't allow top 100px (menu)
if (ny > GAME_HEIGHT - r) ny = GAME_HEIGHT - r;
hamster.x = nx;
hamster.y = ny;
}
};
// --- Game update ---
game.update = function () {
// Scroll background grass
var speed = 8;
bgGrass1.y += speed;
bgGrass2.y += speed;
// Loop grass backgrounds
if (bgGrass1.y >= GAME_HEIGHT) {
bgGrass1.y = bgGrass2.y - GAME_HEIGHT;
}
if (bgGrass2.y >= GAME_HEIGHT) {
bgGrass2.y = bgGrass1.y - GAME_HEIGHT;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -17,55 +17,8 @@
// For collision, use self.x, self.y, self.radius
// No per-instance update needed; movement is handled by drag
return self;
});
-// Hazard (spike) class
-var Hazard = Container.expand(function () {
- var self = Container.call(this);
- var hazardSprite = self.attachAsset('hazard', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- self.radius = hazardSprite.width * 0.5;
- return self;
-});
-// Mat (platform) class
-var Mat = Container.expand(function () {
- var self = Container.call(this);
- var matSprite = self.attachAsset('mat', {
- anchorX: 0,
- anchorY: 0
- });
- self.width = matSprite.width;
- self.height = matSprite.height;
- // Each mat can have hazards and treats as children
- self.hazards = [];
- self.treats = [];
- // Used for vertical scrolling
- self.speed = 8;
- // Update method for scrolling
- self.update = function () {
- self.y += self.speed;
- // Move hazards and treats with the mat
- for (var i = 0; i < self.hazards.length; i++) {
- self.hazards[i].y += self.speed;
- }
- for (var i = 0; i < self.treats.length; i++) {
- self.treats[i].y += self.speed;
- }
- };
- return self;
-});
-// Treat (collectible) class
-var Treat = Container.expand(function () {
- var self = Container.call(this);
- var treatSprite = self.attachAsset('treat', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- self.radius = treatSprite.width * 0.5;
- return self;
-});
/****
* Initialize Game
****/
@@ -75,40 +28,16 @@
/****
* Game Code
****/
-// Sound effects
-// Treat (collectible)
-// Hazard (spike)
-// Mat (platform)
-// Hamster (player)
// Game constants
var GAME_WIDTH = 2048;
var GAME_HEIGHT = 2732;
-var MAT_HEIGHT = 220;
-var MAT_GAP = 60;
var HAMSTER_START_X = GAME_WIDTH / 2;
var HAMSTER_START_Y = GAME_HEIGHT - 500;
-var MIN_HAZARDS = 1;
-var MAX_HAZARDS = 3;
-var MIN_TREATS = 1;
-var MAX_TREATS = 2;
-var MAT_SCROLL_BASE = 8;
-var MAT_SCROLL_INC = 0.5; // Speed increase per 10 points
// Game state
-var mats = [];
var hamster = null;
var dragNode = null;
-var lastPointer = {
- x: 0,
- y: 0
-};
-var scoreTxt = null;
-var score = 0;
-var gameOver = false;
-var matSpawnY = 0;
-var lastMatY = 0;
-var matSpeed = MAT_SCROLL_BASE;
// --- Infinite grass background ---
var bgGrass1 = LK.getAsset('grass', {
anchorX: 0,
anchorY: 0,
@@ -124,88 +53,25 @@
bgGrass1.y = 0;
bgGrass2.y = -GAME_HEIGHT;
game.addChild(bgGrass1);
game.addChild(bgGrass2);
-// --- Score display ---
-scoreTxt = new Text2('0', {
- size: 120,
- fill: 0x222222
-});
-scoreTxt.anchor.set(0.5, 0);
-LK.gui.top.addChild(scoreTxt);
// --- Hamster ---
hamster = new Hamster();
hamster.x = HAMSTER_START_X;
hamster.y = HAMSTER_START_Y;
game.addChild(hamster);
-// --- Mat spawning ---
-function spawnMat(yPos, speed) {
- var mat = new Mat();
- mat.y = yPos;
- mat.x = 0;
- mat.speed = speed;
- // Hazards
- var hazardCount = MIN_HAZARDS + Math.floor(Math.random() * (MAX_HAZARDS - MIN_HAZARDS + 1));
- for (var i = 0; i < hazardCount; i++) {
- var hazard = new Hazard();
- // Place hazard randomly, but not too close to the edge
- var margin = 200;
- hazard.x = margin + Math.random() * (GAME_WIDTH - 2 * margin);
- hazard.y = mat.y + MAT_HEIGHT / 2;
- mat.hazards.push(hazard);
- game.addChild(hazard);
- }
- // Treats
- var treatCount = MIN_TREATS + Math.floor(Math.random() * (MAX_TREATS - MIN_TREATS + 1));
- for (var i = 0; i < treatCount; i++) {
- var treat = new Treat();
- // Place treat randomly, not overlapping hazards
- var margin = 200;
- var valid = false;
- var tx = 0;
- while (!valid) {
- tx = margin + Math.random() * (GAME_WIDTH - 2 * margin);
- valid = true;
- for (var j = 0; j < mat.hazards.length; j++) {
- if (Math.abs(mat.hazards[j].x - tx) < 180) {
- valid = false;
- break;
- }
- }
- }
- treat.x = tx;
- treat.y = mat.y + MAT_HEIGHT / 2;
- mat.treats.push(treat);
- game.addChild(treat);
- }
- mats.push(mat);
- game.addChild(mat);
- lastMatY = mat.y;
-}
-// --- Initial mats ---
-matSpawnY = GAME_HEIGHT - MAT_HEIGHT;
-while (matSpawnY > -MAT_HEIGHT) {
- spawnMat(matSpawnY, matSpeed);
- matSpawnY -= MAT_HEIGHT + MAT_GAP;
-}
// --- Drag controls ---
game.down = function (x, y, obj) {
- // Only allow drag if not game over
- if (gameOver) return;
- // Only start drag if touch is on hamster
var dx = x - hamster.x;
var dy = y - hamster.y;
if (dx * dx + dy * dy < hamster.radius * hamster.radius) {
dragNode = hamster;
- lastPointer.x = x;
- lastPointer.y = y;
}
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.move = function (x, y, obj) {
- if (gameOver) return;
if (dragNode) {
// Clamp hamster to game area
var nx = x;
var ny = y;
@@ -217,150 +83,18 @@
hamster.x = nx;
hamster.y = ny;
}
};
-// --- Collision detection ---
-function circleIntersect(ax, ay, ar, bx, by, br) {
- var dx = ax - bx;
- var dy = ay - by;
- var dist = dx * dx + dy * dy;
- var rad = ar + br;
- return dist < rad * rad;
-}
// --- Game update ---
game.update = function () {
- if (gameOver) return;
// Scroll background grass
- bgGrass1.y += matSpeed;
- bgGrass2.y += matSpeed;
+ var speed = 8;
+ bgGrass1.y += speed;
+ bgGrass2.y += speed;
// Loop grass backgrounds
if (bgGrass1.y >= GAME_HEIGHT) {
bgGrass1.y = bgGrass2.y - GAME_HEIGHT;
}
if (bgGrass2.y >= GAME_HEIGHT) {
bgGrass2.y = bgGrass1.y - GAME_HEIGHT;
}
- // Increase mat speed as score increases
- matSpeed = MAT_SCROLL_BASE + MAT_SCROLL_INC * Math.floor(score / 10);
- // Move mats, hazards, treats
- for (var i = mats.length - 1; i >= 0; i--) {
- var mat = mats[i];
- mat.speed = matSpeed;
- mat.update();
- // Remove mats that are off screen
- if (mat.y > GAME_HEIGHT) {
- // Remove hazards and treats
- for (var h = 0; h < mat.hazards.length; h++) {
- mat.hazards[h].destroy();
- }
- for (var t = 0; t < mat.treats.length; t++) {
- mat.treats[t].destroy();
- }
- mat.destroy();
- mats.splice(i, 1);
- }
- }
- // Spawn new mat if needed
- var topMatY = mats.length > 0 ? mats[0].y : GAME_HEIGHT;
- if (topMatY > -MAT_HEIGHT - MAT_GAP) {
- spawnMat(topMatY - MAT_HEIGHT - MAT_GAP, matSpeed);
- }
- // --- Collisions ---
- // Hazards
- for (var i = 0; i < mats.length; i++) {
- var mat = mats[i];
- for (var h = 0; h < mat.hazards.length; h++) {
- var hazard = mat.hazards[h];
- // Add invincibility check
- if (!hazard._hit && !hamster.invincible && circleIntersect(hamster.x, hamster.y, hamster.radius * 0.7, hazard.x, hazard.y, hazard.radius * 0.8)) {
- hazard._hit = true;
- // Flash hamster red
- LK.effects.flashObject(hamster, 0xff0000, 400);
- LK.getSound('hit').play();
- // Set hamster invincible for 1.2 seconds
- hamster.invincible = true;
- hamster.alpha = 0.5;
- LK.setTimeout(function () {
- if (hamster) {
- hamster.invincible = false;
- hamster.alpha = 1;
- }
- }, 1200);
- // Do NOT end game, just give a penalty (optional: could reduce score or play effect)
- // Optionally, you could reduce score or add a penalty here
- break; // Only one hit per frame
- }
- }
- // Treats
- for (var t = mat.treats.length - 1; t >= 0; t--) {
- var treat = mat.treats[t];
- if (!treat._collected && circleIntersect(hamster.x, hamster.y, hamster.radius * 0.7, treat.x, treat.y, treat.radius * 0.8)) {
- treat._collected = true;
- LK.getSound('collect').play();
- // Animate treat
- tween(treat, {
- alpha: 0,
- scaleX: 1.5,
- scaleY: 1.5
- }, {
- duration: 200,
- onFinish: function onFinish() {
- treat.destroy();
- }
- });
- mat.treats.splice(t, 1);
- score += 1;
- LK.setScore(score);
- scoreTxt.setText(score);
- }
- }
- }
-};
-// --- Reset on game over ---
-LK.on('gameover', function () {
- // Clean up all mats, hazards, treats
- for (var i = 0; i < mats.length; i++) {
- var mat = mats[i];
- for (var h = 0; h < mat.hazards.length; h++) {
- mat.hazards[h].destroy();
- }
- for (var t = 0; t < mat.treats.length; t++) {
- mat.treats[t].destroy();
- }
- mat.destroy();
- }
- mats = [];
- // Remove hamster
- hamster.destroy();
- // Reset score
- score = 0;
- LK.setScore(0);
- scoreTxt.setText('0');
- gameOver = false;
- // Respawn hamster
- hamster = new Hamster();
- hamster.x = HAMSTER_START_X;
- hamster.y = HAMSTER_START_Y;
- hamster.invincible = true;
- hamster.alpha = 0.5;
- hamster.invincible = true;
- hamster.alpha = 0.5;
- game.addChild(hamster);
- LK.setTimeout(function () {
- if (hamster) {
- hamster.invincible = false;
- hamster.alpha = 1;
- }
- }, 1200);
- LK.setTimeout(function () {
- if (hamster) {
- hamster.invincible = false;
- hamster.alpha = 1;
- }
- }, 1200);
- // Respawn mats
- matSpawnY = GAME_HEIGHT - MAT_HEIGHT;
- while (matSpawnY > -MAT_HEIGHT) {
- spawnMat(matSpawnY, MAT_SCROLL_BASE);
- matSpawnY -= MAT_HEIGHT + MAT_GAP;
- }
-});
\ No newline at end of file
+};
\ No newline at end of file
Fullscreen modern App Store landscape banner, 16:9, high definition, for a game titled "Hamster vs Mat" and with the description "Drag to move the hamster across scrolling mats, dodging hazards and collecting treats for points. Survive as long as possible!". No text on banner!
Matematikteki artı sembolü. In-Game asset. 2d. High contrast. no shadow
beyaz renk yerine sarı bir rengi olsun