puzzle(reflectBall)
シンプルなパズルゲーム。
16枚のパネルをドラッグ&ドロップして
正しい位置に戻してあげてください。
♥0 |
Line 170 |
Modified 2010-10-01 00:18:11 |
MIT License
archived:2017-03-20 01:19:48
ActionScript3 source code
/**
* Copyright ushisantoasobu ( http://wonderfl.net/user/ushisantoasobu )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/pdGI
*/
/*--puzzle(reflectBall)--*/
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import caurina.transitions.Tweener;
[SWF(width=320, height=320, frameRate=30, backgroundColor=0x000000)]
public class FlashTest extends Sprite {
private var transition_1_x:int;
private var transition_1_y:int;
private var transition_2_x:int;
private var transition_2_y:int;
private var fromNum:int;
private var toNum:int;
private var arr:Array = new Array();
private var _arr:Array = randomNumberArr(0,15);
private var __arr:Array = new Array();
private var goal_hantei:int = 0;
public function FlashTest() {
for(var k:int = 0; k<16; k++){
//__arr[k] = _arr[k];
}
for(var i:int = 1; i<=16; i++){
var aaa:gamePanel = new gamePanel(i);
arr[i-1] = aaa;
var aaa_x:int = int((_arr[i-1])%4);
var aaa_y:int = int((_arr[i-1])/4);
_arr[i-1] = arr[i-1];
_arr[i-1].name = i-1;
_arr[i-1].panel_cover.addEventListener(MouseEvent.MOUSE_OVER, mouseoverHandler);
_arr[i-1].panel_cover.addEventListener(MouseEvent.ROLL_OUT, rolloutHandler);
_arr[i-1].panel_cover.addEventListener(MouseEvent.MOUSE_DOWN, mousedownHandler);
_arr[i-1].panel_cover.addEventListener(MouseEvent.MOUSE_UP, mouseupHandler);
_arr[i-1].x = aaa_x*80;
_arr[i-1].y = aaa_y*80;
addChild(_arr[i-1]);
}
}
private function mouseoverHandler(e:MouseEvent):void{
if(goal_hantei == 0){
e.target.alpha = 0.4;
}
}
private function rolloutHandler(e:MouseEvent):void{
e.target.alpha = 0.05;
}
private function mousedownHandler(e:MouseEvent):void{
if(goal_hantei == 0){
fromNum = e.target.parent.name;
}
}
private function mouseupHandler(e:MouseEvent):void{
if(goal_hantei == 0){
toNum = e.target.parent.name;
transition_1_x = _arr[fromNum].x;
transition_1_y = _arr[fromNum].y;
transition_2_x = _arr[toNum].x;
transition_2_y = _arr[toNum].y;
if(fromNum != toNum){
goal_hantei = 1;
Tweener.addTween(_arr[fromNum], {x:transition_2_x, y:transition_2_y, time:1.0});
Tweener.addTween(_arr[toNum], {x:transition_1_x, y:transition_1_y, time:1.0, onComplete:goalHanteiHandler});
}
}
}
private function goalHanteiHandler():void{
goal_hantei = 0;
var hantei:int = 0;
for(var i:int = 0; i<16; i++){
if(_arr[i].x == int(i%4)*80 && _arr[i].y == int(i/4)*80){
hantei++;
if(hantei == 16){
goal_hantei = 1;
var goal:goal_sign = new goal_sign();
addChild(goal);
goal.x = 160;
goal.y = 160;
goal.alpha = 0;
Tweener.addTween(goal, {alpha:1, time:1.8, delay:1.0});
}
}
else{
break;
}
}
}
//////////////////////////////////////////////////////////////
private function randomNumberArr( s:int , e:int ):Array {
var len:int = e-s;
var arr:Array = new Array(len);
var an:int = 0;
var i:int = 0;
for( i = s ; i <= e ; i++){
arr[ an ] = i;
an++;
}
var rarr:Array = new Array();
for( i = 0 ; i <= len ; i++ ){
var r:int = Math.random() * arr.length >> 0;
var p:int = arr[ r];
arr.splice(r,1);
rarr.push( p );
}
arr = null;
return rarr;
}
/////////////////////////////////////////////////////////////
}
}
//
import flash.display.Sprite;
import flash.events.Event;
class gamePanel extends Sprite{
private var data_x:int;
private var data_y:int;
private var panel_x_pos:int;
private var panel_y_pos:int;
private var panel_Length:int = 80;
private var _ball_Radius:int;
public var panel_cover:panel_mask = new panel_mask();
public function gamePanel(num:int){
graphics.beginFill(0x000000, 0.1);
graphics.lineStyle(1, 0x333333);
graphics.drawRect(0,0,panel_Length,panel_Length);
graphics.endFill();
data_x = 4;//int(Math.random()*3)+3;
data_y = 3;//int(Math.random()*3)+3;
if(data_x == data_y){
data_y -= 1;
}
var masking:panel_mask = new panel_mask();
panel_x_pos = (num - 1) % 4;
panel_y_pos = (num - 1) / 4;
var ball:gameBall = new gameBall();
ball.x = 100 - panel_x_pos * 80;
ball.y = 100 - panel_y_pos * 80;
_ball_Radius = ball.ball_Radius;
ball.addEventListener(Event.ENTER_FRAME, ballEventHandler);
addChild(ball);
addChild(masking);
panel_cover.alpha = 0.05;
addChild(panel_cover);
ball.mask = masking;
}
private function ballEventHandler(e:Event):void{
e.target.x += data_x;
e.target.y += data_y;
if(e.target.x > panel_Length * 4 - _ball_Radius - panel_x_pos * 80|| e.target.x < 0 + _ball_Radius - panel_x_pos * 80){
data_x *= -1;
}
if(e.target.y > panel_Length * 4 - _ball_Radius - panel_y_pos * 80|| e.target.y < 0 + _ball_Radius - panel_y_pos * 80){
data_y *= -1;
}
}
}
//
class gameBall extends Sprite{
//import flash.filters.GlowFilter;
public var ball_Radius:int = 70;
public function gameBall(){
graphics.beginFill(0xffffff, 1);
graphics.drawCircle(0,0,ball_Radius);
graphics.endFill();
}
}
//
class panel_mask extends Sprite{
public function panel_mask(){
graphics.beginFill(0xaaaaaa, 1);
graphics.drawRect(0,0,80,80);
graphics.endFill();
}
}
class goal_sign extends Sprite{
public function goal_sign(){
graphics.lineStyle(10, 0xff0000, 1);
graphics.drawCircle(0,0,40);
}
}