写博客主要是对于自己的学习情况有一个总结和梳理,前期先把自己以前写过的代码进行回顾,做成博客
1 #define _CRT_SECURE_NO_WARNINGS //vs环境下对于scanf函数的声明 2 #include <stdlib.h> 3 #include <stdio.h> 4 #include <string.h> 5 #define ROW 3 6 #define COL 3 7 char g_broad[ROW][COL]; 8 void init() //创建一个新的棋盘 9 { 10 srand((unsigned int)time(0)); 11 for (int row = 0; row < ROW; row++) 12 { 13 for (int col = 0; col < COL; col++) 14 { 15 g_broad[row][col] = ‘\0‘; 16 } 17 } 18 } 19 void print() //对棋盘进行打印 20 { 21 int row = 0; 22 for (; row < ROW; row++) 23 { 24 printf("| %c | %c | %c |\n", g_broad[row][0], g_broad[row][1], g_broad[row][2]); 25 printf("|---|---|---|\n"); 26 } 27 } 28 void playermove() //让玩家进行落子 29 { 30 printf("轮到玩家落子\n"); 31 while (1) 32 { 33 printf("请输入一个坐标\n"); 34 int row, col; 35 scanf("%d %d", &row, &col); 36 if (g_broad[row][col] == ‘\0‘) 37 { 38 if (row >= 0 && row < ROW&&col >= 0 && col < COL) 39 { 40 g_broad[row][col] = ‘x‘; 41 break; 42 } 43 else 44 { 45 printf("输入的坐标非法,请重新输入\n"); 46 continue; 47 } 48 } 49 else 50 { 51 printf("所输入的位置已经有棋子,请重新输入\n"); 52 continue; 53 } 54 55 } 56 } 57 void computermove() //电脑落子使用rand函数随机落子,暴力简单 58 { 59 printf("轮到电脑落子\n"); 60 while (1) 61 { 62 int row = 0, col = 0; 63 row = rand() % 3; 64 col = rand() % 3; 65 if (g_broad[row][col] == ‘\0‘) 66 { 67 g_broad[row][col] = ‘o‘; 68 break; 69 } 70 else continue; 71 } 72 } 73 //检查胜利的函数 74 char checkwinner() 75 { 76 //检查行是否三字 77 for (int row = 0; row < ROW; row++) 78 { 79 if (g_broad[row][0] == g_broad[row][1] && g_broad[row][0] == g_broad[row][2] 80 && g_broad[row][0] != ‘\0‘) 81 { 82 return g_broad[row][0]; 83 } 84 } 85 //检查列是否三字 86 for (int col = 0; col < COL; col++) 87 { 88 if (g_broad[0][col] == g_broad[1][col] && g_broad[0][col] == g_broad[2][col] 89 && g_broad[0][col]!=‘\0‘) 90 { 91 return g_broad[0][col]; 92 } 93 } 94 //检查对角线是否三字 95 if (g_broad[0][0] == g_broad[1][1] && g_broad[0][0] == g_broad[2][2] 96 && g_broad[0][0] != ‘\0‘) 97 { 98 return g_broad[0][0]; 99 } 100 if (g_broad[0][2] == g_broad[1][1] && g_broad[0][2] == g_broad[2][0] 101 && g_broad[0][2] != ‘\0‘) 102 { 103 return g_broad[0][2]; 104 } 105 //判断和棋 106 int fow = 1; 107 for (int row = 0; row < ROW; row++) 108 { 109 for (int col = 0; col < COL; col++) 110 { 111 if (g_broad[row][col] == ‘\0‘) 112 { 113 fow = 0; 114 } 115 } 116 } 117 if (fow == 1) 118 { 119 return ‘p‘; 120 } 121 return ‘\0‘; 122 123 } 124 int main() 125 { 126 //先写几个主要函数 127 //初始化的函数,打印棋盘的的函数, 128 //玩家落子的函数,电脑落子的函数, 129 //判断胜利的函数 130 //规定玩家的落子为x,电脑的落子为o,和棋为p,棋盘中先是‘\0‘ 131 init(); 132 char winner; 133 print(); 134 while (1) 135 { 136 playermove(); 137 print(); 138 winner = checkwinner(); 139 if (winner == ‘x‘) 140 { 141 printf("玩家胜利\n"); 142 break; 143 } 144 if (winner == ‘p‘) 145 { 146 printf("和棋\n"); 147 break; 148 } 149 computermove(); 150 print(); 151 winner = checkwinner(); 152 if (winner == ‘o‘) 153 { 154 printf("电脑胜利\n"); 155 break; 156 } 157 if (winner == ‘p‘) 158 { 159 printf("和棋\n"); 160 break; 161 } 162 163 } 164 system("pause"); 165 return 0; 166 } 167 168 169
新棋盘建立后的样子
进行随机落子后的情况
之后就是进行落子,判断是否胜利,这种重复性的工作就不在传照片了
原文:https://www.cnblogs.com/programchen/p/12323553.html