User prompt
Please fix the bug: 'ReferenceError: playerStartText is not defined' in or related to this line: 'if (playerStartText) {' Line Number: 668
User prompt
You should hide 'PLAYER START' TEXT if the player pushed the first stone
User prompt
Please fix the bug: 'ReferenceError: playerStartText is not defined' in or related to this line: 'if (playerStartText) {' Line Number: 669
User prompt
You should hide 'PLAYER START' TEXT if the player has started his first stroke
User prompt
ensure curling stones bouncing if they touching each other
User prompt
Add collision event to the game logic to avoid curling stone cover, overlapping an other curling stone
User prompt
Please fix the bug: 'ReferenceError: stones is not defined' in or related to this line: 'stones.forEach(function (otherStone) {' Line Number: 52
User prompt
ensure curling stone cannot cover an other stone
User prompt
ensure the curlingstone only up and down movement until the player clicks on the startbutton asset
User prompt
avoid curlingstones free movement until the player clicks on the start button
User prompt
CHANGE FREE MOVEMENT TO PUSH
User prompt
Are you offended or why does the curling stone vibrate when you move it??? FIX IT SO IT DOESN'T VIBRATE!
User prompt
AVA! You misunderstood the task! I did NOT tell you that when the startbutton is not visible, but when the player clicked on the startbutton. These two are very different!
User prompt
it's not working again
User prompt
so do
User prompt
Enable dragging of stoneBlue when the match is started
User prompt
Enable dragging of stoneBlue the startButton is selected
User prompt
Enable dragging of stoneBlue when player clicked on the startButton.
User prompt
ENSURE LET stoneBlue FREELY MOVEMENT BY MOUSE IF STARTBUTTON IS PRESSED
User prompt
DO IT TO LET IT FREELY MOVING
User prompt
REPAIR SIXTH POINT TO LET THE SELECTED CURLINGSTONE FREELY MOVING
User prompt
REPAIR FIRST POINT TO LET THE SELECTED CURLINGSTONE FREELY MOVING
User prompt
REPAIR THIRD POINT TO MADE WORK THE SELECTED CURLINGSTONE MOVING
User prompt
REPAIR FIRST POINT TO MADE WORK THE SELECTED CURLINGSTONE MOVING
User prompt
REPAIR ALL THES POINT TO LET FREELY MOVING OF THE SELECTED STONE
/****
* Classes
****/
// The assets will be automatically created and loaded by the LK engine
// Create a class for the curling stone
var CurlingStone = Container.expand(function () {
var self = Container.call(this);
var stoneGraphics = self.attachAsset('stoneBlue', {
anchorX: 0.5,
anchorY: 0.5
});
self.lastX = self.x; // Initialize lastX for tracking previous X position
self.lastY = self.y; // Initialize lastY for tracking previous Y position
self.speed = 0;
self.direction = 0;
self.update = function () {
self.x += Math.cos(self.direction) * self.speed;
self.y += Math.sin(self.direction) * self.speed;
self.lastX = self.x; // Update lastX before position change
self.lastY = self.y; // Update lastY before position change
self.speed *= 0.99; // friction
if (self.speed < 0.1) {
self.speed = 0;
}
};
self["throw"] = function (speed, direction) {
self.speed = speed;
self.direction = direction;
};
});
// Create a class for the game mode selection pop-up
var GameModePopup = Container.expand(function () {
var self = Container.call(this);
// Create background for the pop-up
// Removed the duplicated whiteCenter asset from the map
// Create text for the pop-up
var text = new Text2('Choose Game Mode', {
size: 150,
fill: 0x000000
});
text.anchor.set(0.5, 0.5);
text.x = 2048 / 2;
text.y = 2732 / 2;
self.addChild(text);
// Create text for choosing curling stone
var chooseStoneText = new Text2('Choose Curling Stone', {
size: 120,
fill: 0x000000
});
chooseStoneText.anchor.set(0.5, 0.5);
chooseStoneText.x = 2048 / 2;
chooseStoneText.y = 2732 / 2 + 600;
self.addChild(chooseStoneText);
});
var GreenStone = Container.expand(function () {
var self = Container.call(this);
var stoneGraphics = self.attachAsset('stoneGreen', {
anchorX: 0.5,
anchorY: 0.5
});
self.lastX = self.x; // Initialize lastX for tracking previous X position
self.lastY = self.y; // Initialize lastY for tracking previous Y position
self.speed = 0;
self.direction = 0;
self.update = function () {
self.x += Math.cos(self.direction) * self.speed;
self.y += Math.sin(self.direction) * self.speed;
self.lastX = self.x; // Update lastX before position change
self.lastY = self.y; // Update lastY before position change
self.speed *= 0.99; // friction
if (self.speed < 0.1) {
self.speed = 0;
}
};
self["throw"] = function (speed, direction) {
self.speed = speed;
self.direction = direction;
};
});
var LightBlueStone = Container.expand(function () {
var self = Container.call(this);
var stoneGraphics = self.attachAsset('stoneLightBlue', {
anchorX: 0.5,
anchorY: 0.5
});
self.lastX = self.x; // Initialize lastX for tracking previous X position
self.lastY = self.y; // Initialize lastY for tracking previous Y position
self.speed = 0;
self.direction = 0;
self.update = function () {
self.x += Math.cos(self.direction) * self.speed;
self.y += Math.sin(self.direction) * self.speed;
self.lastX = self.x; // Update lastX before position change
self.lastY = self.y; // Update lastY before position change
self.speed *= 0.99; // friction
if (self.speed < 0.1) {
self.speed = 0;
}
};
self["throw"] = function (speed, direction) {
self.speed = speed;
self.direction = direction;
};
});
var NeonStone = Container.expand(function () {
var self = Container.call(this);
var stoneGraphics = self.attachAsset('stoneNeon', {
anchorX: 0.5,
anchorY: 0.5
});
self.lastX = self.x; // Initialize lastX for tracking previous X position
self.lastY = self.y; // Initialize lastY for tracking previous Y position
self.speed = 0;
self.direction = 0;
self.update = function () {
self.x += Math.cos(self.direction) * self.speed;
self.y += Math.sin(self.direction) * self.speed;
self.lastX = self.x; // Update lastX before position change
self.lastY = self.y; // Update lastY before position change
self.speed *= 0.99; // friction
if (self.speed < 0.1) {
self.speed = 0;
}
};
self["throw"] = function (speed, direction) {
self.speed = speed;
self.direction = direction;
};
});
var OrangeStone = Container.expand(function () {
var self = Container.call(this);
var stoneGraphics = self.attachAsset('stoneOrange', {
anchorX: 0.5,
anchorY: 0.5
});
self.lastX = self.x; // Initialize lastX for tracking previous X position
self.lastY = self.y; // Initialize lastY for tracking previous Y position
self.speed = 0;
self.direction = 0;
self.update = function () {
self.x += Math.cos(self.direction) * self.speed;
self.y += Math.sin(self.direction) * self.speed;
self.lastX = self.x; // Update lastX before position change
self.lastY = self.y; // Update lastY before position change
self.speed *= 0.99; // friction
if (self.speed < 0.1) {
self.speed = 0;
}
};
self["throw"] = function (speed, direction) {
self.speed = speed;
self.direction = direction;
};
});
var PinkStone = Container.expand(function () {
var self = Container.call(this);
var stoneGraphics = self.attachAsset('stonePink', {
anchorX: 0.5,
anchorY: 0.5
});
self.lastX = self.x; // Initialize lastX for tracking previous X position
self.lastY = self.y; // Initialize lastY for tracking previous Y position
self.speed = 0;
self.direction = 0;
self.update = function () {
self.x += Math.cos(self.direction) * self.speed;
self.y += Math.sin(self.direction) * self.speed;
self.lastX = self.x; // Update lastX before position change
self.lastY = self.y; // Update lastY before position change
self.speed *= 0.99; // friction
if (self.speed < 0.1) {
self.speed = 0;
}
};
self["throw"] = function (speed, direction) {
self.speed = speed;
self.direction = direction;
};
});
var PurpleStone = Container.expand(function () {
var self = Container.call(this);
var stoneGraphics = self.attachAsset('stonePurple', {
anchorX: 0.5,
anchorY: 0.5
});
self.lastX = self.x; // Initialize lastX for tracking previous X position
self.lastY = self.y; // Initialize lastY for tracking previous Y position
self.speed = 0;
self.direction = 0;
self.update = function () {
self.x += Math.cos(self.direction) * self.speed;
self.y += Math.sin(self.direction) * self.speed;
self.lastX = self.x; // Update lastX before position change
self.lastY = self.y; // Update lastY before position change
self.speed *= 0.99; // friction
if (self.speed < 0.1) {
self.speed = 0;
}
};
self["throw"] = function (speed, direction) {
self.speed = speed;
self.direction = direction;
};
});
var RedStone = Container.expand(function () {
var self = Container.call(this);
var stoneGraphics = self.attachAsset('stoneRed', {
anchorX: 0.5,
anchorY: 0.5
});
self.lastX = self.x; // Initialize lastX for tracking previous X position
self.lastY = self.y; // Initialize lastY for tracking previous Y position
self.speed = 0;
self.direction = 0;
self.update = function () {
self.x += Math.cos(self.direction) * self.speed;
self.y += Math.sin(self.direction) * self.speed;
self.lastX = self.x; // Update lastX before position change
self.lastY = self.y; // Update lastY before position change
self.speed *= 0.99; // friction
if (self.speed < 0.1) {
self.speed = 0;
}
};
self["throw"] = function (speed, direction) {
self.speed = speed;
self.direction = direction;
};
});
var YellowStone = Container.expand(function () {
var self = Container.call(this);
var stoneGraphics = self.attachAsset('stoneYellow', {
anchorX: 0.5,
anchorY: 0.5
});
self.lastX = self.x; // Initialize lastX for tracking previous X position
self.lastY = self.y; // Initialize lastY for tracking previous Y position
self.speed = 0;
self.direction = 0;
self.update = function () {
self.x += Math.cos(self.direction) * self.speed;
self.y += Math.sin(self.direction) * self.speed;
self.lastX = self.x; // Update lastX before position change
self.lastY = self.y; // Update lastY before position change
self.speed *= 0.99; // friction
if (self.speed < 0.1) {
self.speed = 0;
}
};
self["throw"] = function (speed, direction) {
self.speed = speed;
self.direction = direction;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xFFFFFF // Init game with white background
});
/****
* Game Code
****/
function isExactlyOneStoneBelowRedLine() {
var stoneLightBlue = game.addChild(new LightBlueStone());
stoneLightBlue.x = startX + stoneSpacing * 8;
stoneLightBlue.y = 2732 * 0.75 + 500 - 350;
stoneLightBlue.interactive = true;
stoneLightBlue.on('down', function () {
if (selectedStone && selectedStone !== stoneLightBlue) {
selectedStone.y = 2732 * 0.75 + 500 - 350; // Reset previous stone position
}
stoneLightBlue.y = stoneLightBlue.y === 2732 * 0.75 + 500 ? 2732 * 0.75 + 500 - 350 : 2732 * 0.75 + 500;
selectedStone = stoneLightBlue;
checkStartButtonVisibility();
checkStartButtonVisibility();
});
var stones = [stone, stoneRed, stoneYellow, stoneGreen, stoneOrange, stonePink, stonePurple, stoneNeon, stoneLightBlue];
var count = 0;
stones.forEach(function (stone) {
if (stone.y > 2732 * 0.75 + 300) {
// Removed game over condition when stone intersects target
if (!startButton) {
// Check if startButton is null, indicating it has disappeared
// Logic to start the match
console.log("Match has started!");
}
count++;
}
});
return count === 1;
}
// Initialize startButton variable
var startButton = null;
// Function to check the visibility of the start button
function checkStartButtonVisibility() {
if (gameMode !== null && selectedStone !== null && selectedStone.y > 2732 * 0.75 + 300 && (selectAsset.visible || selectGreenAsset.visible)) {
// Logic to display the start button
startButton = LK.getAsset('startButton', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 * 0.25
});
startButton.visible = true;
startButton.interactive = true;
startButton.on('down', startButtonClickHandler);
game.addChild(startButton);
} else {
if (startButton) {
startButton.visible = false;
}
}
}
// Initialize game mode variable
var gameMode = null;
var selectedStone = null; // Track selected stone
// Display the game mode selection pop-up
var gameModePopup = new GameModePopup();
game.addChild(gameModePopup);
// Add first game mode asset to the map
var gameModeAsset1 = LK.getAsset('gameModeAsset', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(gameModeAsset1);
// Add second game mode asset to the map
var gameModeAsset2 = LK.getAsset('gameModeAsset', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 + 600 // Adjusted position for the second asset
});
game.addChild(gameModeAsset2);
// Add left button to the center of the map
var leftButton = LK.getAsset('leftButton', {
anchorX: 1.0,
// Align right edge
anchorY: 0.0,
x: 2048 / 2,
y: gameModeAsset1.y + gameModeAsset1.height / 2
});
game.addChild(leftButton);
// Add playervsplayer asset to the map
var playervsplayerAsset = LK.getAsset('playervsplayer', {
anchorX: 0.5,
anchorY: 0.5,
x: leftButton.x - leftButton.width / 2,
y: leftButton.y + leftButton.height / 2
});
game.addChild(playervsplayerAsset);
// Add select asset to indicate selection
var selectAsset = LK.getAsset('select', {
anchorX: 0.5,
anchorY: 0.5,
x: leftButton.x - leftButton.width / 2,
y: leftButton.y + leftButton.height / 2
});
selectAsset.visible = false; // Initially hidden
game.addChild(selectAsset);
// Add right button to the center of the map
var rightButton = LK.getAsset('rightButton', {
anchorX: 0.0,
// Align left edge
anchorY: 0.0,
x: 2048 / 2,
y: gameModeAsset1.y + gameModeAsset1.height / 2
});
game.addChild(rightButton);
// Add selectgreen asset to the map
var selectGreenAsset = LK.getAsset('selectgreen', {
anchorX: 0.5,
anchorY: 0.5,
x: rightButton.x + rightButton.width / 2,
y: rightButton.y + rightButton.height / 2
});
selectGreenAsset.visible = false; // Initially hidden
game.addChild(selectGreenAsset);
// Function to handle player vs ai mode selection
function selectPlayerVsAIMode() {
gameMode = 'playerVsAI';
selectGreenAsset.visible = !selectGreenAsset.visible;
if (selectGreenAsset.visible) {
selectAsset.visible = false;
}
selectGreenAsset.x = rightButton.x + rightButton.width / 2;
selectGreenAsset.y = rightButton.y + rightButton.height / 2;
checkStartButtonVisibility();
}
// Function to handle player vs player mode selection
function selectPlayerVsPlayerMode() {
gameMode = 'playerVsPlayer';
selectAsset.visible = !selectAsset.visible;
if (selectAsset.visible) {
selectGreenAsset.visible = false;
}
selectAsset.x = leftButton.x - leftButton.width / 2;
selectAsset.y = leftButton.y + leftButton.height / 2;
checkStartButtonVisibility();
}
// Add interaction to playervsplayerAsset
playervsplayerAsset.interactive = true;
playervsplayerAsset.on('down', selectPlayerVsPlayerMode);
// Add playervsai asset to the map
var playervsaiAsset = LK.getAsset('playervsai', {
anchorX: 0.5,
anchorY: 0.5,
x: rightButton.x + rightButton.width / 2,
y: rightButton.y + rightButton.height / 2
});
playervsaiAsset.interactive = true;
playervsaiAsset.on('down', selectPlayerVsAIMode);
game.addChild(playervsaiAsset);
// Add center line to the game
var centerLine = LK.getAsset('centerLine', {
anchorX: 0.5,
anchorY: 0.0,
x: 2048 / 2,
y: 0
});
// Add left lane to the game
var leftLane = LK.getAsset('leftLane', {
anchorX: 0.5,
anchorY: 0.0,
x: 50,
y: 0
});
game.addChild(leftLane);
// Add right lane to the game
var rightLane = LK.getAsset('rightLane', {
anchorX: 0.5,
anchorY: 0.0,
x: 2048 - 50,
y: 0
});
game.addChild(rightLane);
// Add red horizontal line to the lower quarter of the map
var redLine = LK.getAsset('redLine', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 * 0.75 + 300
});
// Add grey horizontal target line to the upper quadrant of the map
var targetLine = LK.getAsset('targetLine', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 * 0.25
});
var whiteRing = LK.getAsset('whiteRing', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 * 0.25
});
var redRing = LK.getAsset('redRing', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 * 0.25
});
var blueRing = LK.getAsset('blueRing', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 * 0.25
});
game.addChild(blueRing);
game.addChild(whiteRing);
game.addChild(redRing);
// Add whiteCenter to the center of the redRing
var whiteCenter = LK.getAsset('whiteCenter', {
anchorX: 0.5,
anchorY: 0.5,
x: redRing.x,
y: redRing.y
});
game.addChild(whiteCenter);
game.addChild(centerLine);
game.addChild(redLine);
game.addChild(targetLine);
var stoneSpacing = 200;
var totalStones = 8;
var startX = 2048 / 2 - stoneSpacing * (totalStones - 1) / 2;
var stone = game.addChild(new CurlingStone());
stone.x = startX;
stone.y = 2732 * 0.75 + 500 - 350;
stone.interactive = true;
stone.on('down', function () {
if (selectedStone && selectedStone !== stone) {
selectedStone.y = 2732 * 0.75 + 500 - 350; // Reset previous stone position
}
if (startButton && startButton.visible === false) {
stone.y = stone.y === 2732 * 0.75 + 500 ? 2732 * 0.75 + 500 - 350 : 2732 * 0.75 + 500;
} else {
stone.y = stone.y === 2732 * 0.75 + 500 ? 2732 * 0.75 + 500 - 350 : 2732 * 0.75 + 500; // Allow movement above redline
}
selectedStone = stone;
checkStartButtonVisibility();
});
stone.on('select', function () {
// Logic for when stoneBlue is selected
console.log("stoneBlue selected");
});
var stoneRed = game.addChild(new RedStone());
stoneRed.x = startX + stoneSpacing;
stoneRed.y = 2732 * 0.75 + 500 - 350;
stoneRed.interactive = true;
stoneRed.on('down', function () {
if (selectedStone && selectedStone !== stoneRed) {
selectedStone.y = 2732 * 0.75 + 500 - 350; // Reset previous stone position
}
stoneRed.y = stoneRed.y === 2732 * 0.75 + 500 ? 2732 * 0.75 + 500 - 350 : 2732 * 0.75 + 500;
selectedStone = stoneRed;
checkStartButtonVisibility();
});
var stoneYellow = game.addChild(new YellowStone());
stoneYellow.x = startX + stoneSpacing * 2;
stoneYellow.y = 2732 * 0.75 + 500 - 350;
stoneYellow.interactive = true;
stoneYellow.on('down', function () {
if (selectedStone && selectedStone !== stoneYellow) {
selectedStone.y = 2732 * 0.75 + 500 - 350; // Reset previous stone position
}
stoneYellow.y = stoneYellow.y === 2732 * 0.75 + 500 ? 2732 * 0.75 + 500 - 350 : 2732 * 0.75 + 500;
selectedStone = stoneYellow;
checkStartButtonVisibility();
});
var stoneGreen = game.addChild(new GreenStone());
stoneGreen.x = startX + stoneSpacing * 3;
stoneGreen.y = 2732 * 0.75 + 500 - 350;
stoneGreen.interactive = true;
stoneGreen.on('down', function () {
if (selectedStone && selectedStone !== stoneGreen) {
selectedStone.y = 2732 * 0.75 + 500 - 350; // Reset previous stone position
}
stoneGreen.y = stoneGreen.y === 2732 * 0.75 + 500 ? 2732 * 0.75 + 500 - 350 : 2732 * 0.75 + 500;
selectedStone = stoneGreen;
checkStartButtonVisibility();
});
var stoneOrange = game.addChild(new OrangeStone());
stoneOrange.x = startX + stoneSpacing * 4;
stoneOrange.y = 2732 * 0.75 + 500 - 350;
stoneOrange.interactive = true;
stoneOrange.on('down', function () {
if (selectedStone && selectedStone !== stoneOrange) {
selectedStone.y = 2732 * 0.75 + 500 - 350; // Reset previous stone position
}
stoneOrange.y = stoneOrange.y === 2732 * 0.75 + 500 ? 2732 * 0.75 + 500 - 350 : 2732 * 0.75 + 500;
selectedStone = stoneOrange;
checkStartButtonVisibility();
});
var stonePink = game.addChild(new PinkStone());
stonePink.x = startX + stoneSpacing * 5;
stonePink.y = 2732 * 0.75 + 500 - 350;
stonePink.interactive = true;
stonePink.on('down', function () {
if (selectedStone && selectedStone !== stonePink) {
selectedStone.y = 2732 * 0.75 + 500 - 350; // Reset previous stone position
}
stonePink.y = stonePink.y === 2732 * 0.75 + 500 ? 2732 * 0.75 + 500 - 350 : 2732 * 0.75 + 500;
selectedStone = stonePink;
checkStartButtonVisibility();
});
var stonePurple = game.addChild(new PurpleStone());
stonePurple.x = startX + stoneSpacing * 6;
stonePurple.y = 2732 * 0.75 + 500 - 350;
stonePurple.interactive = true;
stonePurple.on('down', function () {
if (selectedStone && selectedStone !== stonePurple) {
selectedStone.y = 2732 * 0.75 + 500 - 350; // Reset previous stone position
}
stonePurple.y = stonePurple.y === 2732 * 0.75 + 500 ? 2732 * 0.75 + 500 - 350 : 2732 * 0.75 + 500;
selectedStone = stonePurple;
checkStartButtonVisibility();
});
var stoneNeon = game.addChild(new NeonStone());
stoneNeon.x = startX + stoneSpacing * 7;
stoneNeon.y = 2732 * 0.75 + 500 - 350;
stoneNeon.interactive = true;
stoneNeon.on('down', function () {
if (selectedStone && selectedStone !== stoneNeon) {
selectedStone.y = 2732 * 0.75 + 500 - 350; // Reset previous stone position
}
stoneNeon.y = stoneNeon.y === 2732 * 0.75 + 500 ? 2732 * 0.75 + 500 - 350 : 2732 * 0.75 + 500;
selectedStone = stoneNeon;
checkStartButtonVisibility();
});
// Initialize the game state
var throwing = false;
var throwStart = null;
// Handle touch events
game.down = function (x, y, obj) {
if (startButton && startButton.visible === false && selectedStone) {
if (y > 2732 * 0.75 + 300 && y < 2732) {
selectedStone.lastX = selectedStone.x; // Update lastX before position change
selectedStone.lastY = selectedStone.y; // Update lastY before position change
selectedStone.x = x;
selectedStone.y = y;
selectedStone.interactive = true; // Enable interaction for dragging
selectedStone.on('move', function (moveX, moveY) {
if (moveY > 2732 * 0.75 + 300) {
selectedStone.lastX = selectedStone.x; // Update lastX before position change
selectedStone.lastY = selectedStone.y; // Update lastY before position change
selectedStone.x = moveX;
selectedStone.y = moveY;
}
});
}
throwing = true;
}
throwStart = {
x: x,
y: y
};
};
game.up = function (x, y, obj) {
if (throwing && selectedStone) {
var dx = x - throwStart.x;
var dy = y - throwStart.y;
var speed = Math.sqrt(dx * dx + dy * dy) / 100;
var direction = Math.atan2(dy, dx);
selectedStone["throw"](speed, direction);
throwing = false;
}
};
// Update the game state
game.update = function () {
// Removed game over condition when stone intersects target
if (selectedStone) {
selectedStone.update();
if (selectedStone.lastX !== selectedStone.x || selectedStone.lastY !== selectedStone.y) {
selectedStone.lastX = selectedStone.x; // Update lastX before position change
selectedStone.lastY = selectedStone.y; // Update lastY before position change
}
// Check if the stone has reached the target line
if (selectedStone.lastY <= 2732 * 0.25 && selectedStone.y > 2732 * 0.25) {
console.log("Stone reached the target line!");
// Additional logic for when the stone reaches the target line
}
}
};
function startButtonClickHandler() {
// Move the selected stone to the center line bottom under the red line center
if (selectedStone) {
selectedStone.x = 2048 / 2; // Center horizontally
selectedStone.y = 2732 * 0.75 + 400; // Position between the red line and the center bottom
selectedStone.interactive = false; // Disable interaction to prevent moving back
}
// AI selects a stone of a different color
var stones = [stone, stoneRed, stoneYellow, stoneGreen, stoneOrange, stonePink, stonePurple, stoneNeon];
var aiSelectedStone = null;
do {
aiSelectedStone = stones[Math.floor(Math.random() * stones.length)];
} while (aiSelectedStone === selectedStone);
// Move AI selected stone to a different position
if (aiSelectedStone) {
aiSelectedStone.x = 2048 / 2 + 100; // Slightly offset from the player's stone
aiSelectedStone.y = 2732 * 0.75 + 400;
}
// Hide non-selected stones
var stones = [stone, stoneRed, stoneYellow, stoneGreen, stoneOrange, stonePink, stonePurple, stoneNeon];
stones.forEach(function (stone) {
if (stone !== selectedStone) {
stone.visible = false;
}
stone.interactive = false; // Disable interaction for all stones
});
// Hide other specified assets
gameModeAsset1.visible = false;
gameModeAsset2.visible = false;
leftButton.visible = false;
playervsaiAsset.visible = false;
playervsplayerAsset.visible = false;
rightButton.visible = false;
selectAsset.visible = false;
selectGreenAsset.visible = false;
if (startButton && startButton.visible) {
// Add 'PLAYER START' text to the top center of the map
var playerStartText = new Text2('PLAYER START', {
size: 75,
fill: 0x000000
});
playerStartText.anchor.set(0.5, 0.5);
playerStartText.x = 2048 / 2 - 20;
playerStartText.y = 75; // Position at the top center, moved up by 25 units
game.addChild(playerStartText);
startButton.destroy(); // Destroy the startButton to ensure it disappears completely
startButton = null; // Set startButton to null to remove reference
}
// Remove texts from the map
gameModePopup.visible = false;
}
black curling stone with pink top, top view.
Black curlingstone with purple top, top view.
Black curlingstone with yellow top, top view.
Black curlingstone with orange top, top view.
black curlingstone with neongreen top, top view.
Black curlingstone with neonblue top, top view.
add a text to the center: "Player vs Player"
neongreen rectangle with rounded corners, transparent in the middle.
Red button with white start text.