DXライブラリ ゲーム作成について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
nakada
記事: 12
登録日時: 9年前

DXライブラリ ゲーム作成について

#1

投稿記事 by nakada » 9年前

現在横スクロールのゲームを作成しているものです。

前に質問しましたが全くの勉強不足で具体的にどうすればいいのか分かりませんでした

その時指摘された内容が以下の文です

1;「コードをcodeタグで囲まずに貼り付けている」
  コードというのはmarimo2.jpgのことですか?

2;「文字列リテラル(から変換されるポインタ)をconst char*ではなく   char*型の引数に渡している」

   constを入力すると
   //ゲームの初期化
   GameInit(&marimo2, 30, 400, "marimo2.jpg");
   のGameInitにエラーの線が出るのはなぜですか?

3;Jump関数において◦引数x, yおよび変数JumpPowerの無駄な操作が行  われている◦pzを全く使用していない

  よろしければこのプログラムに合うJumpのプログラムを作っていた  だけませんか?

  よろしくお願いします。


#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS

#include "DxLib.h"
#include <math.h>
#include <string.h>

// ショットの最大数
#define MAX_SHOT 10000

typedef struct
{
int x;
int y;
char filename[128];
int img;
}Player;

//プロトタイプ宣言
void GameInit(Player *pz, int x, int y, char *name);
void Update(Player *pz);
void Jump(Player *pz);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
//変数宣言
Player marimo2;
Player JumpPower;

SetGraphMode(640, 480, 16);
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}

//ゲームの初期化
GameInit(&marimo2, 30, 400, "marimo2.jpg");

// ループ
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
ClsDrawScreen();//画面消去

//ジャンプ処理
Jump(&marimo2);

//キャラクター更新(位置、速度、球数etc)
Update(&marimo2);

//待ち時間
WaitTimer(10);
}

WaitKey();
DxLib_End();// DXライブラリ使用の終了処理

return 0;// ソフトの終了
}

//初期化
void GameInit(Player *pz, int x, int y, char *name)
{
//初期値を設定
pz->x = x;
pz->y = y;
strcpy(pz->filename, name);

//画像ファイルの読み込み
pz->img = LoadGraph(pz->filename);
}

//更新
void Update(Player *pz)
{
//位置の更新
if (CheckHitKey(KEY_INPUT_RIGHT) == 1)
{
//右が押されたら
pz->x++;
}
else if (CheckHitKey(KEY_INPUT_LEFT) == 1)
{
pz->x--;
}

//描画処理
DrawGraph(pz->x, pz->y, pz->img, TRUE);

}

//ジャンプ処理
void Jump(Player *pz)
{
int JumpPower = 0;
// キー入力取得
int Key = 0;
int OldKey = Key;
Key = GetJoypadInputState(DX_INPUT_KEY_PAD1);

if (Key & PAD_INPUT_RIGHT) pz->x += 1; // 右を押していたら右に進む
if (Key & PAD_INPUT_LEFT) pz->x -= 1; // 左を押していたら左に進む

//落下処理
pz->y -= JumpPower;

//落下速度を与える
JumpPower -= 1;

// もし地面についていたら止まる
if (pz->y > 400){
pz->y = 400;
JumpPower = 0;
}

// ジャンプボタンを押していて、地面についていたらジャンプ
if ((Key & PAD_INPUT_B) && pz->y == 400) JumpPower = 20;

}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: DXライブラリ ゲーム作成について

#2

投稿記事 by みけCAT » 9年前

nakada さんが書きました: 1;「コードをcodeタグで囲まずに貼り付けている」
  コードというのはmarimo2.jpgのことですか?
いいえ。コードはソースコード全体のことです。
nakada さんが書きました: 2;「文字列リテラル(から変換されるポインタ)をconst char*ではなく   char*型の引数に渡している」

   constを入力すると
   //ゲームの初期化
   GameInit(&marimo2, 30, 400, "marimo2.jpg");
   のGameInitにエラーの線が出るのはなぜですか?
まず、どのように書き換えたらどのようなエラーメッセージが出たのかを具体的に教えてください。
オフトピック
多分プロトタイプ宣言と定義のどっちかしか修正してないんじゃないかな…?
nakada さんが書きました: 3;Jump関数において◦引数x, yおよび変数JumpPowerの無駄な操作が行  われている◦pzを全く使用していない

  よろしければこのプログラムに合うJumpのプログラムを作っていた  だけませんか?
例えばこんな感じでしょうか?

コード:

#define _USE_MATH_DEFINES
#define _CRT_SECURE_NO_WARNINGS

#include "DxLib.h"
#include <math.h>
#include <string.h>

// ショットの最大数
#define MAX_SHOT 10000

struct Player
{
	int x;
	int y;
	int JumpPower;
	int img;
};

//プロトタイプ宣言
void GameInit(Player *pz, int x, int y, const char *name);
void Update(Player *pz);
void Jump(Player *pz, int Key);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)
{
	// 警告避け
	(void)hInstance; (void)hPrevInstance; (void)lpCmdLine; (void)nCmdShow;
	
	//変数宣言
	Player marimo2;

	SetGraphMode(640, 480, 16);
	SetWaitVSyncFlag(FALSE); //画面更新が遅くならないようにする
	if (DxLib_Init() == -1)	// DXライブラリ初期化処理
	{
		return -1;				// エラーが起きたら直ちに終了
	}
	SetDrawScreen(DX_SCREEN_BACK);
	
	//ゲームの初期化
	GameInit(&marimo2, 30, 400, "marimo2.jpg");

	// ループ
	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
	{
		ClsDrawScreen();//画面消去

		//キャラクター更新(位置、速度、球数etc)
		Update(&marimo2);

		ScreenFlip();//画面更新 

		//待ち時間
		WaitTimer(10);
	}

	DxLib_End();// DXライブラリ使用の終了処理

	return 0;// ソフトの終了
}

//初期化
void GameInit(Player *pz, int x, int y, const char *name)
{
	//初期値を設定
	pz->x = x;
	pz->y = y;
	pz->JumpPower = 0;

	//画像ファイルの読み込み
	pz->img = LoadGraph(name);
}

//更新
void Update(Player *pz)
{
	// キー入力取得
	int Key = GetJoypadInputState(DX_INPUT_KEY_PAD1);

	//位置の更新
	if (Key & PAD_INPUT_RIGHT) pz->x += 1;	// 右を押していたら右に進む
	if (Key & PAD_INPUT_LEFT) pz->x -= 1;	// 左を押していたら左に進む
	Jump(pz, Key);

	//描画処理
	DrawGraph(pz->x, pz->y, pz->img, TRUE);

}

//ジャンプ処理
void Jump(Player *pz, int Key)
{
	//落下処理
	pz->y -= pz->JumpPower;

	//落下速度を与える
	pz->JumpPower -= 1;

	// もし地面についていたら止まる
	if (pz->y > 400){
		pz->y = 400;
		pz->JumpPower = 0;
	}

	// ジャンプボタンを押していて、地面についていたらジャンプ
	if ((Key & PAD_INPUT_B) && pz->y == 400) pz->JumpPower = 20;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

nakada
記事: 12
登録日時: 9年前

Re: DXライブラリ ゲーム作成について

#3

投稿記事 by nakada » 9年前

ありがとうございます。
質問の1はみけCATさんが例えでプログラムを載せた方法を使えということですね。
質問2も3もできました
本当にありがとうございます

閉鎖

“C言語何でも質問掲示板” へ戻る