fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define N 3
  5.  
  6. void Display(int *a, int mode)
  7. {
  8. int n = N * N;
  9. while (n--) {
  10. if (*a < mode)
  11. printf("%d", *a);
  12. else
  13. printf("%d", 0);
  14. ++a;
  15. if (n % N == 0)
  16. putchar('\n');
  17. }
  18. }
  19.  
  20. int main()
  21. {
  22. int x,
  23. y,
  24. mine[N][N];/* 0:初期状態 1:マス目を選んで爆弾に当たらなかった場所 2:爆弾 */
  25.  
  26. srand(time(NULL));
  27. for ( x = 0; x < N; ++x)
  28. for ( y = 0; y < N; ++y)
  29. mine[x][y] = 0;
  30.  
  31. // (a) 爆弾の数を 3 つにせよ(同じ場所に複数置かない)。
  32. {
  33. int n = 3;
  34. while (n) {
  35. x = rand() % N;
  36. y = rand() % N;
  37. if (mine[x][y] == 0) {
  38. mine[x][y] = 2;
  39. --n;
  40. }
  41. }
  42. }
  43.  
  44. // Display(*mine,3); /* all display for debug */
  45.  
  46. {
  47. int c = 6;/* Winまでの残り試行回数 */
  48. while (1) {
  49. Display(*mine, 2);
  50.  
  51. // (d) マス目の範囲から外れた数値を打ち込んだ場合に警告を出すようにする(試行の回数には含めない)。
  52. while (1) {
  53. printf("X: ");
  54. scanf("%d", &x);
  55. printf("Y: ");
  56. scanf("%d", &y);
  57. if ((x >= 0) && (x < N) && (y >= 0) && (y < N))break;/* x, y is ok */
  58. printf("マス目の範囲から外れています。\n正しい数値(x,y=0~3)を入力して下さい。\n" );
  59. }
  60.  
  61. // (c) 一度選んだマス目は再度選べないようにする(試行の回数には含めない)。
  62. if (mine[x][y] == 1)continue;
  63.  
  64. if (mine[x][y]==2) {
  65. printf("Wham!\n");
  66. exit(0);
  67. } else {
  68. printf("You are safe.\n");
  69. mine[x][y] = 1;
  70. --c;
  71. }
  72. // (b) 6 回試行して爆弾を見つけなかった場合は、“You Win!” と表示してプログラムを終了する。
  73. if (c == 0) {
  74. printf("You Win!\n");
  75. exit(0);
  76. }
  77. }
  78. }
  79.  
  80. return 0;
  81. }
  82.  
Success #stdin #stdout 0.01s 1724KB
stdin
Standard input is empty
stdout
000
000
000
X: Y: Wham!