用c语言实现三子棋


1
game.c://实现三子棋的.c文件 2 #define _CRT_SECURE_NO_WARNINGS 3 #include"game.h" 4 5 void init_board(char arr[ROW][COL], int row, int col)//实现数组的初始化 6 { 7 int i = 0; 8 int j = 0; 9 for (i = 0; i < row; i++) 10 { 11 for (j = 0; j < col; j++) 12 { 13 arr[i][j] = ' '; 14 } 15 } 16 } 17 void display_board(char arr[ROW][COL], int row, int col)//打印棋盘函数 18 { 19 int i = 0; 20 for (i = 0; i < row; i++) 21 { 22 int j = 0; 23 for (j = 0; j < col; j++) 24 { 25 printf(" %c ",arr[i][j]); 26 if (j < col - 1) 27 printf("|"); 28 } 29 printf("\n"); 30 if (i < row - 1) 31 { 32 for (j = 0; j < col; j++) 33 { 34 printf("---"); 35 if (j < col - 1) 36 printf("|"); 37 } 38 } 39 printf("\n"); 40 } 41 } 42 43 void player_move(char arr[ROW][COL], int row, int col)//玩家下棋 44 { 45 int x = 0; 46 int y = 0; 47 printf("玩家走\n"); 48 while (1) 49 { 50 printf("请输入坐标:\n"); 51 scanf("%d %d", &x, &y); 52 if ((x >= 1 && x <= row) && (y >= 1 && y <= col)) 53 { 54 if (arr[x - 1][y - 1] == ' ') 55 { 56 arr[x - 1][y - 1] = 'x'; 57 break; 58 } 59 else 60 { 61 printf("该坐标已被占用\n"); 62 } 63 } 64 else 65 { 66 printf("坐标非法\n"); 67 } 68 } 69 70 71 } 72 73 void computer_move(char arr[ROW][COL], int row, int col)//电脑下棋(在这里是通过生成一个随机的二维坐标) 74 { 75 int x = 0; 76 int y = 0; 77 printf("电脑走:\n"); 78 while (1) 79 { 80 x = rand() % 3; 81 y = rand() % 3; 82 if (arr[x][y] == ' ') 83 { 84 arr[x][y] = '0'; 85 break; 86 } 87 } 88 } 89 90 static int Isfull(char arr[ROW][COL], int row, int col)//判断二维数组arr[i][j]是否为' ',如果是,则返回0 91 { 92 int i = 0; 93 int j = 0; 94 for (i = 0; i < row; i++) 95 { 96 for (j = 0; j < col; j++) 97 { 98 if (arr[i][j] == ' ') 99 return 0; 100 } 101 } 102 return 1; 103 104 } 105 106 char Iswin(char arr[ROW][COL], int row, int col)//判断输赢的函数 107 { 108 109 int i = 0; 110 for (i = 0; i < row; i++) 111 { 112 if ((arr[i][0] == arr[i][1]) && (arr[i][2] == arr[i][1])&&(arr[0][i])!=' ') 113 { 114 return arr[i][0]; 115 } 116 } 117 for (i = 0; i < col; i++) 118 { 119 if ((arr[0][i] == arr[1][i]) && (arr[1][i] == arr[2][i]) && (arr[i][0]) != ' ') 120 { 121 return arr[0][i]; 122 } 123 } 124 if (arr[0][0] == arr[1][1] && arr[1][1] == arr[2][2] && arr[2][2] != ' ') 125 { 126 return arr[1][1]; 127 } 128 if (arr[2][0] == arr[1][1] && arr[1][1] == arr[0][2] && arr[0][2] != ' ') 129 { 130 return arr[1][1]; 131 } 132 if (Isfull(arr,row,col)) 133 { 134 return 'Q'; 135 } 136 return ' '; 137 138 } 139 test.c: 140 #define _CRT_SECURE_NO_WARNINGS 141 #include"game.h" 142 void menu() 143 { 144 printf("*********************************\n"); 145 printf("******** 欢迎来到三子棋 *******\n"); 146 printf("******** 1.play *******\n"); 147 printf("******** 0.exit *******\n"); 148 } 149 void game() 150 { 151 char arr[ROW][COL] = { 0 }; 152 char ret = 0; 153 init_board(arr, ROW, COL); 154 display_board(arr, ROW, COL); 155 while (1) 156 { 157 player_move(arr,ROW,COL); 158 ret = Iswin(arr, ROW, COL); 159 if (ret != ' ') 160 { 161 break; 162 } 163 display_board(arr, ROW, COL); 164 computer_move(arr,ROW,COL); 165 ret = Iswin(arr, ROW, COL); 166 if (ret != ' ') 167 { 168 break; 169 } 170 display_board(arr, ROW, COL); 171 } 172 display_board(arr, ROW, COL); 173 if (ret == 'x') 174 { 175 printf("玩家赢\n"); 176 } 177 else if (ret == '0') 178 { 179 printf("电脑赢\n"); 180 } 181 else if (ret == 'Q') 182 { 183 printf("平局\n"); 184 } 185 } 186 void test() 187 { 188 int input = 0; 189 srand((unsigned int)time(NULL)); 190 do 191 { 192 printf("请输入你的选择(0/1):\n"); 193 scanf("%d", &input); 194 switch (input) 195 { 196 case 1: 197 game(); 198 break; 199 case 0: 200 printf("退出游戏\n"); 201 break; 202 default: 203 printf("输入错误,请重新输入:\n"); 204 break; 205 } 206 } while (input); 207 } 208 int main() 209 { 210 menu(); 211 test(); 212 system("pause"); 213 return 0; 214 } 215 game.h: 216 #ifndef __GAME_H__ 217 #define __GAME_H__ 218 #pragma once 219 #define ROW 3 220 #define COL 3 221 #include<stdio.h> 222 #include<time.h> 223 #include<string.h> 224 #include<stdlib.h> 225 void init_board(char arr[ROW][COL], int row, int col); 226 void display_board(char arr[ROW][COL], int row, int col); 227 void player_move(char arr[ROW][COL], int row, int col); 228 void computer_move(char arr[ROW][COL], int row, int col); 229 char Iswin(char arr[ROW][COL], int row, int col);

猜你喜欢

转载自www.cnblogs.com/love-you1314/p/9025435.html
今日推荐