批处理实现三子棋游戏

所属分类: 软件教程 / 编程开发 阅读数: 1062
收藏 0 赞 0 分享
  @echo off
  setlocal enabledelayedexpansion
  mode con lines=25
  :start
  cls
  set str=a1a2a3b1b2b3c1c2c3
  set slt1=0
  for %%i in (a b c) do (
  set m%%i=
  for %%j in (1 2 3) do (
  set m%%j=
  set m%%i%%j=
  set n%%i%%j=
  )
  )
  set mlr=
  set mrl=
  set mmlr=a1b2c3
  set mmrl=c1b2a3
  set win=
  for %%i in (a,b,c) do (
  for %%j in (1,2,3) do (
  set %%i%%j=
  )
  )
  echo ┏━┳━┳━┓
  echo ┃1 ┃2 ┃3 ┃
  echo ┣━╋━╋━┫
  echo ┃4 ┃5 ┃6 ┃
  echo ┣━╋━╋━┫
  echo ┃7 ┃8 ┃9 ┃
  echo ┗━┻━┻━┛
  echo 谁先走?(c代表电脑,h代表人)
  set /p slt1=
  set human=
  set cpu=
  if %slt1% equ c set human=○&set cpu=●&goto 2
  if %slt1% equ C set human=○&set cpu=●&goto 2
  set human=●&set cpu=○
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :begin
  :1
  echo 请您走棋!(输入数字1~9)
  set /p slt2=
  if !slt2! equ 1 set slt2=a1
  if !slt2! equ 2 set slt2=b1
  if !slt2! equ 3 set slt2=c1
  if !slt2! equ 4 set slt2=a2
  if !slt2! equ 5 set slt2=b2
  if !slt2! equ 6 set slt2=c2
  if !slt2! equ 7 set slt2=a3
  if !slt2! equ 8 set slt2=b3
  if !slt2! equ 9 set slt2=c3
  if "!n%slt2%!" neq "" echo 此处已经有子!&goto 1
  set str=!str:%slt2%=!
  set mmrl=!mmrl:%slt2%=!
  set mmlr=!mmlr:%slt2%=!
  set %slt2%=%human%
  set m%slt2%=h
  set n%slt2%=h
  cls
  echo ┏━┳━┳━┓
  echo ┃%a1%┃%b1%┃%c1%┃
  echo ┣━╋━╋━┫
  echo ┃%a2%┃%b2%┃%c2%┃
  echo ┣━╋━╋━┫
  echo ┃%a3%┃%b3%┃%c3%┃
  echo ┗━┻━┻━┛
  call :judge
  if !win! equ h echo 你居然赢了,太让我惊讶了!&pause&goto end
  if !win! equ c echo 嘿嘿,不好意思我赢了!&pause&goto end
  if "!str!" equ "" echo 平局!&pause&goto end
  :2
  echo 等待电脑走棋
  call :ai
  for /l %%i in (1,1,15) do set/p r=^><nul&ping /n 0 127.1>nul
  set slt3=!max!
  set str=!str:%slt3%=!
  set mmrl=!mmrl:%slt3%=!
  set mmlr=!mmlr:%slt3%=!
  cls
  set %slt3%=%cpu%
  set m%slt3%=c
  set n%slt3%=c
  echo ┏━┳━┳━┓
  echo ┃%a1%┃%b1%┃%c1%┃
  echo ┣━╋━╋━┫
  echo ┃%a2%┃%b2%┃%c2%┃
  echo ┣━╋━╋━┫
  echo ┃%a3%┃%b3%┃%c3%┃
  echo ┗━┻━┻━┛
  call :judge
  if !win! equ h echo 你居然赢了,太让我惊讶了!&pause&goto end
  if !win! equ c echo 嘿嘿,不好意思我赢了!&pause&goto end
  if "!str!" equ "" echo 平局!&pause&goto end
  goto begin
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :: :judge这一段是判断胜负的
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :judge
  for %%i in (a,b,c) do (
  for %%j in (1,2,3) do (
  set m%%i=!m%%i!!m%%i%%j!
  set m%%j=!m%%j!!m%%i%%j!
  )
  )
  set mlr=!mlr!!ma1!!mb2!!mc3!
  set mrl=!mrl!!ma3!!mb2!!mc1!
  for %%i in (a,b,c) do (
  if !m%%i! equ hhh set win=h
  if !m%%i! equ ccc set win=c
  )
  for /l %%j in (1,1,3) do (
  if !m%%j! equ hhh set win=h
  if !m%%j! equ ccc set win=c
  )
  if !mlr! equ hhh set win=h
  if !mrl! equ hhh set win=h
  if !mlr! equ ccc set win=c
  if !mrl! equ ccc set win=c
  for %%i in (a,b,c) do (
  for %%j in (1,2,3) do (
  set m%%i%%j=
  )
  )
  goto :eof
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :: :ai这一段是电脑下棋的思路
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :ai
  set k=0
  for /l %%i in (0,2,16) do (
  set/a k+=1
  set t!k!=!str:~%%i,2!
  if not defined t!k! goto next
  )
  :next
  set/a k=!k!-1
  for /l %%i in (1,1,!k!) do (
  set score%%i=0
  )
  for /l %%j in (1,1,!k!) do (
  set left%%j=!t%%j:~0,1!
  set right%%j=!t%%j:~1,1!
  set bb%%j=!left%%j!!right%%j!
  if !mlr! equ hh if !bb%%j! equ !mmlr! set score%%j=4
  if !mrl! equ hh if !bb%%j! equ !mmrl! set score%%j=4
  if !mlr! equ cc if !bb%%j! equ !mmlr! set score%%j=5
  if !mrl! equ cc if !bb%%j! equ !mmrl! set score%%j=5
  for %%n in (a b c) do (
  if !left%%j! equ %%n (
  if !left%%j! equ b if !right%%j! equ 2 set score%%j=3
  if !m%%n! equ hh if !score%%j! lss 4 set score%%j=4
  if !m%%n! equ cc set score%%j=5
  )
  )
  for %%m in (1 2 3) do (
  if !right%%j! equ %%m (
  if !m%%m! equ hh if !score%%j! lss 4 set score%%j=4
  if !m%%m! equ cc set score%%j=5
  )
  )
  )
  set max=!t1!
  set/a tempk=!k!+1
  for /l %%i in (1,1,!tempk!) do (
  set qq=%%i+1
  for /l %%j in (!qq!,1,!k!) do (
  if !score%%i! equ 5 set max=!t%%j!&goto 3
  if !score%%i! lss !score%%j! set max=!t%%j!
  )
  )
  :3
  goto :eof
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  :end
  cls
  echo 重玩吗?(是/y,否/n)
  set /p sss=
  if !sss! equ y goto start
  if !sss! equ Y goto start 


更多精彩内容其他人还在看

Unity3D摄像机跟随小球移动而不旋转的设置方法

Unity3D中怎样让摄像机跟随小球移动而不旋转?Unity3D中使用摄像机拍小球,它在移动的过程中,自身是不断旋转的,所以,摄像机也会跟着一起旋转,怎么让摄像机不转呢?请看下文详细介绍
收藏 0 赞 0 分享

Myeclipse断点不起作用出现斜线该怎么办呢?

Myeclipse断点不起作用出现斜线该怎么办呢?Myeclipse断点处如果出现斜线,那就说明断点不起作用了,该怎么处理这种情况呢?下面我们一起来看看详细的解决办法,需要的朋友可以参考下
收藏 0 赞 0 分享

Visual Studio中无法查找或打开PDB文件怎么办?

Visual Studio中无法查找或打开PDB文件怎么办?在VS底部的“输出”框中提示“无法查找或打开 PDB 文件”,出现这个问题该怎么解决呢?下面我们来看看详细的解决办法,需要的朋友可以参考下
收藏 0 赞 0 分享

VS2013调试代码时怎么避免加载符号?

VS2013调试代码时怎么避免加载符号?VS2013调试代码时候,当电脑接入网络后系统会自动从Microsoft 符号服务器加载PDB符号文件,一旦加载符号就会变得很慢,下面我们来看看详细的解决办法
收藏 0 赞 0 分享

eclipse怎么更换工作空间?eclipse更换工作区的方法

eclipse怎么更换工作空间?eclipse经常编辑代码,eclipse默认的的工作区在C盘,经常使用eclipse写代码会导致C盘空间缩小,该怎么更换工作区呢?下面我们来看看eclipse更换工作区的方法
收藏 0 赞 0 分享

vs2010怎么更换默认的起始页?vs2010起始页添加命令按钮的方法

vs2010怎么更换默认的起始页?vs2010起始页就是vs启动的时候默认打开的页面,当然我们可以根据自己的需要来设置起始页,下面我们来看看vs2010起始页添加命令按钮的方法
收藏 0 赞 0 分享

eclipse中sdk与adt版本不兼容该怎么解决? 三种方法帮你搞定

eclipse中sdk与adt版本不兼容该怎么解决?出现这种问题基本上是因为sdk版本过高,今天我们来看看三种比较简单的解决办法,图文教程很简单,需要的朋友可以参考下
收藏 0 赞 0 分享

vb怎么输出菱形图案?vb绘制菱形的教程

vb怎么输出菱形图案?vb编辑的代码可以实现很多功能,今天我们就来看看怎么使用vb绘制菱形图案,这篇教程很简单,适合新手学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android Studio怎么导出设置?

Android Studio怎么导出设置?Android Studio中设置了很多符合自己习惯的东西,但是如果重新安装软件,之前设置的东西都会消失,该怎么将这些设置导出来呢?下面我们一起来看看详细教程
收藏 0 赞 0 分享

怎么使用arcgis对进行地图投影?

怎么使用arcgis对进行地图投影?没有投影过的地图该怎么投影?我们想将是西安80的shp数据,但是一般的搜不带号,想转换成带号的,就需要使用arcgis对进行地图投影,详细教程请看下文
收藏 0 赞 0 分享
查看更多