ページ 1 / 1
Gを押して、ゲームモードを起動
Posted: 2014年6月25日(水) 14:29
by ついうくん
コード:
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);
if( DxLib_Init() == -1 ){
return 0;
}
int teki;
int mode=0;
int color=GetColor(255,255,255);
int haikei=LoadGraph("画像/背景.png");
int px=320,py=240;
int y_tmp=0,y_prev=0;
bool p_flag=true;
char Key[256];
int player;
player=LoadGraph("画像/キャラクタ01.png");
haikei=LoadGraph("画像/背景.png");
float speed=1.0f;
int xcount=0,ycount=0;
int ix=0,iy=0,result=0;
while(ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll(Key)==0){
DrawGraph(0,0,haikei,TRUE);
DrawString(320,300,"ゲーム:G",color);
DrawString(320,320,"コンフィグ:c",color);
DrawString(320,340,"終了:esc",color);
if(Key[KEY_INPUT_G]==1)
mode==0;
if(Key[KEY_INPUT_C]==1)
mode==1;
if(mode==0){
ClearDrawScreen();
if(Key[KEY_INPUT_LEFT]==1||Key[KEY_INPUT_RIGHT==1]){
if(Key[KEY_INPUT_UP]==1||Key[KEY_INPUT_DOWN]){
speed=0.71f;
}else{
speed=1.0f;
}
}else if(Key[KEY_INPUT_UP]==1||Key[KEY_INPUT_DOWN]==1){
speed=1.0f;
}
if(Key[KEY_INPUT_LEFT]!=1){
px-=(int)4*speed;
}
if(Key[KEY_INPUT_RIGHT]!=1){
px+=(int)4*speed;
}
if(p_flag==true){
y_tmp=py;
py+=(py-y_prev)+1;
y_prev=y_tmp;
if(py==360)
p_flag==false;
}
if(Key[KEY_INPUT_SPACE]==1&&p_flag==false){
p_flag=1;
y_prev=py;
py=py-20;
}
if(Key[KEY_INPUT_LEFT]==1){
if(xcount>0)
xcount=0;
xcount--;
}
if(Key[KEY_INPUT_RIGHT]){
if(xcount<0)
xcount=0;
xcount++;
}
ix=abs(xcount)%30/10;
iy=abs(ycount)%30/10;
if(xcount>0){
ix+=3;
result=ix;
}else
if(xcount<0){
ix+=9;
result=ix;
}
DrawGraph(px,py,player,TRUE);
if(Key[KEY_INPUT_LEFT]!=1&&Key[KEY_INPUT_RIGHT]!=1){
xcount=0;
}
}
if(Key[KEY_INPUT_ESCAPE]==1)
break;
}
DxLib_End();
return 0;
}
実行してみると、文字は出力されるんですが、Gキーを押してもキャラが描画されません。
何が原因かわかりません。教えていただいてもよろしいでしょうか
Re: Gを押して、ゲームモードを起動
Posted: 2014年6月25日(水) 15:56
by Rittai_3D
mode == 0 と mode = 0 は別物です。
前者が比較演算子、後者が代入演算子です。
http://www5c.biglobe.ne.jp/~ecb/c/01_06.html
ここが参考になります。
オフトピック
本題と逸れますが、SetDrawScreen( DX_SCREEN_BACK );と設定してないのでScreenFlip()は要らないのでは?ScreenFlip()を消すかSetDrawScreen( DX_SCREEN_BACK );をDxLib_Init()の後に追加して下さい。
あと、所々インデントが狂っています。
Re: Gを押して、ゲームモードを起動
Posted: 2014年6月25日(水) 22:02
by ついうくん
mode=0を消して、modeと宣言し実行してみましたが、真っ黒い画面のままで、ボタンを押しても何もありませんでした
Re: Gを押して、ゲームモードを起動
Posted: 2014年6月25日(水) 22:03
by ついうくん
mode=0を消して、modeと宣言し実行してみましたが、真っ黒い画面のままで、ボタンを押しても何もありませんでした
Re: Gを押して、ゲームモードを起動
Posted: 2014年6月25日(水) 22:22
by Rittai_3D
すいません。言葉足らずでした。
修正すべき場所は34-35行目の
コード:
if(Key[KEY_INPUT_G]==1)
mode==0;
の部分です。
Re: Gを押して、ゲームモードを起動
Posted: 2014年6月26日(木) 11:08
by ついうくん
何か別のプログラムを追加しないといけないのですか?
Re: Gを押して、ゲームモードを起動
Posted: 2014年6月26日(木) 11:53
by softya(ソフト屋)
代入文と条件比較式と混同されていると3D_3D さんが指摘されています。
mode==0は比較であって代入ではないのでmodeの値は変化しません。
【補足】
printfDXを使ったり、デバッガでブレークして値を確認するデバッグ技術を身につけると効率的にバグを潰せます。
「太田研究室 > Visual C++ 2010 Express プログラミング入門」
http://cvwww.ee.ous.ac.jp/vc10prog.html#7
Re: Gを押して、ゲームモードを起動
Posted: 2014年6月28日(土) 01:13
by ついうくんn
自分なりに変えてみるといけました、ありがとうございます
Re: Gを押して、ゲームモードを起動
Posted: 2014年6月28日(土) 08:54
by softya(ソフト屋)
最終的なコードを投稿して頂けると助かります。
当掲示板のルールとなっております。
Re: Gを押して、ゲームモードを起動
Posted: 2014年6月28日(土) 12:53
by ついうくん
[code=C++]
#include "DxLib.h"
int px=320,py=240;
int y_tmp=0,y_prev=0;
bool p_flag=true;
char Key[256];
float speed=1.0f;
int mode=0;
int h_color=(255,0,0);
int color=GetColor(255,255,255);
int haikei,player[16];
int xcount=0,ycount=0;
int ix=0,iy=0,result=0;
void title(){
DrawGraph(0,0,haikei,FALSE);
DrawString(240,270,"ゲーム:G",color);
DrawString(240,290,"コンフィグ:c",color);
DrawString(240,310,"終了:esc",color);
if(Key[KEY_INPUT_G]==1) mode = 1;
if(Key[KEY_INPUT_C]==1) mode = 2;
}
void pmove(){
if(Key[KEY_INPUT_LEFT]==1||Key[KEY_INPUT_RIGHT==1]){
if(Key[KEY_INPUT_UP]==1 || Key[KEY_INPUT_DOWN] ==1){
speed=0.71f;
}else{
speed=1.0f;
}
}else if(Key[KEY_INPUT_UP]==1 || Key[KEY_INPUT_DOWN]==1){
speed=1.0f;
}
if(Key[KEY_INPUT_LEFT]==1){
px-=(int)4*speed;
}
if(Key[KEY_INPUT_RIGHT]==1){
px+=(int)4*speed;
}
if(px<=0) px=0;
else if(px>=640-18) px=640-18;
if(py<=0) py=0;
else if(py>=640-18) py=640-18;
if(p_flag==true){
y_tmp=py;
py+=(py-y_prev)+1;
y_prev=y_tmp;
if(py==360)
p_flag==false;
}
if(Key[KEY_INPUT_SPACE]==1&&p_flag==false){
p_flag=1;
y_prev=py;
py=py-20;
}
if(Key[KEY_INPUT_LEFT]==1){
if(xcount>0)
xcount=0;
xcount--;
}
if(Key[KEY_INPUT_RIGHT]){
if(xcount<0)
xcount=0;
xcount++;
}
ix=abs(xcount)%30/10;
iy=abs(ycount)%30/10;
if(xcount>0){
ix+=3;
result=ix;
}else
if(xcount<0){
ix+=9;
result=ix;
}
DrawGraph(px,py,player[result],TRUE);
if(Key[KEY_INPUT_LEFT]!=1&&Key[KEY_INPUT_RIGHT]!=1)
xcount=0;
DrawString(0,0,"M:メニュー画面",color);
if(Key[KEY_INPUT_M]==1) mode=0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
ChangeWindowMode(TRUE);
if( DxLib_Init() == -1 ) return -1;
LoadDivGraph("キャラクタ10.png",16,4,4,32,32,player);
haikei=LoadGraph("メニュー背景.png");
SetDrawScreen( DX_SCREEN_BACK );
while(1){
ClearDrawScreen();
GetHitKeyStateAll(Key);
switch(mode){
case 0:
title();
break;
case 1:
pmove();
break;
default:
DxLib_End();
return 0;
break;
}
if(ProcessMessage()==-1) break;
ScreenFlip();
}
DxLib_End();
return 0;
}
[/code]
すみません