BAT 实现五子棋人机对战

news2024/11/14 11:03:49

在这里插入图片描述

在这里插入图片描述在这里插入图片描述

🚀欢迎互三👉:程序猿方梓燚 💎💎
🚀关注博主,后期持续更新系列文章
🚀如果有错误感谢请大家批评指出,及时修改
🚀感谢大家点赞👍收藏⭐评论✍

引言

嘿,同学们!今天我们来认识一下“BAT”。在我们讨论的这个五子棋人机对战程序里,“BAT”可不是大家熟悉的某个大公司哦,而是指一种特殊的文件类型——批处理文件(Batch File)。
批处理文件呢,就像是一个魔法盒子,里面装着一系列的命令。当我们打开这个盒子(运行批处理文件)的时候,这些命令就会一个接一个地被执行。
想象一下,假如你有很多个任务要完成,比如把一些文件从一个地方复制到另一个地方、删除一些不需要的文件、打开特定的程序等等。如果一个一个地去做这些事情,那会非常麻烦和耗时。但是有了批处理文件,你就可以把这些任务的命令都写在一个文件里,然后只需要运行这个文件,电脑就会自动按照你写的命令顺序去完成这些任务。
在我们的五子棋人机对战程序中,就是用批处理文件来实现整个游戏的运行。它里面包含了各种命令,用来显示棋盘、让玩家和电脑下棋、判断谁赢了以及处理悔棋等操作。
所以呀,BAT 批处理文件虽然看起来有点神秘,但其实它就是一个能帮我们自动完成一系列任务的好帮手呢!
首先,我们来看一下效果
在这里插入图片描述在这里插入图片描述准备好了吗,开始咯!!!

一、.txt -> .bat文件

下面来教大家如何把一个普通的文本文件(.txt)转换为批处理文件(.bat)。

一、准备工作

首先,确保你有一个包含了要转换为批处理命令的文本文件。比如,你可以在记事本中写下一些命令或者指令,然后保存为.txt 文件。

二、转换步骤

找到你的文本文件

在你的电脑文件系统中找到你创建的那个.txt 文件。

重命名文件

右键点击这个文本文件,选择 “重命名”。
将文件名的扩展名从 “.txt” 改为 “.bat”。比如,如果你的文件名为 “mycommands.txt”,重命名为 “mycommands.bat”。

注意事项

在重命名的时候,你的电脑可能会弹出一个警告,提示你更改文件扩展名可能会导致文件不可用。不用太担心,如果你确定你的文件中的内容是正确的批处理命令,那么就可以继续进行重命名操作。
如果你的文件在重命名后图标没有变成批处理文件的图标,可能是你的电脑设置了隐藏文件扩展名。你可以在文件资源管理器的 “查看” 选项卡中,勾选 “文件扩展名”,以便查看和修改文件的扩展名。
这样,一个普通的文本文件就成功转换为了批处理文件啦!现在你可以双击这个批处理文件,看看它是否能按照你预期的那样执行命令。

二、程序概述

这个 BAT 五子棋程序实现了人机对战的功能,具有以下特点:
棋盘布局清晰,通过定义一系列数组来模拟棋盘状态。
电脑具有一定的智能,通过预设的规则进行下棋决策。
支持玩家悔棋、重新开始和退出等操作。

三、棋盘布局与数据结构

程序使用多个变量来定义棋盘布局数组,如li0li39,这些数组模拟了棋盘的外观和状态,相当于显示缓存。
定义了字母与数值互换对等变量,方便在程序中进行坐标转换和操作。
还定义了横向、竖向、撇向和倷向(斜角)的棋盘串原始数据,用于电脑进行对比判断和玩家下子的占位判断。

四、电脑智能(IQ)设置

程序通过设置idea变量来赋予电脑五子棋规则,每个字符串为一项,前面为棋子的排列方式,后面的数字为电脑下棋点(相对该字符串)。
通过对idea进行分析和处理,生成了一系列变量,用于电脑在游戏中的决策。

五、游戏流程

开始游戏时,玩家可以选择谁先下,包括玩家先下(W)、电脑先下(D)或退出游戏(Q)。
如果玩家选择玩家先下,程序会等待玩家输入下棋坐标。如果输入点不存在或该点已经有子,会给出相应提示。
如果玩家选择电脑先下,电脑会根据预设的规则进行下棋决策。
在游戏过程中,玩家可以悔棋、重新开始或退出游戏。

六、代码分析

一、棋盘布局与数据结构

(一)棋盘布局数组

1.首先,程序使用一系列的set语句来定义棋盘布局数组。比如set li39= A B C D E F G H I J K L M N O P Q R S定义了一个包含字母的行,这行字母实际上代表了棋盘的列标。
2.接着,像set li0= ┌─────────────────────────────────────┐set li1=A│┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐│A这样的语句定义了棋盘的边框和行列标识。这些语句共同组成了一个类似于我们在现实中看到的五子棋棋盘的外观表示,就好像是一个专门用来显示棋盘状态的画布。

(二)字母与数值互换对等变量

1.为了方便在程序中处理玩家输入的坐标和进行内部计算,程序定义了字母与数值互换对等变量。例如,set str=###################这一步创建了一个很长的字符串,后面的循环语句会利用这个字符串来定义横向、竖向、撇向和倷向(斜角)的棋盘串原始数据。
2.for /l %%a in (1,1,19) do (set he%%a=!str!&set sh%%a=!str! for /l %%b in (1,1,19) do set [%%a.%%b=0)这段代码创建了横向(he)和竖向(sh)的棋盘串,每个棋盘串初始状态都是由一连串的#组成,表示空的棋盘位置。同时,还定义了一些二维坐标变量[%%a.%%b],并初始化为0,这些变量在后续的程序中用于判断棋子的位置。
3.for %%a in (%str%) do (set/a.+=1,%%a=.&set z!.!=%%a)这段代码则建立了字母与数字的对应关系。比如,当程序执行完这段代码后,a就对应数字1z1就等于a。这样,当玩家输入一个坐标,比如 “A2” 时,程序就可以通过这些变量将字母 “A” 转换为数字 “1”,从而确定在棋盘上的具体位置。

二、电脑智能(IQ)设置

(一)定义电脑下棋规则

1.程序通过一系列的set idea语句来定义电脑的下棋规则。比如set idea=@@@@#1 #@@@@5 @#@@@4 @@@#@2 @@#@@3 $$$$#1 #$$$$5 $$#$$3 $#$$$4 $$$#$2 #@@@##2 ##@@@#5 #@@#@2 @@#@#3 #@#@@3 @#@@#4 #@@@#1,这里的每个字符串都是一项规则。
2.以 “@@@@#1” 为例,其中 “@” 代表黑棋(在程序中后面会被替换为 “●”),“#” 代表空位。这个规则的意思是,当棋盘上出现四个黑棋和一个空位时,电脑应该下在相对这个排列的第一个位置。后面的数字 “1” 就是电脑下棋的相对位置。

(二)处理电脑下棋规则

1.set ttr=!idea:@=●!&set ttr=!ttr:$=○!这一步将 “@” 替换为黑棋(“●”),将 “$” 替换为白棋(“○”),使得规则更加直观。
2.for %%a in (!ttr!) do (set var=%%a&set!var:~,-1!=!var:~-1!&set idea=!idea!!var:~,-1!)这段代码对规则进行进一步处理。它提取每个规则字符串的最后一个字符(即下棋位置)作为一个新的变量值,并将这个规则字符串和下棋位置一起添加到idea中。这样做的目的是为了在后续的程序中方便地搜索和使用这些规则。

三、游戏流程

(一)选择谁先下

1.set /p var=选择谁先下[ W,玩家 D,电脑 Q,退出 ]:这段代码会在命令行中显示一个提示,让玩家选择谁先下。玩家可以输入 “W” 表示玩家先下,“D” 表示电脑先下,“Q” 表示退出游戏。
2.根据玩家的输入,程序会设置相应的变量值。如果玩家选择玩家先下,就设置zhi=●,表示黑棋先下;如果选择电脑先下,就设置zhi=○,表示白棋先下。这个变量zhi在后续的游戏过程中用于确定当前轮到谁下棋。

(二)玩家下棋

1.set /p user=!say:say=%error%! [列前,行后]:这段代码等待玩家输入下棋坐标。玩家需要按照 “列前,行后” 的格式输入坐标,例如 “A2” 表示在第一列第二行下棋。
2.程序会根据玩家输入的坐标进行一系列的判断。首先,通过字母与数值互换对等变量将玩家输入的字母坐标转换为数字坐标。然后,检查这个位置是否已经有棋子,如果有,就显示错误提示 “该点已经有子”,并重新等待玩家输入;如果没有,就将玩家的棋子放置在这个位置,并更新相应的棋盘数据。

(三)电脑下棋

1.如果轮到电脑下棋,程序会根据预设的规则在idea中搜索所有横竖撇倷串,找到最前的匹配后确定电脑的下棋位置。
2.for %%a in (!idea!) do (...)这段代码遍历idea中的所有规则字符串。对于每个规则字符串,程序会在横向、竖向、撇向和倷向的棋盘串中进行搜索。如果找到匹配的字符串,就确定了电脑的下棋位置。
如果有多角度匹配,程序会随机取最佳的走法,把匹配的串和方位串存到变量put中。然后,根据这个变量计算出实际的下棋坐标。具体的计算方法是通过分析方位串和规则串,确定规则串在方位串中的位置,再根据字母与数字的对应关系以及相对规则串的下棋点位置,精确计算出电脑下棋的坐标。

(四)判断胜负

1.在玩家或电脑下完棋后,程序会判断是否有一方胜出。通过检查四个方向(横向、竖向、撇向和倷向)的棋盘串中是否出现连续五个相同的棋子(黑棋或白棋)来判断胜负。
2.set win=!zhi!!zhi!!zhi!!zhi!!zhi!定义了一个代表胜利的字符串,然后在四个方向的棋盘串中搜索这个字符串,如果找到,就表示有一方胜出。

(五)悔棋操作

1.如果玩家输入 “back”,程序会执行悔棋操作。悔棋操作通过将上一步下棋的位置恢复为空白状态,并更新相应的棋盘串和显示缓存来实现。
2.for %%a in (!悔:~^,6!) do (set str=%%a set/a poh=!str:~-1!,pos=!str:~,1!...)这段代码遍历悔棋记录,找到上一步下棋的位置,并将该位置在四个方向的棋盘串中恢复为空白状态。同时,更新显示缓存,以便在命令行中显示悔棋后的棋盘状态。

七、总结

同学们,我们一起探索了这个 BAT 五子棋人机对战程序以及文本文件转批处理文件的方法。
对于五子棋人机对战程序,它通过一系列复杂而精妙的批处理命令实现了棋盘布局、玩家和电脑下棋、判断胜负以及悔棋等功能。虽然使用的是看似简单的批处理语言,但却展现出了强大的游戏逻辑和交互性。这让我们看到即使是在有限的技术条件下,也能创造出充满趣味和挑战的游戏体验。
而关于文本文件转批处理文件,这是一个非常实用的技巧。只需要简单的重命名操作,就可以将包含特定命令的文本文件转换为可直接运行的批处理文件。但在转换过程中要注意电脑的警告提示以及文件图标显示问题,确保文件中的内容适合作为批处理命令。掌握这个转换方法后,我们可以更方便地创建和修改批处理文件,以实现各种自动化任务,为我们的日常电脑操作带来更多便利。
总之,通过对这个五子棋程序和转换方法的学习,我们不仅对批处理文件有了更深入的了解,也为我们进一步探索编程和自动化操作打开了一扇新的窗户。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2067310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【python】Python中小巧的异步web框架Sanic快速上手实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

Java 3.1 - 计算机网络

目录 OSI 七层协议是什么?每一层的作用是什么? TCP / IP 四层模型是什么?每一层的作用是什么? 应用层(Application Layer) 传输层(Transport Layer) 网络层(Network …

Linux系统编程(15)send/recv函数

一、send/recv send 和 recv 是在网络编程中常用的两个函数,用于在套接字(socket)之间发送和接收数据。 1.send 函数 用于将数据发送到连接的套接字。 ssize_t send(int sockfd, const void *buf, size_t len, int flags); sockfd&#…

掌握语义内核(Semantic Kernel):如何使用Memories增强人工智能应用

随着人工智能领域的不断发展,语义内核(Semantic Kernel)的概念应运而生,为我们处理和理解庞大的数据集提供了新的视角。今天,我们将聚焦于语义内核中的一个核心概念——Memories,它是如何使我们的数据查询更…

跨入数字新时代:探寻数字媒体技术的魅力与前景

在当今数字化的时代,数字媒体技术如同一股汹涌的浪潮,席卷着我们生活的方方面面,展现出无与伦比的魅力和广阔无垠的前景。 数字媒体技术的魅力首先体现在它为信息传播带来的革命性变化。以往,我们通过书本、报纸、电视等传统媒介获…

SpringBoot教程(二十五) | SpringBoot整合Sharding-JDBC分库分表

SpringBoot整合Sharding-JDBC分库分表 前言1. 什么是Sharding?2. 什么是Sharding-JDBC? 所需的maven依赖注意点(关于shardingsphere的配置情况)实操一:如何水平分表1. 步骤说明2. 创建数据库和表3.配置application.pro…

java反序列化之CommonCollections1利⽤链的学习

一、源起 1、代码示例 既然学习cc1链&#xff0c;那么总要先了解下cc1链能造成任意代码执行的原因&#xff0c;这里引用P神的代码来进行讲解&#xff1a; ps:环境使用&#xff1a; CommonsCollections < 3.2.1java < 8u71 import org.apache.commons.collections.Trans…

【Python机器学习】NLP分词——利用分词器构建词汇表(一)

在NLP中&#xff0c;分词&#xff08;也称切词&#xff09;是一种特殊的文档切分过程。而文档切分能够将文本切分成更小的文本块或片段&#xff0c;其中含有更集中的信息内容。文档切分可以是将文本分成段落&#xff0c;将段落分成句子&#xff0c;将句子分成短语&#xff0c;或…

C语言学习——文件

目录 十三、文件 13.1C文件概述 13.2文件类型指针 13.3文件的打开与关闭 文件的打开&#xff08;fopen函数&#xff09; 文件的关闭&#xff08;fclose函数&#xff09; 13.4文件的读写 fputc函数和fgetc函数&#xff08;putc函数和getc函数&#xff09; fread函数和fw…

在亚马逊云科技上通过LangChain ReAct Agent开发金融多模态数据AI分析中台

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何在亚马逊云科技机器学习托…

简易版营业厅宽带系统

TOC ssm018简易版营业厅宽带系统jsp 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范化管…

音频Transformer架构

第3单元:音频Transformer架构 本课程中,我们主要关注Transformer模型以及它们如何应用于音频任务。虽然您不需要了解这些模型的内部细节,但了解使它们工作的主要概念很有用,因此我们在本小节中回顾一下关于Transformer的知识。有关transformer的深入了解,请查看我们的NLP…

互联网的发展是否加剧了数字鸿沟?

有人问&#xff1a;互联网的发展是否加剧了数字鸿沟。 互联网的发展确实在某种程度上加剧了数字鸿沟。虽然互联网的普及为全球范围内的人们提供了前所未有的访问信息、教育资源和经济机会的机会&#xff0c;但其发展也凸显并放大了不同群体之间的差距&#xff0c;比如以下几个…

dokcer 安装 redis(单机版)

准备工作 拉取redis镜像 docker pull redis 通过docker-compose 安装redis 很方便、很简单 先安装docker&#xff0c;参考我这个安装示例进行安装 https://blog.csdn.net/qq_33192671/article/details/13714973 然后安装docker-compose&#xff0c;要是拉取docker-compose无…

【在Linux世界中追寻伟大的One Piece】IO基础

目录 1 -> 回顾 1.1 -> 回顾C文件接口 1.2 -> 总结 2 -> 系统文件I/O 3 -> 接口介绍 3.1 -> open 3.2 -> open函数返回值 3.3 -> 文件描述符fd 4 -> 0 & 1 & 2 5 -> 文件描述符的分配规则 6 -> 重定向 7 -> 使用dup2系…

跨链互通:Web3如何实现多链互操作性

随着区块链技术的发展&#xff0c;各类区块链网络不断涌现&#xff0c;然而&#xff0c;不同链之间的互操作性问题成为了一个重要挑战。跨链互通&#xff08;Cross-chain Interoperability&#xff09;技术正是为了解决这一问题&#xff0c;旨在打破各区块链网络间的壁垒&#…

恒创科技:如何管理和减少Windows服务器 CPU 负载?

CPU 负载是衡量网络服务器或计算机中央处理器 (CPU) 在任意给定时间内处理工作量的指标。它通常表示 CPU 正在执行或排队等待处理的进程数。 如何读取和管理CPU负载&#xff1a; 对于 Windows 系统 Windows 本身不支持“top”和“ps”命令&#xff0c;而类 Unix 系统则支持。不…

Xinstall助力App运营,邀请码自动识别,效率翻倍!

在App推广和运营的道路上&#xff0c;邀请码一直是一个让人又爱又恨的存在。它能够帮助我们追踪用户来源&#xff0c;衡量推广效果&#xff0c;但同时&#xff0c;繁琐的填写步骤也让许多潜在用户望而却步。然而&#xff0c;随着Xinstall的出现&#xff0c;这一切都将迎来颠覆性…

Promise学习之同步与异步

目录 前言 一、同步与异步 (一) 同步 (二) 异步 二、总结 (一) 同步 (二) 异步 前言 Java有多线程&#xff0c;前端有同步与异步&#xff0c;异步操作可以优化用户体验、提高性能与响应、处理并发与并行任务等等&#xff0c;异步操作有发送Ajax请求、读文件等&#xff0…

简明的Arthas故障排查实践

写在文章开头 Arthas是一款强大的开源Java诊断程序,它可以非常方便的启动并以界面式的方式和Java程序进行交互,支持监控程序的内存使用情况、线程信息、gc情况、甚至可以反编译并修改现上代码等。所以它成为笔者进行线上问题排查的重要手段,而本文将从实际使用的角度介绍一下…