現在横スクロールのゲームを作成しているものです。
前に質問しましたが全くの勉強不足で具体的にどうすればいいのか分かりませんでした
その時指摘された内容が以下の文です
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;
}
DXライブラリ ゲーム作成について
Re: DXライブラリ ゲーム作成について
いいえ。コードはソースコード全体のことです。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で殴ればいい!(死亡フラグ)
Re: DXライブラリ ゲーム作成について
ありがとうございます。
質問の1はみけCATさんが例えでプログラムを載せた方法を使えということですね。
質問2も3もできました
本当にありがとうございます
質問の1はみけCATさんが例えでプログラムを載せた方法を使えということですね。
質問2も3もできました
本当にありがとうございます