2005-9の間に勉強したプログラミング使って無理やり作ったゲームです。
タイトル画面で説明を読むかゲームをスタートするか決めます。
ゲームをスタートしたら難易度をeasy,normal,hard,godの4つから選択し、PLAYボタンを押してください。
<操作方法>
1、angleのタイミングをはかってPLAYボタンを押す(押した状態を維持)
2、押している間はパワーゲージがたまるのでタイミングをあわせてマウスを離す
*1バウンド以降はスペースバーを押すことでおならゲージをつかって加速できます。
*青いブロックは接触するとそくゲームオーバーになります、青いブックはクリックすることで回避できます。
*その他の説明はタイトル画面の説明を参考にしてください。
893ヘッド君の休日のプログラムは以下のとおりになっています
<ちょっとした補足>
外の雑に作ってる部分を見えなくするための目隠しレイヤーをつくる(非表示&ロックしとく)
スコアを表示するテキストボックスにそれぞれmaxcombo、maxhit、maxspeed、highscore、scoreのように変数名をつける。
終了画面end_vew用のレイヤーをつくり、他を編集中は非表示&ロック。end_vewの中身には変数名scoreのテキストボックスを置く。
end_vew(ムービークリップ)
├×ボタン
└変数名scoreのテキストボックス
<×ボタンのムービークリップアクション>
on (release) {
_root.item_sibou.enabled = true;
_root.item_sibou_txt.enabled = true;
_root.yuka.yuka._x = _root.yuka_x;
_root.btn.i = 0;
_root.item_sibou_txt._visible = false;
_root.item_sibou._visible = false;
_root.item_sibou._x = _root.item_sibou_x;
_root.kakuhen1._visible = false;
_root.kakuhen2._visible = false;
_root.end_vew._visible = false;
_root.nitro_viw._visible = false;
_root.fever._visible = false;
_root.nitro.gotoAndStop(1);
_root.nitro_goto = 20;
_root.ball._y = _root.ball_y;
_root.ball._x = _root.ball_x;
_root.ball._rotation = 0;
_root.ball._xscale = 100;
_root.ball._yscale = 100;
_root.item_big._x = -_root.item_big._width;
_root.atari._x = -_root.atari._width;
_root.pow_bar._x = _root.pow_bar_x-_root.pow_bar._width;
onEnterFrame = undefined;
_root.start_angle();
}
<タイトルへボタンのムービークリップアクション>
on (release) {
_root.bgm.gotoAndPlay(1);
_root.back();
}
<スコアリセットのムービークリップアクション>
on (press) {
_root.score_data.data.easy_highscore = 0;
_root.score_data.data.normal_highscore = 0;
_root.score_data.data.hard_highscore = 0;
_root.score_data.data.god_highscore = 0;
_root.highscore = 0;
_root.score_data.data.maxspeed = 0;
_root.maxspeed = 0;
_root.score_data.data.maxhit = 0;
_root.maxhit = 0;
_root.score_data.data.maxcombo = 0;
_root.maxcombo = 0;
}
<音レイヤー>
それぞれの音用ムービークリップの1フレーム目のフレームアクション
stop();
それぞれの音用ムービークリップの最終フレームのフレームアクション
gotoAndStop(1);
メイン
├PLAYボタン
└フレームアクション
<PLAYボタンのムービークリップアクション>
on (press) {
if (i == 1) {
} else {
_root.nitro_goto = 20;
_root.press_data();
}
}
on (release, releaseOutside) {
if (i == 1) {
} else {
_root.se_release.gotoAndPlay(2);
_root.release_data();
}
}
<メインレイヤーのフレームアクション>
//ここが動きのメインプログラムになります。
//初期設定
System.useCodepage = true;
score_data = SharedObject.getLocal("scores");
bgm.gotoAndPlay(3);
news_txt_x = news_txt._x;
item_sibou.enabled = true;
end_vew._visible = false;
fever._visible = false;
nitro_viw._visible = false;
kakuhen1._visible = false;
kakuhen2._visible = false;
item_sibou_txt._visible = false;
yuka._xscale = (ball._y)/280*200+100;
yuka._yscale = (ball._y)/280*200+100;
sokusi_txt_visivble = 0;
atari_length = 500;
nitro_goto = 6;
score_save = 1;
nando = 25000;
item_sokusi_par = 2000;
item_big_par = 5000;
item_sibou_x = item_sibou._x;
nando_masatu = 1;
speed_vect = 10;
speed = 0;
rad = 0;
rad_vect = Math.random()*10;
rad_i = 0;
dist = 0;
score = 0;
pow_bar_x = pow_bar._x+pow_bar._width;
ball_y = ball._y;
ball_x = ball._x;
yuka_x = yuka.yuka._x;
yuka_x_movwid = yuka.yuka._x+yuka.yuka._width*1/2;
item_big_random = Math.random()*1500;
item_big._y = 50+Math.random()*250;
start_angle();
//角度の動き
function start_angle() {
nitro_cure_vew_time = 0;
item_sibou.nitro_cure = 0;
sokusi_break._visible = false;
plus_txt._visible = false;
bonus_num_box._visible = false;
speed_num_box._visible = false;
bonus_txt._visible = false;
btn._visible = true;
easy._visible = true;
normal._visible = true;
hard._visible = true;
god._visible = true;
select._visible = true;
onEnterFrame = function () {
news_txt._x -= 1;
if (news_txt._x+news_txt._width<0) {
news_txt._x = news_txt_x;
}
// 角度メーターの動きの設定
if (rad_i == 0) {
rad_vect = -5-Math.random()*3;
if (rad<0) {
rad_i = 1;
}
}
if (rad_i == 1) {
rad_vect = 5+Math.random()*3;
if (rad>90) {
rad_i = 0;
}
}
rad += rad_vect;
angle_met._rotation = rad;
};
}
//マウスを押している間の動き
function press_data() {
first_bonus = 1;
easy._visible = false;
normal._visible = false;
hard._visible = false;
god._visible = false;
select._visible = false;
fever.fever_num = 0;
masatu = 0.9;
dist = 0;
//角度メーターの行き過ぎ修正の設定
if (rad>90) {
rad = 89;
angle_met._rotation = 89;
}
if (rad<0) {
rad = 0;
angle_met._rotation = 0;
}
onEnterFrame = undefined;
onEnterFrame = function () {
news_txt._x -= 1;
if (news_txt._x+news_txt._width<0) {
news_txt._x = news_txt_x;
}
// パワーバーの動きの設定
if (speed<=80) {
speed += Math.random()*speed_vect;
pow_bar._x = pow_bar_x-pow_bar._width*speed/80;
} else {
speed = 0;
pow_bar._x = pow_bar_x;
}
};
}
//マウスを放したときの動き
function release_data() {
//行き過ぎ修正の設定
if (speed>80) {
pow_bar._x = pow_bar_x-pow_bar._width;
speed = 80;
}
btn.i = 1;
onEnterFrame = undefined;
btn._visible = false;
x_speed = speed*Math.cos(Math.PI*rad/180);
y_speed = speed*Math.sin(Math.PI*rad/180);
obj_y_sp = -y_speed;
onEnterFrame = function () {
news_txt._x -= 1;
if (news_txt._x+news_txt._width<0) {
news_txt._x = news_txt_x;
}
// おならの設定
if (first_bonus != 1) {
if (nitro_goto<21) {
if (Key.isDown(32) && key == 0) {
nitro_viw._visible = true;
x_speed = 250;
obj_y_sp = -10;
nitro.gotoAndStop(nitro_goto);
nitro_goto += 1;
se_nitro.gotoAndPlay(2);
nitro_time = 36;
}
key = Key.isDown(32);
}
}
if (nitro_time>0) {
nitro_time -= 1;
} else {
nitro_viw._visible = false;
}
if (nitro_cure_vew_time>0) {
sokusi_break._visible = true;
nitro_cure_vew_time -= 1;
} else {
sokusi_break._visible = false;
}
// 初期設定
speed_num = Math.floor(x_speed);
fever.fever_speed = fever_speed;
fever_speed = Math.floor(x_speed);
nitro_viw.nitro_speed = fever_speed;
x_speed *= 0.99;
dist += x_speed;
score = Math.floor(dist);
obj_y_sp = obj_y_sp+0.6;
ball._y = ball._y+obj_y_sp;
// 床の動きの設定
if (yuka.yuka._x>yuka_x_movwid) {
yuka.yuka._x = yuka_x+x_speed*2;
} else {
yuka.yuka._x += x_speed;
}
if (ball._y>0) {
yuka._xscale = (ball._y)/280*200+100;
yuka._yscale = (ball._y)/280*200+100;
} else {
yuka._xscale = 100;
yuka._yscale = 100;
}
// 893君の傾きの設定
ball._rotation = -Math.atan2(obj_y_sp, x_speed*8)/Math.PI*180;
// 終わりの設定
if (x_speed<0.7 && ball._y>ball_y-0.1) {
onEnterFrame = undefined;
ball._y = ball_y;
btn.i = 0;
item_sibou.enabled = false;
end();
}
// 床に当たったときの設定
if (ball._y>ball_y) {
if (first_bonus == 1) {
nitro_goto = 6;
bonus_num_box._visible = true;
bonus_txt._visible = true;
bonus_num = Math.floor(dist*dist*dist/1000000);
dist = dist+bonus_num;
first_bonus = 0;
bonus_visible = 36;
}
x_speed *= masatu;
obj_y_sp = -obj_y_sp*0.5;
if (ball._y>ball_y+0.45) {
se_yuka.gotoAndPlay(2);
}
fever.fever_combo = 0;
ball._y = ball_y;
}
// ハイスコア記録の設定
if (score_save == 1) {
if (highscore<score) {
highscore = score;
score_data.data.easy_highscore = highscore;
}
} else if (score_save == 2) {
if (highscore<score) {
highscore = score;
score_data.data.normal_highscore = highscore;
}
} else if (score_save == 3) {
if (highscore<score) {
highscore = score;
score_data.data.hard_highscore = highscore;
}
} else if (score_save == 4) {
if (highscore<score) {
highscore = score;
score_data.data.god_highscore = highscore;
}
}
// マックススピード記録の設定
if (maxspeed<speed_num) {
maxspeed = speed_num;
score_data.data.maxspeed = maxspeed;
}
// マックスヒット記録の設定
if (maxhit<fever.fever_num) {
maxhit = fever.fever_num;
score_data.data.maxhit = maxhit;
}
// マックスコンボ記録の設定
if (maxcombo<fever.fever_combo) {
maxcombo = fever.fever_combo;
score_data.data.maxcombo = maxcombo;
}
// 当たりの設定
if (score>=nando) {
atari._x += x_speed;
if (fever.fever_combo == 2) {
kakuhen1._visible = true;
atari_length_kakuhen = 500;
atari_time = 27*5;
} else if (fever.fever_combo>=3) {
kakuhen1._visible = false;
kakuhen2._visible = true;
atari_length_kakuhen = 350;
atari_time = 27*5;
} else {
if (atari_time>0) {
atari_time -= 1;
} else {
kakuhen1._visible = false;
kakuhen2._visible = false;
atari_length_kakuhen = atari_length;
}
}
atari_thousand = Math.floor(score/atari_length_kakuhen)*atari_length_kakuhen+50;
if (atari_thousand>score) {
atari._x = -atari._width-Math.random()*100;
}
if (ball.hitTest(atari)) {
fever.fever_combo += 1;
fever.fever_num += 1;
if (first_bonus == 1) {
nitro_goto = 6;
bonus_num_box._visible = true;
bonus_txt._visible = true;
bonus_num = Math.floor(dist*dist*dist/1000000);
dist = dist+bonus_num;
first_bonus = 0;
bonus_visible = 36;
} else {
bonus_num_box._visible = true;
bonus_txt._visible = true;
bonus_num = 1000*fever.fever_num*fever.fever_combo;
dist = dist+bonus_num;
bonus_visible = 36;
}
x_speed *= 5;
obj_y_sp = -15;
masatu /= 1.05*nando_masatu;
fever_num = 36;
se_atari.gotoAndPlay(2);
}
if (fever_num>0) {
fever._visible = true;
fever_num -= 1;
} else {
fever._visible = false;
}
if (x_speed>250) {
fever._visible = true;
if (x_speed>1000) {
speed_num_box._visible = true;
plus_txt._visible = true;
bonus_txt._visible = true;
dist = dist+speed_num;
bonus_visible = 36;
} else {
speed_num_box._visible = false;
plus_txt._visible = false;
}
}
if (bonus_visible>0) {
bonus_visible -= 1;
} else {
bonus_num_box._visible = false;
bonus_txt._visible = false;
}
}
// ビックアイテムの設定
if (score>=nando) {
item_big._x += x_speed;
item_big_thousand = Math.floor(score/item_big_par)*item_big_par+1000+item_big_random;
if (item_big_thousand>score) {
item_big._x = -item_big._width-Math.random()*500;
item_big_random = Math.random()*500;
item_big._y = 50+Math.random()*250;
}
if (ball.hitTest(item_big)) {
se_item_big.stop();
se_item_big.gotoAndPlay(2);
ball._xscale = 300;
ball._yscale = 300;
item_big_time = 90;
}
if (item_big_time>0) {
item_big_time -= 1;
} else {
ball._xscale = 100;
ball._yscale = 100;
}
}
// 死亡アイテムの設定
if (score>100000) {
if (item_sibou._x+550>ball._x && item_sibou._x<550+10) {
if (sokusi_txt_visivble == 0) {
item_sibou_txt._visible = true;
}
item_sibou._visible = true;
} else if (item_sibou._x>Stage.width+100) {
item_sibou._x = -Math.random()*item_sokusi_par;
item_sibou._y = 40+Math.random()*270;
item_sibou_txt._visible = false;
} else {
item_sibou_txt._visible = false;
}
item_sibou._x += 11;
if (ball.hitTest(item_sibou)) {
onEnterFrame = undefined;
item_sibou.enabled = false;
end();
}
}
};
speed = 0;
rad = 0;
}
//ゲームオーバー時
function end() {
se_end.play();
end_vew.score = score;
end_vew._visible = true;
}
//タイトル画面に戻る
function back() {
prevScene();
}
<難易度用のムービークリップアクション(easyのみ)>
on (press) {
_root.easy.onEnterFrame = undefined;
_root.normal.onEnterFrame = undefined;
_root.hard.onEnterFrame = undefined;
_root.god.onEnterFrame = undefined;
_root.score_load.gotoAndPlay("easy");
_root.nando = 25000;
_root.item_sokusi_par = 2000;
_root.speed_vect = 10;
_root.nando_masatu = 1;
_root.item_big_par = 5000;
_root.score_save = 1;
_root.atari_length = 500;
_root.sokusi_txt_visivble = 0;
onEnterFrame = function () {
_root.select._y = this._y+(_root.select._y-this._y)/2;
_root.select._x = this._x+(_root.select._x-this._x)/1.5;
};
}
<おならゲージのフレームアクション>
1フレーム目
stop();
_root.nitro_goto = 6;
6フレーム目
_root.nitro_goto = 11;
11フレーム目
_root.nitro_goto = 16;
16フレーム目
_root.nitro_goto = 21;
<横スクロール文字>
変数名をnewsにします。
メインの最初に外部テキストデータnews.txtを読み込みます。
<即死アイテムのムービークリップアクション>
on (press) {
this._x = _root.item_sibou_x-Math.random()*_root.item_sokusi_par;
this._y = 40+Math.random()*270;
_root.nitro_cure_vew_time = 15;
nitro_cure += 1;
if (_root.nitro_goto == 6) {
nitro_cure = 0;
}
if (nitro_cure == 5 && _root.nitro_goto>6) {
_root.nitro_goto -= 5;
_root.nitro.gotoAndStop(_root.nitro_goto-5);
onEnterFrame = function () {
if (_root.nitro_cure_vew_time<=1) {
nitro_cure = 0;
onEnterFrame = undefined;
}
};
}
_root.sokusi_break.gotoAndStop(nitro_cure+1);
}
<ニトロレイヤーの中身>
nitro_viw
└変数名nitro_speedのテキストボックス
ボーナスレイヤー
├変数名speed_numのテキストボックス
└変数名bonus_numのテキストボックス
fever
├変数名fever_speedのテキストボックス
├変数名fever_numのテキストボックス
└変数名fever_comboのテキストボックス
めちゃ無理やりだけど、ついに作ることが出来たFLASHゲーム。
一応でも完成させることが出来てよかった。まだまだ単純なゲームだけど、今後はもっとうまくつくれるといいなぁ。
今回はプログラムをしても、結果がどうなるか全くわからなくてなんどもテストして調整しての繰り返しだった。他にもプログラムはちゃんとなってると思ったのに、うまく動かなかったりでそれをいちいち直すのに苦労した。
プログラムがもっと複雑なやつになったらもう直せる自信がないなぁ、、、
とりあえず今回のは一番苦労して、時間かけてつくった一品です(;´Д`)
今回製作したファイル
・kokko_893fly.part1.rar(分割圧縮したファイルです。part1〜part3までDLしてから解凍してください)
・kokko_893fly.swf(「右クリック→対象をファイルに保存(A)...」で保存できます)