/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var ClickIndicator = Container.expand(function () {
var self = Container.call(this);
var indicator = self.attachAsset('click_indicator', {
anchorX: 0.5,
anchorY: 0.5
});
self.show = function (x, y) {
self.x = x;
self.y = y;
self.alpha = 1;
self.scaleX = 0.5;
self.scaleY = 0.5;
tween(self, {
alpha: 0,
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
};
return self;
});
var Equipment = Container.expand(function (type) {
var self = Container.call(this);
var equipmentType = type || 'basic';
var assetName = equipmentType === 'basic' ? 'equipment_basic' : 'equipment_advanced';
var equipment = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.equipmentType = equipmentType;
return self;
});
var Samurai = Container.expand(function () {
var self = Container.call(this);
var currentMuscleLevel = 0;
var samuraiGraphics = self.attachAsset('samurai_base', {
anchorX: 0.5,
anchorY: 1.0
});
self.updateMuscleLevel = function (level) {
if (level === currentMuscleLevel) return;
currentMuscleLevel = level;
self.removeChild(samuraiGraphics);
var assetName = 'samurai_base';
if (level >= 2) assetName = 'samurai_muscle2';
if (level >= 3) assetName = 'samurai_muscle3';
samuraiGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 1.0
});
// Visual feedback for level up
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.easeOut
});
}
});
};
self.performWorkout = function () {
// Squat animation - compress vertically to simulate squatting
tween(self, {
scaleY: 0.8
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
// Return to normal position
tween(self, {
scaleY: 1.0
}, {
duration: 150,
easing: tween.easeOut
});
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x4A4A4A
});
/****
* Game Code
****/
// Reset game variables to initial state
storage.strengthPoints = 0;
storage.totalClicks = 0;
storage.muscleLevel = 0;
storage.clickPower = 1;
storage.equipmentLevel = 0;
storage.clickEfficiency = 1;
// Game variables
var strengthPoints = 0;
var totalClicks = 0;
var muscleLevel = 0;
var clickPower = 1;
var equipmentLevel = 0;
var clickEfficiency = 1;
var clicksForEfficiencyCheck = 0;
// Fatigue system variables
var lastClickTime = 0;
var clickCount = 0;
var fatigueStartTime = 0;
var isFatigued = false;
var BASE_FATIGUE_THRESHOLD = 10; // clicks in short time
var FATIGUE_TIME_WINDOW = 1000; // 1 second
var BASE_FATIGUE_DURATION = 3000; // 3 seconds cooldown
// Functions to calculate fatigue based on muscle level
function getFatigueThreshold() {
return BASE_FATIGUE_THRESHOLD + muscleLevel * 2; // More clicks allowed at higher levels
}
function getFatigueDuration() {
return Math.max(1000, BASE_FATIGUE_DURATION - muscleLevel * 500); // Shorter cooldown at higher levels
}
// Create background
var background = game.attachAsset('dojo_background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
// Create samurai character
var samurai = game.addChild(new Samurai());
samurai.x = 1024;
samurai.y = 1900; // Position in front of koltuk (koltuk is at y=2000)
samurai.updateMuscleLevel(muscleLevel);
// Create koltuk (chair)
var koltuk = game.attachAsset('koltuk', {
anchorX: 0.5,
anchorY: 0.5
});
koltuk.x = 1024;
koltuk.y = 2000; // Position below samurai (samurai is at y=1800)
// Create equipment
var equipment = game.addChild(new Equipment(equipmentLevel > 0 ? 'advanced' : 'basic'));
equipment.x = 1024;
equipment.y = 2200;
// Music control variables
var isMusicPlaying = storage.isMusicPlaying !== undefined ? storage.isMusicPlaying : true;
// UI Elements
var strengthText = new Text2('Strength: ' + strengthPoints, {
size: 80,
fill: 0xFFFFFF
});
strengthText.anchor.set(0.5, 0);
LK.gui.top.addChild(strengthText);
var clickText = new Text2('Clicks: ' + totalClicks, {
size: 60,
fill: 0xFFFF00
});
clickText.anchor.set(0, 0);
clickText.x = 50;
clickText.y = 100;
LK.gui.topLeft.addChild(clickText);
var levelText = new Text2('Muscle Level: ' + muscleLevel, {
size: 60,
fill: 0xFF6347
});
levelText.anchor.set(1, 0);
LK.gui.topRight.addChild(levelText);
var instructionText = new Text2('Tap the samurai to train!', {
size: 50,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(instructionText);
var fatigueText = new Text2('', {
size: 60,
fill: 0xFF0000
});
fatigueText.anchor.set(0.5, 0.5);
fatigueText.x = 1024;
fatigueText.y = 1400;
LK.gui.center.addChild(fatigueText);
// Music toggle button
var musicButton = new Text2(isMusicPlaying ? '🔊' : '🔇', {
size: 80,
fill: 0xFFFFFF
});
musicButton.anchor.set(1, 0);
musicButton.x = -50;
musicButton.y = 50;
LK.gui.topRight.addChild(musicButton);
// Click indicators array
var clickIndicators = [];
// Music control functions
function toggleMusic() {
if (isMusicPlaying) {
LK.stopMusic();
isMusicPlaying = false;
musicButton.setText('🔇');
} else {
LK.playMusic('sakinses1');
isMusicPlaying = true;
musicButton.setText('🔊');
}
storage.isMusicPlaying = isMusicPlaying;
}
// Start music if enabled
if (isMusicPlaying) {
LK.playMusic('sakinses1');
}
// Functions
function updateUI() {
strengthText.setText('Strength: ' + strengthPoints);
clickText.setText('Clicks: ' + totalClicks);
levelText.setText('Muscle Level: ' + muscleLevel);
// Update fatigue UI
if (isFatigued) {
var remainingTime = Math.ceil((getFatigueDuration() - (LK.ticks * 16.67 - fatigueStartTime)) / 1000);
if (remainingTime > 0) {
fatigueText.setText('Samurai is tired! Wait ' + remainingTime + 's');
fatigueText.alpha = 1;
} else {
fatigueText.setText('');
fatigueText.alpha = 0;
}
} else {
fatigueText.setText('');
fatigueText.alpha = 0;
}
// Save progress
storage.strengthPoints = strengthPoints;
storage.totalClicks = totalClicks;
storage.muscleLevel = muscleLevel;
storage.clickPower = clickPower;
storage.equipmentLevel = equipmentLevel;
storage.clickEfficiency = clickEfficiency;
}
function checkLevelUp() {
var requiredStrength;
if (muscleLevel === 0) {
requiredStrength = 200;
} else if (muscleLevel === 1) {
requiredStrength = 400;
} else if (muscleLevel === 2) {
requiredStrength = 650;
}
if (strengthPoints >= requiredStrength && muscleLevel < 3) {
muscleLevel++;
clickPower += 2;
samurai.updateMuscleLevel(muscleLevel);
LK.getSound('levelup_sound').play();
// Flash effect for level up
LK.effects.flashObject(samurai, 0x00FF00, 1000);
// Update equipment at certain levels
if (muscleLevel >= 2 && equipmentLevel === 0) {
equipmentLevel = 1;
equipment.destroy();
equipment = game.addChild(new Equipment('advanced'));
equipment.x = 1024;
equipment.y = 2200;
}
updateUI();
}
}
function handleWorkout(x, y) {
var currentTime = LK.ticks * 16.67; // Convert to milliseconds
// Check if character is fatigued
if (isFatigued) {
if (currentTime - fatigueStartTime >= getFatigueDuration()) {
// Fatigue period is over
isFatigued = false;
clickCount = 0;
} else {
// Still fatigued, ignore click
updateUI();
return;
}
}
// Track clicking speed
if (currentTime - lastClickTime < FATIGUE_TIME_WINDOW) {
clickCount++;
} else {
clickCount = 1; // Reset counter if enough time has passed
}
lastClickTime = currentTime;
// Check if clicking too fast
if (clickCount >= getFatigueThreshold()) {
isFatigued = true;
fatigueStartTime = currentTime;
// Visual feedback for fatigue
LK.effects.flashObject(samurai, 0xFF0000, 500);
updateUI();
return;
}
totalClicks++;
clicksForEfficiencyCheck++;
// Efficiency system: After 50 total clicks, every 5 clicks gives 1 strength point
var strengthGain = 0;
var levelMultiplier = 1 + muscleLevel * 0.5; // Higher levels give more strength
if (totalClicks <= 50) {
// Early game: every click gives 1 strength point
strengthGain = Math.floor(clickPower * levelMultiplier);
} else {
// Late game: every 5 clicks gives 1 strength point
if (clicksForEfficiencyCheck >= 5) {
strengthGain = Math.floor(clickPower * levelMultiplier);
clicksForEfficiencyCheck = 0;
}
}
// Increase strength points
strengthPoints += strengthGain;
// Play workout sound
LK.getSound('workout_sound').play();
// Perform workout animation
samurai.performWorkout();
// Create click indicator
var indicator = game.addChild(new ClickIndicator());
indicator.show(x, y);
clickIndicators.push(indicator);
// Update UI and check for level up
updateUI();
checkLevelUp();
}
// Music button event handler
musicButton.down = function (x, y, obj) {
toggleMusic();
};
// Event handlers
game.down = function (x, y, obj) {
// Check if click is near samurai
var distance = Math.sqrt(Math.pow(x - samurai.x, 2) + Math.pow(y - samurai.y, 2));
if (distance < 200) {
handleWorkout(x, y);
}
};
samurai.down = function (x, y, obj) {
var globalPos = samurai.toGlobal({
x: x,
y: y
});
var gamePos = game.toLocal(globalPos);
handleWorkout(gamePos.x, gamePos.y);
};
// Game update loop
game.update = function () {
// Clean up finished click indicators
for (var i = clickIndicators.length - 1; i >= 0; i--) {
if (clickIndicators[i].alpha <= 0) {
clickIndicators.splice(i, 1);
}
}
// Update fatigue system
if (isFatigued) {
var currentTime = LK.ticks * 16.67;
if (currentTime - fatigueStartTime >= getFatigueDuration()) {
isFatigued = false;
clickCount = 0;
}
updateUI();
}
// Win condition: Reach 717 strength
if (strengthPoints >= 717) {
// Show custom win message
var winText = new Text2('Kazandın!\nAtalarını gururlandırdın!', {
size: 120,
fill: 0xFF0000
});
winText.anchor.set(0.5, 0.5);
LK.gui.center.addChild(winText);
// Show thank you message and credits after a delay
LK.setTimeout(function () {
// Remove win text
winText.destroy();
// Show thank you and credits
var thankYouText = new Text2('Oyunumuzu oynadığınız için teşekkürler\n\nYapımcılar:\nRıfat ve Lider', {
size: 80,
fill: 0xFFFFFF
});
thankYouText.anchor.set(0.5, 0.5);
LK.gui.center.addChild(thankYouText);
// Show you win after another delay
LK.setTimeout(function () {
LK.showYouWin();
}, 3000);
}, 2000);
}
}; /****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var ClickIndicator = Container.expand(function () {
var self = Container.call(this);
var indicator = self.attachAsset('click_indicator', {
anchorX: 0.5,
anchorY: 0.5
});
self.show = function (x, y) {
self.x = x;
self.y = y;
self.alpha = 1;
self.scaleX = 0.5;
self.scaleY = 0.5;
tween(self, {
alpha: 0,
scaleX: 1.5,
scaleY: 1.5
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
};
return self;
});
var Equipment = Container.expand(function (type) {
var self = Container.call(this);
var equipmentType = type || 'basic';
var assetName = equipmentType === 'basic' ? 'equipment_basic' : 'equipment_advanced';
var equipment = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
self.equipmentType = equipmentType;
return self;
});
var Samurai = Container.expand(function () {
var self = Container.call(this);
var currentMuscleLevel = 0;
var samuraiGraphics = self.attachAsset('samurai_base', {
anchorX: 0.5,
anchorY: 1.0
});
self.updateMuscleLevel = function (level) {
if (level === currentMuscleLevel) return;
currentMuscleLevel = level;
self.removeChild(samuraiGraphics);
var assetName = 'samurai_base';
if (level >= 2) assetName = 'samurai_muscle2';
if (level >= 3) assetName = 'samurai_muscle3';
samuraiGraphics = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 1.0
});
// Visual feedback for level up
tween(self, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.easeOut
});
}
});
};
self.performWorkout = function () {
// Squat animation - compress vertically to simulate squatting
tween(self, {
scaleY: 0.8
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
// Return to normal position
tween(self, {
scaleY: 1.0
}, {
duration: 150,
easing: tween.easeOut
});
}
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x4A4A4A
});
/****
* Game Code
****/
// Reset game variables to initial state
storage.strengthPoints = 0;
storage.totalClicks = 0;
storage.muscleLevel = 0;
storage.clickPower = 1;
storage.equipmentLevel = 0;
storage.clickEfficiency = 1;
// Game variables
var strengthPoints = 0;
var totalClicks = 0;
var muscleLevel = 0;
var clickPower = 1;
var equipmentLevel = 0;
var clickEfficiency = 1;
var clicksForEfficiencyCheck = 0;
// Fatigue system variables
var lastClickTime = 0;
var clickCount = 0;
var fatigueStartTime = 0;
var isFatigued = false;
var BASE_FATIGUE_THRESHOLD = 10; // clicks in short time
var FATIGUE_TIME_WINDOW = 1000; // 1 second
var BASE_FATIGUE_DURATION = 3000; // 3 seconds cooldown
// Functions to calculate fatigue based on muscle level
function getFatigueThreshold() {
return BASE_FATIGUE_THRESHOLD + muscleLevel * 2; // More clicks allowed at higher levels
}
function getFatigueDuration() {
return Math.max(1000, BASE_FATIGUE_DURATION - muscleLevel * 500); // Shorter cooldown at higher levels
}
// Create background
var background = game.attachAsset('dojo_background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
// Create samurai character
var samurai = game.addChild(new Samurai());
samurai.x = 1024;
samurai.y = 1900; // Position in front of koltuk (koltuk is at y=2000)
samurai.updateMuscleLevel(muscleLevel);
// Create koltuk (chair)
var koltuk = game.attachAsset('koltuk', {
anchorX: 0.5,
anchorY: 0.5
});
koltuk.x = 1024;
koltuk.y = 2000; // Position below samurai (samurai is at y=1800)
// Create equipment
var equipment = game.addChild(new Equipment(equipmentLevel > 0 ? 'advanced' : 'basic'));
equipment.x = 1024;
equipment.y = 2200;
// Music control variables
var isMusicPlaying = storage.isMusicPlaying !== undefined ? storage.isMusicPlaying : true;
// UI Elements
var strengthText = new Text2('Strength: ' + strengthPoints, {
size: 80,
fill: 0xFFFFFF
});
strengthText.anchor.set(0.5, 0);
LK.gui.top.addChild(strengthText);
var clickText = new Text2('Clicks: ' + totalClicks, {
size: 60,
fill: 0xFFFF00
});
clickText.anchor.set(0, 0);
clickText.x = 50;
clickText.y = 100;
LK.gui.topLeft.addChild(clickText);
var levelText = new Text2('Muscle Level: ' + muscleLevel, {
size: 60,
fill: 0xFF6347
});
levelText.anchor.set(1, 0);
LK.gui.topRight.addChild(levelText);
var instructionText = new Text2('Tap the samurai to train!', {
size: 50,
fill: 0xFFFFFF
});
instructionText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(instructionText);
var fatigueText = new Text2('', {
size: 60,
fill: 0xFF0000
});
fatigueText.anchor.set(0.5, 0.5);
fatigueText.x = 1024;
fatigueText.y = 1400;
LK.gui.center.addChild(fatigueText);
// Music toggle button
var musicButton = new Text2(isMusicPlaying ? '🔊' : '🔇', {
size: 80,
fill: 0xFFFFFF
});
musicButton.anchor.set(1, 0);
musicButton.x = -50;
musicButton.y = 50;
LK.gui.topRight.addChild(musicButton);
// Click indicators array
var clickIndicators = [];
// Music control functions
function toggleMusic() {
if (isMusicPlaying) {
LK.stopMusic();
isMusicPlaying = false;
musicButton.setText('🔇');
} else {
LK.playMusic('sakinses1');
isMusicPlaying = true;
musicButton.setText('🔊');
}
storage.isMusicPlaying = isMusicPlaying;
}
// Start music if enabled
if (isMusicPlaying) {
LK.playMusic('sakinses1');
}
// Functions
function updateUI() {
strengthText.setText('Strength: ' + strengthPoints);
clickText.setText('Clicks: ' + totalClicks);
levelText.setText('Muscle Level: ' + muscleLevel);
// Update fatigue UI
if (isFatigued) {
var remainingTime = Math.ceil((getFatigueDuration() - (LK.ticks * 16.67 - fatigueStartTime)) / 1000);
if (remainingTime > 0) {
fatigueText.setText('Samurai is tired! Wait ' + remainingTime + 's');
fatigueText.alpha = 1;
} else {
fatigueText.setText('');
fatigueText.alpha = 0;
}
} else {
fatigueText.setText('');
fatigueText.alpha = 0;
}
// Save progress
storage.strengthPoints = strengthPoints;
storage.totalClicks = totalClicks;
storage.muscleLevel = muscleLevel;
storage.clickPower = clickPower;
storage.equipmentLevel = equipmentLevel;
storage.clickEfficiency = clickEfficiency;
}
function checkLevelUp() {
var requiredStrength;
if (muscleLevel === 0) {
requiredStrength = 200;
} else if (muscleLevel === 1) {
requiredStrength = 400;
} else if (muscleLevel === 2) {
requiredStrength = 650;
}
if (strengthPoints >= requiredStrength && muscleLevel < 3) {
muscleLevel++;
clickPower += 2;
samurai.updateMuscleLevel(muscleLevel);
LK.getSound('levelup_sound').play();
// Flash effect for level up
LK.effects.flashObject(samurai, 0x00FF00, 1000);
// Update equipment at certain levels
if (muscleLevel >= 2 && equipmentLevel === 0) {
equipmentLevel = 1;
equipment.destroy();
equipment = game.addChild(new Equipment('advanced'));
equipment.x = 1024;
equipment.y = 2200;
}
updateUI();
}
}
function handleWorkout(x, y) {
var currentTime = LK.ticks * 16.67; // Convert to milliseconds
// Check if character is fatigued
if (isFatigued) {
if (currentTime - fatigueStartTime >= getFatigueDuration()) {
// Fatigue period is over
isFatigued = false;
clickCount = 0;
} else {
// Still fatigued, ignore click
updateUI();
return;
}
}
// Track clicking speed
if (currentTime - lastClickTime < FATIGUE_TIME_WINDOW) {
clickCount++;
} else {
clickCount = 1; // Reset counter if enough time has passed
}
lastClickTime = currentTime;
// Check if clicking too fast
if (clickCount >= getFatigueThreshold()) {
isFatigued = true;
fatigueStartTime = currentTime;
// Visual feedback for fatigue
LK.effects.flashObject(samurai, 0xFF0000, 500);
updateUI();
return;
}
totalClicks++;
clicksForEfficiencyCheck++;
// Efficiency system: After 50 total clicks, every 5 clicks gives 1 strength point
var strengthGain = 0;
var levelMultiplier = 1 + muscleLevel * 0.5; // Higher levels give more strength
if (totalClicks <= 50) {
// Early game: every click gives 1 strength point
strengthGain = Math.floor(clickPower * levelMultiplier);
} else {
// Late game: every 5 clicks gives 1 strength point
if (clicksForEfficiencyCheck >= 5) {
strengthGain = Math.floor(clickPower * levelMultiplier);
clicksForEfficiencyCheck = 0;
}
}
// Increase strength points
strengthPoints += strengthGain;
// Play workout sound
LK.getSound('workout_sound').play();
// Perform workout animation
samurai.performWorkout();
// Create click indicator
var indicator = game.addChild(new ClickIndicator());
indicator.show(x, y);
clickIndicators.push(indicator);
// Update UI and check for level up
updateUI();
checkLevelUp();
}
// Music button event handler
musicButton.down = function (x, y, obj) {
toggleMusic();
};
// Event handlers
game.down = function (x, y, obj) {
// Check if click is near samurai
var distance = Math.sqrt(Math.pow(x - samurai.x, 2) + Math.pow(y - samurai.y, 2));
if (distance < 200) {
handleWorkout(x, y);
}
};
samurai.down = function (x, y, obj) {
var globalPos = samurai.toGlobal({
x: x,
y: y
});
var gamePos = game.toLocal(globalPos);
handleWorkout(gamePos.x, gamePos.y);
};
// Game update loop
game.update = function () {
// Clean up finished click indicators
for (var i = clickIndicators.length - 1; i >= 0; i--) {
if (clickIndicators[i].alpha <= 0) {
clickIndicators.splice(i, 1);
}
}
// Update fatigue system
if (isFatigued) {
var currentTime = LK.ticks * 16.67;
if (currentTime - fatigueStartTime >= getFatigueDuration()) {
isFatigued = false;
clickCount = 0;
}
updateUI();
}
// Win condition: Reach 717 strength
if (strengthPoints >= 717) {
// Show custom win message
var winText = new Text2('Kazandın!\nAtalarını gururlandırdın!', {
size: 120,
fill: 0xFF0000
});
winText.anchor.set(0.5, 0.5);
LK.gui.center.addChild(winText);
// Show thank you message and credits after a delay
LK.setTimeout(function () {
// Remove win text
winText.destroy();
// Show thank you and credits
var thankYouText = new Text2('Oyunumuzu oynadığınız için teşekkürler\n\nYapımcılar:\nRıfat ve Lider', {
size: 80,
fill: 0xFFFFFF
});
thankYouText.anchor.set(0.5, 0.5);
LK.gui.center.addChild(thankYouText);
// Show you win after another delay
LK.setTimeout(function () {
LK.showYouWin();
}, 3000);
}, 2000);
}
};
pixel tarzda ay ışığı temalı bir gym salonu çiz. In-Game asset. 2d. High contrast. No shadows. pixel gym salonu
bu adamın arka planını kaldır
arka planını kaldır
bisecps kası arka planı olmasın. In-Game asset. 2d. High contrast. No shadows
arka planı kaldır
spor salonundaki koyu lacivert bir tabure. In-Game asset. 2d. High contrast. No shadows