rand関数の不可解なエラーについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kohei

rand関数の不可解なエラーについて

#1

投稿記事 by kohei » 7年前

code


//////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////// 「ゲーム制作」 基本ソース
//////////////////////////////////////////////////////////////////////

#include "Dxlib.h" // DxLibライブラリを使用する

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define SCREEN_SIZE_X 640 // 画面の横サイズ
#define SCREEN_SIZE_Y 480 // 画面の縦サイズ

//
//
// 変数定義
//
//

enum GAME_MODE {
GMODE_INIT, //初期化
GMODE_TITLE, //タイトル
GMODE_GAME, //ゲーム中
GMODE_OVER, //ガメオベラ
GMODE_CLEAR //クリアした際の間
};

enum CHAR_TYPE {
CHAR_TYPE_PLAYER, //プレイヤー
CHAR_TYPE_ITEMS, //アイテム
CHAR_TYPE_MAX
};

typedef struct {
CHAR_TYPE type; //タイプ
int posX; //座標X
int posY; //座標Y
int sizeX; //キャラのサイズX
int sizeY; //キャラのサイズY
int speed; //現在の移動スピード
int defSpeed; //デフォルトの移動スピード
int animCnt; //アニメーション
bool flag;
bool moveFlag;
int moveCnt; //残り移動量
int timeCnt; //残り時間
int zankiCnt;
}CHARACTER;
GAME_MODE game_mode;
GAME_MODE game_state;
CHARACTER charOdj[CHAR_TYPE_MAX];

int titleImage;
int gameoverImage;
int insekiposx;
int insekiposy;
int PlayerImage;

void PlayerMove(void);
void GameInit(void);
void GameTitle(void);
void GameOver(void);
void GameMain(void);
void GameDraw(void);
void PlayerMove(void);
void load(void);

// ========== WinMain関数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// ---------- システム処理
SetWindowText("spacedevli");
// システム処理
SetGraphMode(SCREEN_SIZE_X, SCREEN_SIZE_Y, 16); // 640×480ドット65536色モードに設定
ChangeWindowMode(true); // true:window false:フルスクリーン
if (DxLib_Init() == -1) return -1; // DXライブラリ初期化処理
SetDrawScreen(DX_SCREEN_BACK); // ひとまずバックバッファに描画

// ---------- グラフィックの登録 -----------



// ---------- ゲームループ
while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
{
ClsDrawScreen(); // 画面消去
switch (game_mode)
{
case GMODE_INIT:
GameInit();
break;
case GMODE_TITLE:
GameTitle();
break;
case GMODE_GAME:
GameMain();
break;
case GMODE_OVER:
GameOver();
break;
case GMODE_CLEAR:
//GameClear();
break;
default:
game_mode = GMODE_INIT;
break;
}
//
//
// メイン処理
//
//

ScreenFlip(); // 裏画面を表画面に瞬間コピー
}
DxLib_End(); // DXライブラリの終了処理
return 0; // このプログラムの終了
}
void load(void){
titleImage = LoadGraph("image/title.png");
gameoverImage = LoadGraph("image/gameover.png");
}


void GameTitle(void){

}
void GameMain(void){
PlayerMove();
GameDraw();
}
void GameOver(void){

}

void GameDraw(void){
DrawGraph(charOdj[CHAR_TYPE_PLAYER].posX, charOdj[CHAR_TYPE_PLAYER].posY, PlayerImage, true);
if (game_mode == GMODE_TITLE){
DrawGraph(0, 0, titleImage, true);
}
else if (game_mode == GMODE_OVER)
{
DrawGraph(0, 0, gameoverImage, true);
}
}

void PlayerMove(void){
if (CheckHitKey(KEY_INPUT_NUMPAD8)
|| CheckHitKey(KEY_INPUT_UP)) {
charOdj[CHAR_TYPE_PLAYER].posY -= charOdj[CHAR_TYPE_PLAYER].speed;
}
else if (CheckHitKey(KEY_INPUT_NUMPAD2)
|| CheckHitKey(KEY_INPUT_DOWN)) {
charOdj[CHAR_TYPE_PLAYER].posY += charOdj[CHAR_TYPE_PLAYER].speed;
}
else if (CheckHitKey(KEY_INPUT_NUMPAD4)
|| CheckHitKey(KEY_INPUT_LEFT)) {
charOdj[CHAR_TYPE_PLAYER].posX -= charOdj[CHAR_TYPE_PLAYER].speed;
}
else if (CheckHitKey(KEY_INPUT_NUMPAD6)
|| CheckHitKey(KEY_INPUT_RIGHT)) {
charOdj[CHAR_TYPE_PLAYER].posX += charOdj[CHAR_TYPE_PLAYER].speed;
}
}

void GameInit(void){
PlayerImage = LoadGraph("image/player.png");


charOdj[CHAR_TYPE_PLAYER].posX = 100;
charOdj[CHAR_TYPE_PLAYER].posY = 100;
charOdj[CHAR_TYPE_PLAYER].speed = 4;

game_mode = GMODE_GAME;
}

/* //2017_01_20_FRI_判断不能なためコメントアウト
srand((unsigned)time(NULL))
insekiposx() = rand() %
SCREEN_SIZE_X
insekiposy = 32
insekiposy += speed
*/

/code

//ここから説明
関数がない変数定義注釈~enumより上にrand関数を設定したのですが
私では理解できないエラーが発生いたしました。
この原因と解決方法が分かる方はいらっしゃいますか?

Math

Re: rand関数の不可解なエラーについて

#2

投稿記事 by Math » 7年前

今は正常だからおかしいママのコードをおくってください。[album]コード・ボタンを押してからコードをコピペして下さい。

コード:

//////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////// 「ゲーム制作」 基本ソース
//////////////////////////////////////////////////////////////////////

#include "Dxlib.h"	// DxLibライブラリを使用する

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define SCREEN_SIZE_X 640	// 画面の横サイズ
#define SCREEN_SIZE_Y 480	// 画面の縦サイズ

//
//
// 変数定義
//
//

enum GAME_MODE {
	GMODE_INIT,	//初期化
	GMODE_TITLE,	//タイトル
	GMODE_GAME,	//ゲーム中
	GMODE_OVER,	//ガメオベラ
	GMODE_CLEAR	//クリアした際の間
};

enum CHAR_TYPE {
	CHAR_TYPE_PLAYER,	//プレイヤー
	CHAR_TYPE_ITEMS,	//アイテム
	CHAR_TYPE_MAX
};

typedef struct {
	CHAR_TYPE type;	//タイプ
	int posX;	//座標X
	int posY;	//座標Y
	int sizeX;	//キャラのサイズX
	int sizeY;	//キャラのサイズY
	int speed;	//現在の移動スピード
	int defSpeed;	//デフォルトの移動スピード
	int animCnt;	//アニメーション
	bool flag;
	bool moveFlag;
	int moveCnt;	//残り移動量
	int timeCnt;	//残り時間
	int zankiCnt;
}CHARACTER;
GAME_MODE game_mode;
GAME_MODE game_state;
CHARACTER charOdj[CHAR_TYPE_MAX];

int titleImage;
int gameoverImage;
int insekiposx;
int insekiposy;
int PlayerImage;

void PlayerMove(void);
void GameInit(void);
void GameTitle(void);
void GameOver(void);
void GameMain(void);
void GameDraw(void);
void PlayerMove(void);
void load(void);

// ========== WinMain関数
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	// ---------- システム処理
	SetWindowText("spacedevli");
	// システム処理
	SetGraphMode(SCREEN_SIZE_X, SCREEN_SIZE_Y, 16);	// 640×480ドット65536色モードに設定
	ChangeWindowMode(true);	// true:window false:フルスクリーン
	if (DxLib_Init() == -1) return -1;	// DXライブラリ初期化処理
	SetDrawScreen(DX_SCREEN_BACK);	// ひとまずバックバッファに描画

	// ---------- グラフィックの登録 -----------



	// ---------- ゲームループ
	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0)
	{
		ClsDrawScreen(); // 画面消去
		switch (game_mode)
		{
		case GMODE_INIT:
			GameInit();
			break;
		case GMODE_TITLE:
			GameTitle();
			break;
		case GMODE_GAME:
			GameMain();
			break;
		case GMODE_OVER:
			GameOver();
			break;
		case GMODE_CLEAR:
			//GameClear();
			break;
		default:
			game_mode = GMODE_INIT;
			break;
		}
		//
		//
		// メイン処理
		//
		//

		ScreenFlip();	// 裏画面を表画面に瞬間コピー
	}
	DxLib_End();	// DXライブラリの終了処理
	return 0;	// このプログラムの終了
}
void load(void) {
	titleImage = LoadGraph("image/title.png");
	gameoverImage = LoadGraph("image/gameover.png");
}


void GameTitle(void) {

}
void GameMain(void) {
	PlayerMove();
	GameDraw();
}
void GameOver(void) {

}

void GameDraw(void) {
	DrawGraph(charOdj[CHAR_TYPE_PLAYER].posX, charOdj[CHAR_TYPE_PLAYER].posY, PlayerImage, true);
	if (game_mode == GMODE_TITLE) {
		DrawGraph(0, 0, titleImage, true);
	}
	else if (game_mode == GMODE_OVER)
	{
		DrawGraph(0, 0, gameoverImage, true);
	}
}

void PlayerMove(void) {
	if (CheckHitKey(KEY_INPUT_NUMPAD8)
		|| CheckHitKey(KEY_INPUT_UP)) {
		charOdj[CHAR_TYPE_PLAYER].posY -= charOdj[CHAR_TYPE_PLAYER].speed;
	}
	else if (CheckHitKey(KEY_INPUT_NUMPAD2)
		|| CheckHitKey(KEY_INPUT_DOWN)) {
		charOdj[CHAR_TYPE_PLAYER].posY += charOdj[CHAR_TYPE_PLAYER].speed;
	}
	else if (CheckHitKey(KEY_INPUT_NUMPAD4)
		|| CheckHitKey(KEY_INPUT_LEFT)) {
		charOdj[CHAR_TYPE_PLAYER].posX -= charOdj[CHAR_TYPE_PLAYER].speed;
	}
	else if (CheckHitKey(KEY_INPUT_NUMPAD6)
		|| CheckHitKey(KEY_INPUT_RIGHT)) {
		charOdj[CHAR_TYPE_PLAYER].posX += charOdj[CHAR_TYPE_PLAYER].speed;
	}
}

void GameInit(void) {
	PlayerImage = LoadGraph("image/player.png");


	charOdj[CHAR_TYPE_PLAYER].posX = 100;
	charOdj[CHAR_TYPE_PLAYER].posY = 100;
	charOdj[CHAR_TYPE_PLAYER].speed = 4;

	game_mode = GMODE_GAME;
}

/* //2017_01_20_FRI_判断不能なためコメントアウト
srand((unsigned)time(NULL))
insekiposx() = rand() %
SCREEN_SIZE_X
insekiposy = 32
insekiposy += speed
*/
//ここから説明
//関数がない変数定義注釈~enumより上にrand関数を設定したのですが
//私では理解できないエラーが発生いたしました。
//この原因と解決方法が分かる方はいらっしゃいますか?

Math

Re: rand関数の不可解なエラーについて

#3

投稿記事 by Math » 7年前

[訂正][album]ボタンの上のコード・ボタンを押してからコードをコピペして下さい。

box
記事: 2002
登録日時: 13年前

Re: rand関数の不可解なエラーについて

#4

投稿記事 by box » 7年前

kohei さんが書きました: 関数がない変数定義注釈~enumより上にrand関数を設定したのですが
何を言いたいのかよくわかりません。
kohei さんが書きました: 私では理解できないエラーが発生いたしました。
どんなエラーですか?エラーメッセージがあれば貼ってください。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

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

Re: rand関数の不可解なエラーについて

#5

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

GCC 4.8.1、DXライブラリ Ver3.16fでコンパイルが通りました。
kohei さんが書きました:関数がない変数定義注釈~enumより上にrand関数を設定したのですが
私では理解できないエラーが発生いたしました。
そのエラーが発生するコードを貼ってください。
(エラーメッセージも原因を考えるのに役立ちますが、コードがあればコンパイラに通せばエラーメッセージは得られるので、コードの方が重要であると考えられます)
添付ファイル
image.zip
テスト用画像
(16.78 KiB) ダウンロード数: 93 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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