练习---C语言五子棋
一共4个文件,在Linux下编译运行。
game.c 游戏要调用的函数
1 #include <stdio.h> 2 #include <unistd.h> 3 #include <stdlib.h> 4 #include <time.h> 5 #include "game.h" 6 7 void init_board(char arr[ROW][COL]) 8 { 9 for (int i = 0; i < ROW; i++) 10 { 11 for (int j = 0; j < COL; j++) 12 { 13 arr[i][j] = ' '; 14 } 15 } 16 } 17 18 // | | 19 // ---|---|--- 20 // | | 21 // ---|---|--- 22 // | | 23 24 void print_board(char arr[ROW][COL]) 25 { 26 // 行打印 27 for (int i = 0; i < ROW; i++) 28 { 29 for (int h = 0; h < COL; h++) 30 { 31 printf(" %c ", arr[i][h]); 32 if (h < COL - 1) 33 { 34 printf("|"); 35 } 36 } 37 38 printf("\n"); 39 if (i < ROW - 1) 40 { 41 for (int k = 0; k < COL; k++) 42 { 43 printf("---"); 44 if (k < COL - 1) 45 { 46 printf("|"); 47 } 48 } 49 printf("\n"); 50 } 51 } 52 } 53 54 int player_moce(char arr[ROW][COL], int x, int y) 55 { 56 if ((x < 1 && x > COL) || (y < 1 && y > ROW)) 57 { 58 return 1; 59 } 60 if (arr[x - 1][y - 1] == ' ') 61 { 62 arr[x - 1][y - 1] = 'T'; 63 return 0; 64 } 65 else 66 { 67 printf("此处已下棋\n"); 68 return 1; 69 } 70 } 71 void robot_move(char arr[ROW][COL]) 72 { 73 srand((unsigned)time(NULL)); 74 while (1) 75 { 76 int x, y; 77 x = rand() % ROW; 78 y = rand() % COL; 79 if (arr[x][y] == ' ') 80 { 81 arr[x][y] = 'R'; 82 break; 83 } 84 } 85 } 86 87 char is_win(char arr[ROW][COL]) 88 { 89 // 谁赢返回谁的棋子 90 int rt; 91 // 行 92 for (int i = 0; i < ROW; i++) 93 { 94 rt = 0; 95 for (int j = 0; j < COL - 1; j++) 96 { 97 if (arr[i][j] == arr[i][j + 1] && arr[i][j] != ' ') 98 { 99 rt++; 100 printf("行%d\n", rt); 101 if (rt == NPIECE - 1) 102 { 103 return arr[i][j]; 104 } 105 } 106 else 107 { 108 break; 109 } 110 } 111 } 112 // 列 113 114 for (int i = 0; i < COL; i++) 115 { 116 rt = 0; 117 for (int j = 0; j < ROW - 1; j++) 118 { 119 if (arr[j][i] == arr[j + 1][i] && arr[j][i] != ' ') 120 { 121 rt++; 122 printf("列%d\n", rt); 123 if (rt == NPIECE - 1) 124 { 125 return arr[j][i]; 126 } 127 } 128 else 129 { 130 break; 131 } 132 } 133 } 134 // 左向右斜 135 for (int i = 0; i < ROW - 1; i++) 136 { 137 int tmp = i; 138 rt = 0; 139 for (int j = 0; j < COL - 1; j++) 140 { 141 if (arr[i][j] == arr[i + 1][j + 1] && arr[i][j] != ' ') 142 { 143 rt++; 144 if (rt == NPIECE - 1) 145 { 146 printf("斜%d\n", rt); 147 printf("斜--%c\n", arr[i][j]); 148 return arr[i][j]; 149 } 150 i++; 151 } 152 else 153 { 154 break; 155 } 156 } 157 i = tmp; 158 } 159 // 右向左斜 160 for (int i = 0; i < ROW - 1; i++) 161 { 162 int tmp = i; 163 rt = 0; 164 for (int j = COL - 1; j > 0; j--) 165 { 166 if (arr[i][j] == arr[i + 1][j - 1] && arr[i][j] != ' ') 167 { 168 rt++; 169 printf("右向左斜%d\n", rt); 170 if (rt == NPIECE - 1) 171 { 172 printf("斜%d\n", rt); 173 printf("右向左斜--%c\n", arr[i][j]); 174 return arr[i][j]; 175 } 176 i++; 177 } 178 else 179 { 180 break; 181 } 182 } 183 i = tmp; 184 } 185 186 // 还有空位则继续 187 return 'c'; 188 }
头文件 game.h
1 #if !defined(GAME_H) 2 #define GAME_H 3 // 定义棋盘长宽 4 #define ROW 20 5 #define COL 20 6 7 // 几子胜 8 #define NPIECE 5 9 10 void print_board(char arr[ROW][COL]); 11 void init_board(char arr[ROW][COL]); 12 int player_moce(char arr[ROW][COL], int x, int y); 13 void robot_move(char arr[ROW][COL]); 14 char is_win(char arr[ROW][COL]); 15 16 #endif // GAME_H
主文件 text1.c
#include <stdio.h> #include "game.h" void mune() { printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); printf("@@@@@@@@@@@@@ 1.play 0.exit @@@@@@@@@@@@\n"); printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n"); } void game() { int x, y, rt; char er; char arr[ROW][COL]; // 初始化棋盘 init_board(arr); print_board(arr); while (1) { do { // // player走棋 printf("输入走棋的坐标:\n"); scanf("%d %d", &x, &y); rt = player_moce(arr, x, y); if (rt == 1) { printf("超出棋盘范围!重新输入\n"); } } while (rt); print_board(arr); // // 判断输赢 er = is_win(arr); if (er != 'c') { break; } printf("电脑走棋\n"); // // 电脑走棋 robot_move(arr); print_board(arr); // // 判断输赢 er = is_win(arr); if (er != 'c') { break; } } if (er == 'R') { printf("电脑赢\n"); } else if (er == 'T') { printf("玩家赢\n"); } else { printf("平局\n"); } } void main() { int a; do { mune(); scanf("%d", &a); switch (a) { case 1: game(); break; case 0: printf("退出游戏!\n"); break; default: printf("输入错误\n"); break; } } while (a); }
makefile
text1:text1.o game.o gcc text1.o game.o -o text1 text1.o:text1.c game.h game.c gcc -c text1.c -o text1.o game.o:game.c game.h gcc -c game.c -o game.o
本文来自博客园,作者:潇汀,转载请注明原文链接:https://www.cnblogs.com/allalonewithyou/p/17093177.html,个人邮箱:yaonie4444@foxmail.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程