ゲームの設計と分割コンパイル (3)について
Posted: 2012年2月10日(金) 12:11
はじめまして龍神録でSTGをはじめて作り一度 タイトル画面からクリアまでを作ってみたものの
ソース等が汚くなった事と、グローバル関数を使わないほうが良いと書いてあったため、一からプログラムを書き直そうというところです。
ゲームの設計と分割コンパイル (3)まで読み進めていた最中のポインタの箇所で躓いたので質問させていただきます。
プログラムを組みながら少しだけ手を加えながら読み進めていて、ためしに実行してみたところ
error C2660: 'Player_Initialize' : 関数に 2 個の引数を指定できません。
と出ました。
2体プレイヤーを作って並べたいので Initialize に yの値に加えて xの値も設定出来るように引数に追加しましたが サンプルコードと見比べていても xの値を加えているだけでそれ以外同じだと思っています。
なぜエラーになるのか。そしてエラーの対処方法がわからずつまずき中です。
長々と失礼しましたが、エラーの対処法を教えていただければ幸いです。
main.cpp
Player.cpp
Player.h
Keyboard.cpp
Keyboard.h
ソース等が汚くなった事と、グローバル関数を使わないほうが良いと書いてあったため、一からプログラムを書き直そうというところです。
ゲームの設計と分割コンパイル (3)まで読み進めていた最中のポインタの箇所で躓いたので質問させていただきます。
プログラムを組みながら少しだけ手を加えながら読み進めていて、ためしに実行してみたところ
error C2660: 'Player_Initialize' : 関数に 2 個の引数を指定できません。
と出ました。
2体プレイヤーを作って並べたいので Initialize に yの値に加えて xの値も設定出来るように引数に追加しましたが サンプルコードと見比べていても xの値を加えているだけでそれ以外同じだと思っています。
なぜエラーになるのか。そしてエラーの対処方法がわからずつまずき中です。
長々と失礼しましたが、エラーの対処法を教えていただければ幸いです。
main.cpp
#include "DxLib.h"
#include "Player.h"
#include "Keyboard.h"
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE),DxLib_Init(),SetDrawScreen( DX_SCREEN_BACK );
Player_t Player1, Player2;
Player_Initialize( &Player1, 0 );// 初期化
Player_Initialize( &Player2, 200 );// 初期化
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){
Keyboard_Update();
Player_Calc( &Player1 ); // 計算
Player_Calc( &Player2 ); // 計算
Player_Graph( Player1 ); // 描画
Player_Graph( Player2 ); // 描画
}
Player_Finalize( Player1 ); // 終了処理
Player_Finalize( Player2 ); // 終了処理
DxLib_End();
return 0;
}
#include "DxLib.h"
#include "Keyboard.h"
#include "Player.h"
// 初期化をする
void Player_Initialize( Player_t *Player, int x , int y ){
Player->Image = LoadGraph("../データ/キャラクター/chara01.png");
Player->x = x;
Player->y = y;
}
// 動きを計算する
void Player_Calc( Player_t *Player ){
if( Keyboard_Get( KEY_INPUT_UP ) > 0 ){
Player->y--;
}
else if( Keyboard_Get( KEY_INPUT_DOWN ) > 0 ){
Player->y++;
}
else if( Keyboard_Get( KEY_INPUT_LEFT ) > 0 ){
Player->x--;
}
if( Keyboard_Get( KEY_INPUT_RIGHT ) > 0 ){
Player->x++;
}
}
// 描画する
void Player_Graph( Player_t Player ){
DrawGraph( Player.x, Player.y, Player.Image, TRUE );
}
// 終了処理をする
void Player_Finalize( Player_t Player ){
DeleteGraph( Player.Image );
}
#ifndef DEF_PLAYER_H //二重include防止
#define DEF_PLAYER_H
typedef struct{
int Image;
int y;
int x;
} Player_t;
// 初期化をする
void Player_Initialize(Player_t *Player, int y , int x );
// 動きを計算する
void Player_Calc(Player_t *Player );
// 描画する
void Player_Graph( Player_t Player );
// 終了処理をする
void Player_Finalize( Player_t Player );
#endif
#include "DxLib.h"
static int m_Key[256]; // キーの入力状態格納用変数
// キーの入力状態更新
void Keyboard_Update(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
m_Key[i]++; // 加算
} else { // 押されていなければ
m_Key[i] = 0; // 0にする
}
}
}
// KeyCodeのキーの入力状態を取得する
int Keyboard_Get( int KeyCode ){
return m_Key[ KeyCode ]; // KeyCodeの入力状態を返す
}