Copy link to clipboard
Copied
Hello! i am making a puzzle game for school that is due today. I need to make a three level puzzle game. Each level has 12 objects, 6 objects being the puzzles themselfs and the other 6 drop zones. The code that is below only works for one level. I changed the item names and put the code into the second frame. The game doesnt let the player click on the puzzles and im not sure where the problem lays.
import flash.events.MouseEvent;
import flash.events.Event;
stop();
var count:Number=0;
stage.addEventListener (Event.ENTER_FRAME,PuzzleLoop);
function PuzzleLoop(e:Event):void
{
if (count >=6)
{
stage.removeEventListener(Event.ENTER_FRAME, PuzzleLoop);
item1_mc.visible= false;
item2_mc.visible= false;
item3_mc.visible= false;
item4_mc.visible= false;
item5_mc.visible= false;
item5_mc.visible= false;
gotoAndStop(2);
}
}
var orig1X:Number=item1_mc.x;
var orig1Y:Number=item1_mc.y;
var orig2X:Number=item2_mc.x;
var orig2Y:Number=item2_mc.y;
var orig3X:Number=item3_mc.x;
var orig3Y:Number=item3_mc.y;
var orig4X:Number=item4_mc.x;
var orig4Y:Number=item4_mc.y;
var orig5X:Number=item5_mc.x;
var orig5Y:Number=item5_mc.y;
var orig6X:Number=item6_mc.x;
var orig6Y:Number=item6_mc.y;
item1_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragTheObject);
item1_mc.addEventListener(MouseEvent.MOUSE_UP, item1Release);
item2_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragTheObject);
item2_mc.addEventListener(MouseEvent.MOUSE_UP, item2Release);
item3_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragTheObject);
item3_mc.addEventListener(MouseEvent.MOUSE_UP, item3Release);
item4_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragTheObject);
item4_mc.addEventListener(MouseEvent.MOUSE_UP, item4Release);
item5_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragTheObject);
item5_mc.addEventListener(MouseEvent.MOUSE_UP, item5Release);
item6_mc.addEventListener(MouseEvent.MOUSE_DOWN, dragTheObject);
item6_mc.addEventListener(MouseEvent.MOUSE_UP, item6Release);
item1_mc.buttonMode=true;
item2_mc.buttonMode=true;
item3_mc.buttonMode=true;
item4_mc.buttonMode=true;
item5_mc.buttonMode=true;
item6_mc.buttonMode=true;
function dragTheObject(event:MouseEvent):void {
var item:MovieClip=MovieClip(event.target);
item.startDrag();
var topPos:uint=this.numChildren-1;
this.setChildIndex(item, topPos);
}
function item1Release(event:MouseEvent):void {
var item:MovieClip=MovieClip(event.target);
item.stopDrag();
if (dropZone1_mc.hitTestPoint(item.x,item.y)) {
item.x=dropZone1_mc.x;
item.y=dropZone1_mc.y;
item1_mc.buttonMode=false;
item1_mc.removeEventListener( MouseEvent.MOUSE_DOWN, dragTheObject );
count++;
}
else {
item.x=orig1X;
item.y=orig1Y;
}}
function item2Release(event:MouseEvent):void {
var item:MovieClip=MovieClip(event.target);
item.stopDrag();
if (dropZone2_mc.hitTestPoint(item.x,item.y)) {
item.x=dropZone2_mc.x;
item.y=dropZone2_mc.y;
item2_mc.buttonMode=false;
item2_mc.removeEventListener( MouseEvent.MOUSE_DOWN, dragTheObject );
count++;
}
else {
item.x=orig2X;
item.y=orig2Y;
}}
function item3Release(event:MouseEvent):void {
var item:MovieClip=MovieClip(event.target);
item.stopDrag();
if (dropZone3_mc.hitTestPoint(item.x,item.y)) {
item.x=dropZone3_mc.x;
item.y=dropZone3_mc.y;
item3_mc.buttonMode=false;
item3_mc.removeEventListener( MouseEvent.MOUSE_DOWN, dragTheObject );
count++;
} else {
item.x=orig3X;
item.y=orig3Y;
}}
function item4Release(event:MouseEvent):void {
var item:MovieClip=MovieClip(event.target);
item.stopDrag();
if (dropZone4_mc.hitTestPoint(item.x,item.y)) {
item.x=dropZone4_mc.x;
item.y=dropZone4_mc.y;
item4_mc.buttonMode=false;
item4_mc.removeEventListener( MouseEvent.MOUSE_DOWN, dragTheObject );
count++;
}
else {
item.x=orig4X;
item.y=orig4Y;
}}
function item5Release(event:MouseEvent):void {
var item:MovieClip=MovieClip(event.target);
item.stopDrag();
if (dropZone5_mc.hitTestPoint(item.x,item.y)) {
item.x=dropZone5_mc.x;
item.y=dropZone5_mc.y;
item5_mc.buttonMode=false;
item5_mc.removeEventListener( MouseEvent.MOUSE_DOWN, dragTheObject );
count++;
} else {
item.x=orig5X;
item.y=orig5Y;
}}
function item6Release(event:MouseEvent):void {
var item:MovieClip=MovieClip(event.target);
item.stopDrag();
if (dropZone6_mc.hitTestPoint(item.x,item.y)) {
item.x=dropZone6_mc.x;
item.y=dropZone6_mc.y;
item6_mc.buttonMode=false;
item6_mc.removeEventListener( MouseEvent.MOUSE_DOWN, dragTheObject );
count++;
}
else {
item.x=orig6X;
item.y=orig6Y;
}}
function checkAnswers(event:MouseEvent):void {
if (dropZone1_mc.hitTestPoint(item1_mc.x,item1_mc.y) &&
dropZone2_mc.hitTestPoint(item2_mc.x,item2_mc.y) &&
dropZone3_mc.hitTestPoint(item3_mc.x,item3_mc.y) &&
dropZone4_mc.hitTestPoint(item4_mc.x,item4_mc.y) &&
dropZone5_mc.hitTestPoint(item5_mc.x,item5_mc.y) &&
dropZone6_mc.hitTestPoint(item6_mc.x,item6_mc.y)) {
if (count >=3)
{
gotoAndStop(2);
}
} else {
}}
function itemRelease(event:MouseEvent):void {
var thisItem:MovieClip = MovieClip(event.target);
thisItem.stopDrag();
if (dropZone1_mc.hitTestPoint(thisItem.x,thisItem.y)) {
thisItem.x = dropZone1_mc.x;
thisItem.y = dropZone1_mc.y;
}
else if (dropZone2_mc.hitTestPoint(thisItem.x,thisItem.y)) {
thisItem.x = dropZone2_mc.x;
thisItem.y = dropZone2_mc.y;
}
else if (dropZone3_mc.hitTestPoint(thisItem.x,thisItem.y)) {
thisItem.x = dropZone3_mc.x;
thisItem.y = dropZone3_mc.y;
}
else if (dropZone4_mc.hitTestPoint(thisItem.x,thisItem.y)) {
thisItem.x = dropZone4_mc.x;
thisItem.y = dropZone4_mc.y;
}
else if (dropZone5_mc.hitTestPoint(thisItem.x,thisItem.y)) {
thisItem.x = dropZone5_mc.x;
thisItem.y = dropZone5_mc.y;
}
else if (dropZone6_mc.hitTestPoint(thisItem.x,thisItem.y)) {
thisItem.x = dropZone6_mc.x;
thisItem.y = dropZone6_mc.y;
}
else if (thisItem==item1_mc) {
event.target.x = orig1X;
event.target.y = orig1Y;
}
else if (thisItem==item2_mc) {
event.target.x = orig2X;
event.target.y = orig2Y;
}
else if (thisItem==item3_mc) {
event.target.x = orig3X;
event.target.y = orig3Y;
}
else if (thisItem==item4_mc) {
event.target.x = orig4X;
event.target.y = orig4Y;
}
else if (thisItem==item5_mc) {
event.target.x = orig5X;
event.target.y = orig5Y;
}
else {
event.target.x = orig6X;
event.target.y = orig6Y;
}}
Hi.
I think some encapsulation and other object oriented programming approaches may help a little bit. For example, using containers in different frames and also custom properties on the items instead of variables.
Here is a suggestion in which I tried to make your code more dynamic and less DRY but not too much complex.
AS3 code:
[Frame 1]
import flash.display.MovieClip;
import flash.events.Event;
var matches:uint;
var totalMatches:uint;
function game1():void
{
matches = 0;
totalMatche
...
Copy link to clipboard
Copied
Hi.
I think some encapsulation and other object oriented programming approaches may help a little bit. For example, using containers in different frames and also custom properties on the items instead of variables.
Here is a suggestion in which I tried to make your code more dynamic and less DRY but not too much complex.
AS3 code:
[Frame 1]
import flash.display.MovieClip;
import flash.events.Event;
var matches:uint;
var totalMatches:uint;
function game1():void
{
matches = 0;
totalMatches = 0;
setPiece(board1.item1_mc, board1.dropZone1_mc);
setPiece(board1.item2_mc, board1.dropZone2_mc);
setPiece(board1.item3_mc, board1.dropZone3_mc);
setPiece(board1.item4_mc, board1.dropZone4_mc);
setPiece(board1.item5_mc, board1.dropZone5_mc);
setPiece(board1.item6_mc, board1.dropZone6_mc);
stop();
}
function setPiece(target:MovieClip, dropZone:MovieClip):void
{
target.addEventListener(MouseEvent.MOUSE_DOWN, dragHandler);
target.addEventListener(MouseEvent.MOUSE_UP, releaseHandler);
target.buttonMode = true;
target.dropZone = dropZone;
target.originX = target.x;
target.originY = target.y;
totalMatches++;
}
function dragHandler(event:MouseEvent):void
{
var item:MovieClip = MovieClip(event.target);
item.startDrag();
item.parent.addChild(item);
}
function releaseHandler(event:MouseEvent):void
{
var item:MovieClip = MovieClip(event.target);
item.stopDrag();
if (item.hitTestPoint(item.dropZone.x, item.dropZone.y))
{
item.x = item.dropZone.x;
item.y = item.dropZone.y;
item.buttonMode = false;
item.removeEventListener(MouseEvent.MOUSE_DOWN, dragHandler);
item.removeEventListener(MouseEvent.MOUSE_UP, releaseHandler);
matches++;
if (currentFrame < totalFrames && matches == totalMatches)
nextFrame();
}
else
{
item.x = item.originX;
item.y = item.originY;
}
}
game1();
[Frame 2]
function game2():void
{
matches = 0;
totalMatches = 0;
setPiece(board2.item1_mc, board2.dropZone1_mc);
setPiece(board2.item2_mc, board2.dropZone2_mc);
setPiece(board2.item3_mc, board2.dropZone3_mc);
setPiece(board2.item4_mc, board2.dropZone4_mc);
setPiece(board2.item5_mc, board2.dropZone5_mc);
setPiece(board2.item6_mc, board2.dropZone6_mc);
}
game2();
[Frame 3]
function game3():void
{
matches = 0;
totalMatches = 0;
setPiece(board3.item1_mc, board3.dropZone1_mc);
setPiece(board3.item2_mc, board3.dropZone2_mc);
setPiece(board3.item3_mc, board3.dropZone3_mc);
setPiece(board3.item4_mc, board3.dropZone4_mc);
setPiece(board3.item5_mc, board3.dropZone5_mc);
setPiece(board3.item6_mc, board3.dropZone6_mc);
}
game3();
Download / FLA / source:
https://bit.ly/4d6EZ0a
I hope this helps.
Regards,
JC
Copy link to clipboard
Copied
Copy link to clipboard
Copied
Have you downloaded the FLA?
Copy link to clipboard
Copied
I have now, sorry Im new to adobe animate and didnt realize. Everything works, Thank you so much for the help, Have a good day.
Copy link to clipboard
Copied
You're welcome!
Please let us know if you need further assistance.
Copy link to clipboard
Copied
Ive encountered a problem while working with the FLA file. Following the example game provided, I have selected all the elements and created a symbol "Board" and named it as "board1," (i did the same for the other two levels)
However, I'm facing a challenge where the puzzle pieces dont want to remain in the designated dropzone once I attempt to place them there.Also ,Given that the code specifically references only "item1_mc" through "item6_mc," I'm curious if it's necessary to add the other items in the code for each level. (Each level features geometric shapes labeled from "item1_mc" to "item36_mc," mirroring the arrangement of dropzones.). I am very sorry to be bothering you once more.
Copy link to clipboard
Copied
Do you have a FLA for us to look into?
Copy link to clipboard
Copied
I sent you the link to the fla file on messages.