Code edit (1 edits merged)
Please save this source code
User prompt
Surprise Ball Toys
Initial prompt
Toca surprise (2004). The powerpuff girls have 1 red ball, 1 teal ball, 1 green ball, 1 purple ball, 1 orange ball, 1 yellow ball, and 1 cyan ball. Tap on the ball to shake it then tap it to open. It will be a toy monkey, or a toy frog, or a toy Violet cat, or a maraca, or a jelly, or a party blower inside. Tap your toy to see what it does, tap on your toy and see what happens
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var SurpriseBall = Container.expand(function (ballType, toyType, position) {
var self = Container.call(this);
self.ballType = ballType;
self.toyType = toyType;
self.state = 'closed'; // 'closed', 'shaken', 'opened'
self.isShaking = false;
var ballGraphics = self.attachAsset(ballType, {
anchorX: 0.5,
anchorY: 0.5
});
var toyGraphics = null;
self.x = position.x;
self.y = position.y;
function createToy() {
toyGraphics = self.attachAsset(self.toyType, {
anchorX: 0.5,
anchorY: 0.5
});
toyGraphics.visible = false;
}
createToy();
function shake() {
if (self.isShaking) return;
self.isShaking = true;
self.state = 'shaken';
LK.getSound('shake').play();
var originalX = self.x;
tween(self, {
x: originalX + 10
}, {
duration: 100,
easing: tween.easeInOut
});
tween(self, {
x: originalX - 10
}, {
duration: 100,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(self, {
x: originalX + 8
}, {
duration: 80,
easing: tween.easeInOut
});
tween(self, {
x: originalX - 8
}, {
duration: 80,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(self, {
x: originalX
}, {
duration: 60,
easing: tween.easeInOut,
onFinish: function onFinish() {
self.isShaking = false;
}
});
}
});
}
});
}
function openBall() {
self.state = 'opened';
LK.getSound('open').play();
ballGraphics.visible = false;
toyGraphics.visible = true;
tween(toyGraphics, {
scaleX: 1.2,
scaleY: 1.2
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(toyGraphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 150,
easing: tween.easeIn
});
}
});
}
function interactWithToy() {
if (self.state !== 'opened') return;
LK.getSound('toyInteract').play();
if (self.toyType === 'monkey') {
tween(toyGraphics, {
rotation: toyGraphics.rotation + Math.PI * 0.5
}, {
duration: 300,
easing: tween.bounceOut
});
} else if (self.toyType === 'frog') {
tween(toyGraphics, {
scaleY: 1.3
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(toyGraphics, {
scaleY: 1
}, {
duration: 150,
easing: tween.easeIn
});
}
});
} else if (self.toyType === 'violetCat') {
tween(toyGraphics, {
y: toyGraphics.y - 30
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(toyGraphics, {
y: toyGraphics.y + 30
}, {
duration: 200,
easing: tween.bounceOut
});
}
});
} else if (self.toyType === 'maraca') {
tween(toyGraphics, {
rotation: toyGraphics.rotation + Math.PI * 0.25
}, {
duration: 100,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(toyGraphics, {
rotation: toyGraphics.rotation - Math.PI * 0.5
}, {
duration: 100,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(toyGraphics, {
rotation: toyGraphics.rotation + Math.PI * 0.25
}, {
duration: 100,
easing: tween.easeInOut
});
}
});
}
});
} else if (self.toyType === 'jelly') {
tween(toyGraphics, {
scaleX: 1.4,
scaleY: 0.8
}, {
duration: 200,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(toyGraphics, {
scaleX: 1,
scaleY: 1
}, {
duration: 300,
easing: tween.elasticOut
});
}
});
} else if (self.toyType === 'partyBlower') {
tween(toyGraphics, {
scaleX: 1.5
}, {
duration: 150,
easing: tween.easeOut,
onFinish: function onFinish() {
tween(toyGraphics, {
scaleX: 1
}, {
duration: 150,
easing: tween.easeIn
});
}
});
}
}
self.down = function (x, y, obj) {
if (self.state === 'closed') {
shake();
} else if (self.state === 'shaken') {
openBall();
} else if (self.state === 'opened') {
interactWithToy();
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xf0f8ff
});
/****
* Game Code
****/
var balls = [];
var ballTypes = ['redBall', 'tealBall', 'greenBall', 'purpleBall', 'orangeBall', 'yellowBall', 'cyanBall'];
var toyTypes = ['monkey', 'frog', 'violetCat', 'maraca', 'jelly', 'partyBlower'];
var positions = [{
x: 350,
y: 600
}, {
x: 700,
y: 600
}, {
x: 1050,
y: 600
}, {
x: 1400,
y: 600
}, {
x: 525,
y: 900
}, {
x: 875,
y: 900
}, {
x: 1225,
y: 900
}];
function getRandomToy() {
return toyTypes[Math.floor(Math.random() * toyTypes.length)];
}
for (var i = 0; i < ballTypes.length; i++) {
var ball = new SurpriseBall(ballTypes[i], getRandomToy(), positions[i]);
balls.push(ball);
game.addChild(ball);
}
var titleText = new Text2('Surprise Ball Toys', {
size: 100,
fill: 0x333333
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 1024;
titleText.y = 300;
game.addChild(titleText);
var instructionText = new Text2('Tap a ball to shake it, then tap again to open!', {
size: 60,
fill: 0x666666
});
instructionText.anchor.set(0.5, 0.5);
instructionText.x = 1024;
instructionText.y = 450;
game.addChild(instructionText); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,263 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var SurpriseBall = Container.expand(function (ballType, toyType, position) {
+ var self = Container.call(this);
+ self.ballType = ballType;
+ self.toyType = toyType;
+ self.state = 'closed'; // 'closed', 'shaken', 'opened'
+ self.isShaking = false;
+ var ballGraphics = self.attachAsset(ballType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var toyGraphics = null;
+ self.x = position.x;
+ self.y = position.y;
+ function createToy() {
+ toyGraphics = self.attachAsset(self.toyType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ toyGraphics.visible = false;
+ }
+ createToy();
+ function shake() {
+ if (self.isShaking) return;
+ self.isShaking = true;
+ self.state = 'shaken';
+ LK.getSound('shake').play();
+ var originalX = self.x;
+ tween(self, {
+ x: originalX + 10
+ }, {
+ duration: 100,
+ easing: tween.easeInOut
+ });
+ tween(self, {
+ x: originalX - 10
+ }, {
+ duration: 100,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(self, {
+ x: originalX + 8
+ }, {
+ duration: 80,
+ easing: tween.easeInOut
+ });
+ tween(self, {
+ x: originalX - 8
+ }, {
+ duration: 80,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(self, {
+ x: originalX
+ }, {
+ duration: 60,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ self.isShaking = false;
+ }
+ });
+ }
+ });
+ }
+ });
+ }
+ function openBall() {
+ self.state = 'opened';
+ LK.getSound('open').play();
+ ballGraphics.visible = false;
+ toyGraphics.visible = true;
+ tween(toyGraphics, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 200,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(toyGraphics, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 150,
+ easing: tween.easeIn
+ });
+ }
+ });
+ }
+ function interactWithToy() {
+ if (self.state !== 'opened') return;
+ LK.getSound('toyInteract').play();
+ if (self.toyType === 'monkey') {
+ tween(toyGraphics, {
+ rotation: toyGraphics.rotation + Math.PI * 0.5
+ }, {
+ duration: 300,
+ easing: tween.bounceOut
+ });
+ } else if (self.toyType === 'frog') {
+ tween(toyGraphics, {
+ scaleY: 1.3
+ }, {
+ duration: 150,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(toyGraphics, {
+ scaleY: 1
+ }, {
+ duration: 150,
+ easing: tween.easeIn
+ });
+ }
+ });
+ } else if (self.toyType === 'violetCat') {
+ tween(toyGraphics, {
+ y: toyGraphics.y - 30
+ }, {
+ duration: 200,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(toyGraphics, {
+ y: toyGraphics.y + 30
+ }, {
+ duration: 200,
+ easing: tween.bounceOut
+ });
+ }
+ });
+ } else if (self.toyType === 'maraca') {
+ tween(toyGraphics, {
+ rotation: toyGraphics.rotation + Math.PI * 0.25
+ }, {
+ duration: 100,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(toyGraphics, {
+ rotation: toyGraphics.rotation - Math.PI * 0.5
+ }, {
+ duration: 100,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(toyGraphics, {
+ rotation: toyGraphics.rotation + Math.PI * 0.25
+ }, {
+ duration: 100,
+ easing: tween.easeInOut
+ });
+ }
+ });
+ }
+ });
+ } else if (self.toyType === 'jelly') {
+ tween(toyGraphics, {
+ scaleX: 1.4,
+ scaleY: 0.8
+ }, {
+ duration: 200,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(toyGraphics, {
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 300,
+ easing: tween.elasticOut
+ });
+ }
+ });
+ } else if (self.toyType === 'partyBlower') {
+ tween(toyGraphics, {
+ scaleX: 1.5
+ }, {
+ duration: 150,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tween(toyGraphics, {
+ scaleX: 1
+ }, {
+ duration: 150,
+ easing: tween.easeIn
+ });
+ }
+ });
+ }
+ }
+ self.down = function (x, y, obj) {
+ if (self.state === 'closed') {
+ shake();
+ } else if (self.state === 'shaken') {
+ openBall();
+ } else if (self.state === 'opened') {
+ interactWithToy();
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0xf0f8ff
+});
+
+/****
+* Game Code
+****/
+var balls = [];
+var ballTypes = ['redBall', 'tealBall', 'greenBall', 'purpleBall', 'orangeBall', 'yellowBall', 'cyanBall'];
+var toyTypes = ['monkey', 'frog', 'violetCat', 'maraca', 'jelly', 'partyBlower'];
+var positions = [{
+ x: 350,
+ y: 600
+}, {
+ x: 700,
+ y: 600
+}, {
+ x: 1050,
+ y: 600
+}, {
+ x: 1400,
+ y: 600
+}, {
+ x: 525,
+ y: 900
+}, {
+ x: 875,
+ y: 900
+}, {
+ x: 1225,
+ y: 900
+}];
+function getRandomToy() {
+ return toyTypes[Math.floor(Math.random() * toyTypes.length)];
+}
+for (var i = 0; i < ballTypes.length; i++) {
+ var ball = new SurpriseBall(ballTypes[i], getRandomToy(), positions[i]);
+ balls.push(ball);
+ game.addChild(ball);
+}
+var titleText = new Text2('Surprise Ball Toys', {
+ size: 100,
+ fill: 0x333333
+});
+titleText.anchor.set(0.5, 0.5);
+titleText.x = 1024;
+titleText.y = 300;
+game.addChild(titleText);
+var instructionText = new Text2('Tap a ball to shake it, then tap again to open!', {
+ size: 60,
+ fill: 0x666666
+});
+instructionText.anchor.set(0.5, 0.5);
+instructionText.x = 1024;
+instructionText.y = 450;
+game.addChild(instructionText);
\ No newline at end of file