- 締切済み
私のCプログラムの悪いところを教えてください。
デバッグではじめるCプログラミングって言う本を見ながらやっているのですが、マップが崩れるし、キャラは飛びまくるし、うまく動作しないのです。 どこが悪いのか、見ていただけないでしょうか? マップは2階までと、プレイヤーキャラ、モンスターそれぞれ一体の表示と移動まで。(本当なら・・・) 情けない話ですがよろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
デバッグではじめるCプログラミングって言う本を見ながらやっているのですが、マップが崩れるし、キャラは飛びまくるし、うまく動作しないのです。 どこが悪いのか、見ていただけないでしょうか? マップは2階までと、プレイヤーキャラ、モンスターそれぞれ一体の表示と移動まで。(本当なら・・・) 情けない話ですがよろしくお願いします。
補足
がんばって、switch文に直しました。 あと、ランダムで動くようなモンスターも入れてみました。 スライム一匹だけですけど^_^; プログラムは面白いですけど、奥が深いです。 ここの部分直すだけで、朝になってしまいました>< これでどうでしょうか? while(1){ if(kbhit()){ PC.key=getch(); switch(PC.key){ case 'w'://Wキー ↑ if((PC.x>=1)&&(dungeon[PC.level][PC.x-1][PC.y]!=1)) PC.x--; break; case 's'://sキー ↓ if((PC.x<=18)&&(dungeon[PC.level][PC.x+1][PC.y]!=1)) PC.x++; break; case 'd'://dキー → if((PC.y<=18)&&(dungeon[PC.level][PC.x][PC.y+1]!=1)) PC.y++; break; case 'a'://aキー ← if((PC.y>=1)&&(dungeon[PC.level][PC.x][PC.y-1]!=1)) PC.y--; break; default: printf("想定外の値です: %d",PC.key); break; } dMonster=rand()%4; switch(dMonster){ case 0: if((slime.x>=1)&&(dungeon[slime.level][slime.x-1][slime.y]!=1)) slime.x--;//↑ break; case 2: if((slime.x<=18)&&(dungeon[slime.level][slime.x+1][slime.y]!=1)) slime.x++;//↓ break; case 3: if((slime.x<=18)&&(dungeon[slime.level][slime.x][slime.y+1]!=1)) slime.y++;//→ break; case 1: if((slime.x>=1)&&(dungeon[slime.level][slime.x][slime.y-1]!=1)) slime.y--;//← break; default: printf("想定外の値です: %d",dMonster); break; } show_dungeon(); } switch(dungeon[PC.level][PC.x][PC.y]){ case 2: if((dungeon[PC.level][PC.x][PC.y]==2)&&(PC.level<1)) printf("%s:おっ、こんな所に下り階段がある…\n",PC.name); PC.level++; break; case 3: if((dungeon[PC.level][PC.x][PC.y]==3)&&(PC.level>0)) printf("%s:おっ、こんな所に上がり階段がある…\n",PC.name); PC.level--; break; } }