批处理实现的五子棋人机对战游戏_DOS/BAT

效果图:

核心代码:

复制代码 代码如下:

@echo off&setlocal enabledelayedexpansion
set li0=┌───────────────────┐
set li1=│┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐│1
for /l %%a in (2,1,18) do (set li%%a=│├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤│%%a)
set li19=│└┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘│19
set li20=└───────────────────┘
set li21=   A B C D E F G H I J K L M N O P Q R S
for %%a in (%li21%) do (set/a .+=1,%%a=.&set z!.!=%%a)
set z0= &set z20= &set "z21= "

set li5=!li5!   五 棋 子 人 机 对 战
set li7=!li7!        批 处 理
set li9=!li9!   电 脑 水 平 中 等
set li12=!li12!  由 netbenton 编写完成
set li14=!li14!  棋盘设计参照了 batman
title   批处理五子棋

set str=###################
set .=0
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
)

set .=33
for /l %%a in (5,1,19) do (
        set pi%%a=!str:~,%%a!&set ni%%a=!str:~,%%a!
        set pi!.!=!str:~,%%a!&set ni!.!=!str:~,%%a!
        set/a .-=1
)

set ●=○&set a●=电脑
set ○=●&set a○=玩家

::设置电脑IQ
set idea=@@@@#1 #@@@@5 @#@@@4 @@@#@2 @@#@@3 $#$$$4 $$#$$3 $$$#$2 $$$$#1 #$$$$5 #$$#$#3 #$#$$#4 #@@@##2 ##@@@#5 #@@#@#3 #@#@@#4 #@@@#1
set idea=!idea! ##@@@4 @@@##2 ##$$$#5 #$$$##2 #$$$#1 ##@@#4 #@@##2 ##$$#4 #$$##2 #$#$#3 @@###3 ###@@3
set idea=!idea! ##@##2 ###@#3 #@###3 @####4 ####@2 ##############7 ###########6 ########4 #####3 ####2
set ttr=!idea:@=●!&set ttr=!ttr:$=○!
for %%a in (!ttr!) do (set var=%%a&set !var:~,-1!=!var:~-1!&set idea=!idea! !var:~,-1!)
set ttr=
::设置电脑IQ

:restart
for /l %%a in (0,1,21) do (echo    !z%%a!!li%%a!)
setlocal enabledelayedexpansion
set li21=!li21!      reboot重新开始,exit退出。
set /p var=选择谁先下[ W,玩家  D,电脑  Q,退出 ]:
if /i "!var!" equ "Q" goto :eof
if /i "!var!" equ "W" (set zhi=●) else (set zhi=○)
echo.

:loop
if %zhi% equ ● goto :men
set .=&set put1=
for %%a in (!idea!) do (
        for %%b in (he sh) do (
                for /l %%c in (1,1,19) do (
                        if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c
        )        )
        for %%b in (pi ni) do (
                for /l %%c in (5,1,33) do (
                        if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c
        )        )
if defined put1 set put=%%a&goto :get
)

echo. 已经和棋了
pause
goto :restart

:men
for /l %%a in (0,1,21) do (echo    !z%%a!!li%%a!)
set /p user=[列前,行后]:
echo.
if "!user!" equ "reboot" endlocal&goto :restart
if "!user!" equ "exit" exit
set/a pos=!user:~0,1!,poh=!user:~1,2!,var=pos-1 2>nul
if not defined [!poh!.!pos! echo 输入点不存在&goto :men
if "!he%poh%:~%var%,1!" neq "#" echo 该点已经有子&goto men
goto :getok

:get
set /a .=!random!%%.+1
set put=!put%.%! !put!
::随机取最佳的走法

for /f "tokens=1-3" %%a in ("%put%") do (
        set var=!%%a%%b:*%%c=!srqponmlkjihgfedcba0
        set/a var=!var:~19,1!+%%c
        if "%%a" equ "he" (set/a poh=%%b,pos=20-var)
        if "%%a" equ "sh" (set/a poh=20-var,pos=%%b)
        if %%b lss 19 (set/a var=%%b-var+1) else (set/a var=38-%%b-var+1)
        if "%%a" equ "pi" (if %%b lss 19 (set/a pos=var,poh=%%b-var+1) else (set/a poh=20-var,pos=%%b-19+var))
        if "%%a" equ "ni" (if %%b lss 19 (set/a pos=var,poh=19-%%b+var) else (set/a poh=var,pos=%%b-19+var))
)
echo  电脑最后下在:!z%pos%!!z%poh%!(%poh%)

:getok
set zhi=!%zhi%!&set win=!zhi!!zhi!!zhi!!zhi!!zhi!
set/a piph=poh+pos-1,lips=pos+1,niph=19+pos-poh

if !piph! lss 19 (set/a pips=pos) else (set/a pips=20-poh)
if !niph! lss 19 (set/a nips=pos) else (set/a nips=poh)

for %%a in ("li!poh! !lips!" "he!poh! !pos!" "sh!pos! !poh!" "pi!piph! !pips!" "ni!niph! !nips!") do (
        for /f "tokens=1,2" %%b in (%%a) do (
                if defined %%b (
                        set/a .=%%c-1
                        for %%d in (!.!) do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
                if "!%%b:%win%=!" neq "!%%b!" set win=y
                )
        )
)
set/a asc%zhi%+=1
if !win! neq y goto :loop
for /l %%a in (0,1,21) do (echo    !z%%a!!li%%a!)
set/p=   !a%zhi%! %zhi%子 第!asc%zhi%!手  胜出     <nul
pause
endlocal&goto :restart

因为代码比较多,特打包提供下载 wuziqi_dos_jb51.rar

时间: 2024-11-08 20:19:55

批处理实现的五子棋人机对战游戏_DOS/BAT的相关文章

eclips语言中怎么样编写五子棋游戏?eclips语言编写五子棋人机对战怎么做?

问题描述 eclips语言中怎么样编写五子棋游戏?eclips语言编写五子棋人机对战怎么做? eclips语言中怎么样编写五子棋游戏?eclips语言编写五子棋人机对战怎么做? 解决方案 http://blog.sina.com.cn/s/blog_6caeccff0100pq31.html

写批处理必备的一些命令参数使用技巧_DOS/BAT

 首先批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的记事本(notepad)等任何文本文件编辑工具创建和修改批处理文件. 其次,批处理文件是一种简单的程序,可以通过条件语句(if)和流程控制语句(goto)来控制命令运行的流程,在批处理中也可以使用循环语句(for)来循环执行一条命令.当然,批处理文件的编程能力与C语言等编程语句比起来是十分有限的,也是十分不规范的.批处理的程序

批处理 FOR参数/F之tokens详解_DOS/BAT

(四)tokens=x,y,m-n 提取列 格式: FOR /F "tokens=x,y,m-n" %%I IN (Command1) DO Command2 用法: 一句话总结:提取列. 通俗讲,共同提取每一行的第m小节的内容. 因此,可以用该命令来指定提取文本信息. tokens=有时表示提取全部. tokens=m表示提取第m列. tokens=m,n表示提取第m列和第n列. tokens=m-n表示提取第m列至第n列. Tokens=*表示删除每行前面的空格.忽略行首的所有空格

批处理脚本实现提醒下班要打卡_DOS/BAT

你是不是经常下班忘记打卡,要被扣钱的哟,下载这个脚本,在windows下添加一个定时任务,到点提醒你一定要去打卡. 下班经常忘记打卡,于是写了这个脚本来提醒我,在计划任务里设定好下班时间运行该脚本既可. @echo off echo ******************************************** echo * * echo * 不要忘了打卡!!! * echo * * echo ******************************************** e

使用批处理删除文件夹时遇到的问题_DOS/BAT

C盘有一个文件夹1,里面有2.exe和3.exe . 想做一个批处理,先运行1.exe,安装完成后运行2.exe  等到2.exe安装完成后,删除文件夹1 我的代码如下 @echo off start /wait "" "C:\1\2.exe " && "C:\1\3.exe" && rd /s /q C:\1 && del %0 exit 现在有一个缺点.2和3安装完成后,文件夹1不能被删除,里面

BAT批处理判断目录在%Path%中实现方法_DOS/BAT

貌似没有很优美的做法,只能把%Path%按分号分割,然后一段一段地比较. :InPath [In]Path [Out]0/1 SETLOCAL SET LocalPathCopy=%PATH% SET Result=0 :WHILE IF "%LocalPathCopy" == "" GOTO WEND FOR /F "delims=;" %%I IN ("%LocalPathCopy%") DO ( IF /I "

批处理自动打系统补丁(批量安装exe文件)_DOS/BAT

安装好操作系统后花费时间最长的就是下载补丁安装补丁了,往往下载补丁安装补丁都花去了大半天的事情,下面介绍一种快速安装系统补丁的两种办法.: 方法1:用360安全卫士下载下最新的系统补丁并保存在hotfix文件夹,在该文件夹下新建文本文件,输入以下代码: 复制代码 代码如下: @echo offfor %%i in (*.exe) do %%i /passive /norestart /nobackupshutdown -r 选择另存为buding.bat(注意批处理文件格式,在另存为对话框把保存

巧用批处理解决IE不支持JavaScript等问题_DOS/BAT

复制代码 代码如下: rem =====批处理开始========     regsvr32 actxprxy.dll     regsvr32 shdocvw.dll     Regsvr32 URLMON.DLL     Regsvr32 actxprxy.dll     Regsvr32 shdocvw.dll     regsvr32 oleaut32.dll     rundll32.exe advpack.dll /DelNodeRunDLL32 C:\WINNT\System32\

不错的dos批处理命令详解第1/2页_DOS/BAT

一.简单批处理内部命令简介  1.Echo 命令  打开回显或关闭请求回显功能,或显示消息.如果没有任何参数,echo 命令将显示当前回显设置.  语法  echo [{on│off}] [message]  Sample:@echo off / echo hello world  在实际应用中我们会把这条命令和重定向符号(也称为管道符号,一般用> >> ^)结合来实现输入一些命令到特定格式的文件中.这将在以后的例子中体现出来.  2.@ 命令  表示不显示@后面的命令,在入侵过程中(例