Board logo

标题: 人机对战游戏 [天罗地网] [打印本页]

作者: ZJHJ     时间: 2009-2-2 00:01    标题: 人机对战游戏 [天罗地网]

这个代码不是我的原创,只是修改了别人的为我所用,研究代码的技巧,用你的轮造我之车。
从中学习和提高自己! 并感谢五子棋的作者!! 以下代码是个游戏,我取名叫“天罗地网”
胜利者请报个到...!
@echo off
::增加了难度
mode con cols=70 lines=14
title 走迷宫-天罗地网 QQ:251485609 by 2009.1 今天:%date%
setlocal enabledelayedexpansion
color 72
:fh
echo.
echo                           游戏   [ 天罗地网 ]  
echo.
echo      游戏规则:从棋盘中任意点出发,依次到达相对的两个边框后(每步前后
echo.
echo   必须相连不跳步),再返回原地出发点就算胜利!
echo.
echo                  (途中后有追兵前有堵击,你就等着瞧吧...)
echo.
echo               1、玩家先出发           2、追击方先堵击
echo.
echo                                             QQ:251485609
set /p wjh=     请玩家选择:
if not "%wjh%" equ "1" if not "%wjh%" equ "2" cls&echo 错误!&pause&cls&goto fh
:dxz
echo.
echo               1、普通型           2、增加难度
echo.
set /p ndxz=     选择难度:
if not "%ndxz%" equ "1" if not "%ndxz%" equ "2" cls&echo 错误!&pause&cls&goto dxz
cls
mode con cols=80 lines=68
:: 定义图形界面中的启始变量
set 纵轴=B C D E F G H I J K L M N O P Q R
for %%i in (a %纵轴% S) do (
        set /a n+=1
        set zc1%%i=!n!
)
set n=
for %%i in (a %纵轴% S) do (
        set /a n+=1
        set zc2!n!=%%i
)

:tx
for %%i in (a %纵轴% S) do (
    for /l %%j in (1,1,19) do (
        set we%%i%%j=*
    )
)
set A1=┏
set A19=┓
set S1=┗
set S19=┛
for /l %%i in (2,1,18) do set a%%i=┳
for /l %%i in (2,1,18) do set S%%i=┻
for %%i in (%纵轴%) do set %%i1=┣&set %%i19=┫
for %%i in (%纵轴%) do (
    for /l %%j in (2,1,18) do (
        set %%i%%j=╋
    )
)
set sos=1
set bls=
call:txcx
::以上产生启始图形界面
::以下为交替程序
:hq
if "%wjh%"=="2" call:dn ●  &goto bq
set /p ts= (输入时先字母后数字:如F6) 第%sos%手,请●方输入
if /i "%ts%"=="cxks" goto tx
if "!we%ts%!"=="*" (
set %ts%=●
set we%ts%=a
set /a sos+=1
set ss=%ts%
if "%sos%"=="1" set ss1=%ts%
) else (
echo  输入有误,请重新输入!
goto hq )
::刷新
call:txcx

:bq
if "%wjh%"=="1" call:dn ○  &goto hq
set /p ts= (输入时先字母后数字:如F6) 第%sos%手,请○方输入
if /i "%ts%"=="cxks" goto tx
if "!we%ts%!"=="*" (
set %ts%=○
set we%ts%=b
set /a sos+=1
set ss=%ts%
if "%sos%"=="2" set ss1=%ts%
) else (
echo  输入有误,请重新输入!
goto bq)
::刷新
call:txcx
goto hq

:txcx
::刷新棋盘
cls
echo                    输入 cxks 重新开局
::写入顶行数字
set /p =  <nul
for /l %%i in (1,1,8) do set /p=%%i   <nul
for /l %%i in (9,1,19) do set /p=%%i  <nul
echo.
::显示图形界面
for %%i in (A %纵轴%) do (
    set /p =%%i<nul
    for /l %%j in (1,1,18) do (
        set /p =!%%i%%j!━<nul
    )
    echo !%%i19!
    for /l %%j in (1,1,19) do (
        set /p = ┃ <nul
    )
    echo.
)
set /p =S<nul
for /l %%i in (1,1,18) do set /p =!S%%i!━<nul
echo !S19!
::写入底行数字
set /p =  <nul
for /l %%i in (1,1,8) do set /p=%%i   <nul
for /l %%i in (9,1,19) do set /p=%%i  <nul
echo.
::起点坐标判断
set    zbwq=%ss1:~1,2%>nul 2>nul
set /a qzbq=%ss1:~1,2%-1>nul 2>nul
set /a hzbq=%ss1:~1,2%+1>nul 2>nul
set    zmq=%ss1:~0,1%>nul 2>nul
set /a vr2q=zc1%zmq%-1>nul 2>nul
set /a vr1q=zc1%zmq%+1>nul 2>nul
set vr2q=!zc2%vr2q%!>nul 2>nul
set vr1q=!zc2%vr1q%!>nul 2>nul
::动态坐标判断
set    zbw=%ss:~1,2%>nul 2>nul
set /a qzb=%ss:~1,2%-1>nul 2>nul
set /a hzb=%ss:~1,2%+1>nul 2>nul
set    zm=%ss:~0,1%>nul 2>nul
set /a vr2=zc1%zm%-1>nul 2>nul
set /a vr1=zc1%zm%+1>nul 2>nul
set vr2=!zc2%vr2%!>nul 2>nul
set vr1=!zc2%vr1%!>nul 2>nul
if %sos% GTR 30   call:jszd
if %sos% GTR 30   call:jszd
goto :eof

::自动追击拦截
:dn
if %sos% equ 1 set ts=h8&goto wan
set pds=%ts%
set fy1=%pds:~0,1%
set fy2=%pds:~1%
:wa1
set /a ag1=zc1%fy1%+%random%%%3-%random%%%3
set  ag2=!zc2%ag1%!
set /a fy=fy2+%random%%%3-%random%%%3
if "!we%ag2%%fy%!"=="*" (
set ts=%ag2%%fy%
if "%ndxz%"=="2" if %sos% GTR 50  call :dynq
  )else goto wa1

:wan
set %ts%=%1
set we%ts%=%2
set /a sos+=1
set bls=%ts%
call:txcx
goto :eof

:dynq
if not "!%vr2%%ss:~1,2%!"=="╋" if not "!%zm%%qzb%!"=="╋" if not "!%zm%%hzb%!"=="╋" set ts=%vr1%%ss:~1,2%
if not "!%vr1%%ss:~1,2%!"=="╋" if not "!%zm%%qzb%!"=="╋" if not "!%zm%%hzb%!"=="╋" set ts=%vr2%%ss:~1,2%
if not "!%zm%%qzb%!"=="╋" if not "!%vr2%%zbw%!"=="╋" if not "!%vr1%%zbw%!"=="╋" set ts=%zm%%hzb%
if not "!%zm%%hzb%!"=="╋" if not "!%vr2%%zbw%!"=="╋" if not "!%vr1%%zbw%!"=="╋" set ts=%zm%%qzb%
goto :eof
::x左坐标%zm%%qzb%  x右坐标%zm%%hzb%  y上坐标%vr2%%ss:~1,2%  y下坐标%vr1%%ss:~1,2%
::图形  !%zm%%qzb%!       !%zm%%hzb%!      !%vr2%%ss:~1,2%!       !%vr1%%ss:~1,2%!

::胜利判断
:jszd
if "%ss%"=="%zmq%%qzbq%" goto wjsl
if "%ss%"=="%zmq%%hzbq%" goto wjsl
if "%ss%"=="%vr2q%%ss1:~1,2%" goto wjsl
if "%ss%"=="%vr1q%%ss1:~1,2%" goto wjsl
goto :eof
:wjsl
@echo off
mshta vbscript:createobject("sapi.spvoice").speak("wo, sheng, li, la,")(window.close)
@echo off
msg  %username% /    第%sos%手,玩家胜利!记特等功一次。

增强版: 下载在第 14 楼。

完美版: 下载在第 16 楼。

人机对战游戏-跟踪追击 [天罗地网](自动进级完美版).bat  : 下载在第 19 楼。
[ Last edited by ZJHJ on 2009-2-8 at 19:23 ]
附件 1: 走迷宫-天罗地网.rar (2009-2-4 22:42, 1.83 K,下载次数: 26)

作者: moniuming     时间: 2009-2-2 01:04
不知道怎么玩儿...
作者: yishanju     时间: 2009-2-2 11:30
反正比五子棋难玩,胜不了居然
作者: ZJHJ     时间: 2009-2-4 22:45
增加了难度和胜利提示
作者: 523066680     时间: 2009-2-4 22:58
1 凭这个精神,该加分。
     2 那个。。。。。游戏规则贴下谢谢
作者: ZJHJ     时间: 2009-2-4 23:38
人机对战游戏  [ 天罗地网 ]

    游戏规则:从棋盘中任意点出发,依次到达相对的两个边框后(每步前后

  必须相连不跳步),再返回原地出发点就算胜利!(途中后有追兵前有堵截)

  玩家先自选出发方式,自选难度。
作者: BC     时间: 2009-2-4 23:52
标题啊...改改就完美了.

伟大的同学们,我们开发个军棋吧...
作者: ZJHJ     时间: 2009-2-5 10:52
标题我已经改了。
另外,在代码中需要学习的地方还有很多技巧,请知道的朋友帮助解答一下,谢谢了!
在 set /a ag1=zc1%fy1%+%random%%%3-%random%%%3  句中是 计算,
从数值的观点看,某数加一个数再减同一个数其值不变。但是我修改成这样
set /a ag1=zc1%fy1% 为什么就不行?? %random% 和 %%3 我还没有明白,
敬请帮助解答!特别是 英雄 ,我把你的代码改得面目全非,请不要怪罪我哦!!
我只是为了学习而也......
作者: HAT     时间: 2009-2-5 11:10    标题: Re 8楼



  Quote:
从数值的观点看,某数加一个数再减同一个数其值不变。

问题在于两个%random%的取值可能不同,请自行测试:
echo %random% %random%

作者: HAT     时间: 2009-2-5 11:12    标题: Re 8楼



  Quote:
%random% 和 %%3 我还没有明白

本版搜索“随机”、“random”,应该可以找到不少教程。
作者: ZJHJ     时间: 2009-2-5 11:49
谢谢HAT版主 解答 受教了!
终于明白了,是取指定数字以内的随机数.

[ Last edited by ZJHJ on 2009-2-5 at 12:40 ]
作者: wxcute     时间: 2009-2-5 20:29
有点围棋的思路了。
102手胜,居然还有声音,好玩。

          输入 cxks 重新开局
  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19
A ┏━┳━┳━┳━┳━○━┳━┳━●━┳━○━┳━┳━┳━┳━┳━┳━┳━┓
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
B ┣━╋━╋━╋━●━○━○━╋━●━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
C ┣━╋━╋━○━●━○━○━○━●━○━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
D ┣━╋━╋━●━●━●━●━●━●━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
E ┣━╋━╋━●━○━╋━╋━○━●━○━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
F ┣━╋━○━●━╋━╋━╋━╋━●━○━○━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
G ┣━╋━○━●━○━╋━╋━╋━●━●━●━●━○━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
H ┣━╋━╋━●━╋━╋━╋━╋━○━○━○━●━○━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
I ┣━○━╋━●━╋━╋━╋━╋━○━╋━○━●━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
J ┣━╋━╋━●━╋━╋━╋━╋━●━●━●━╋━○━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
K ┣━○━○━●━╋━○━╋━●━●━○━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
L ┣━○━●━●━○━╋━●━●━○━○━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
M ┣━╋━●━○━╋━●━●━○━○━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
N ┣━○━●━○━╋━●━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
O ┣━○━●━○━○━●━○━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
P ○━╋━●━○━●━●━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
Q ┣━╋━●━●━●━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
R ○━╋━●━●━○━╋━○━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━╋━┫
 ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
S ┗━○━○━●━┻━┻━○━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┻━┛
  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19


[ Last edited by wxcute on 2009-2-5 at 20:45 ]
作者: ZJHJ     时间: 2009-2-5 21:29
你的不算胜吧?每步前后必须相连不跳步哦,A边,S边没有返回的子,J12不相连,D6、D7、D8是跳步走出来的吧?
作者: ZJHJ     时间: 2009-2-5 22:00
增强版:增加了起点坐标提示和玩家失败提示。
附件 1: 人机对战游戏[天罗地网](增强版).rar (2009-2-5 22:00, 1.97 K,下载次数: 8)

作者: wxcute     时间: 2009-2-5 23:11
可是判我胜了 o(∩_∩)o 算是利用 BUG。

有几问:如果被拦到左边,虽然已经上下两头都冲到了,可是左边路已死,必须到右边才有可能回到原位置边上。这样要跳过自己的子,算不算呢?如果不算,能不能直接判断并给出提示说 “已经没有机会了” 呢?
作者: ZJHJ     时间: 2009-2-6 11:21
凡是跳过棋子的不算胜。
完美版不会出现跳过棋子了。修改了程序,不让跳了。冲到边时有可能会自动吃掉你的子,这可能给你带来好机会。

完美版下载:
附件 1: 人机对战游戏[天罗地网](完美版).rar (2009-2-7 10:39, 2.63 K,下载次数: 6)

作者: ZJHJ     时间: 2009-2-6 16:13
为了让游戏更进一步智能化,也是为了提高自己,设想增加胜利判断必须检查是否达到过对边。
作者: ZJHJ     时间: 2009-2-7 10:51
在第 16 楼上传的(完美版)中已经增加了完美的判断,是否曾经达到过两个边才判胜利。并从程序上限制了跳步。修正了A边小写为A.

[ Last edited by ZJHJ on 2009-2-7 at 10:56 ]
作者: ZJHJ     时间: 2009-2-8 19:18    标题: 人机对战游戏-跟踪追击 [天罗地网](自动进级完美版).bat

人机对战游戏---跟踪追击 [ 天罗地网 ]

    本游戏具有全智能判断,起点坐标提示、可行坐标判断提示、输入错误判断提

示、胜负判断提示、玩家作蔽判断处罚等。

   游戏规则:从棋盘中任意点出发,依次到达相对的两个边框后(每步前后相连不

跳步),再返回原地出发点就判胜利!途中后有追兵前有拦截,无路可走时判失败。

    玩家选择先出发或后出发。难度分为四关,难度1关有地雷、难度2关有伏击、

难度3关有伏击加地雷。过关后依次自动进级,过第四关就封为神先了。
(地雷--就是有看不见的棋子。伏击--有可能被自动包围。有看不见的棋子会被误入包围)

下载:

[ Last edited by ZJHJ on 2009-2-8 at 22:50 ]
附件 1: 人机对战游戏[天罗地网](自动进级完美版).rar (2009-2-8 22:51, 2.89 K,下载次数: 12)

作者: ZJHJ     时间: 2009-2-11 12:31
自己顶一下,谁说能玩过第四关?把图截来看看。
作者: netbenton     时间: 2009-2-11 12:48
运行时感觉显示太慢,建义把输显示出先写到一个变量ec或每行一个变量ec%%n(25行),
cls 后马上
echo !ec!
for /l %%n in (1,1,25) do echo !ec%%n!