上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
無題


取り敢えず仕様を「3マス先までは見える」とし、3マス先の壁の描画処理だけ作ってみました。


・・・力技で。
こんな感じ。(※随所にDXライブラリの関数を使用しています。)

static void draw_wall( void )
{
char front_x = 0 ;
char front_y = 0 ;

char right_x = 0 ;
char right_y = 0 ;

char chk_x ;
char chk_y ;

char pos_x ;
char pos_y ;

switch( party.direction )
{
case North :
front_y = -1 ;
right_x = 1 ;
break ;
case East :
front_x = 1 ;
right_y = 1 ;
break ;
case South :
front_y = 1 ;
right_x = -1 ;
break ;
case West :
front_x = -1 ;
right_y = -1 ;
break ;
default :
break ;
}

//DrawGraph( 0, 0, map.wall_gra[ 4 ], TRUE ) ;
DrawGraph( 0, 0, map.wall_gra[ 0 ], TRUE ) ;

// 座標系
// x -3 -2 -1 0 1 2 3
//y
// 3 ○ ○ ○ ○ ○ ○ ○
// 2 × ○ ○ ○ ○ ○ ×
// 1 × × ○ ○ ○ × ×
// 0 × × × ☆ × × ×

// 3マス先を描画
if( MapData[ party.x + front_x * 3 ][ party.y + front_y * 3 ] == 0 ) // (0,3)が壁 ?■?
{
chk_x = party.x + front_x * 3 + right_x ;
chk_y = party.y + front_y * 3 + right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (1,3)が壁 ?■■
{
chk_x = party.x + front_x * 3 - right_x ;
chk_y = party.y + front_y * 3 - right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (-1,3)が壁 ■■■
{
DrawGraph( 0, 0, map.wall_gra[ 3 ], TRUE ) ;
}
else // (-1,3)が道 □■■
{
DrawGraph( 200, 0, map.wall_gra[ 3 ], TRUE ) ;
}
}
else // (1,3)が道 ?■□
{
chk_x = party.x + front_x * 3 - right_x ;
chk_y = party.y + front_y * 3 - right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (-1,3)が壁 ■■□
{
DrawGraph( -200, 0, map.wall_gra[ 3 ], TRUE ) ;
}
else // (-1,3)が道 □■□
{
DrawGraph( 200, 0, map.wall_gra[ 5 ], TRUE ) ;
}
}
}
else // (0,3)が道 ?□?
{
chk_x = party.x + front_x * 3 + right_x ;
chk_y = party.y + front_y * 3 + right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (1,3)が壁 ?□■
{
chk_x = party.x + front_x * 3 - right_x ;
chk_y = party.y + front_y * 3 - right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (-1,3)が壁 ■□■
{
DrawGraph( -440, 0, map.wall_gra[ 3 ], TRUE ) ;
DrawGraph( 420, 0, map.wall_gra[ 3 ], TRUE ) ;
}
else // (-1,3)が道 □□■
{
DrawGraph( 420, 0, map.wall_gra[ 3 ], TRUE ) ;
}
}
else // (1,3)が道 ?□□
{
chk_x = party.x + front_x * 3 - right_x ;
chk_y = party.y + front_y * 3 - right_y ;
if( MapData[ chk_x ][ chk_y ] == 0 ) // (-1,3)が壁 ■□□
{
DrawGraph( -420, 0, map.wall_gra[ 3 ], TRUE ) ;
}
else // (-1,3)が道 □□□
{
// 何も描画しない
}
}
}

if( MapData[ party.x + front_x * 1 ][ party.y + front_y * 1 ] == 0 ) // 正面が壁
{
DrawGraph( 0, 0, map.wall_gra[ 1 ], TRUE ) ;
}
else if( MapData[ party.x + front_x * 2 ][ party.y + front_y * 2 ] == 0 ) // 2歩先が壁
{
DrawGraph( 0, 0, map.wall_gra[ 2 ], TRUE ) ;
}
else if( MapData[ party.x + front_x * 3 ][ party.y + front_y * 3 ] == 0 )
{
//DrawGraph( 0, 0, map.wall_gra[ 3 ], TRUE ) ;
}
}


こんだけで3マス奥だけ。あとこれを2マス、1マス、それに側面もと考えるととても書く気にはなれない。
もうちょっと効率の良いアルゴリズムを考えねばー・・・
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

実に2ヶ月ぶりの更新となります。
仕事が忙しく休日は家で休んでいるだけだったり、2連休が取れたら雪山に繰り出してみたりと相変わらず色々忙しい日々です。

以前サイドビュータイプのRPGを作っていることを何度かこの日記で挙げてきましたが不思議なもので外形が出来上がってくると途端に飽きました。

そんな中、Wizardry形式のゲームなら戦闘以外の面倒なところを殆ど作らなくて良い為RPGとしては敷居が低いのではないか。
そう思い並行してプロジェクトスタートしました。

ソースの履歴を見るとなんと新規作成日は2007/7/28。かれこれ半年も同じゲームを作ってるなんて俺すごくね?って感じです。

そうは言っても、extrierのWiz歴って言うのがPS版の4と5をクリア、GBC版の外伝1(だっけ?)をクリアしたくらい。あんまり知識が無いのでなかなか大変です。

そんな折”世界樹の迷宮”に出会いました。DSでやったゲームの中で一番のめりこみました。

天の声が聞こえました。
「世界樹の迷宮っぽいゲームを作りなさい」

それがコレです。

無題


取り敢えず一応見せられる形になったのでこうして公開してみました。
ホントに基礎の基礎のバトルのみ完成しています。

今は画面レイアウトを熟考中。シンプルなものにしたいという意思が強くあったのでコレに落ち着きました。


次の目標は壁を表示するアルゴリズムを作ること。
視界が横3マスの縦3マスとして、壁か床かで各マス2パターン。描画パターンは単純計算で2^9で512通り。(ありえないパターンもあるので実際にはコレよりもう少し少ないけれど)

流石にこんなに沢山画像は用意できないため何枚かベースになる画像を元に、この512種類どんなパターンでもOKな組み合わせになるようアルゴリズムを考えなければなりません。

たぶん先人たちが通った道。
参考に出来るようなHPが探せなかったので、しょうがないので自力で作ってみます。

作れるかな。。。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

RPGは作れど作れど、ぜんぜん遊べるレベルにならないのにやきもきしてきて、息抜きで2Dアクションゲームを作ってみました。

無題


やっぱり、アクションはRPGに比べて遊べる段階になりやすいですね。

まずジャンプの処理を入れてジャンプして遊ぶ。
当たり判定を作って、その辺をジャンプしまくる。
異様に高い壁を作って、こんなん登れねーよ、ってやる。
背景を入れてみる。
敵キャラを登場させてみる。
敵キャラに簡単なAIを組み込み、歩かせてみる。
敵キャラに追っかけられて、やべー!とかやってみる。
敵キャラとの当たり判定を入れてみる。←いまここ
無闇矢鱈に敵とぶつかってみる。
   ・
   ・
   ・

たった3日でここまで遊べれるようになるから凄い。つーか、RPGの敷居が高いことを改めて認識。

今回は、取り敢えずグラフィックは全部自作してみました。CGは楽だ。少しの手間で凄く綺麗に見える。
こうもりっぽいのなんて会心の出来だと思ってる。3分くらいで作ったのに(笑)


2Dアクションゲームと言えば2次元配列をX,Y座標と見立ててそこにデータを入れていくのが通常なんですが、敢えて無視しました。
「坂」を作ると言う野望があるので。
1ドット単位で制御できるように工夫しています。

RPG作ってた時の経験が生きて、結構スラスラ作れて楽しいです。
今は当たり判定のアルゴリズムを考えてるところだけれど、これも楽しい。出来てニンマリ。

飽きるまで暫くアクション作って息抜きしたいと思います。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

なんかちょっとうざい広告&告知が出てるので1ヶ月ぶりに更新。・・・ホント、1ヶ月はあっという間だ。

で、その間何をしていたかと言いますと、結局以前の問題は解決しさらに各コマンドの内部をちまちまと作成していました。

スキル画面。
無題

ぜんぜん作りかけですが、最終的にはFF9みたいにポイントを割り振って必要なスキルだけを選りすぐり身に付けて行くという方式を取ろうと思っています。

このあたりはプログラム的にはさほど、問題になるところは無いんですが非常に面倒であることと、レイアウト。
デザインセンスのスキルが壊滅的に0なので、一々苦労させられ、挙句こんなつまらないレイアウトしか思い浮かびませんでした。
ちょっとここ最近、フリーゲームで遊ぶ機会が多かったのですが遊んだゲームはどれも絵的にハイクオリティ、中身もハイクオリティな出来で「これ市販のゲーム以上じゃね?」と思う出来の物も多数ありました。

まぁ、このあたりはゲームの本質にかかわるところではないので、追々、直していければいいなあと思います。


ついでに戦闘画面をちょっとだけ修正。
無題2

見た目はちょっとだけですが内部的には色々変えました。
一番大きな変更点は、技/魔法がMP等を消費するようになったこと。
RPGでは当たり前なコレですが、漸く実装と言ったところです。


ホントに、終わりが見えない作業。
これからもちまちまと少しずつ製作していく予定です。


モンスターグラフィック:【Rド】さん
キャラフラフィック:敦煌回廊さん

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

#初めてhtml文書にコードを載っけるので折角だからという事でpreタグ使ってみたいのに激しく崩れるのでやめました。(修正する気力がないというが問題だけど・・・)
見難くてスイマセン


遂に行き詰りました。

typedef struct{
char name[] ;
void ( *func[] )( void ) ;
} Command ;

この宣言に
Command Command_Tbl[]=
{
{ "スキル" , command_skill } ,
{ "魔法" , command_magic , } ,
{ "装備" , command_equip , } ,
{ "スタータス", command_status , } ,
{ "隊列" , command_formation , } ,
{ "作戦" , command_tactics , } ,
{ "環境" , command_option, } ,
{ "セーブ" , command_save, } ,
};

そしてこれ。

Command* tblptr;
 (中略)
文字列描画: tblptr->name


その結果がこれ。
20071022220317.jpg

_| ̄|○ 何故文字化けを・・・

デバッガで内部の変数を見たところ、きちんと値が格納できてない模様。そこまでは分かったんですが、何故?がわからない・・・

関数ポインタと文字列を分けて処理すればきちんと上手く出来るんですが折角なんで構造体にしてみたいじゃないですか。しかし出来ない。プラス、この問題を解決する為にどういう参考書を見ればよいかも分からない。


1週間考えて駄目だったらベタで処理させるしかないかなあ・・・

しばらくは樹海から抜け出せそうにありません。

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

powered by
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。