前提・実現したいこと
迷路に時間制限の要素を加え、移動物体が一秒ごとに迷路に近づく、プログラムを作っています。
disp関数の一つ目のfor文もしくはその関数を呼び出すとき、またはその両方が間違っているようなのは確認しています。(=~.exeの動作を停止しました。)と出ますclock関数で時間を図り配列をズラシテいくやり方です。
発生している問題・エラーメッセージ
~.exeの動作を停止しました。
該当のソースコード
#include <stdio.h> #include <time.h> #define SIZE1 8 #define SIZE2 25 void disp_maze(int ar_x, int ar_y, int map[][SIZE2], int ar_time); clock_t t1, t2; int main(void) { char key, ch; int plx = 18, ply = 1; int map[SIZE1][SIZE2] = { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1 }, { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1 }, { 0,0,0,0,3,0,0,3,0,0,0,0,0,0,0,0,0,1,1,0,0,0,1,0,1 }, { 5,0,6,7,0,8,9,8,10,11,0,0,0,0,0,0,0,1,0,0,1,0,1,1,1 }, { 0,0,0,0,6,12,13,12,11,0,0,0,0,0,0,0,0,1,0,1,1,0,0,0,1 }, { 0,5,0,14,15,16,15,15,0,0,0,0,0,0,0,0,0,1,0,0,1,1,1,0,1 }, { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1,2,1 }, { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1 } }; printf("キーボードを入力した直後始まります.\n"); ch = getchar(); printf("よーいスタート!!\n\n"); t1 = clock(); while (1) { t2 = clock(); printf("Time:%d(s)\n\n",15-(t2-t1)); disp_maze(plx, ply, map, t2-t1); printf("←A →D ↑W ↓S>"); key = getchar(); ch = getchar(); t2 = clock(); if (t2-t1 >= 15) break;//ゲーム終了条件 if (key == 'a') { if (map[ply][plx - 1] == 1) { printf("×Miss!\n"); continue; } else { plx--; } } else if (key == 'd') { if (map[ply][plx + 1] == 1) { printf("×Miss!\n"); continue; } else { plx++; } } else if (key == 'w') { if (map[ply - 1][plx] == 1) { printf("×Miss!\n"); continue; } else { ply--; } } else if (key == 's') { if (map[ply + 1][plx] == 1) { printf("×Miss!\n"); continue; } else { ply++; } } else { printf("×Miss!\n"); continue; } if (map[ply][plx] == 2) break;//ゲーム終了条件 } if (t2 -t1 >= 15) { printf("Game Over\n"); } else printf("Stage Clear!!\n"); return 0; } void disp_maze(int ar_x, int ar_y, int ar_map[][SIZE2], int ar_time) { int counta; int countb; int count = ar_time; int position = 9;//ar_mapは常にリセットされるので、移動物の再右端は変わらない. if (ar_time >= 15) { ar_time = 15; } for (counta = 0; count < 8; counta++) { for (countb = position; countb >= 0; countb--) { ar_map[counta][countb + count] = ar_map[counta][countb];//右に時間数ずつ移動していく. } } for (counta = 0; counta < 8; counta++) { for (countb = 0; countb < 25; countb++) { if (counta == ar_y && countb == ar_x) { printf("○"); } else { switch (ar_map[counta][countb]) { case 1: printf("■"); break; case 2: printf("★"); break; case 0: printf(" "); break; case 3: printf("¥"); break; case 4: printf("_ "); break; case 5: printf("三"); break; case 6: printf(" ("); break; case 7: printf("`"); break; case 8: printf("・"); break; case 9: printf(" ω"); break; case 10: printf("´"); break; case 11: printf(") "); break; case 12: printf("O "); break; case 13: printf("T"); break; case 14: printf("- "); break; case 15: printf("◎"); break; case 16: printf("J"); break; } } } printf("\n"); } }
試したこと
clock関数でグローバル関数にした。
補足情報(FW/ツールのバージョンなど)
viual studio
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/19 09:11
2018/07/19 09:18
2018/07/19 09:21
2018/07/19 09:29
2018/07/19 09:36