中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-20 23:30
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]五子棋人机对战批处理游戏 查看 13,552 回复 73
31 发表于 2009-05-12 08:42 ·  中国 广东 广州 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
19年会员
UID 74552
性别 男
状态 离线
先写简单的把骨架支起来,慢慢再复杂化,嘿嘿
49206C6F766520796F752067757973 54656C3A3133383238343036373837
32 发表于 2009-05-12 13:57 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
增加了几行代码,却提速不少,

看来还是有可能进一步提高电脑的棋艺,
并引进五子棋的禁手及其它规则,


@echo off&setlocal enabledelayedexpansion
mode con: lines=43 cols=110
set li39= A B C D E F G H I J K L M N O P Q R S
set li0= ┌─────────────────────────────────────┐
set li1=A│┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐│A
set var=1
for %%a in (!li39:~5^,-1!) do (set/a var+=2&set li!var!=%%a│├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤│%%a)
for /l %%a in (2,2,36) do (set li%%a= ││ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││)
set li37=S│└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘│S
set li38= └─────────────────────────────────────┘
set str=a b c d e f g h i j k l m n o p q r s
for %%a in (%str%) do (set/a .+=1,%%a=.&set z!.!=%%a)

set li5=!li5! 五 棋 子 人 机 对 战
set li7=!li7! 批 处 理
set li10=!li10! 电 脑 水 平 中 等
set li31=!li31! 由 netbenton 编写完成
set li33=!li33! 棋盘设计参照了 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




























:
if /i "!var!" equ "Q" goto :eof

if /i "!var!" equ "D" (set onez=○&set towz=●&set hou=☆) else (set onez=●&set towz=○&set hou=★)
set a!onez!=电脑&set a!towz!=玩家
)
(
set ttr=!idea:@=%onez%!&set ttr=!ttr:$=%towz%!
set idea=
for %%a in (!ttr!) do (set var=%%a&set !var:~,-1!=!var:~-1!&set idea=!idea! !var:~,-1!)
set ttr=
set li27=!li27! !onez! !a%onez%!
set li25=!li25! !towz! !a%towz%!
set/a pos=10,poh=10&goto :getok
)

:loop
(if %zhi% equ %onez% goto :men
set .=
for %%a in (!idea!) do (
for %%b in (he sh) do (
set all=!%%b1!!%%b2!!%%b3!!%%b4!!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!
if "!all:%%a=!" neq "!all!" (
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 (
set all=!%%b5!!%%b6!!%%b7!!%%b8!!%%b9!!%%b10!!%%b11!!%%b12!!%%b13!!%%b14!!%%b15!!%%b16!!%%b17!!%%b18!!%%b19!!%%b20!!%%b21!!%%b22!!%%b23!!%%b24!!%%b25!!%%b26!!%%b27!!%%b28!!%%b29!!%%b30!!%%b31!!%%b32!!%%b33!
if "!all:%%a=!" neq "!all!" (
for /l %%c in (5,1,33) do (
if "!%%b%%c:%%a=!" neq "!%%b%%c!" set/a .+=1&set put!.!=%%b %%c
)
) )
if defined . set put=%%a&goto :get
))

echo. 已经和棋了
pause
endlocal&goto :restart

:men
(
set/a .=lips-1&for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%hou%!%%b:~%%c!)
set li38=!li38!
cls
for /l %%a in (0,1,39) do (echo !li%%a!)
for /f "tokens=1-3" %%b in ("li!liph! !lips! !.!") do (set %%b=!%%b:~0,%%d!%zhi%!%%b:~%%c!)
set li38=%li38%
set /p user=!say:say=%error%! :
if "!user!" equ "reboot" endlocal&goto :restart
if "!user!" equ "exit" exit
if "!user!" equ "back" call :悔&goto :men
set/a pos=!user:~0,1!,poh=!user:~1,2!,var=pos-1 2>nul
if not defined







































































[ Last edited by netbenton on 2009-5-14 at 00:31 ]
精简
=> 个人网志
33 发表于 2009-05-17 11:44 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
增强电脑方的智能了!
已经在 7 楼更新。
精简
=> 个人网志
34 发表于 2009-05-17 14:22 ·  中国 山西 忻州 联通
初级用户
★★
积分 87
发帖 63
注册 2008-08-23 11:28
17年会员
UID 123947
性别 男
状态 离线
太厉害了
35 发表于 2009-05-18 03:02 ·  中国 山东 淄博 联通
初级用户
积分 63
发帖 37
注册 2008-08-09 11:46
17年会员
UID 123026
性别 男
状态 离线
真的不可思议啊,很壮观,,崇拜你,你真是个好人。。。

[ Last edited by 516526966 on 2009-5-18 at 08:03 ]
附件
2009-05-18_185017.png
36 发表于 2009-05-18 13:07 ·  中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
我已经晕了,除了界面,对预算法完全白痴,想改为VBS基本落空...
37 发表于 2009-05-19 04:20 ·  中国 贵州 黔南布依族苗族自治州 电信
新手上路
积分 1
发帖 1
注册 2009-05-16 08:07
17年会员
UID 145240
性别 男
状态 离线
太强了 ~
38 发表于 2009-05-21 09:09 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
又进行更新了,完善了电脑方的IQ,并在多个可下点等效时进行随机取位,增加了可玩性,因此,该批处理不再仅仅是一件艺术品,还是一个实实在在的五子棋游戏了,
欢迎大家使用,并把你认为电脑下得”笨“的地方发上来,以便再度完善。

最后更新,请看7楼
精简
=> 个人网志
39 发表于 2009-05-22 23:31 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
20年会员
UID 44210
状态 离线
现在我想弄明白的两个算法:
1、电脑下位算法
2、5子结果的算法
40 批处理五子棋算法 发表于 2009-05-23 00:55 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
re 39L

数组定义:
1,显示缓存
2,横向(串长度为19)
3,竖向(串长度为19)
4,撇(斜向,串长度为5~19~5)
5,捺(斜向,串长度为5~19~5)

数组1,初始为空棋盘
数组2~5,初始全为#号的字符串

在有下子时,根据玩家输入或电脑取得的实际坐标,分别对5个数组中相应的位置进行替换为棋子(方法:!str:~,n!棋子!str:~n+1!)
替换后,马上匹配该串!str!是否含有五子相连,有即胜出了。

电脑怎样取位:
因为各个方向串是分别定义和替换更新的,所以只要拿各种规则串(即设置的IQ,如:#○○○#)同各个方向的数据串进行匹配,如果发现有则记录下来(在哪个数组,第几串),所有匹配完成后。则对记录下来的结果进行分析,转换为实际坐标。

(IQ规则串后的数字为该规则串的中可下点,算出规则串在方向串的位置,根据该点,即可算出方向串中的可下点,再根据是在哪个数组,即可算出在实际坐标中的可下点)

然后根据规则串给该坐标加权(初版时只求最先匹配到的可下点,没有的权计算),最后电脑取权值最大的坐标来下子。如果有权值相等的则随机取一个来下。
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
WANKOILZ +2 2009-07-29 03:01
精简
=> 个人网志
41 发表于 2009-05-25 11:39 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
五子棋批处理,带音乐播放和音乐文件,只有96K
一边听《春江花月夜》,一边下棋,享受啊!!

[ Last edited by netbenton on 2009-6-3 at 23:22 ]
附件
五子棋(音乐版).rar (20.18 KiB, 下载次数: 107)
精简
=> 个人网志
42 发表于 2009-06-02 12:01 ·  中国 广东 东莞 电信
银牌会员
★★★
批处理编程迷
积分 1,916
发帖 752
注册 2008-12-28 04:30
17年会员
UID 135147
性别 男
来自 广西
状态 离线
小更新:增强了一点点电脑棋艺。
(在7楼,41楼都已经更新)

看到网上有人贴出,玩家先下时,九手就赢了电脑,特此更改进。
精简
=> 个人网志
43 发表于 2009-06-02 22:53 ·  中国 江西 吉安 电信
初级用户
★★
积分 78
发帖 64
注册 2008-08-29 11:09
17年会员
UID 124464
性别 男
状态 离线
看了前辈的杰作,心里久久不能平静。我要学到什么时候才能达到前辈这样子的水平啊~
从今天起努力!努力!以前辈为目标
44 发表于 2009-06-03 02:34 ·  中国 河北 唐山 联通
初级用户
积分 29
发帖 17
注册 2009-06-02 06:03
17年会员
UID 146516
性别 男
状态 离线
音乐不会停啊,批处理关了音乐还再继续。
45 发表于 2009-06-03 02:36 ·  中国 河北 唐山 联通
初级用户
积分 29
发帖 17
注册 2009-06-02 06:03
17年会员
UID 146516
性别 男
状态 离线
哦,只有在游戏中打 Q退出时音乐才会停止,

直接点出关闭按纽的话游戏虽然退出了,但音乐还在响,

不知是不是只有我这里这样。
论坛跳转: