龍神録の8章キーコンフィグの対応について

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

龍神録の8章キーコンフィグの対応について

#1

投稿記事 by モンス » 10年前

龍神録8章のキーコンフィグで実行してエラーはでないんですが、キーボードを左や右をおしても反応がありません。
プログラミングに問題があるのでしょうか。教えてください。
struct/h

コード:

ypedef 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;

typedef struct{
	int key[PAD_MAX];
}pad_t;

typedef struct{
	int down, up, left, right, shot, bom, slow, start, change;
}configpad_t;
char.cpp

コード:

#include "../include/GV.h"

void calc_ch(){
	ch.cnt++;
	ch.img = (ch.cnt % 24) / 6;
	if(CheckStatePad(configpad.left) > 0)
		ch.x-=3;
	if(CheckStatePad(configpad.right) > 0)
		ch.x+=3;
}
ini.cpp

コード:

#include "../include/GV.h"

void first_ini(){
	ch.x = FIELD_MAX_X / 2;
	ch.y = FIELD_MAX_Y * 3 / 4;
	configpad.down = 0;
	configpad.left = 1;
	configpad.right = 2;
	configpad.up = 3;
	configpad.bom = 4;
	configpad.shot = 5;
	configpad.slow = 11;
	configpad.start = 13;
	configpad.change = 6;
}
GV.h

コード:

#include "../../../include/DxLib.h"
#include "define.h"

#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern
#endif

#include "function.h"

GLOBAL int img_ch[2][12];

GLOBAL ch_t ch;

GLOBAL int func_state;

GLOBAL int img_board[40];

GLOBAL configpad_t configpad;

function.h

コード:

GLOBAL void graph_main();

GLOBAL int GetHitKeyStateAll_2();
GLOBAL int CheckStateKey(unsigned char Handle);

GLOBAL void load();

GLOBAL void first_ini();

GLOBAL void calc_ch();
GLOBAL void GetHitPadStateAll();
GLOBAL int CheckStatePad(unsigned int Handle);
key.cpp

コード:

#include "../include/GV.h"

unsigned  int stateKey[256];

int GetHitKeyStateAll_2(){
	char GetHitKeyStateAll_Key[256];
	GetHitKeyStateAll(GetHitKeyStateAll_Key);
	for(int i = 0; i < 256; i++){
		if(GetHitKeyStateAll_Key[i] != 0) GetHitKeyStateAll_Key[i]++;
		else                              GetHitKeyStateAll_Key[i] = 0;
	}
	return 0;
}

int CheckStateKey(unsigned char Handle){
	return stateKey[Handle];
}


pad_t pad;

void input_pad_or_key(int *p, int k){
	*p = *p > k ? *p : k;
}

void GetHitPadStateAll(){
	int i,PadInput,mul=1;        
	int *q[]={  &pad.key[configpad.left],     &pad.key[configpad.up],         &pad.key[configpad.right],      
		   &pad.key[configpad.down],  &pad.key[configpad.shot],      &pad.key[configpad.bom],  
                             &pad.key[configpad.slow],    &pad.key[configpad.start],     &pad.key[configpad.up],               
	             };        
	unsigned char s[]={ KEY_INPUT_LEFT, KEY_INPUT_UP, KEY_INPUT_RIGHT, KEY_INPUT_DOWN, KEY_INPUT_Z,
		                KEY_INPUT_X, KEY_INPUT_LSHIFT, KEY_INPUT_ESCAPE, KEY_INPUT_LCONTROL,
	                           };  
	PadInput = GetJoypadInputState( DX_INPUT_PAD1 );     
	for(i = 0; i < 16; i++){                
		if(PadInput & mul)  pad.key[i]++;                
		else                pad.key[i]=0;                        
	}        
	for(i = 0; i < 9; i++){
		input_pad_or_key(q[i], CheckStateKey(s[i]));
	} 

}

int CheckStatePad(unsigned int Handle){
	if(Handle >= 0 && Handle < PAD_MAX){
		return pad.key[Handle];
	}
	else{
		printfDx("CheckStatePadにわたした値は不正です。\n");
		return -1;
	}
}
define.h

コード:

#define FIELD_MAX_X 384
#define FIELD_MAX_Y 448

#define FIELD_X 32
#define FIELD_Y 16

#define PAD_MAX 16

#include "struct.h"
main.cpp

コード:

#define GLOBAL_INSTANCE
#include "../include/GV.h"

int ProcessLoop(){
	if(ProcessMessage() != 0)  return -1;
	if(ClearDrawScreen() != 0) return -1;
	GetHitKeyStateAll_2();
	GetHitPadStateAll();
	return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lmCmdLine, int nCmdShow){
	ChangeWindowMode(TRUE);
	if(DxLib_Init() == -1 || SetDrawScreen(DX_SCREEN_BACK) != 0) return -1;


	while(ProcessLoop() == 0){
                           switch(func_state){
		             case 0:       load();
			                 first_ini();
				    func_state = 100;
				    break;
			case 100:    calc_ch();
				     graph_main();
				     break;
			default:  printfDx("不明なfunc_state");
				      break;
		}
		if(CheckStateKey(KEY_INPUT_ESCAPE) == 1) break; 
		ScreenFlip();
	}

	DxLib_End();
	return 0;
}

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: 龍神録の8章キーコンフィグの対応について

#2

投稿記事 by Dixq (管理人) » 10年前

配布しているプロジェクトとどこか違いはありますか?

モンス

Re: 龍神録の8章キーコンフィグの対応について

#3

投稿記事 by モンス » 10年前

配布されているサンプルで実行したら正常に動きました。
自分のと見比べても違いを見つけることはできませんでした。

jay
記事: 314
登録日時: 13年前
住所: 大阪市
連絡を取る:

Re: 龍神録の8章キーコンフィグの対応について

#4

投稿記事 by jay » 10年前

デバッグのスキルと言うのもプログラマーには必要なものなのです

とりあえず
pad.keyの値を画面に表示させて値がちゃんと入っているか、とか
ブレークポイントを設置して実装した関数がちゃんと動いているか確認してみてはどうでしょう?
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

non
記事: 1097
登録日時: 13年前

Re: 龍神録の8章キーコンフィグの対応について

#5

投稿記事 by non » 10年前

GetHitKeyStateAll_2()の関数は何を返す?
non

モンス

Re: 龍神録の8章キーコンフィグの対応について

#6

投稿記事 by モンス » 10年前

エラーがでなくても動かないこともあるのですね。見落としてました。
解決できました。ありがとうございました。

閉鎖

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