C言語ゲームプログラミングの館で勉強しているのですが、
キャラを四方向に‥の場所を覚えたので自分で考えて打ったのですが(int WINAPI WinMa‥はコピペ
画面の左に永遠と歩き画面の一番左で上を向きます
どうすれば直せますか?
#include "DxLib.h"
typedef struct{
int x,y,muki,img,aruku_flag;
}ch_t;
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){
if( ChangeWindowMode(TRUE) != DX_CHANGESCREEN_OK || DxLib_Init() == -1 ) return -1; //初期化処理
int image[16];
char Key[256];
ch_t ch;
ch.x=320;
ch.y=0;
ch.muki=1;
ch.aruku_flag=0;
while(!ProcessMessage() && !ClearDrawScreen() && !GetHitKeyStateAll( Key ) && !Key[KEY_INPUT_ESCAPE]){
//↑メッセージ処理 ↑画面をクリア ↑キーボード入力状態取得 ↑ESCが押されていな
if(ch.y%32==0 && ch.x==0){
ch.aruku_flag=1;
if(Key[KEY_INPUT_UP]==1)
ch.muki=0;
else if(Key[KEY_INPUT_LEFT]==1)
ch.muki=4;
else if(Key[KEY_INPUT_DOWN]==1)
ch.muki=8;
else if(Key[KEY_INPUT_RIGHT]==1)
ch.muki=12;
else
ch.aruku_flag=0;
}
if(ch.aruku_flag=1){
if(ch.muki=4)
ch.x--;
else if(ch.muki=0)
ch.y--;
else if(ch.muki=8)
ch.y++;
else if(ch.muki=12)
ch.x++;}
LoadDivGraph("char.png",16,4,4,32,32,image);
ch.img=image[(ch.x%32)/8+ch.muki];
DrawGraph(ch.x,ch.y,ch.img,TRUE);
ScreenFlip();
}
DxLib_End();
return 0;
}
初心者です
:>ideyanさん
ありがとうございました!
そことif(ch.y%32==0 && ch.x==0){
とch.img=image[(ch.x%32)/8+ch.muki];
これをなをして成功しました!
そことif(ch.y%32==0 && ch.x==0){
とch.img=image[(ch.x%32)/8+ch.muki];
これをなをして成功しました!
Re::>ideyanさん
うまく動いているように見えますが、
LoadDivGraph("char.png",16,4,4,32,32,image);
これを初期化処理のところに書かないのは
たいへん大きなミスです。
kazuoniさんも言っていますが、サンプルのプログラムは
よくできているので、改造することなく、そのままのコードで
使用するのが一番いいです。
LoadDivGraph("char.png",16,4,4,32,32,image);
これを初期化処理のところに書かないのは
たいへん大きなミスです。
kazuoniさんも言っていますが、サンプルのプログラムは
よくできているので、改造することなく、そのままのコードで
使用するのが一番いいです。
Re::>ideyanさん
あくまでも、ご参考までに...
私の場合は手打ちします。特に新しい言語を覚えようという場合など。
何故かというと、その環境でのデバッグを体験するために、
少々のバグが混入させることを期待しているわけです。
習得後に必要になるであろう実際のデバッグと比べると、
正しいとされているソースコードもあるデバッグは格段に簡単だからです。
また、元のサンプルの出来の良し悪しは別として、
別のスタイルへの変更もしたい時があります。
ちょっとこの機能を追加したいとか、この機能を使うことは当面無さそうだから、
定数にしちゃえとかも。
# デバッグして行き詰ったときに、元のソースをコピペで試すことが
# 有効なのは勿論です。
私の場合は手打ちします。特に新しい言語を覚えようという場合など。
何故かというと、その環境でのデバッグを体験するために、
少々のバグが混入させることを期待しているわけです。
習得後に必要になるであろう実際のデバッグと比べると、
正しいとされているソースコードもあるデバッグは格段に簡単だからです。
また、元のサンプルの出来の良し悪しは別として、
別のスタイルへの変更もしたい時があります。
ちょっとこの機能を追加したいとか、この機能を使うことは当面無さそうだから、
定数にしちゃえとかも。
# デバッグして行き詰ったときに、元のソースをコピペで試すことが
# 有効なのは勿論です。
Re::>ideyanさん
そうなんですか‥教えていただきありがとうございます!
ただ実際に作るときは自分で全てやるという変なこだわりがあってw
>たいちうさん
書くとかきましたが今私がのせていたものはコピのところ以外見ないで手打ちしています
>Dixqさん
覚えて(単語などを)から自分で考えてうっています
サンプルは‥良いですよw
理解するのにかなり時間をつかいました(ch.x%32←これ
念のために‥
x座標の数÷32=YあまりZ
Z÷8=表示する画像 あまりは切捨て
ですよね?
ただ実際に作るときは自分で全てやるという変なこだわりがあってw
>たいちうさん
書くとかきましたが今私がのせていたものはコピのところ以外見ないで手打ちしています
>Dixqさん
覚えて(単語などを)から自分で考えてうっています
サンプルは‥良いですよw
理解するのにかなり時間をつかいました(ch.x%32←これ
念のために‥
x座標の数÷32=YあまりZ
Z÷8=表示する画像 あまりは切捨て
ですよね?
Re::>ideyanさん
そうですね。
%はあまりを求める演算子です。ですから0-31を繰り返します。
それを8で割るので、同じ周期で0-3を繰り返します。
「割った余り」はループを多用するゲームプログラムではすごく良く使えますので覚えておくと便利ですよ。
%はあまりを求める演算子です。ですから0-31を繰り返します。
それを8で割るので、同じ周期で0-3を繰り返します。
「割った余り」はループを多用するゲームプログラムではすごく良く使えますので覚えておくと便利ですよ。