五子棋裁判

2024-03-01 19:12
文章标签 五子棋 裁判

本文主要是介绍五子棋裁判,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

描述

在程序设计实践课上,老师给大家布置下了这样的实验任务:编写一个五子棋应用程序

胜负判定是五子棋程序最核心的部分。给出当前棋盘的状态,请你完成对五子棋胜负的判定(仅考虑当前状态,不考虑后续落子)

规则:在水平、垂直或对角线方向形成5个以上棋子连续的一方获胜

输入:

输入第一行为一个整数 t (1≤t≤100),代表一共有 t 组输入

对于每组输入:

第一行一个整数 n (1≤n≤20),代表棋盘的大小为 n× n

之后的 n 行,每行包含一个长度为 n 的字符串,代表当前棋盘的状态,其中空位用字符.表示,黑棋、白棋分别用字符BW表示

输入保证只会出现胜负未定、黑棋胜利、白棋胜利三种情况(即最多只会有一方有5连子

输出:

输出 t 行 ,分别为每组输入的胜负结果

若黑棋胜利输出"Black", 若白棋胜利输出"White",若胜负未定则输出"Not so fast"

输入样例:
3
5
WWWWW
BBBB.
.....
.....
.....
5
B...W
.B.W.
..B..
.W.B.
W...B
5
.....
.....
.....
.....
.....
输出样例:
White
Black
Not so fast

代码实现:

#include<stdio.h>
#include<string.h>
char s[21][21];
int extend(int n,int i,int j)
{if(s[i][j]=='.')return 0;int sum=0;int x=i;while(x<n&&s[x][j]==s[i][j]){x++,sum++;}if(sum>=5){if(s[i][j]=='W')return 1;else return -1;}int y=j;sum=0;while(y<n&&s[i][y]==s[i][j]){y++,sum++;}if(sum>=5){if(s[i][j]=='W')return 1;else return -1;}x=i,y=j,sum=0;while(x<n&&y<n&&s[x][y]==s[i][j]){x++,y++,sum++;}if(sum>=5){if(s[i][j]=='W')return 1;else return -1;}x=i,y=j,sum=0;while(x<n&&y>=0&&s[x][y]==s[i][j]){x++,y--,sum++;}if(sum>=5){if(s[i][j]=='W')return 1;else return -1;}return 0;
}
int judge(int n)
{for(int i=0;i<n;i++){getchar();for(int j=0;j<n;j++){scanf("%c",&s[i][j]);}}for(int i=0;i<n;i++){for(int j=0;j<n;j++){int res=extend(n,i,j);if(res>0)return 1;else if(res<0)return -1;}}return 0;
}
int main()
{int t;scanf("%d",&t);while(t--){int n;scanf("%d",&n);int res=judge(n);if(res>0){printf("White\n");}else if(res<0){printf("Black\n");}else printf("Not so fast\n");}return 0;
}

这篇关于五子棋裁判的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/763516

相关文章

8阶段项目:五子棋(附带源码)

8阶段项目:五子棋 8.1-技术实现 1.静态变量 静态变量只能定义在类中,不能定义在方法中。静态变量可以在static修饰的方法中使用,也可以在非静态的方法中访问。主要解决在静态方法中不能访问非静态的变量。 2.静态方法 静态方法就相当于一个箱子,只是这个箱子中装的是代码,需要使用这些代码的时候,就把这个箱子放在指定的位置即可。   /*** 静态变量和静态方法*/public cl

[期末]MVC模式写一个Java五子棋(含完整源码及简单AI)

GobangGame 一个下五子棋的java小程序 本程序参考翁恺老师细胞模拟机的控制模式编写 概述及目标 五子棋是一种两人对弈的纯策略型棋类游戏,通常双方分别使用两色的棋子,下在棋盘上,先形成5子连线者获胜。 本程序有命令行界面与图形化界面,用户通过相应方式输入下子位置后与Robot进行对战。 MVC 模式 本小程序尝试使用MVC 模式编写。 MVC 模式代表 M

五子棋游戏中判断胜负的C++源代码

今天在看《精通Windows Sockets 网络开发——基于Visual C++》(孙海民 编著,人民邮电出版社出版)这本书的时候,有一个网络五子棋游戏的实例,个人觉得除了服务器和客户端通信、管理用户列表之外,在每一步中判断黑方和白方哪一方获胜是这个游戏程序的关键。所以将源代码贴在这里,供大家学习参考:         说明:这个程序不能直接运行,只是说明判断胜负的算法。

使用深度学习来进行击剑动作识别的裁判工作

在击剑比赛中,当双方几乎同时击中对方时,记分板两边都会亮起。这时裁判需要决定哪一方得分。一般而言,谁更主动或控制了局势就会得分。我尝试训练了一个模型来辅助裁判做这样的判断!目前该模型在花剑测试集上的准确率大约为60%,相比随机选择(左、右或无得分)的33%有了提升。接下来我将对佩剑数据进行测试。(在重剑比赛中,双方同时击中则双方都得分。) 这里有几个主要挑战,首要的是缺乏标注过的击剑视频数据

五子棋理解C++思想

双人五子棋项目目录: class Game {public:Game();void init();bool waitPlayerPutChess(Player* player, int& oldi, int& oldj);void draw();void play();bool isOver(int playerId);public:int whoWin = -1; // 谁赢了(0:白棋

BAT 实现五子棋人机对战

🚀欢迎互三👉:程序猿方梓燚 💎💎 🚀关注博主,后期持续更新系列文章 🚀如果有错误感谢请大家批评指出,及时修改 🚀感谢大家点赞👍收藏⭐评论✍ 引言 嘿,同学们!今天我们来认识一下“BAT”。在我们讨论的这个五子棋人机对战程序里,“BAT”可不是大家熟悉的某个大公司哦,而是指一种特殊的文件类型——批处理文件(Batch File)。 批处理文件呢,就像是一个魔法盒子

【C语言小项目】五子棋游戏

目录 前言 一、游戏规则 1.功能分析 2.玩法分析 3.胜负判定条件 二、游戏实现思路 三、代码实现与函数封装 1.项目文件创建 2.头文件说明 3.函数封装  1)菜单实现  2)进度条实现  3)main函数实现  4)Game函数  5)ShowBoard函数实现 6)PlayerMove函数实现 7)ChessCount函数实现  8)IsOver函数

《浔川 AI 五子棋 v5.0 将延迟上线》——浔川官方

《浔川 AI 五子棋 v5.0 将延迟上线》 亲爱的各位玩家: 大家好! 我们怀着满心的期待与激动,原计划在近期为大家带来全新升级的浔川 AI 五子棋 v5.0 版本。然而,非常抱歉地通知大家,由于在开发过程中遇到了一些不可预见的技术难题和优化需求,浔川 AI 五子棋 v5.0 将延迟上线。 我们深知大家对于新版本的热切期盼,每一次的版本更新都是我们对游戏品质的不懈追求和对玩家体验的高度重

基于jqury和canvas画板技术五子棋游戏设计与实现(论文+源码)_kaic

摘  要 网络五子棋游戏如今面临着一些新的挑战和机遇。一方面,网络游戏需要考虑到网络延迟和带宽等因素,保证游戏的实时性和稳定性。另一方面,网络游戏需要考虑到游戏的可玩性和趣味性,以吸引更多的玩家参与。本文基于HTML5和Canvas技术,结合Jquery库和JavaScript代码实现了一个五子棋游戏。通过Canvas的绘图功能,实现了棋盘和棋子的绘制,并使用JavaScript代码实现了游戏的逻

Java五子棋之坐标校正

上篇针对了Java项目中的解构思维,在这篇内容中我们不妨从整体项目中拆解拿出一个非常重要的五子棋逻辑实现:坐标校正,我们如何使漫无目的鼠标点击变得有序化和可控化呢? 目录 一、从鼠标监听到获取坐标 1.MouseListener和MouseAdapter 2.mousePressed方法 二、坐标校正的具体实现方法 1.关于fillOval方法 2.坐标获取 3.坐标转换 4.坐