ゲーム開発の道 LV5
キーボード入力を受け付けるようにして、
移動できるマス・移動できないマス判定しました。
全体が640x480で、1マス32x32なので、
mmm[0-19][0-14] の値で表示しています。
1⇒白マス、2⇒黒マス これは通れません!
5⇒赤マス これをパワーアップマスとしました!!
/*=== 動けるか判定する関数 ========*/
int canMove(int in){
/* can not go */
if(in == 1 || in == 2){
return 0;
}
return 1;
}
//--- 上を押されたときに以下が動く ---
mmm[px][py] = 0;
if (muki==0){ //上向きならpy座標を減らす
if(canMove(mmm[px][py-1]))
py--;
}
こんな感じで。難しくない。
上記で移動先が5だったときは、パワーアップ(絵を変える)
/*=== こうやってイメージを上書き ======= */
/* class change */
if(mmm[px][py] == ITEMA){
image[MAPI-1] = LoadGraph( "f02.jpg" );
}
現状の進捗は以下です。
そんだけ(^▽^)
ゲーム開発の道 LV4
はてはてLV5まじかです。
ヒャドはLV5、でもギラに比べると地味(;へ;)
LV4の今回は、ゲーム画面を意識して。
LV5はキー入力でキャラ動かします。
それを目指してヒャド取得ですね(’ー’)そろそろ作りたいゲームイメージ考えないと。
イメージはあるから出力しないと(’へ’)
使った素材は「素材」のタグにあげておきます
ソースコードばっかでごめんなさい><
/*=== MAIN部 ====================================*/
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていない
/* MAP draw */
drawMap();
/* chara draw */
moveChara();
ScreenFlip();//裏画面を表画面に反映
/* if Enter pressed, */
if(CheckHitKey( KEY_INPUT_RETURN ) != 0){
break;
}
/* 60FPS */
wait_fanc(); //Sleep(1000/60);
}
wait_fanc ⇒ s5を参考にしました^^v
/*=== MAP表示 =======================================*/
int drawMap(void){
int x,y;
int rtn;
int G_Blue = GetColor( 0 , 255 , 255 ) ;
for(y=0;y<480/MLEN;y++){
for(x=0;x<640/MLEN;x++){
if((rtn = mmm[x][y]) != 0){
/* box with (x1,y1,x2,y2) */
DrawGraph( MLEN*x , MLEN*y , image[rtn] , FALSE ) ;
}
}}
return 0;
}
⇒ 1だったら白パネル、2だったら黒パネル
image[1] = LoadGraph( "p16.jpg" );
image[2] = LoadGraph( "p15.jpg" );
/*=== キャラの移動関数 ==================================*/
int moveChara(void){
pt++;
if(pt>=CTIME){
pt = 0;
mmm[px][py] = 0;
px += dx;
mmm[px][py] = MAPI-1;
if(px==1){dx = 1;}
if(px==5){dx = -1;}
}
return 0;
}
⇒ mmm[px][py] px,pyのマスにキャラを表示してます!
ゲーム開発の道 LV3
LV3です。ドラクエ2ではリリザ周辺で戦っているころであり、
ドラクエ3では、とうぞくのかぎを目指してナジミの塔に行くレベルである。
わたしもそろそろオブジェクトを動かせるようにしなければ。。
ということで、今回はオブジェクトを動かすところに着手。
擬似関数ですすめていきます。
DrawChara(x、y) ・・・ x,y 座標に 決められた絵を描く関数。
これを使って記述することを考えると。
while(1){
DrawChara(x、y);
x += 10;
Sleep(time);
}
こうするっと。
なので、画面をクリアか画面の更新があればいいのですが、、
ClearDrawScreenっていう画面クリアの関数があった。
え?なに、クリアして再描画するの?重そうだけど・・。
まあ、従いまして実施。うごいたうごいた。
ここで問題が!!
1.全部描かないと
ClearDrawScreen()
が全部消してしまう。
ので、whileで文字表示している部分を呼ぶように
ぜーんぶくくらないと。
⇒ まあプログラム構造変えますか。
トップでClear呼びますかね。。
JAVAのupdateのイメージがあったので、
部分書き換えかなと思ったけど。
2.
画面うごかしたり、他のプログラム動かすと
処理落ちする。
⇒ 対策あるらしい(’ー’)
⇒ チラチラした画面を解消する事が出来るのは、
裏画面で描いて、表に出す(13a)
本日参照にしたのは12節ー14節です。
いつもありがとうの参考ホームページはこちら☆
ゲーム開発の道 LV2
今回はプログラムせずに設計です。
平日にプログラムしている時間は無いよー><
まず何つくろうかなあと思ったんですが、
会話システムかなと。
ファイアーエムブレムでは、顔グラフィックと噴出しのセットが
上と下で行われています。
まずはそのモジュールでも作ろうかと。
で、その設計。
![やまだの「死ぬまでにゲームをつくりたい!!」-会話設計](https://stat.ameba.jp/user_images/20100826/22/yamada-daibakuhu/5c/6c/p/t02200165_0640048010715281889.png?caw=800)
こういうイメージなので、
関数的には以下があればいいかな。
・噴出しエリア登場(上or下)
⇒ 返り値をハンドラに。クラスの作成になるかな(’へ’)
・しゃべる(ハンドラ、人ID、会話内容)
⇒ ハンドラで上下決まって、人IDでしゃべる人の顔グラフィック、会話を垂れ流すと
⇒ 会話を垂れ流すのが実は難しいんですけどね。。まあ、おいおい。
・噴出しエリア解除(ハンドラ)
/*---<<image>>-------*/
#define MES_UPPER 1
#define MES_DOWN 2
/* 上下の右左で4パターンいるかもしれん */
Mes upM, downM;
str = "やっとここまできた…\n最終決戦だ!!\nみんな、いくぞ!!\n";
downM = MesCreate(MES_DOWN);
MesPlay(downM, 13, str);
MesClose(downM);
てなもんだ