DotMagic As3版 - 放物線的
そしてさらに、放物線バージョン。
* 判定テキトーなのですり抜けてもご愛敬。
* あとついでに画面クリックでリセット機能もつけた。(すり抜けてどうにもならなくなったらどうぞ。)
ドットのカラーバリエーション増やしてみた。
* 色によってなんか起きます。
* 当時もそんな感じでゲームバリエーション増やしてました。
@author esukei
*
* DotMagic AS3版
* 中高時代所属してた部活で1年生が必ず作るゲームをふと思い出したので作ってみる。
* 元々作った方が不明なため勝手に移植してしまったので、もしやめてくれ!っていうときはすぐに取り下げます。
*
* 説明:
* スペースキー押してくねくねさせて、白に当たらないように赤を目指す。
* (日本語入力はオフにしてね!)
* 赤にたどり着くとレベルあがって白が増える。
*
* ドットの違い:
* 白:レベルリセット
* 緑:反射
* 黄:どこかてきとーにワープ
* 青:加速
// forked from esukei's DotMagic As3版 - 色付き
// forked from esukei's DotMagic As3版
/**
* そしてさらに、放物線バージョン。
* 判定テキトーなのですり抜けてもご愛敬。
* あとついでに画面クリックでリセット機能もつけた。(すり抜けてどうにもならなくなったらどうぞ。)
*/
/**
* ドットのカラーバリエーション増やしてみた。
* 色によってなんか起きます。
* 当時もそんな感じでゲームバリエーション増やしてました。
*/
/**
* @author esukei
*
* DotMagic AS3版
* 中高時代所属してた部活で1年生が必ず作るゲームをふと思い出したので作ってみる。
* 元々作った方が不明なため勝手に移植してしまったので、もしやめてくれ!っていうときはすぐに取り下げます。
*
* 説明:
* スペースキー押してくねくねさせて、白に当たらないように赤を目指す。
* (日本語入力はオフにしてね!)
* 赤にたどり着くとレベルあがって白が増える。
*
* ドットの違い:
* 白:レベルリセット
* 緑:反射
* 黄:どこかてきとーにワープ
* 青:加速
*/
package {
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.events.Event;
import flash.events.KeyboardEvent;
import flash.events.MouseEvent;
import flash.ui.Keyboard;
public class DotMagic extends Sprite {
private var point:Point;
private var stageData:BitmapData;
private var pointerLine:BitmapData;
private var stageLayer:Bitmap;
private var pointerLayer:Bitmap;
private var gameLevel:int = 1;
private var dx:Number;
private var dy:Number;
private var vy:Number;
private var gy:Number = 0.2;
private var colors:Array = [0xFFFFFFFF,0xFF00FF00,0xFFFFDD00,0xFF0055FF];
[SWF(width=465, height=465, backgroundColor=0x000000)]
public function DotMagic()
{
stage.frameRate = 30;
point = new Point();
pointerLine = new BitmapData(stage.stageWidth,stage.stageHeight,true,0x00000000);
stageData = new BitmapData(stage.stageWidth,stage.stageHeight,true,0xFF000000);
stageLayer = new Bitmap( stageData );
pointerLayer = new Bitmap( pointerLine );
addChild( stageLayer );
addChild( pointerLayer )
init();
stage.addEventListener( KeyboardEvent.KEY_DOWN, switchUp);
stage.addEventListener( KeyboardEvent.KEY_UP, switchDown);
stage.addEventListener( MouseEvent.CLICK, function(event:MouseEvent):void{
gameLevel = 1;
init();
} );
addEventListener( Event.ENTER_FRAME, main );
}
private function init():void
{
stage.frameRate = 30;
var rect:Rectangle = new Rectangle(0,0,stage.stageWidth,stage.stageHeight);
var back:Rectangle = new Rectangle(stage.stageWidth-1,0,1,stage.stageHeight);
var innerRect:Rectangle = new Rectangle(1,1,stage.stageWidth-2,stage.stageHeight-2);
var goal:Rectangle = new Rectangle(0,stage.stageHeight / 2 - 40,1,80);
stageData.fillRect(rect, 0xFFFFFFFF);
stageData.fillRect(back, 0xFF00FF00);
stageData.fillRect(innerRect, 0xFF000000);
stageData.fillRect(goal, 0xFFFF0000);
for(var i:int = 0; i < gameLevel * gameLevel * 10; i++){
var dotColor:uint = colors[Math.floor(Math.random() * 4)];
var dotX:Number = stage.stageWidth * Math.random();
var dotY:Number = stage.stageHeight * Math.random();
//ドットをちょっと大きく。
//めんどくさいから直打ち
stageData.setPixel32( dotX+1, dotY, dotColor );
stageData.setPixel32( dotX+2, dotY, dotColor );
stageData.setPixel32( dotX, dotY+1, dotColor );
stageData.setPixel32( dotX+1, dotY+1, dotColor );
stageData.setPixel32( dotX+2, dotY+1, dotColor );
stageData.setPixel32( dotX+3, dotY+1, dotColor );
stageData.setPixel32( dotX, dotY+2, dotColor );
stageData.setPixel32( dotX+1, dotY+2, dotColor );
stageData.setPixel32( dotX+2, dotY+2, dotColor );
stageData.setPixel32( dotX+3, dotY+2, dotColor );
stageData.setPixel32( dotX+1, dotY+3, dotColor );
stageData.setPixel32( dotX+2, dotY+3, dotColor );
}
pointerLine.fillRect(rect, 0x00000000);
point.x = stage.stageWidth-1;
point.y = stage.stageHeight / 2;
dx = -1;
vy = 0;
dy = 0;
}
private function main(event:Event):void
{
switch(stageData.getPixel32(point.x+dx,point.y+dy))
{
case 0xFFFFFFFF:
{
gameLevel = 1;
init();
break;
}
case 0xFFFF0000:
{
gameLevel++;
init();
break;
}
//緑は反射
case colors[1]:
{
dx *= -1;
break;
}
//黄色はワープ
case colors[2]:
{
point.x = stage.stageWidth * Math.random();
point.y = stage.stageHeight * Math.random();
break;
}
case colors[3]:
{
stage.frameRate = 60;
break;
}
default :
{
if(point.x+dx < 1){
if(point.y+dy > stage.stageHeight / 2 - 40 && point.y+dy < stage.stageHeight / 2 + 40){
gameLevel++;
init();
break;
}else{
gameLevel = 1;
init();
break;
}
}
if(point.x+dx > stage.stageWidth -1){
dx *= -1;
point.x = stage.stageWidth -1 + dx;
}
if(point.y+dy < 1 || point.y+dy > stage.stageHeight-1){
gameLevel = 1;
init();
}
break;
}
}
dy = vy + 0.5 * gy;
vy = vy + gy;
point.x += dx;
point.y += dy;
pointerLine.setPixel32(point.x, point.y, 0xFFFFFFFF);
}
private function switchUp(event:KeyboardEvent):void
{
if(event.keyCode == Keyboard.SPACE)
{
gy = -0.2;
}
}
private function switchDown(event:KeyboardEvent):void
{
if(event.keyCode == Keyboard.SPACE)
{
gy = 0.2;
}
}
}
}