C语言编写三子棋作业

 1 #define _CRT_SECURE_NO_WARNINGS 1
 2 #include <stdio.h>
 3 #include "testgame.h"
 4 void menu()
 5 {
 6     printf("***************************\n");
 7     printf("*******  1.玩游戏  ********\n");
 8     printf("*******  2.退  出  ********\n");
 9     printf("***************************\n");
10 }
11 void game()
12 {
13     char ret = 0;
14     srand((unsigned int)time(NULL));
15     char board[ROW][COL] = { 0 };
16     //初始化棋盘
17     InitBoard(board, ROW, COL);
18     //打印棋盘
19     //DisplayBoard(board, ROW, COL);
20     while (1)
21     {
22         //电脑下棋
23         ComputerMove(board, ROW, COL);
24         DisplayBoard(board, ROW, COL);
25         //判断输赢
26         ret = IsWin(board, ROW, COL);
27         if (ret != 'C')
28         {
29             break;
30         }
31         //玩家下棋
32         PlayerMove(board, ROW, COL);
33         DisplayBoard(board, ROW, COL);
34         //判断输赢
35         ret = IsWin(board, ROW, COL);
36         if (ret != 'C')
37         {
38             break;
39         }
40     
41     }
42     if (ret == '*')
43     {
44         printf("玩家赢!\n");
45     }
46     else if (ret == '#')
47     {
48         printf("电脑赢!\n");
49     }
50     else if (ret == 'Q')
51     {
52         printf("平局!\n");
53     }
54     
55 
56 }
57 int main()
58 {
59     int input = 0;
60     do
61     {
62         menu();
63         printf("请输入>:");
64         scanf("%d", &input);
65         switch (input)
66         {
67         case 1:
68             printf("玩游戏!\n");
69             game();
70             break;
71         case 0:
72             printf("退出游戏!\n");
73             break;
74         default:
75             printf("输入错误,请重新输入!\n");
76             break;
77         }
78 
79     } while (input);
80     return 0;
81 }
  1 #include "testgame.h"
  2 
  3 //初始化棋盘
  4 void InitBoard(char board[ROW][COL], int row, int col)
  5 {
  6     int i = 0;
  7     int j = 0;
  8     for (i = 0; i < row; i++)
  9     {
 10         for (j = 0; j < col; j++)
 11         {
 12             board[i][j] = ' ';
 13         }
 14     }
 15 }
 16 
 17 //打印棋盘
 18 void DisplayBoard(char board[ROW][COL], int row, int col)
 19 {
 20     int i = 0;
 21     int j = 0;
 22     for (i = 0; i < row; i++)
 23     {
 24         for (j = 0; j < col; j++)
 25         {
 26             printf(" %c ", board[i][j]);
 27             if (j < col - 1)
 28             {
 29                 printf("|");
 30             }
 31         }
 32         printf("\n");
 33         if (i < row - 1)
 34         {
 35             for (j = 0; j < col; j++)
 36             {
 37                 printf("---");
 38                 if (j < col - 1)
 39                 {
 40                     printf("|");
 41                 }
 42                 
 43             }
 44         }
 45         
 46         printf("\n");
 47     }
 48 }
 49 
 50 //玩家下棋
 51 void PlayerMove(char board[ROW][COL], int row, int col)
 52 {
 53     int i = 0;
 54     int j = 0;
 55 
 56     while (1)
 57     {
 58         printf("玩家下棋>:");
 59         scanf("%d%d", &i, &j);
 60         if (i-1 > row  || j-11 > col)
 61         {
 62             printf("非法坐标,请重新输入!\n\n");
 63             continue;
 64         }
 65         else if (i-1 < 0 || j-1 < 0)
 66         {
 67             printf("非法坐标,请重新输入!\n\n");
 68             continue;
 69         }
 70         else if (board[i-1][j-1] == ' ')
 71         {
 72             board[i-1][j-1] = '*';
 73             printf("\n");
 74             break;
 75         }
 76         else
 77         {
 78             printf("已有棋子,请重新输入\n\n");
 79         }
 80     }
 81 }
 82 
 83 //电脑下棋
 84 void ComputerMove(char board[ROW][COL], int row, int col)
 85 {
 86     int i = 0;
 87     int j = 0;
 88     printf("电脑下棋>:\n\n");
 89     while (1)
 90     {
 91         i = rand() % 3;
 92         j = rand() % 3;
 93         if (board[i][j] == ' ')
 94         {
 95             board[i][j] = '#';
 96             break;
 97         }
 98     }
 99      
100 }
101 int IsFull(char board[ROW][COL],int row,int col)
102 {
103     int i = 0;
104     int j = 0;
105     for (i = 0; i < row; i++)
106     {
107         for (j = 0; j < col; j++)
108         {
109             if (board[i][j] == ' ')
110                 return 0;
111         }
112     }
113     return 1;
114 }
115 
116 //判断输赢
117 int IsWin(char board[ROW][COL])
118 {
119     int i = 0;
120     for (i = 0; i < 3; i++)
121     {
122         if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][1] != ' ')
123         {
124             return board[i][1];
125         }
126     }
127     for (i = 0; i < 3; i++)
128     {
129         if (board[0][i] == board[1][i] && board[1][i] == board[2][i] && board[1][i] != ' ')
130         {
131             return board[1][i];
132         }
133     }
134     if (board[1][1] == board[2][2] && board[2][2] == board[3][3] && board[1][1] != ' ')
135         return board[1][1];
136     if (board[1][3] == board[2][2] && board[2][2] == board[3][1] && board[1][1] != ' ')
137         return board[1][1];
138     if (IsFull(board, ROW, COL) == 1)
139     {
140         return 'Q';
141     }
142     return 'C';
143 }


 1 #define _CRT_SECURE_NO_WARNINGS 1
 2 #include <stdio.h>
 3 #include<stdlib.h>
 4 #include<time.h>
 5 
 6 #define ROW 3
 7 #define COL 3
 8 
 9 void InitBoard(char board[ROW][COL], int row, int col);
10 void DisplayBoard(char board[ROW][COL], int row, int col);
11 void PlayerMove(char board[ROW][COL], int row, int col);
12 void ComputerMove(char board[ROW][COL], int row, int col);
13 int IsWin(char board[ROW][COL]);
testgame.h

 

 

 

posted @ 2021-07-06 07:37  春风西亚  阅读(59)  评论(0)    收藏  举报