#include "DxLib.h" int Key[256]; int GetHitKeyStateAll_2(int GetHitKeyStateAll_InputKey[/url]){ char GetHitKeyStateAll_Key[256]; GetHitKeyStateAll( GetHitKeyStateAll_Key ); for(int i=0;i<256;i++){ if(GetHitKeyStateAll_Key==1) GetHitKeyStateAll_InputKey++; else GetHitKeyStateAll_InputKey=0; } return 0; } static int count=0; typedef struct{ int X,Y; }kyara1P; int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ ChangeWindowMode(TRUE);//ウィンドウモード if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化 // 透過色を変更 白を透過 SetTransColor( 255 , 255 ,255 ) ; int White = GetColor( 255 , 255 , 255 ) ; // 白の色を取得 kyara1P Player1P; Player1P.X=62; Player1P.Y=350; int haikei= LoadGraph("green.bmp"); int kyaraimage[10]; kyaraimage[0]= LoadGraph("picture[0].bmp"); kyaraimage[1]= LoadGraph("picture[1].bmp"); kyaraimage[2]= LoadGraph("picture[2].bmp"); kyaraimage[3]= LoadGraph("picture[3].bmp"); kyaraimage[4]= LoadGraph("picture[4].bmp"); kyaraimage[5]= LoadGraph("picture[5].bmp"); kyaraimage[6]= LoadGraph("picture[6].bmp"); kyaraimage[7]= LoadGraph("picture[7].bmp"); kyaraimage[8]= LoadGraph("picture[8].bmp"); kyaraimage[9]= LoadGraph("picture[0].bmp"); int muki=1; int jyuryoku=0; while(ProcessMessage()==0 && ClearDrawScreen()==0 && GetHitKeyStateAll_2(Key)==0 && Key[KEY_INPUT_ESCAPE]==0){ //↑メッセージ処理 ↑画面をクリア ↑入力状態を保存 ↑ESCが押されていない Player1P.Y+=jyuryoku; jyuryoku=2; if(Player1P.X>=16 && Player1P.X<=564 &&Player1P.Y > 350 && Player1P.Y<354 ) { Player1P.Y = 350 ; jyuryoku = 0 ; } if(Player1P.X>=10 && Player1P.X<=16 && Player1P.Y>380 && Player1P.Y<400) { jyuryoku = 0; muki=7; } if(Player1P.X>=564 && Player1P.X<=568 && Player1P.Y>380 && Player1P.Y<400) { jyuryoku = 0; muki=8; } if( Player1P.Y==480){Player1P.X=62; Player1P.Y=350; muki=1;} if( Key[ KEY_INPUT_LEFT]==1 || ( Key[ KEY_INPUT_LEFT]>10) && count%2){muki=2;Player1P.X-=2;} if( Key[ KEY_INPUT_RIGHT]==1|| ( Key[ KEY_INPUT_RIGHT]>10) && count%2){muki=1;Player1P.X+=2;} if( Key[ KEY_INPUT_DOWN]==1 || ( Key[ KEY_INPUT_DOWN]>10) && count%2 && Player1P.Y<=348) Player1P.Y+=2; if( Key[ KEY_INPUT_Z] == 1 ) { if(muki==1)muki=3; if(muki==2)muki=4; } if( Key[ KEY_INPUT_A] == 1 && Player1P.Y==350){ if(muki==1)muki=5; if(muki==2)muki=6; Player1P.Y-=100; } if(Player1P.X>12 && Player1P.Y > 400) {Player1P.X=12;} count++; if(Player1P.X<0)Player1P.X=0; if(Player1P.X>640-71)Player1P.X=640-71; DrawGraph(0,0,haikei,FALSE); DrawFormatString( 0, 0, White, "Player1P.Xは%d\n",Player1P.X ) ; DrawFormatString( 0, 50, White, "Player1P.Yは%d\n",Player1P.Y) ; DrawGraph(Player1P.X,Player1P.Y,kyaraimage[muki],TRUE); ScreenFlip(); } DxLib_End(); return 0; }
ゲームのバグについて
ゲームのバグについて
ゲームを作っていて実行中に右から落ちると左にいきなり出てくるのですがどうしてでしょうか?
Re:ゲームのバグについて
>ゲームを作っていて実行中に右から落ちると左にいきなり出てくるのですがどうしてでしょうか?
え?右の土管に入ると「イッツ ミー マーリオー」って言いながら左の土管から出てくるんですか?マリオ?
自分が経験した事 == 他人も経験している なんて事は殆どありません。
ですので、自分でもウザい位に説明するのが丁度良いくらいです。もう少し詳しく説明してください。
え?右の土管に入ると「イッツ ミー マーリオー」って言いながら左の土管から出てくるんですか?マリオ?
自分が経験した事 == 他人も経験している なんて事は殆どありません。
ですので、自分でもウザい位に説明するのが丁度良いくらいです。もう少し詳しく説明してください。
Re:ゲームのバグについて
>なぜか右へおちていくとYが400近くで左に勝手に移動してしまいます。
という情報でもなかなか理解できませんが
コードを書く際には同人であっても後日なにをやっているのかわからないということが
多々あると思いますので、最低限コメントを書いていただけるとうれしいです。
また、右へ落ちていくというのはx、y座標をプラス方向に移動させると、ということでしょうか。
それと、if文の書き方に一貫性がないようなので
統一したほうが後々デバッグしやすいかもしれません。
という情報でもなかなか理解できませんが
コードを書く際には同人であっても後日なにをやっているのかわからないということが
多々あると思いますので、最低限コメントを書いていただけるとうれしいです。
また、右へ落ちていくというのはx、y座標をプラス方向に移動させると、ということでしょうか。
それと、if文の書き方に一貫性がないようなので
統一したほうが後々デバッグしやすいかもしれません。
Re:ゲームのバグについて
それだけ言って済めばとても良いんですが、そうなりません。
なぜなら「コメント」という、人から見ても理解させるプログラムを書くことができる素晴らしい機能を
使おうとしていないからです。もう、見ただけで読む気が失せます。@@;
たとえば、今日投稿したばかりですが、http://www.play21.jp/board/formz.cgi?ac ... 0801#30800に私が投稿したプログラムがありますので、見てみて下さい。
そういう問題が起きて、「あれ?なんで?」と思った時に、すぐに「多分ここら辺だな」と問題部分を
見つけられるかどうかをみると、ひよこさんは目印になるものが無いので何がなんだかわからなくなってしまっています。
なので、今回のようにプログラム全貼りで「助けてくれぇえ」と他人に助けを乞う事になってしまったのではないでしょうか。
自分のためにも、未来の自分やほかの人が見るときのためにも、
30秒以内に理解できるような、人にも優しいプログラムを書くようにしてみてください。
自然と自分のミスにも気付けるようになります。
なぜなら「コメント」という、人から見ても理解させるプログラムを書くことができる素晴らしい機能を
使おうとしていないからです。もう、見ただけで読む気が失せます。@@;
たとえば、今日投稿したばかりですが、http://www.play21.jp/board/formz.cgi?ac ... 0801#30800に私が投稿したプログラムがありますので、見てみて下さい。
そういう問題が起きて、「あれ?なんで?」と思った時に、すぐに「多分ここら辺だな」と問題部分を
見つけられるかどうかをみると、ひよこさんは目印になるものが無いので何がなんだかわからなくなってしまっています。
なので、今回のようにプログラム全貼りで「助けてくれぇえ」と他人に助けを乞う事になってしまったのではないでしょうか。
自分のためにも、未来の自分やほかの人が見るときのためにも、
30秒以内に理解できるような、人にも優しいプログラムを書くようにしてみてください。
自然と自分のミスにも気付けるようになります。
Re:ゲームのバグについて
その通りですね。一番怪しいところにコメントつけてみました。
//プレイヤーのX座標が16と同じかそれより大きくて564と同じか564より小さいか //プレイヤーのY座標が350より大きく354より小さい場合 //350にとどまる。 if(Player1P.X>=16 && Player1P.X<=564 &&Player1P.Y > 350 && Player1P.Y<354 ) { Player1P.Y = 350 ; jyuryoku = 0 ; } //プレイヤーのX座標が10と同じかそれより大きくて16と同じか16より小さいか //プレイヤーのY座標が380より大きく400より小さい場合 //その場にとどまる。 if(Player1P.X>=10 && Player1P.X<=16 && Player1P.Y>380 && Player1P.Y<400) { jyuryoku = 0; muki=7; } //プレイヤーのX座標が564と同じかそれより大きくて568と同じか568より小さいか //プレイヤーのY座標が380より大きく400より小さい場合 //その場にとどまる。 if(Player1P.X>=564 && Player1P.X<=568 && Player1P.Y>380 && Player1P.Y<400) { jyuryoku = 0; muki=8; } //一番下へついたら元の場所へ if( Player1P.Y==480){Player1P.X=62; Player1P.Y=350; muki=1;} //移動用 if( Key[ KEY_INPUT_LEFT]==1 || ( Key[ KEY_INPUT_LEFT]>10) && count%2) {muki=2;Player1P.X-=2;} if( Key[ KEY_INPUT_RIGHT]==1|| ( Key[ KEY_INPUT_RIGHT]>10) && count%2) {muki=1;Player1P.X+=2;} if( Key[ KEY_INPUT_DOWN]==1 || ( Key[ KEY_INPUT_DOWN]>10) && count%2 && Player1P.Y<=348) Player1P.Y+=2; //攻撃用 if( Key[ KEY_INPUT_Z] == 1 ) { if(muki==1)muki=3; if(muki==2)muki=4; }
Re:ゲームのバグについて
自分の書いたプログラムが全然理解できていないから、間違い箇所が見つけられない、絞り込めないんじゃないですか。
よく言われることですが、「プログラムは思う通りには動きません、書いたとおりに動きます。」
よく言われることですが、「プログラムは思う通りには動きません、書いたとおりに動きます。」
Re:ゲームのバグについて
if(Player1P.X>12 && Player1P.Y > 400)
{Player1P.X=12;}
の部分ですね。Yが400より多くなるとXが12になっています。
コメントというより、動かしてみるとYが400あたりでXが12になっているわけですから
X=12と書いてあるところを探すだけで良いです。
移動ではなくて、Xの座標が何から何に変わってしまうと書いたほうが良かったと思います。
{Player1P.X=12;}
の部分ですね。Yが400より多くなるとXが12になっています。
コメントというより、動かしてみるとYが400あたりでXが12になっているわけですから
X=12と書いてあるところを探すだけで良いです。
移動ではなくて、Xの座標が何から何に変わってしまうと書いたほうが良かったと思います。
Re:ゲームのバグについて
あ。できた。
かなり手こずりましたが、要はひよこさんの見たとおり、座標判定だったようです。
コメントはあまり付けてないのであとは自分でがんばってみて下さい。
かなり手こずりましたが、要はひよこさんの見たとおり、座標判定だったようです。
コメントはあまり付けてないのであとは自分でがんばってみて下さい。
Re:ゲームのバグについて
コメントは自分のよりかなり多かったです。いろいろ勉強になります。
プログラムに書いてある%3d %3d %3d %3d\nはどういう意味なんですか?
まんなかの二つはなんであるのでしょうか?
プログラムに書いてある%3d %3d %3d %3d\nはどういう意味なんですか?
まんなかの二つはなんであるのでしょうか?
Re:ゲームのバグについて
%3dは3桁幅に合わせて整数を表示します。4桁以上はその桁数に合わせられます。
あと、%03dというのがあります。3桁幅に合わせますが、空白ではなく 0 で埋めます。
あと、%03dというのがあります。3桁幅に合わせますが、空白ではなく 0 で埋めます。
" 25" "025" %3d %03d2つは、←、↓、↑、→の順に、上部は押されているかどうか。下部は連続入力数(最大値127)を表します。