Skip to main content
New Participant
April 19, 2024
Answered

Puzzle game in adobe animate

  • April 19, 2024
  • 1 reply
  • 1837 views

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;
}}

Correct answer JoãoCésar17023019

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

1 reply

JoãoCésar17023019
JoãoCésar17023019Correct answer
Community Expert
April 19, 2024

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

New Participant
April 19, 2024

Thank you for the reply but the code still doesnt work. I attached the error message.

JoãoCésar17023019
Community Expert
April 19, 2024

Have you downloaded the FLA?