package {
import flash.display.*;
import flash.events.*;
import flash.net.URLRequest;
import flash.geom.*;
import flash.utils.Timer;
public class JigsawPuzzle extends MovieClip {
// number of pieces
const numPiecesHoriz:int = 3;
const numPiecesVert:int = 3;
// size of pieces
var pieceWidth:Number;
var pieceHeight:Number;
// game pieces
var puzzleObjects:Array;
// two levels of sprites
var selectedPieces:Sprite;
var otherPieces:Sprite;
// pieces being dragged
var beingDragged:Array = new Array();
// load picture and set up sprites
public function startJigsawPuzzle() {
// load the bitmap
loadBitmap("jigsawimage.jpg");
// set up two sprites
otherPieces = new Sprite();
selectedPieces = new Sprite();
addChild(otherPieces);
addChild(selectedPieces); // selected on top
}
// get the bitmap from an external source
public function loadBitmap(bitmapFile:String) {
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingDone);
var request:URLRequest = new URLRequest(bitmapFile);
loader.load(request);
}
// bitmap done loading, cut into pieces
private function loadingDone(event:Event):void {
// create new image to hold loaded bitmap
var image:Bitmap = Bitmap(event.target.loader.content);
pieceWidth = Math.floor((image.width/numPiecesHoriz)/10)*10;
pieceHeight = Math.floor((image.height/numPiecesVert)/10)*10;
// place loaded bitmap in image
var bitmapData:BitmapData = image.bitmapData;
// cut into puzzle pieces
makePuzzlePieces(bitmapData);
// set up movement and mouse up events
addEventListener(Event.ENTER_FRAME,movePieces);
stage.addEventListener(MouseEvent.MOUSE_UP,liftMouseUp);
}
// cut bitmap into pieces
private function makePuzzlePieces(bitmapData:BitmapData) {
puzzleObjects = new Array();
for(var x:uint=0;x<numPiecesHoriz;x++) {
for (var y:uint=0;y<numPiecesVert;y++) {
// create new puzzle piece bitmap and sprite
var newPuzzlePieceBitmap:Bitmap = new Bitmap(new BitmapData(pieceWidth,pieceHeight));
newPuzzlePieceBitmap.bitmapData.copyPixels(bitmapData,new Rectangle(x*pieceWidth,y*pieceHeight,pieceWidth,pieceHeight),new Point(0,0));
var newPuzzlePiece:Sprite = new Sprite();
newPuzzlePiece.addChild(newPuzzlePieceBitmap);
// place in bottom sprite
otherPieces.addChild(newPuzzlePiece);
// create object to store in array
var newPuzzleObject:Object = new Object();
newPuzzleObject.loc = new Point(x,y); // location in puzzle
newPuzzleObject.dragOffset = null; // offset from cursor
newPuzzleObject.piece = newPuzzlePiece;
newPuzzlePiece.addEventListener(MouseEvent.MOUSE_DOWN,clickPuzzlePiece);
puzzleObjects.push(newPuzzleObject);
}
}
// randomize locations of pieces
shufflePieces();
}
// random locations for the pieces
public function shufflePieces() {
// pick random x and y
for(var i in puzzleObjects) {
puzzleObjects[i].piece.x = Math.random()*400+50;
puzzleObjects[i].piece.y = Math.random()*250+50;
}
// lock all pieces to 10x10 grid
lockPiecesToGrid();
}
public function clickPuzzlePiece(event:MouseEvent) {
// click location
var clickLoc:Point = new Point(event.stageX, event.stageY);
beingDragged = new Array();
// find piece clicked
for(var i in puzzleObjects) {
if (puzzleObjects[i].piece == event.currentTarget) { // this is it
// add to drag list
beingDragged.push(puzzleObjects[i]);
// get offset from cursor
puzzleObjects[i].dragOffset = new Point(clickLoc.x - puzzleObjects[i].piece.x, clickLoc.y - puzzleObjects[i].piece.y);
// move from bottom sprite to top one
selectedPieces.addChild(puzzleObjects[i].piece);
// find other pieces locked to this one
findLockedPieces(i,clickLoc);
break;
}
}
}
// move all selected pieces according to mouse location
public function movePieces(event:Event) {
for (var i in beingDragged) {
beingDragged[i].piece.x = mouseX - beingDragged[i].dragOffset.x;
beingDragged[i].piece.y = mouseY - beingDragged[i].dragOffset.y;
}
}
// find pieces that should move together
public function findLockedPieces(clickedPiece:uint, clickLoc:Point) {
// get list of puzzle objects sorted by distance to the clicked object
var sortedObjects:Array = new Array();
for (var i in puzzleObjects) {
if (i == clickedPiece) continue;
sortedObjects.push({dist: Point.distance(puzzleObjects[clickedPiece].loc,puzzleObjects[i].loc), num: i});
}
sortedObjects.sortOn("dist",Array.DESCENDING);
// loop until all linked piece found
do {
var oneLinkFound:Boolean = false;
// look at each object, starting with closest
for(i=sortedObjects.length-1;i>=0;i--) {
var n:uint = sortedObjects[i].num; // actual object number
// get the position relative to the clicked object
var diffX:int = puzzleObjects[n].loc.x - puzzleObjects[clickedPiece].loc.x;
var diffY:int = puzzleObjects[n].loc.y - puzzleObjects[clickedPiece].loc.y;
// see if this object is appropriately placed to be locked to the clicked one
if (puzzleObjects[n].piece.x == (puzzleObjects[clickedPiece].piece.x + pieceWidth*diffX)) {
if (puzzleObjects[n].piece.y == (puzzleObjects[clickedPiece].piece.y + pieceHeight*diffY)) {
// see if this object is adjacent to one already selected
if (isConnected(puzzleObjects[n])) {
// add to selection list and set offset
beingDragged.push(puzzleObjects[n]);
puzzleObjects[n].dragOffset = new Point(clickLoc.x - puzzleObjects[n].piece.x, clickLoc.y - puzzleObjects[n].piece.y);
// move to top sprite
selectedPieces.addChild(puzzleObjects[n].piece);
// link found, remove from array
oneLinkFound = true;
sortedObjects.splice(i,1);
}
}
}
}
} while (oneLinkFound);
}
// takes an object and determines if it is directly next to one already selected
public function isConnected(newPuzzleObject:Object):Boolean {
for(var i in beingDragged) {
var horizDist:int = Math.abs(newPuzzleObject.loc.x - beingDragged[i].loc.x);
var vertDist:int = Math.abs(newPuzzleObject.loc.y - beingDragged[i].loc.y);
if ((horizDist == 1) && (vertDist == 0)) return true;
if ((horizDist == 0) && (vertDist == 1)) return true;
}
return false;
}
// stage sends mouse up event, drag is over
public function liftMouseUp(event:MouseEvent) {
// lock all pieces back to grid
lockPiecesToGrid();
// move pieces back to bottom sprite
for(var i in beingDragged) {
otherPieces.addChild(beingDragged[i].piece);
}
// clear drag array
beingDragged = new Array();
// see if the game is over
if (puzzleTogether()) {
cleanUpJigsaw();
gotoAndStop("gameover");
}
}
// take all pieces and lock them to the nearest 10x10 location
public function lockPiecesToGrid() {
for(var i in puzzleObjects) {
puzzleObjects[i].piece.x = 10*Math.round(puzzleObjects[i].piece.x/10);
puzzleObjects[i].piece.y = 10*Math.round(puzzleObjects[i].piece.y/10);
}
}
public function puzzleTogether():Boolean {
for(var i:uint=1;i<puzzleObjects.length;i++) {
// get the position relative to the first object
var diffX:int = puzzleObjects[i].loc.x - puzzleObjects[0].loc.x;
var diffY:int = puzzleObjects[i].loc.y - puzzleObjects[0].loc.y;
// see if this object is appropriately placed to be locked to the first one
if (puzzleObjects[i].piece.x != (puzzleObjects[0].piece.x + pieceWidth*diffX)) return false;
if (puzzleObjects[i].piece.y != (puzzleObjects[0].piece.y + pieceHeight*diffY)) return false
}
return true;
}
public function cleanUpJigsaw() {
removeChild(selectedPieces);
removeChild(otherPieces);
selectedPieces = null;
otherPieces = null;
puzzleObjects = null;
beingDragged = null;
removeEventListener(Event.ENTER_FRAME,movePieces);
stage.removeEventListener(MouseEvent.MOUSE_UP,liftMouseUp);
}
}
}
分享到:
相关推荐
标题中的“flash 拼图源代码 及教程”揭示了这个压缩包包含的内容是关于一个基于Flash技术的拼图游戏的源代码和教学资源。这个项目使用了ActionScript 2.0,这是一种专用于Adobe Flash平台的编程语言,用于创建交互...
《深入解析Flash拼图游戏源代码》 Flash作为一种曾经风靡全球的交互式矢量图形和多媒体开发平台,为无数的网页游戏提供了丰富的创意空间。本文将围绕“Flash拼图游戏源代码”这一主题,深入探讨其背后的编程原理、...
《深入解析Flash拼图游戏源代码》 Flash作为一种曾经风靡全球的交互式矢量图形和多媒体开发平台,为无数的开发者提供了丰富的创作空间。在众多的Flash应用中,拼图游戏是一种简单而有趣的项目,它能吸引各年龄段的...
《深入解析Flash CS3拼图游戏源代码》 在数字媒体和互动娱乐领域,Flash CS3是一款曾经广泛应用的动画和游戏开发工具。本篇将详细探讨一个基于Flash CS3开发的纯代码拼图游戏,旨在帮助读者理解其背后的编程原理和...
本资源包含了一系列的Flash源代码文件,这些源代码对于学习和理解Flash编程、游戏开发以及动画制作具有很高的价值。 首先,我们要明确的是,".fla"是Adobe Flash Professional的源文件格式,它包含了所有用于创建...
flash制作的拼图游戏,文件格式SWF,可以从电脑里任意选择一张图进行游戏。 联系作者可获得源代码。
在给定的“又一个Flash拼图游戏 Flash源码.rar”中,我们可以深入研究一个基于Flash制作的拼图游戏的源代码,了解其工作原理和实现方式。 这个游戏的核心是利用了Flash ActionScript语言来控制游戏逻辑。...
例如,拼图游戏的源代码可能包含解决谜题的算法,而射击游戏则需要实现敌人的AI行为。 5. **音频处理**:许多Flash小游戏会包含背景音乐和音效。ActionScript提供了`Sound`和`SoundChannel`类来加载、播放和控制...
在本文中,我们将深入探讨如何使用Flash AS3.0来创建一个拼图小游戏。AS3.0(ActionScript 3.0)是Adobe Flash平台上的一种编程语言,它为开发交互式内容提供了强大的功能,尤其适合制作各种类型的小游戏,如拼图...
《AS3.0 Flash拼图游戏开发详解》 在Flash编程领域,ActionScript 3.0(AS3.0)以其强大的性能和丰富的功能,成为了创建互动内容的首选语言。本篇文章将深入探讨如何利用AS3.0开发一款拼图游戏,通过分析提供的...
flash拼图游戏原文件fla 9宫格源代码文件
对于压缩包内的"flash拼图游戏"文件,我们可以预期这是一个包含所有游戏资源和源代码的压缩包。解压后,我们可以找到FLA文件,打开并查看其时间轴、库资源和AS脚本。在AS脚本中,我们可能看到用于生成拼图碎片、打乱...
在这个“FLASH小游戏源代码”压缩包中,我们主要关注的是使用Adobe Flash技术开发的小游戏的源文件。Flash是一种曾经广泛用于创建交互式内容、网页动画和在线游戏的平台。尽管现代浏览器不再支持Flash,但它在早期...
这些源代码打包文件包含了30种不同的FLASH特效,适用于各种网页应用场景。每个.FLA文件都是一个Adobe Flash的专业项目文件,包含了动画、交互性和编程逻辑的源代码。 在深入探讨这些FLASH特效之前,我们首先需要...
《AS3.0拼图游戏开发详解》 在IT领域,尤其是互动娱乐和教育软件开发中,Flash技术一直扮演着重要角色。...在压缩包“flash 3.0拼图游戏”中,你可以找到源代码和资源,进一步探索和研究AS3.0在拼图游戏开发中的应用。
Flash制作的小游戏,有AS2.0,也有3.0,大家可以用于学习!,美女来找茬,拼图游戏,射击,扫雷,flash 3.0太空战机,flash 3.0五子棋
FLA文件则包含源代码和设计资源,用于编辑和重新编译游戏。 总的来说,这个项目涉及了Flash动画制作、AS3.0编程、游戏逻辑设计以及视觉素材的整合,是学习和实践Flash游戏开发的好实例。开发者可以通过研究这个项目...
标题中的“智力拼图_flash_as3_源文件_fla”揭示了这个压缩包包含的是一个基于Flash ActionScript 3(AS3)开发的智力拼图游戏的源代码。Flash是一种曾经广泛用于创建交互式网页内容的技术,而AS3是其编程语言,提供...
这个文件是游戏的主要源代码,包含游戏逻辑。可能包括拼图的生成、碎片的移动和旋转功能、游戏状态的管理(如开始、暂停、重置)以及与用户的交互事件处理。 4. **JigsawPuzzle.fla**: 这是一个Flash文档,包含...
6. `src`:源代码目录,包含了游戏的主程序和所有类文件。在这里,开发者可以找到游戏的逻辑控制、图形渲染、事件处理等核心代码。 7. `resource`:资源文件夹,存储了游戏所需的图片、音频、XML配置文件等静态资源...