/****
* Classes
****/
// BlueBlock class for creating blue blocks
var BlueBlock = Container.expand(function () {
var self = Container.call(this);
var blueBlockGraphics = self.createAsset('blueBlock', 'Blue block', 0.5, 0.5);
self.layer = 1;
self.move = function () {};
self.update = function () {};
});
// BlackBlock class for creating black blocks
var BlackBlock = Container.expand(function () {
var self = Container.call(this);
var blackBlockGraphics = self.createAsset('blackBlock', 'Black block', 0.5, 0.5);
self.move = function () {};
self.update = function () {};
});
// SaveButton class for creating save button
var SaveButton = Container.expand(function () {
var self = Container.call(this);
var saveButtonGraphics = self.createAsset('saveButton', 'Save button', 0.5, 0.5);
saveButtonGraphics.rotation = Math.PI / 4; // Set button at 45 degrees angle
self.layer = 2;
self.on('rightdown', function () {
self.saveGame();
});
self.saveGame = function () {
if (typeof LK.localStorage !== 'undefined') {
var gameState = {
blueBlocks: game.children.filter(function (child) {
return child instanceof BlueBlock;
}).map(function (block) {
return {
x: block.x,
y: block.y
};
}),
blackBlocks: game.children.filter(function (child) {
return child instanceof BlackBlock;
}).map(function (block) {
return {
x: block.x,
y: block.y
};
})
};
LK.localStorage.setItem('gameState', JSON.stringify(gameState));
console.log('Game state saved.');
}
};
});
// Function to save the current state of blueBlocks and blackBlocks
// ResetButton class for creating reset button
var ResetButton = Container.expand(function () {
var self = Container.call(this);
var resetButtonGraphics = self.createAsset('resetButton', 'Reset button', 0.5, 0.5);
self.layer = 2;
self.on('down', function () {
// Reset the game state
blueBlocks.forEach(function (block) {
block.destroy();
});
blackBlocks.forEach(function (block) {
block.destroy();
});
blueBlocks = [];
blackBlocks = [];
// Optionally, reset other game states here
});
});
// Floor class for creating the floor
var Floor = Container.expand(function () {
var self = Container.call(this);
var floorGraphics = self.createAsset('floor', 'Floor asset', 0.5, 1);
self.update = function () {};
self.interactive = true;
self.on('down', function (obj) {
if (obj.event.data && obj.event.data.button === 9) {
var pos = obj.event.getLocalPosition(game);
createFloor(pos.x, pos.y);
}
});
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
// Instantiate and position the floor object
var floor = game.addChild(new Floor());
floor.x = game.width / 2;
floor.y = game.height - floor.height / 2;
LK.on('init', function () {
// Automatically load the game state when the game initializes
savedBlueBlocks.forEach(function (data) {
var blueBlock = game.addChild(new BlueBlock());
blueBlock.x = data.x;
blueBlock.y = data.y;
});
savedBlackBlocks.forEach(function (data) {
var blackBlock = game.addChild(new BlackBlock());
blackBlock.x = data.x;
blackBlock.y = data.y;
});
var savedGameState = typeof LK.localStorage !== 'undefined' && LK.localStorage.getItem('gameState') ? JSON.parse(LK.localStorage.getItem('gameState')) : {
blueBlocks: [],
blackBlocks: []
};
savedGameState.blueBlocks.forEach(function (data) {
var blueBlock = game.addChild(new BlueBlock());
blueBlock.x = data.x;
blueBlock.y = data.y;
});
savedGameState.blackBlocks.forEach(function (data) {
var blackBlock = game.addChild(new BlackBlock());
blackBlock.x = data.x;
blackBlock.y = data.y;
});
console.log('Game state loaded.');
});
// Function to save the current state of blueBlocks and blackBlocks
// Initialize important asset arrays
game.saveGameState = function () {
if (typeof LK.localStorage !== 'undefined') {
LK.localStorage.setItem('blueBlocks', JSON.stringify(blueBlocks.map(function (block) {
return {
x: block.x,
y: block.y
};
})));
}
if (typeof LK.localStorage !== 'undefined') {
LK.localStorage.setItem('blackBlocks', JSON.stringify(blackBlocks.map(function (block) {
return {
x: block.x,
y: block.y
};
})));
}
};
var blueBlocks = [];
var blackBlocks = [];
// Function to handle the creation of the floor at the mouse position
function createFloor(x, y) {
var floor = game.addChild(new Floor());
floor.x = x - floor.width / 2;
floor.y = y - floor.height / 2;
}
// Function to handle the creation of blue blocks
function createBlueBlock(x, y) {
var blueBlock = new BlueBlock();
blueBlock.x = x;
blueBlock.y = y;
blueBlock.layer = 1;
blueBlocks.push(blueBlock);
game.addChild(blueBlock);
game.saveGameState();
}
// Function to handle the creation of black blocks
function createBlackBlock(x, y) {
var blackBlock = new BlackBlock();
blackBlock.x = x;
blackBlock.y = y;
blackBlock.layer = 1;
blackBlocks.push(blackBlock);
game.addChild(blackBlock);
game.saveGameState();
}
// Event listener for left click to create blue blocks
game.on('down', function (obj) {
var pos = obj.event.getLocalPosition(game);
// Check if the position is not on the save button before creating a block
if (!saveButton.getBounds().contains(pos.x, pos.y)) {
createBlueBlock(pos.x, pos.y);
}
});
// Event listener for right up to create black blocks
game.on('rightup', function (obj) {
var pos = obj.event.getLocalPosition(game);
// Check if the position is not on the save button before creating a block
if (!saveButton.intersects(pos)) {
createBlackBlock(pos.x, pos.y);
}
});
// Main game update loop
LK.on('tick', function () {
// Update all blue blocks
for (var i = 0; i < blueBlocks.length; i++) {
blueBlocks[i].update();
}
// Update all black blocks
for (var j = 0; j < blackBlocks.length; j++) {
blackBlocks[j].update();
}
}); // Instantiate save button
var saveButton = new SaveButton();
saveButton.x = 20;
saveButton.y = 20;
game.addChild(saveButton);
// Instantiate reset button
var resetButton = new ResetButton();
resetButton.x = game.width - resetButton.width / 2 - 50;
resetButton.y = 50;
resetButton.layer = 2;
game.addChild(resetButton);
// Set up an automatic save function to trigger every 120 seconds (7200 frames at 60FPS)
var autoSaveTimer = LK.setInterval(game.saveGameState, 7200);