ゲームの基本設計に関して
Posted: 2012年5月26日(土) 18:06
最初に・・・自分の知識はC言語の入門サイトに載っていることと新・旧ゲームプログラミングの館、龍神録の館を一読した程度の知識です。
これからチェスや将棋のようなボードゲームを試しに作ってみて、できたらキャラが個人の能力などを持つシミュレーションゲームを作りたいと思っています。
人間VSコンピューターはコンピューターの思考ルーチンなどを作るのはまだまだ自分にはできそうに無いので後回しですが、
人間VS人間のゲームが作れたら良いなと思っています。
そこで二つ質問させてください。
一番最初に躓いたのがmain関数の構造?を考えることです。
龍神録の館では、
第9章より引用
と、「キャラクター」をロード(load.cpp)→計算(char.cpp)→描画(graph.cpp)と異なるcppファイルで分けていますが、
新プログラミングの館では、
d.1より引用
/*player.cpp*/
のように「キャラクター」を一つのcppファイルでロード→計算→描画としています。
結果的にはどちらを使っても動きには大差はないという風に想像していますが、
他のプログラミングをするときにも役に立ちそうなのでどちらが良いのか教えていただけるとありがたいです。
二つ目の質問は、シミューレーションの対戦画面(実際にチェスの駒などを動かす場面)の基本的な流れについてです。
チェス・将棋を例に考えてみると、
画像等のロード(初回)→(ルール等を決める)(初回)→駒を動かす(移動可能かの判定、移動計算、駒を取る等)→勝利・敗北の判定→ターンを移すかの判定→描画
と、自分なりに考えてみたのですが、なかなかシミュレーションゲームを専門に取り扱っているサイトが無くてどのようにしたら良いのか分からず困っています。
是非教えていただけるとありがたいです。
これからチェスや将棋のようなボードゲームを試しに作ってみて、できたらキャラが個人の能力などを持つシミュレーションゲームを作りたいと思っています。
人間VSコンピューターはコンピューターの思考ルーチンなどを作るのはまだまだ自分にはできそうに無いので後回しですが、
人間VS人間のゲームが作れたら良いなと思っています。
そこで二つ質問させてください。
一番最初に躓いたのがmain関数の構造?を考えることです。
龍神録の館では、
第9章より引用
#define GLOBAL_INSTANCE
#include "../include/GV.h"
//ループで必ず行う3大処理
int ProcessLoop(){
if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
GetHitKeyStateAll_2();//現在のキー入力処理を行う
GetHitPadStateAll(); //現在のパッド入力処理を行う
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
ChangeWindowMode(TRUE);//ウィンドウモード
if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化
while(ProcessLoop()==0){//メインループ
switch(func_state){
case 0:
load(); //データロード
first_ini();//初回の初期化
func_state=100;
break;
case 100:
calc_ch(); //キャラクタ計算
ch_move(); //キャラクタの移動制御
graph_main();//描画メイン
break;
default:
printfDx("不明なfunc_state\n");
break;
}
if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
ScreenFlip();//裏画面反映
}
DxLib_End();//DXライブラリ終了処理
return 0;
}
新プログラミングの館では、
d.1より引用
/*player.cpp*/
#include "DxLib.h"
#include "Player.h"
// このファイル内でしか使えないグローバル変数
static int m_Image; //画像ハンドル
static int m_y; //y座標
// 初期化をする
void Player_Initialize(){
m_Image = LoadGraph("画像/キャラクタ01.png");
m_y = 0;
}
// 動きを計算する
void Player_Update(){
m_y++;
}
// 描画する
void Player_Draw(){
DrawGraph( 0, m_y, m_Image, TRUE );
}
// 終了処理をする
void Player_Finalize(){
DeleteGraph( m_Image );
}
結果的にはどちらを使っても動きには大差はないという風に想像していますが、
他のプログラミングをするときにも役に立ちそうなのでどちらが良いのか教えていただけるとありがたいです。
二つ目の質問は、シミューレーションの対戦画面(実際にチェスの駒などを動かす場面)の基本的な流れについてです。
チェス・将棋を例に考えてみると、
画像等のロード(初回)→(ルール等を決める)(初回)→駒を動かす(移動可能かの判定、移動計算、駒を取る等)→勝利・敗北の判定→ターンを移すかの判定→描画
と、自分なりに考えてみたのですが、なかなかシミュレーションゲームを専門に取り扱っているサイトが無くてどのようにしたら良いのか分からず困っています。
是非教えていただけるとありがたいです。