atompuzzle(ex)
ac3.0 from hansune
역시나 정리되지않고 혼자보기도 부담스럽다.ㅎ
package {
import flash.display.*;
import flash.events.*;
import flash.utils.setTimeout;
import flash.utils.Timer;
import flash.filters.BitmapFilter;
import flash.filters.BitmapFilterQuality;
import flash.filters.GlowFilter;
import flash.geom.ColorTransform;
public class atompuzzle extends MovieClip {
private var i:int;
private const stageW:Number = 1360;
private const stageH:Number = 768;
private var isOnline0:Array = new Array();
private var isOnline1:Array = new Array();
private var isOnline2:Array = new Array();
private var isOnline3:Array = new Array();
private var line0:Sprite = new Sprite();
private var line1:Sprite = new Sprite();
private var line2:Sprite = new Sprite();
private var moleculeSprite:Sprite = new Sprite();
private var lineSprite:Sprite = new Sprite();
private var celSpriteUp:Sprite = new Sprite();
private var celSpriteDn:Sprite = new Sprite();
private var isMoleculeOk0:Boolean = false;
private var isMoleculeOk1:Boolean = false;
private var isMoleculeOk2:Boolean = false;
private var isMoleculeOk3:Boolean = false;
private var rOffset:Number = 0;
private var tgRedOff:Number = 0;
private var bOffset:Number = 0;
private var tgBlueOff:Number = 0;
public var puzzleReady:Boolean = false;
public var puzzleOk:Boolean = false;
public function atompuzzle():void {
for (i=0; i<3; ++i) {
this["c"+i].x = Math.random()*stageW/2 + stageW/4;
this["c"+i].y = Math.random()*stageH/2 + stageH/4;
this["c"+i].alpha = 0;
celSpriteDn.addChild(this["c"+i]);
lineSprite.addChild(this["line"+i]);
}
for (i=0; i<4; ++i) {
this["molecule"+i].x = Math.random()*stageW/2 + stageW/4;
this["molecule"+i].y = Math.random()*stageH/2 + stageH/4;
this["molecule"+i].gotoAndStop(1);
this["molecule"+i].alpha = 0;
moleculeSprite.addChild(this["molecule"+i]);
}
// added child oder is important.
this.addChild(lineSprite);
this.addChild(moleculeSprite);
this.addChild(celSpriteDn);
this.addChild(celSpriteUp);
this.atomBg.alpha = 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
public function startPuzzle():void {
for (i=0; i<3; ++i) {
this["c" + i].addEventListener(Event.ENTER_FRAME,celView);
}
for (i=0; i<4; ++i) {
this["molecule"+i].addEventListener(Event.ENTER_FRAME,rotateMolecule);
}
this.addEventListener(Event.ENTER_FRAME,drawLine);
//this.addEventListener(Event.ENTER_FRAME,atomBgView);
puzzleReady = true;
}
public function ADDlistener():void{
for (i=0; i<3; ++i) {
this["c" + i].addEventListener(MouseEvent.MOUSE_DOWN,dragC);
this["c" + i].addEventListener(MouseEvent.MOUSE_UP,releaseC);
this["c" + i].addEventListener(MouseEvent.MOUSE_OVER,overC);
this["c" + i].addEventListener(MouseEvent.MOUSE_OUT,outC);
}
}
private function atomBgView(e:Event):void{
atomBg.alpha += 0.1;
if(atomBg.alpha > 0.9){
this.removeEventListener(Event.ENTER_FRAME,atomBgView);
atomBg.alpha = 1.0;
}
}
// 버튼 이벤트 종료..
public function celEventDel():void {
for (i=0; i<3; ++i) {
this["c" + i].stopDrag();
this["c" + i].removeEventListener(MouseEvent.MOUSE_DOWN,dragC);
this["c" + i].removeEventListener(MouseEvent.MOUSE_UP,releaseC);
this["c" + i].removeEventListener(MouseEvent.MOUSE_OVER,overC);
this["c" + i].removeEventListener(MouseEvent.MOUSE_OUT,outC);
}
for (i=0; i<4; ++i) {
this["molecule"+i].gotoAndStop(20);
}
}
/// 분자 회전 중지... 장면전환할때 실행
public function moleculeEventDel():void{
for (i=0; i<4; ++i) {
this["molecule"+i].removeEventListener(Event.ENTER_FRAME,rotateMolecule);
}
}
private function dragC(e:MouseEvent):void {
var s:Sprite = Sprite(e.currentTarget);
s.startDrag();
celSpriteDn.removeChild(s);
celSpriteUp.addChild(s);
}
private function releaseC(e:MouseEvent):void {
var s:Sprite = Sprite(e.currentTarget);
s.stopDrag();
celSpriteUp.removeChild(s);
celSpriteDn.addChild(s);
}
private function overC(e:MouseEvent):void {
e.currentTarget.scaleX = 1.2;
e.currentTarget.scaleY = 1.2;
}
private function outC(e:MouseEvent):void {
e.currentTarget.scaleX = 1.0;
e.currentTarget.scaleY = 1.0;
}
private function rotateMolecule(e:Event):void{
if(e.currentTarget.alpha < 1){
e.currentTarget.alpha += 0.1;
} else {
e.currentTarget.alpha = 1.0;
}
e.currentTarget.rotation ++;
e.currentTarget.rotation = e.currentTarget.rotation %360;
}
private function celView(e:Event):void{
e.currentTarget.alpha += 0.05;
if(e.currentTarget.alpha >0.9){
e.currentTarget.removeEventListener(Event.ENTER_FRAME,celView);
e.currentTarget.alpha = 1.0;
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
private function drawLine(e:Event):void {
lineChk0();
lineChk1();
lineChk2();
if (isOnline0[0] || isOnline0[1] || isOnline0[2]) {
if(!molecule0.chk){
molecule0.gotoAndPlay(20);
}
isMoleculeOk0 = true;
} else {
if(molecule0.chk){
molecule0.gotoAndPlay(1);
}
isMoleculeOk0 = false;
}
//
if (isOnline1[0] || isOnline1[1] || isOnline1[2]) {
if(!molecule1.chk){
molecule1.gotoAndPlay(20);
}
isMoleculeOk1 = true;
} else {
if(molecule1.chk){
molecule1.gotoAndPlay(1);
}
isMoleculeOk1 = false;
}
//
if (isOnline2[0] || isOnline2[1] || isOnline2[2]) {
if(!molecule2.chk){
molecule2.gotoAndPlay(20);
}
isMoleculeOk2 = true;
} else {
if(molecule2.chk){
molecule2.gotoAndPlay(1);
}
isMoleculeOk2 = false;
}
//
if (isOnline3[0] || isOnline3[1] || isOnline3[2]) {
if(!molecule3.chk){
molecule3.gotoAndPlay(20);
}
isMoleculeOk3 = true;
} else {
if(molecule3.chk){
molecule3.gotoAndPlay(1);
}
isMoleculeOk3 = false;
}
if (isMoleculeOk0 && isMoleculeOk1 && isMoleculeOk2 && isMoleculeOk3) {
trace("All onlineOk");
puzzleOk = true;
this.removeEventListener(Event.ENTER_FRAME,drawLine);
celEventDel();
}
}
private function lineChk0():void {
var atan:Number = Math.atan2(c1.y - c0.y,c1.x - c0.x);
var distance:Number = Math.sqrt((c1.y - c0.y)*(c1.y - c0.y)+(c1.x - c0.x)*(c1.x - c0.x));
var span:int = 8;
var sx:int = c0.x;
var sy:int = c0.y;
var area:Number = 20;
//draw dot-line...
line0.graphics.clear();
line0.graphics.beginFill(0xffffff);
for (i = 0; i<distance; i += span) {
line0.graphics.drawCircle(sx+Math.cos(atan)*i,sy+Math.sin(atan)*i, 2);
}
line0.graphics.endFill();
//
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule0.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule0.y - (sy+Math.sin(atan)*i)) < area) {
isOnline0[0] = true;
break;
} else {
isOnline0[0] = false;
}
}
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule1.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule1.y - (sy+Math.sin(atan)*i)) < area) {
isOnline1[0] = true;
break;
} else {
isOnline1[0] = false;
}
}
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule2.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule2.y - (sy+Math.sin(atan)*i)) < area) {
isOnline2[0] = true;
break;
} else {
isOnline2[0] = false;
}
}
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule3.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule3.y - (sy+Math.sin(atan)*i)) < area) {
isOnline3[0] = true;
break;
} else {
isOnline3[0] = false;
}
}
}
private function lineChk1():void {
var atan:Number = Math.atan2(c2.y - c1.y,c2.x - c1.x);
var distance:Number = Math.sqrt((c2.y - c1.y)*(c2.y - c1.y)+(c2.x - c1.x)*(c2.x - c1.x));
var span:int = 8;
var sx:int = c1.x;
var sy:int = c1.y;
var area:Number = 20;
//draw dot-line...
line1.graphics.clear();
line1.graphics.beginFill(0xffffff);
for (i = 0; i<distance; i += span) {
line1.graphics.drawCircle(sx+Math.cos(atan)*i,sy+Math.sin(atan)*i, 2);
}
line1.graphics.endFill();
//
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule0.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule0.y - (sy+Math.sin(atan)*i)) < area) {
isOnline0[1] = true;
break;
} else {
isOnline0[1] = false;
}
}
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule1.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule1.y - (sy+Math.sin(atan)*i)) < area) {
isOnline1[1] = true;
break;
} else {
isOnline1[1] = false;
}
}
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule2.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule2.y - (sy+Math.sin(atan)*i)) < area) {
isOnline2[1] = true;
break;
} else {
isOnline2[1] = false;
}
}
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule3.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule3.y - (sy+Math.sin(atan)*i)) < area) {
isOnline3[1] = true;
break;
} else {
isOnline3[1] = false;
}
}
}
private function lineChk2():void {
var atan:Number = Math.atan2(c0.y - c2.y,c0.x - c2.x);
var distance:Number = Math.sqrt((c0.y - c2.y)*(c0.y - c2.y)+(c0.x - c2.x)*(c0.x - c2.x));
var span:int = 8;
var sx:int = c2.x;
var sy:int = c2.y;
var area:Number = 20;
//draw dot-line...
line2.graphics.clear();
line2.graphics.beginFill(0xffffff);
for (i = 0; i<distance; i += span) {
line2.graphics.drawCircle(sx+Math.cos(atan)*i,sy+Math.sin(atan)*i, 2);
}
line2.graphics.endFill();
//
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule0.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule0.y - (sy+Math.sin(atan)*i)) < area) {
isOnline0[2] = true;
break;
} else {
isOnline0[2] = false;
}
}
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule1.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule1.y - (sy+Math.sin(atan)*i)) < area) {
isOnline1[2] = true;
break;
} else {
isOnline1[2] = false;
}
}
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule2.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule2.y - (sy+Math.sin(atan)*i)) < area) {
isOnline2[2] = true;
break;
} else {
isOnline2[2] = false;
}
}
for (i = 0; i<distance; i += span) {
if (Math.abs(molecule3.x - (sx+Math.cos(atan)*i)) < area && Math.abs(molecule3.y - (sy+Math.sin(atan)*i)) < area) {
isOnline3[2] = true;
break;
} else {
isOnline3[2] = false;
}
}
}
}
}

