| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> 五子棋(C语言 多文件) -> 正文阅读 |
|
[C++知识库]五子棋(C语言 多文件) |
(test.h) #pragma?once #include<stdio.h> #include<stdlib.h> #include<time.h> extern?void?Game3(); #define?COL?20 #define?ROW?20 #define?PLAYER1?1 #define?PLAYER2?2 #define?NEXT?3 #define?DRAW?4 #define?U?10//当前坐标的上方 #define?UR?11//当前坐标的右上方 #define?R?12 #define?DR?13 #define?D?14 #define?DL?15 #define?L?16 #define?UL?17 (main.c) #include"test.h" void?Menu() { printf("+-----------------------------------+\n"); printf("| ???1.游戏 ??--------- ??0.退出 ???|\n"); printf("+-----------------------------------+\n"); } int?main() { int?select, flag = 1; while?(flag) { Menu(); printf("请输入:"); scanf_s("%d", &select); switch?(select) { case?0: flag = 0; break; case?1: Game(); break; default: printf("输入有问题!!!\n"); break; } } printf("结束,再见"); } (test.c) #include"test3.h" int?x, y;//坐标使用全局变量的原因是避免传参,便于维护 static?void?Showboard(int?board[ROW][COL])//展示面板 { printf(" ?"); for?(int?i = 1; i <= COL; i++) printf("%3d", i); printf("\n"); for?(int?i = 0; i < COL; i++) { printf("%-2d", i+1); for?(int?j = 0; j <ROW; j++) { if?(board[i][j] == 0) printf("%3c", '.'); else?if?(board[i][j] == PLAYER1) printf("%3c", 'x'); else?if?(board[i][j] == PLAYER2) printf("%3c", 'o'); else printf("BUG2");//正常情况下走不到这一步 } printf("\n"); } } static?void?PlayerMove(int?board[ROW][COL],int?who)//玩家下棋 { while?(1) { printf("请玩家%d输入坐标;",who); scanf_s ("%d%d", &x, &y); if?(x<1 || x>ROW?|| y<1 || y>COL)//规范性检查 { printf("输入坐标不在范围内!\n"); continue; } else?if?(board[x-1][y-1] == 0)//输入的坐标是比实际数组大1 { board[x-1][y-1] = who;//等于0说明此处为空可以落子 break; } else { printf("输入坐标已被占用!\n"); continue; } } } static?int??ChessCount(int?board[ROW][COL], int?where) { int?x_ = x-1; int?y_ = y-1; int?count=0;//用来统计当前方向上能连成的棋数的和 while?(1) { switch?(where) { case?U: x_--; break; case?UR: x_--; y_++; break; case?R: y_++; break; case?DR: x_++; y_++; break; case?D: x_++; break; case?DL: x_++; y_--; break; case?L: y_--; break; case?UL: x_--; y_--; break; default: break; } if?(x_>0 || x_<ROW?|| y_>0 || y_<COL)//对x_和y_进行规范性检查 { if?(board[x - 1][y - 1] == board[x_][y_]) count++; else break; } else break; } return?count; } static?int?Judge(int?board[ROW][COL])//上一个玩家走完后判断局势并作出相应的返回值 { int?count = ChessCount(board, U) + ChessCount(board, D) + 1;//判断当前(x,y)位置相对应方向和是大于5 if?(count >= 5) return?board[x - 1][y - 1]; count = ChessCount(board, L) + ChessCount(board, R) + 1; if?(count >= 5) return?board[x - 1][y - 1]; count = ChessCount(board, UL) + ChessCount(board, DR) + 1; if?(count >= 5) return?board[x - 1][y - 1]; count = ChessCount(board, UR) + ChessCount(board, DL) + 1; if?(count >= 5) return?board[x - 1][y - 1]; for?(int?i = 0; i < COL; i++) for?(int?j = 0; j < ROW; j++) if?(board[i][j] == 0) return?NEXT;//也可以设置一个计数器判断是否还能继续走(count<COL*ROW) return?DRAW;//能走到这说明上面都没有返回,即平局 } void?Game3() { int?board[ROW][COL]= { 0 }; //memset(board, 0, sizeof(board));//初始化数组,数组也可以在上一步直接等于0 int?ret, flag=PLAYER1; while?(1) { Showboard(board);//展示面板 PlayerMove(board,flag);//玩家下棋 ret = Judge(board);//上一个玩家走完后判断局势并作出相应的返回值 if?(ret != NEXT) break; flag = (flag == PLAYER1?? PLAYER2?: PLAYER1);//利用三目运算符进行玩家标记更改 system("cls");//清屏 } Showboard(board);//展示面板 switch?(ret) { case?PLAYER1: printf("1号玩家获胜\n"); break; case?PLAYER2: printf("2号玩家获胜\n"); break; case?DRAW: printf("平局\n"); break; default: printf("BUG1\n"); break; } } |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 5:36:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |