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関数を設定したのですが
私では理解できないエラーが発生いたしました。
この原因と解決方法が分かる方はいらっしゃいますか?
rand関数の不可解なエラーについて
Re: rand関数の不可解なエラーについて
今は正常だからおかしいママのコードをおくってください。[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関数を設定したのですが
//私では理解できないエラーが発生いたしました。
//この原因と解決方法が分かる方はいらっしゃいますか?
Re: rand関数の不可解なエラーについて
何を言いたいのかよくわかりません。kohei さんが書きました: 関数がない変数定義注釈~enumより上にrand関数を設定したのですが
どんなエラーですか?エラーメッセージがあれば貼ってください。kohei さんが書きました: 私では理解できないエラーが発生いたしました。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: rand関数の不可解なエラーについて
GCC 4.8.1、DXライブラリ Ver3.16fでコンパイルが通りました。
(エラーメッセージも原因を考えるのに役立ちますが、コードがあればコンパイラに通せばエラーメッセージは得られるので、コードの方が重要であると考えられます)
そのエラーが発生するコードを貼ってください。kohei さんが書きました:関数がない変数定義注釈~enumより上にrand関数を設定したのですが
私では理解できないエラーが発生いたしました。
(エラーメッセージも原因を考えるのに役立ちますが、コードがあればコンパイラに通せばエラーメッセージは得られるので、コードの方が重要であると考えられます)
- 添付ファイル
-
- image.zip
- テスト用画像
- (16.78 KiB) ダウンロード数: 93 回
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)