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