欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C语言简易三子棋

程序员文章站 2022-06-22 11:59:38
这是本人依据现学知识写的简易三子棋,也不是那么简洁明了,望大佬指点 ......

   这是本人依据现学知识写的简易三子棋,也不是那么简洁明了,望大佬指点

  1 #define _crt_secure_no_warnings
  2 #include<stdio.h>
  3 #include<stdlib.h>
  4 #define row 3
  5 #define col 3
  6 char chess_board[row][col];
  7 int playgame(int choice){
  8     printf("************************\n");
  9     printf("*  欢迎来到三子棋游戏  *\n");
 10     printf("*       请您选择       *\n");
 11     printf("*      1.开始游戏      *\n");
 12     printf("*      2.离开游戏      *\n");
 13     printf("************************\n");
 14     while (1){
 15         scanf("%d", &choice);
 16         if (choice == 1)
 17         {
 18             return 1;
 19             break;
 20         }
 21         else if (choice == 2)
 22         {
 23             return 0;
 24             break;
 25         }
 26         else
 27         {
 28             printf("输入非法,请重新输入!");
 29             continue;
 30         }
 31     }
 32 }
 33 int init(char a[row][col]){
 34     for (int row = 0; row <row; row++){
 35         for (int col = 0; col < col; col++)
 36         {
 37             a[row][col] = '  ';
 38         }
 39     }
 40     return 0;
 41 }
 42 void print(char a[row][col]){
 43     printf("           \n");
 44     for (int i = 0; i < row; i++){
 45         printf("  %c | %c  | %c \n", a[i][0], a[i][1], a[i][2]);
 46         if (i != 3){
 47             printf("----|----|----\n");
 48         }
 49     }
 50 }
 51 void playermove(char a[row][col]){
 52     int row = -1;
 53     int col = -1;
 54     while (1){
 55         printf("请您选择落子点坐标:");
 56         scanf("%d %d", &row, &col);
 57         if (row<0 || row>2 || col<0 || col>2){
 58             printf("输入非法,请重新输入!");
 59             continue;
 60         }
 61         else if (a[row][col] == 'x' || a[row][col] == 'o')
 62         {
 63             printf("已有棋子,请重新选择坐标!");
 64             continue;
 65         }
 66         else
 67         {
 68             a[row][col] = 'o';
 69             break;
 70         }
 71 
 72     }
 73 }
 74 int isfull(char a[row][col]){
 75     int sum = 0;
 76     for (int row = 0; row < row; row++)
 77     {
 78         for (int col = 0; col < col; col++)
 79         {
 80             if (a[row][col] != ' ')
 81             {
 82 
 83                 sum++;
 84             }
 85         }
 86     }
 87     if (sum == 9){
 88         return 1;
 89     }
 90 }
 91 char checkwinner(char a[row][col]){
 92     //1.判断三子 横 竖 斜
 93     for (int row = 0; row < row; row++){
 94         if (a[row][0] == a[row][1] && a[row][0] == a[row][2] && a[row][0] != ' ')
 95         {
 96             return 'p';
 97         }
 98     }
 99     for (int col = 0; col < col; col++){
100         if (a[0][col] == a[1][col] && a[0][col] == a[2][col] && a[0][col] != ' ')
101         {
102             return 'p';
103         }
104     }
105     if (a[0][0] == a[1][1] && a[0][0] == a[2][2] && a[0][0] != ' ')
106     {
107         return 'p';
108     }
109     if (a[0][2] == a[1][1] && a[0][2] == a[2][0] && a[0][2] != ' '){
110         return 'p';
111     }
112 }
113 
114 
115 
116 
117 void computemove(char a[row][col]){
118     printf("请电脑落子!\n");
119     while (1){
120         int col = rand() % 3;
121         int row = rand() % 3;
122         if (a[row][col] == ' ')
123         {
124             a[row][col] = 'x';
125             break;
126         }
127         else continue;
128     }
129 }
130 void game(){
131     init(chess_board);//2.棋盘初始化
132     print(chess_board);//3.打印棋盘
133     while (1){
134 
135         playermove(chess_board);//4.用户落子
136         print(chess_board);
137         if (checkwinner(chess_board) == 'p')
138         {
139             printf("玩家获胜!\n");
140             break;
141         }
142         if (isfull(chess_board) == 1)//2.判断是否和棋
143         {
144             printf("平局!");
145             break;
146         }
147         computemove(chess_board);//6.电脑随机落子
148         print(chess_board);//3.打印棋盘
149         if (checkwinner(chess_board) == 'p')
150         {
151             printf("电脑获胜!\n");
152             break;
153         }
154 
155         if (isfull(chess_board) == 1)//2.判断是否和棋
156         {
157             printf("平局!\n");
158             break;
159         }
160     }
161 }
162 
163 
164 int main(){
165     int choice = 0;
166     if (playgame(choice) == 1) {   //1.选择是否开始游戏  a)开始  b)离开
167          game();
168 
169     }
170     system("pause");
171 }