namereq

〇×ゲームにコメント付け

Jun 21st, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.43 KB | None | 0 0
  1. /* ヘッダファイルのインクルード */
  2. #include <stdio.h>
  3.  
  4. /* プロトタイプ宣言 */
  5. int a(int s[3][3],int x,int y,int c);
  6. int b(int s[3][3],int c);
  7.  
  8. int main(void)
  9. {
  10.     /* 変数宣言 */
  11.     int i,j,x,y,r,s[3][3];
  12.  
  13.     /* ボード初期化 */
  14.     for(i=0;i<3;i++){
  15.         for(j=0;j<3;j++)s[i][j]=0;
  16.     }
  17.  
  18.     /* ボード最初の表示 */
  19.     a(s,0,0,0);
  20.  
  21.     /* 9回繰り返し */
  22.     for(i=1;i<10;i++){
  23.         /* 先手入力 */
  24.         printf("\n先手、入力してください。\n");
  25.         printf("X:");
  26.         scanf("%d",&x);
  27.         printf("Y:");
  28.         scanf("%d",&y);
  29.         /* 入力した手でボード表示 */
  30.         a(s,x,y,1);
  31.         /* 先手の勝ちが決まったかを判定 */
  32.         r=b(s,1);
  33.         if(r!=0){
  34.             printf("\n先手の勝ちです!\n");
  35.             return 0;
  36.         }
  37.         /* 後手入力 */
  38.         printf("\n後手入力してください。\n");
  39.         printf("X:");
  40.         scanf("%d",&x);
  41.         printf("Y:");
  42.         scanf("%d",&y);
  43.         /* 入力した手でボード表示 */
  44.         a(s,x,y,2);
  45.         /* 後手の勝ちが決まったかを判定 */
  46.         r=b(s,2);
  47.         if(r!=0){
  48.             printf("\n後手の勝ちです!\n");
  49.             return 0;
  50.         }
  51.     }
  52.     printf("\n引き分けです!\n");
  53.  
  54.     return 0;
  55. }
  56.  
  57. /* ゲームボード表示 */
  58. int a(int s[3][3],int x,int y,int c){
  59.  
  60.     /* 変数宣言 */
  61.     int i,j;
  62.  
  63.     /* 1~3を0~2に変える */
  64.     x=x-1;
  65.     y=y-1;
  66.  
  67.     if(s[y][x]==0){
  68.         /* 空いているところならば */
  69.         /* 先手だったら1を後手だったら2を入れる */
  70.         if(c==1)s[y][x]=1;
  71.         if(c==2)s[y][x]=2;
  72.     }
  73.     else{
  74.         /* 空いていないところならば */
  75.         printf("\n 勝負!\n");
  76.     }
  77.  
  78.     /* ボード表示 */
  79.     printf("* 1 2 3 <X\n");
  80.     for(i=0;i<3;i++){
  81.         for(j=0;j<3;j++){
  82.             if(j==0) printf("%d ",i+1);
  83.             printf("%d ",s[i][j]);
  84.         }
  85.         printf("\n");
  86.     }
  87.     printf("^\nY\n");
  88.  
  89.     return 0;
  90. }
  91.  
  92. /* 勝ちが決定したかどうかを判定 */
  93. int b(int s[3][3],int c){
  94.  
  95.     int f;
  96.     f=0;
  97.     /* 横一列がcになっているかどうか */
  98.     if(s[0][0]==c&&s[0][1]==c&&s[0][2]==c)f=c;
  99.     if(s[1][0]==c&&s[1][1]==c&&s[1][2]==c)f=c;
  100.     if(s[2][0]==c&&s[2][1]==c&&s[2][2]==c)f=c;
  101.  
  102.     /* 縦一列がcになっているかどうか */
  103.     if(s[0][0]==c&&s[1][0]==c&&s[2][0]==c)f=c;
  104.     if(s[0][1]==c&&s[1][1]==c&&s[2][1]==c)f=c;
  105.     if(s[0][2]==c&&s[1][2]==c&&s[2][2]==c)f=c;
  106.  
  107.     /* 斜めがcになっているかどうか */
  108.     if(s[0][0]==c&&s[1][1]==c&&s[2][2]==c)f=c;
  109.     if(s[0][2]==c&&s[1][1]==c&&s[2][0]==c)f=c;
  110.  
  111.     /* 勝っている場合はcが戻り値として返る */
  112.     return f;
  113. }
Advertisement
Add Comment
Please, Sign In to add comment