インベーダーうじゃうじゃ
とりあえず一区切り。
十字キーでUFO(旗艦)を操作、インベーダー編隊がうじゃうじゃ追従します
使ってない変数とか保留したスクリプトが残っていたりしますがご了承ください
ようわからん。
Press key "LEFT","RIGHT","UP" and "DOWN"
auther maxcaffy
//とりあえず一区切り。
//十字キーでUFO(旗艦)を操作、インベーダー編隊がうじゃうじゃ追従します
//使ってない変数とか保留したスクリプトが残っていたりしますがご了承ください
//ようわからん。
//Press key "LEFT","RIGHT","UP" and "DOWN"
//auther maxcaffy
package {
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.text.TextField;
import flash.display.MovieClip;
import flash.ui.Keyboard;
import flash.events.KeyboardEvent;
import flash.accessibility.Accessibility;
import flash.events.Event;
[SWF(width="465", height="465", frameRate="30", backgroundColor="0x000000")]
public class TestingNow extends Sprite
{
private var i:int = 0; //汎用繰り返し数
private var k:int = 0; //同上
private var flag_l:Boolean = false; //キーボード押しっぱなしフラグ
private var flag_r:Boolean = false; //同上
private var flag_u:Boolean = false; //同上
private var flag_d:Boolean = false; //同上
private var timer:int = 0; //タイマーカウント
private var dx:Number = 0; //x加速度
private var dy:Number = 0; //y加速度
private var dmax:Number = 10; //最大速度
private var dx_c:Number = 0; //砲台x加速度
private var dy_c:Number = 0; //砲台y加速度
private var txf_trace:TextField = new TextField(); //トレース用のテキストフィールド
private var tx_trace:String = "十字キーで移動";
private var color_enem:uint = 0xFF000000;
private var ar_e:Array = new Array();//敵用の配列
private var cann:Cann;
private var ufo:Ufo;
public function TestingNow() {
initFunc();
initAdd();
}
private function initFunc():void{
//旗艦召喚、配置
ufo = new Ufo(0xFFFFFFFF);
addChild(ufo);
ufo.x = (stage.stageWidth - ufo.width)/2;
ufo.y = 7;
//インベーダー召喚、配置
var temp1:int = 0;
var temp2:int = -10;
var widthnum:int = 32;
var widthoffset:int = (stage.stageWidth - widthnum * (10 + 1))/2;
var heightoffset:int = 20;
for(i=0;i<512;i++){
ar_e[i] = [new Inve(0xFFFFFFFF),0,0,0,0,0];
//ムービークリップ、初期x座標,、初期y座標,加速度dx,加速度dy
addChild(ar_e[i][0]);
temp1 += ar_e[i][0].width + 1;
if(i%widthnum==0){
temp1 = 0;
temp2 += ar_e[i][0].height+1;
}
ar_e[i][0].x = temp1 + widthoffset;
ar_e[i][0].y = temp2 + heightoffset;
ar_e[i][1] = ar_e[i][0].x; //初期座標
ar_e[i][2] = ar_e[i][0].y; //初期座標
ar_e[i][3] = 0; //各々の加速度
ar_e[i][4] = 0;
ar_e[i][5] = 0.6 + Math.random()*0.4; //追従速度(個性)
}
//凸召喚、配置
cann = new Cann(0xFFFFFFFF); //凸は一個でいいや。
addChild(cann);
cann.x = (stage.stageWidth + cann.width)/2;
cann.y = stage.stageHeight -20; //下からオフセット20の地点に停滞させる
}
private function initAdd():void{
stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunc);
stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunc);
stage.addEventListener(Event.ENTER_FRAME,enterFunc);
}
private function keyDownFunc(event:KeyboardEvent):void{
switch(event.keyCode){
case Keyboard.LEFT:
flag_l = true;
break;
case Keyboard.RIGHT:
flag_r = true;
break;
case Keyboard.UP:
flag_u = true;
break;
case Keyboard.DOWN:
flag_d = true;
break;
}
}
private function keyUpFunc(event:KeyboardEvent):void{
switch(event.keyCode){
case Keyboard.LEFT:
flag_l = false;
break;
case Keyboard.RIGHT:
flag_r = false;
break;
case Keyboard.UP:
flag_u = false;
break;
case Keyboard.DOWN:
flag_d = false;
break;
}
}
private function enemMove():void{
timer++;
if(timer>30){
for(i=0;i<512;i++){
ar_e[i][0].inveAnim();
}
timer = 0;
}
for(i=0;i<512;i++){
ar_e[i][1] += dx; //目標地点は初期座標+UFOの速度(UFOの次の地点)
ar_e[i][2] += dy; //
ar_e[i][3] *= 0.95; //速度の減衰
ar_e[i][4] *= 0.95; //
//ar_e[i][0].x += (ar_e[i][1] - ar_e[i][0].x)/ar_e[i][5];//精密追従タイプ
//ar_e[i][0].y += (ar_e[i][2] - ar_e[i][0].y)/ar_e[i][5];
ar_e[i][0].x += ar_e[i][3]; //各々の座標に各々の速度を足す
ar_e[i][0].y += ar_e[i][4];
if(ar_e[i][0].x < ar_e[i][1]){ //もし目標地点より小さい値だったら
ar_e[i][3] += ar_e[i][5]; //速度に加速度を足し込む(ar_e[i][5]はインベーダ生成時に設定したランダム値)
}else if(ar_e[i][0].x > ar_e[i][1]){
ar_e[i][3] -= ar_e[i][5];
}
if(ar_e[i][0].y < ar_e[i][2]){
ar_e[i][4] += ar_e[i][5];
}else if(ar_e[i][0].y > ar_e[i][2]){
ar_e[i][4] -= ar_e[i][5];
}
}
ufo.x += dx;
ufo.y += dy;
//空気摩擦
dx *= 0.95;
dy *= 0.95;
//操作系
if(Math.abs(dx)+Math.abs(dy) < dmax){
if(flag_l){
dx -= 1;
}if(flag_r){
dx += 1;
}if(flag_u){
dy -= 1;
}if(flag_d){
dy += 1;
}
}
//行き過ぎ防止
/*if(ufo.x < 0){
ufo.x = 0;
dx = 0;
}
if(ufo.x > stage.stageWidth - ufo.width){
ufo.x = stage.stageWidth - ufo.width;
dx = 0;
}
if(ufo.y < 0){
ufo.y = 0;
dy = 0;
}
if(ufo.y > stage.stageHeight - ufo.height){
ufo.y = stage.stageHeight - ufo.height;
dy = 0;
}*/
}
/*
private function cannonMove():void{ //保留中
mc_c.x += dx_c;
mc_c.y += dy_c;
dx_c *= 0.9;
dy_c *= 0.9;
if(Math.abs(mc_c.x - mc.x) > 10){
if(mc_c.x < mc.x){
dx_c ++;
}else if(mc_c.x > mc.x){
dx_c --;
}
}else{
dx_c = (mc.x - mc_c.x)/2;
}
}
*/
private function enterFunc(event:Event):void{
enemMove();
// cannonMove()
}
private function breakFunc(event:Event):void{
trace("test");
}
}
}
/*---------------------------------------------------------------------
凸クラス(いわゆる自機)
---------------------------------------------------------------------*/
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Bitmap;
import flash.display.BitmapData;
class Cann extends Sprite {
private var i:int = 0;
private var k:int = 0;
private var col:uint = 0x00000000; //カラー保存用
private var bmd:BitmapData = new BitmapData(10,10,true,0xFF000000);
private var bm:Bitmap = new Bitmap(bmd);
private var mc:MovieClip = new MovieClip()
public function Cann(c:uint):void{//色指定 、コンストラクタ
col = c;
cannonDraw(col);
mc.addChild(bm);
addChild(mc);
}
private function cannonDraw(c:uint):void{
for(i=0;i<10;i++){
for(k=0;k<10;k++){
bmd.setPixel(i,k,0x00000000);
}
}
//二段目
bmd.setPixel(3,1,c);
bmd.setPixel(4,1,c);
bmd.setPixel(5,1,c);
bmd.setPixel(6,1,c);
//三段目
bmd.setPixel(3,2,c);
bmd.setPixel(4,2,c);
bmd.setPixel(5,2,c);
bmd.setPixel(6,2,c);
//四段目~8段目
for(i=0;i<9;i++){
bmd.setPixel(0,3+i,c);
bmd.setPixel(1,3+i,c);
bmd.setPixel(2,3+i,c);
bmd.setPixel(3,3+i,c);
bmd.setPixel(4,3+i,c);
bmd.setPixel(5,3+i,c);
bmd.setPixel(6,3+i,c);
bmd.setPixel(7,3+i,c);
bmd.setPixel(8,3+i,c);
bmd.setPixel(9,3+i,c);
}
}
}
/*---------------------------------------------------------------------
インベーダークラス(ぴこぴこ動く)
---------------------------------------------------------------------*/
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Bitmap;
import flash.display.BitmapData;
class Inve extends Sprite {
private var cnt:int = 0; //アニメーション用
private var i:int = 0;
private var k:int = 0;
private var flag_anim:Boolean = false;//アニメーション用flag
private var col:uint = 0x00000000; //カラー保存用
private var bmd:BitmapData = new BitmapData(10,10,true,0xFF000000);
private var bm:Bitmap = new Bitmap(bmd);
private var mc:MovieClip = new MovieClip()
public function Inve(c:uint):void{//色指定 、コンストラクタ
col = c;
enemDraw(col);
mc.addChild(bm);
addChild(mc);
}
public function inveAnim():void{ //ピコピコ動かす
if(flag_anim){
enemDraw(col);
flag_anim = false;
}else{
enemDraw2(col);
flag_anim = true;
}
}
private function enemDraw(c:uint):void{ //左上は(0,0)らしい??
//初期化
for(i=0;i<10;i++){
for(k=0;k<10;k++){
bmd.setPixel(i,k,0x00000000);
}
}
//零段目
bmd.setPixel(1,0,c);
bmd.setPixel(2,0,c);
bmd.setPixel(3,0,c);
bmd.setPixel(6,0,c);
bmd.setPixel(7,0,c);
bmd.setPixel(8,0,c);
//一段目
bmd.setPixel(3,1,c);
bmd.setPixel(6,1,c);
//ニ段目
bmd.setPixel(3,2,c);
bmd.setPixel(6,2,c);
//三段目
bmd.setPixel(2,3,c);
bmd.setPixel(3,3,c);
bmd.setPixel(4,3,c);
bmd.setPixel(5,3,c);
bmd.setPixel(6,3,c);
bmd.setPixel(7,3,c);
//四段目
bmd.setPixel(1,4,c);
bmd.setPixel(2,4,c);
bmd.setPixel(4,4,c);
bmd.setPixel(5,4,c);
bmd.setPixel(7,4,c);
bmd.setPixel(8,4,c);
//五段目
bmd.setPixel(0,5,c);
bmd.setPixel(1,5,c);
bmd.setPixel(2,5,c);
bmd.setPixel(3,5,c);
bmd.setPixel(4,5,c);
bmd.setPixel(5,5,c);
bmd.setPixel(6,5,c);
bmd.setPixel(7,5,c);
bmd.setPixel(8,5,c);
bmd.setPixel(9,5,c);
//六段目
bmd.setPixel(0,6,c);
bmd.setPixel(2,6,c);
bmd.setPixel(3,6,c);
bmd.setPixel(4,6,c);
bmd.setPixel(5,6,c);
bmd.setPixel(6,6,c);
bmd.setPixel(7,6,c);
bmd.setPixel(9,6,c);
//七段目
bmd.setPixel(0,7,c);
bmd.setPixel(2,7,c);
bmd.setPixel(7,7,c);
bmd.setPixel(9,7,c);
//八段目
bmd.setPixel(2,8,c);
bmd.setPixel(3,8,c);
bmd.setPixel(6,8,c);
bmd.setPixel(7,8,c);
}
private function enemDraw2(c:uint):void{ //左上は(0,0)らしい??
//初期化
for(i=0;i<10;i++){
for(k=0;k<10;k++){
bmd.setPixel(i,k,0x00000000);
}
}
//零段目
//一段目
bmd.setPixel(1,1,c);
bmd.setPixel(2,1,c);
bmd.setPixel(3,1,c);
bmd.setPixel(6,1,c);
bmd.setPixel(7,1,c);
bmd.setPixel(8,1,c);
//ニ段目
bmd.setPixel(3,2,c);
bmd.setPixel(6,2,c);
//三段目
bmd.setPixel(0,3,c);
bmd.setPixel(2,3,c);
bmd.setPixel(3,3,c);
bmd.setPixel(4,3,c);
bmd.setPixel(5,3,c);
bmd.setPixel(6,3,c);
bmd.setPixel(7,3,c);
bmd.setPixel(9,3,c);
//四段目
bmd.setPixel(0,4,c);
bmd.setPixel(2,4,c);
bmd.setPixel(4,4,c);
bmd.setPixel(5,4,c);
bmd.setPixel(7,4,c);
bmd.setPixel(9,4,c);
//五段目
bmd.setPixel(0,5,c);
bmd.setPixel(1,5,c);
bmd.setPixel(2,5,c);
bmd.setPixel(3,5,c);
bmd.setPixel(4,5,c);
bmd.setPixel(5,5,c);
bmd.setPixel(6,5,c);
bmd.setPixel(7,5,c);
bmd.setPixel(8,5,c);
bmd.setPixel(9,5,c);
//六段目
//bmd.setPixel(0,6,color_enem);
bmd.setPixel(1,6,c);
bmd.setPixel(2,6,c);
bmd.setPixel(3,6,c);
bmd.setPixel(4,6,c);
bmd.setPixel(5,6,c);
bmd.setPixel(6,6,c);
bmd.setPixel(7,6,c);
bmd.setPixel(8,6,c);
//七段目
bmd.setPixel(2,7,c);
bmd.setPixel(7,7,c);
//八段目
bmd.setPixel(2,8,c);
bmd.setPixel(3,8,c);
bmd.setPixel(6,8,c);
bmd.setPixel(7,8,c);
}
}
/*---------------------------------------------------------------------
UFOクラス(旗艦)
---------------------------------------------------------------------*/
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Bitmap;
import flash.display.BitmapData;
class Ufo extends Sprite {
private var i:int = 0;
private var k:int = 0;
private var col:uint = 0x00000000; //カラー保存用
private var bmd:BitmapData = new BitmapData(20,5,true,0xFF000000);
private var bm:Bitmap = new Bitmap(bmd);
private var mc:MovieClip = new MovieClip()
public function Ufo(c:uint):void{//色指定 、コンストラクタ
col = c;
ufoDraw(col);
mc.addChild(bm);
addChild(mc);
}
private function ufoDraw(c:uint):void{
for(i=0;i<10;i++){
for(k=0;k<10;k++){
bmd.setPixel(i,k,0x00000000);
}
}
//零段目
for(i=0;i<12;i++){
bmd.setPixel(4+i,0,c);
}
//一段目
for(i=0;i<14;i++){
bmd.setPixel(3+i,1,c);
}
//ニ段目
for(i=0;i<20;i++){
bmd.setPixel(i,2,c);
}
bmd.setPixel(5,2,0x00000000);
bmd.setPixel(7,2,0x00000000);
bmd.setPixel(9,2,0x00000000);
bmd.setPixel(11,2,0x00000000);
bmd.setPixel(13,2,0x00000000);
bmd.setPixel(15,2,0x00000000);
//三段目
for(i=0;i<14;i++){
bmd.setPixel(3+i,3,c);
}
//四段目
for(i=0;i<12;i++){
bmd.setPixel(4+i,4,c);
}
}
}
/*---------------------------------------------------------------------
衝突エフェクトクラス(爆発)
---------------------------------------------------------------------*/
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.display.Bitmap;
import flash.display.BitmapData;
class Bomb extends Sprite {
private var cnt:int = 0; //アニメーション用
private var i:int = 0;
private var k:int = 0;
private var flag_anim:Boolean = false;//アニメーション用flag
private var col:uint = 0x00000000; //カラー保存用
private var bmd:BitmapData = new BitmapData(10,10,true,0xFF000000);
private var bm:Bitmap = new Bitmap(bmd);
private var mc:MovieClip = new MovieClip()
public function Inve(c:uint):void{//色指定 、コンストラクタ
col = c;
breakDraw1(col);
mc.addChild(bm);
addChild(mc);
}
private function breakDraw1(c:uint):void{
for(i=0;i<10;i++){
for(k=0;k<10;k++){
bmd.setPixel(i,k,0xFFFFFFFF);
}
}
//三段目
bmd.setPixel(3,3,c);
bmd.setPixel(6,3,c);
//四段目
bmd.setPixel(4,4,c);
bmd.setPixel(5,4,c);
//五段目
bmd.setPixel(4,5,c);
bmd.setPixel(5,5,c);
//六段目
bmd.setPixel(3,6,c);
bmd.setPixel(6,6,c);
}
private function breakDraw2(c:uint):void{
for(i=0;i<10;i++){
for(k=0;k<10;k++){
bmd.setPixel(i,k,0xFFFFFFFF);
}
}
//二段目
bmd.setPixel(4,2,c);
bmd.setPixel(5,2,c);
//四段目
bmd.setPixel(2,4,c);
bmd.setPixel(7,4,c);
//六段目
bmd.setPixel(4,6,c);
bmd.setPixel(5,6,c);
}
private function breakDraw3(c:uint):void{
for(i=0;i<10;i++){
for(k=0;k<10;k++){
bmd.setPixel(i,k,0xFFFFFFFF);
}
}
//零段目
bmd.setPixel(4,0,c);
bmd.setPixel(5,0,c);
//一段目
bmd.setPixel(1,1,c);
bmd.setPixel(8,1,c);
//ニ段目
bmd.setPixel(2,2,c);
bmd.setPixel(7,2,c);
//四段目
bmd.setPixel(0,4,c);
bmd.setPixel(4,4,c);
bmd.setPixel(5,4,c);
bmd.setPixel(9,4,c);
//五段目
bmd.setPixel(0,5,c);
bmd.setPixel(4,5,c);
bmd.setPixel(5,5,c);
bmd.setPixel(9,5,c);
//七段
bmd.setPixel(2,7,c);
bmd.setPixel(7,7,c);
//八段目
bmd.setPixel(1,8,c);
bmd.setPixel(8,8,c);
//九段目
bmd.setPixel(4,9,c);
bmd.setPixel(5,9,c);
}
private function breakDraw4(c:uint):void{
for(i=0;i<10;i++){
for(k=0;k<10;k++){
bmd.setPixel(i,k,0xFFFFFFFF);
}
}
//一段目
bmd.setPixel(1,1,c);
bmd.setPixel(8,1,c);
//ニ段目
bmd.setPixel(5,2,c);
//四段目
bmd.setPixel(2,4,c);
//五段目
bmd.setPixel(7,5,c);
//七段
bmd.setPixel(4,7,c);
//八段目
bmd.setPixel(1,8,c);
bmd.setPixel(8,8,c);
}
}