「メニュー画面の作り方」にキャラを描画

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

「メニュー画面の作り方」にキャラを描画

#1

投稿記事 by study15 » 8年前

プログラミング初心者です。
新ゲームプログラミングの館にある「メニュー画面の作り方」に
キャラを描画する場合、以下のとおりに書いてみたのですがどうでしょうか。
また、敵、背景、ボードもこのようにGame.cppに追加していってもでよろしいでしょうか?

Game.cpp(C++は使っていません)

コード:

#include "Game.h"
#include "SceneMgr.h"
#include "DxLib.h"
#include "char.h"

//初期化
void Game_Initialize(){
	char_Initialize();
}

//終了処理
void Game_Finalize(){
	char_Finalize();
}

//更新
void Game_Update(){
	char_Update();

	if(CheckHitKey(KEY_INPUT_ESCAPE)!=0){ //Escキーが押されていたら
		SceneMgr_ChangeScene(eScene_Menu);//シーンをメニューに変更
    }
}

//描画
void Game_Draw(){
	char_Draw();

	DrawString(0, 0,"ゲーム画面です。",GetColor(255,255,255));
	DrawString(0,20,"Escキーを押すとメニュー画面に戻ります。",GetColor(255,255,255));
}

hide

Re: 「メニュー画面の作り方」にキャラを描画

#2

投稿記事 by hide » 8年前

いいかどうかは仕様を決めるあなたが判断することです
明確な目的も結果も書かずに過程を言われてもなんともなりません。
キャラを描画したいだけなら画像を表示するとしか言えないです。

study15

Re: 「メニュー画面の作り方」にキャラを描画

#3

投稿記事 by study15 » 8年前

申し訳ありません。

目的
シューティングゲームの作成
他のファイルからグローバル変数を参照しないようにしたい

結果
メニュー画面でゲームを選択し、エンターを押すとゲーム画面でキャラの描画と移動


書き方としては問題はないでしょうか?


char.cppはこのようにしました

コード:

#include "DxLib.h"
#include "key.h"
#include "math.h" //sqrt関数
#include "define.h"

//キャラクターに関する構造体
typedef struct{
	int flag;		//フラグ
	int cnt;		//カウンタ
	int power;		//パワー
	int point;		//ポイント
	int score;		//スコア
	int num;		//残機数
	int mutekicnt;	//無敵状態とカウント
	int shot_mode;	//ショットモード
	int money;		//お金
	int img;		
	int slow;		//スローかどうか
	double x,y;		//座標
}ch_t;

static int img_ch[2][12];	//キャラクタ画像9枚分 X2(変身用)
ch_t ch;		//キャラクタデータ宣言

//初期化
void char_Initialize(){
	//画像ファイルのメモリへの分割読みこみ
	LoadDivGraph("dat/img/char/0.png", 12, 4, 3, 73, 73, img_ch[0]);

	//自機データの初期化
	memset(&ch,0,sizeof(ch_t));

	//キャラクタの初期座標を設定
	ch.x=FMX/2;
	ch.y=FMY*7/8;
}

//終了処理
void char_Finalize(){
	//画像の解放
	for(int i=0; i<12; i++) DeleteGraph(img_ch[0][i]);
}

//更新
void char_Update(){
	int i,sayu_flag=0,joge_flag=0;
	double x,y,mx,my,naname=1;
	double move_x[4]={-4.0,4.0,0,0},move_y[4]={0,0,4.0,-4.0};//{左,右,下,上}のスピード
	int inputpad[4];
	inputpad[0]=CheckStateKey(KEY_INPUT_LEFT); inputpad[1]=CheckStateKey(KEY_INPUT_RIGHT);
	inputpad[2]=CheckStateKey(KEY_INPUT_DOWN); inputpad[3]=CheckStateKey(KEY_INPUT_UP);

	//24周期で1周、その中で4種類の画像をループ
	ch.cnt++;
	ch.img=(ch.cnt%24)/6;

	//キャラクタの移動制御
	if(CheckStateKey(KEY_INPUT_LEFT)>0)//左キーが押されていたら
			ch.img+=4*2;//画像を左向きに
	else if(CheckStateKey(KEY_INPUT_RIGHT)>0)//右キーが押されていたら
			ch.img+=4*1;//画像を右向きに

	for(i=0;i<2;i++)//左右分
		if(inputpad[i]>0)//左右どちらかの入力があれば
			sayu_flag=1;//左右入力フラグを立てる
	for(i=2;i<4;i++)//上下分
		if(inputpad[i]>0)//上下どちらかの入力があれば
			joge_flag=1;//上下入力フラグを立てる
	if(sayu_flag==1 && joge_flag==1)//左右、上下両方の入力があれば斜めだと言う事
		naname=sqrt(2.0);//移動スピードを1/ルート2に

	for(int i=0;i<4;i++){//4方向分ループ
		if(inputpad[i]>0){//i方向のキーボード、パッドどちらかの入力があれば
			x=ch.x , y=ch.y;//今の座標をとりあえずx,yに格納
			mx=move_x[i];   my=move_y[i];//移動分をmx,myに代入
			if(CheckStateKey(KEY_INPUT_LSHIFT)>0){//低速移動なら
				mx=move_x[i]/3; my=move_y[i]/3;//移動スピードを1/3に
			}
			x+=mx/naname , y+=my/naname;//今の座標と移動分を足す
			if(!(x<10 || x>FMX-10 || y<5 || y>FMY-5)){//計算結果移動可能範囲内なら
				ch.x=x , ch.y=y;//実際に移動させる
			}
		}
	}
	
}

//描画
void char_Draw(){
	DrawRotaGraphF(ch.x+FX,ch.y+FY,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 13年前
住所: 東海地方
連絡を取る:

Re: 「メニュー画面の作り方」にキャラを描画

#4

投稿記事 by softya(ソフト屋) » 8年前

#1の質問に関して。

メニュー画面の作り方にかかれている通り作られているなら問題ないと思います。

>新ゲームプログラミングの館にある「メニュー画面の作り方」に
>キャラを描画する場合、以下のとおりに書いてみたのですがどうでしょうか。

質問されているソースコードに「キャラを描画する」部分がないので回答不能です。
「メニュー画面の作り方」にあるコードと変わっている部分がありませんので。

>また、敵、背景、ボードもこのようにGame.cppに追加していってもでよろしいでしょうか?

Game.cppの役割分担としては問題ないと思います。

#3の質問に関して。
char.cppの確認事項としては、「他のファイルからグローバル変数を参照しないようにしたい」だけですか?
ch_t ch; //キャラクタデータ宣言
これはstaticではないので外部参照できます。
そのほかは大丈夫かと思います。

>メニュー画面でゲームを選択し、エンターを押すとゲーム画面でキャラの描画と移動

これについてはソースコードで確認できなので回答不能です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
usao
記事: 1887
登録日時: 11年前

Re: 「メニュー画面の作り方」にキャラを描画

#5

投稿記事 by usao » 8年前

オフトピック
もっと主題を明確にして

このように書いたのだが,この書き方だと○○○という点で問題があると思っている
→では,どのように書けばいいのか?

みたく質問した方が,よい回答が得られる確率も上がるのではないでしょうか.

study15

Re: 「メニュー画面の作り方」にキャラを描画

#6

投稿記事 by study15 » 8年前

回答ありがとうございます。

static ch_t ch; に書き換えました。

書き方に大きなミスはなさそうなので解決とさせていただきます。


今回、漠然とした質問ですみませんでした。
次から明確に質問できるよう気をつけます。

閉鎖

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