中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
« [1] [2] »
作者:
标题: [讨论]游戏脚本的写法 上一主题 | 下一主题
zzybq
初级用户





积分 36
发帖 22
注册 2009-9-12
来自 厦门
状态 离线
『楼 主』:  [讨论]游戏脚本的写法

小弟想写一个游戏的脚本,不知道从那开始。请高手指点,应该从哪些方面入手,大体的步骤是什么?谢谢

2009-9-18 22:22
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
zzybq
初级用户





积分 36
发帖 22
注册 2009-9-12
来自 厦门
状态 离线
『第 2 楼』:  

自己顶一个,请高手指点一下

2009-9-18 23:05
查看资料  发送邮件  访问主页  发短消息 网志   编辑帖子  回复  引用回复
sl543001
中级用户




积分 499
发帖 225
注册 2008-12-30
状态 离线
『第 3 楼』:  

@ECHO OFF
COLOR F2
TITLE SYBN#
setlocal ENABLEDELAYEDEXPANSION
mode con cols=35 lines=10
SET M=●&SET N=○&SET K=·
: BEGAIN
SET WZ=22&SET XX=%M%&SET XZ=%M%&SET WIN=%K%&SET XZ2=%N%&set sl=0
for /l %%a in (-20,1,59) do (
   SET K%%a=%K%
)
: xz
if %sl% gtr 8 set WIN=没有人&goto win
CALL :XX
IF %XZ% == %M% (
CALL :LZ
) ELSE (
CALL :LZ
)
CALL :YZ
IF %P% == ERR GOTO XZ
SET XZ3=%XZ%
SET XZ=%XZ2%
SET XZ2=%XZ3%
IF NOT %WIN% == %K% GOTO WIN
GOTO XZ
: WIN
CLS
call :XX
ECHO %win%胜利!
PAUSE
GOTO BEGAIN
:LZ
SET /P P=%XZ%:
IF "%P%" == "" SET LZ=22
for /l %%a in (1,1,3) do (
   for /l %%b in (1,1,3) do (
      if %p% == %%a%%b SET LZ=%P%&set wz=%p%&goto :eof
   )
)
if "%p%" == "cmd" %p%
if %p% == "0" GOTO BEGAIN
if %p% == 1 SET LZ=31&set wz=31&goto :eof
if %p% == 2 SET LZ=32&set wz=32&goto :eof
if %p% == 3 SET LZ=33&set wz=33&goto :eof
if %p% == 4 SET LZ=21&set wz=21&goto :eof
if %p% == 5 SET LZ=22&set wz=22&goto :eof
if %p% == 6 SET LZ=23&set wz=23&goto :eof
if %p% == 7 SET LZ=11&set wz=11&goto :eof
if %p% == 8 SET LZ=12&set wz=12&goto :eof
if %p% == 9 SET LZ=13&set wz=13&goto :eof
set lz=22
GOTO :EOF
:YZ
SET P=0
set q=!K%LZ%!
IF NOT %q% == %K% SET P=ERR&GOTO :EOF
set /a sl=sl+1
SET K%LZ%=%XZ%
call :yz2 1
call :yz2 9
call :yz2 10
call :yz2 11
goto :eof
:yz2
set o=%1
SET /A P1=LZ-2*o&SET /A P2=LZ-1*o&SET /A P3=LZ&SET /A P4=LZ+1*o&SET /A P5=LZ+2*o
set q=!K%p1%!!K%p2%!!K%p3%!
if %q% == %xz%%xz%%xz% SET WIN=%XZ%&&GOTO :EOF
set q=!K%p2%!!K%p3%!!K%p4%!
if %q% == %xz%%xz%%xz% SET WIN=%XZ%&&GOTO :EOF
set q=!K%p3%!!K%p4%!!K%p5%!
if %q% == %xz%%xz%%xz% SET WIN=%XZ%&&GOTO :EOF
GOTO :EOF
:XX
for /l %%a in (1,1,3) do (
   for /l %%b in (1,1,4) do (
      set H%%b%%a=─
      set S%%a%%b=│
   )
)
for /l %%a in (1,1,3) do (
   for /l %%b in (1,1,3) do (
      set /a a=%%a+1&set /a b=%%b+1
      IF %WZ% == %%a%%b SET H%%a%%b=━&SET H!a!%%b=━&SET S%%a%%b=┃&SET S%%a!b!=┃
   )
)
CLS
ECHO ┌%H11%┬%H12%┬%H13%┐ 可以直接输入坐标
ECHO %S11%%K11%%S12%%K12%%S13%%K13%%S14% 左上为11,右下为33
ECHO ├%H21%┼%H22%┼%H23%┤ 也可以按照小键盘的
ECHO %S21%%K21%%S22%%K22%%S23%%K23%%S24% 数字排列顺序控制
ECHO ├%H31%┼%H32%┼%H33%┤ 输入0从新开局
ECHO %S31%%K31%%S32%%K32%%S33%%K33%%S34% 输入无效则从新输入
ECHO └%H41%┴%H42%┴%H43%┘   QQ:354324773
GOTO :EOF

   此帖被 +13 点积分     点击查看详情   
评分人:【 523066680 分数: +9  时间:2009-10-1 09:36
评分人:【 kirov 分数: +4  时间:2009-10-1 14:13


2009-9-30 20:37
查看资料  发送邮件  发短消息 网志  OICQ (354324773)  编辑帖子  回复  引用回复
kirov
版主

Pfc.YangZJ


积分 412
发帖 223
注册 2008-12-31
来自 上海杨浦
状态 离线
『第 4 楼』:  

这个貌似是批处理室的范畴吧?



以牙还牙,加倍奉还。

----BH4EAW 杨志杰

Blog:我的blog
2009-9-30 22:22
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (837806894)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 5 楼』:  

3楼的玩起来可以窝~
大改的话可以缩的



综合型编程论坛

我的作品索引
  
2009-10-1 09:41
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 6 楼』:  

本来看了这个帖想做一个跑车越过障碍游戏的
只做了一部分,看到屏幕一直闪,我就没什么兴趣了
@echo off  
if "%1"=="go" (goto :input) else (start %~s0 go)
mode con cols=20 lines=15
title running~ &setlocal enabledelayedexpansion
for /l %%a in (1,1,12) do (set way%%a=##        ##)
for /l %%a in (1,3,12) do (set way%%a=!way%%a:#= !)
set wayb1=%way2%
set wayb2=%way1%
set wayb3=%way2%
set "che7=oiio"
set "che8= ## "
set "che9=O##O"

set /a fa=13
:la
set /a fb=fa-1,act=0
for /l %%a in (%fa%,1,12) do (set /a act+=1 &set ln!act!=!way%%a!)
for /l %%b in (1,1,%fb%) do (set /a act+=1 &set ln!act!=!way%%b!)
::
for %%a in (7,8,9) do (set ln%%a=!ln%%a:~0,4!!che%%a!!ln%%a:~8!)
ping -n 1 127.1>nul
cls
for /l %%a in (1,1,12) do (echo, ║!ln%%a!║)
if %fa% gtr 1 (set /a fa-=1) else (set /a fa=12)
set /a cut=fa,new=cut%%3+1
set way%cut%=!wayb%new%!
goto :la



:input
mode con cols=20 lines=3
set /p inp="输入:"
[ Last edited by 523066680 on 2009-10-1 at 09:47 ]



综合型编程论坛

我的作品索引
  
2009-10-1 09:43
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
sl543001
中级用户




积分 499
发帖 225
注册 2008-12-30
状态 离线
『第 7 楼』:  

俺发的井字游戏没有AI
不是俺没有写,而是还在写,目前的AI就是按自己的水平,正在研究更好的AI算法!

2009-10-1 09:57
查看资料  发送邮件  发短消息 网志  OICQ (354324773)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 8 楼』:  

额额 额额……
偶很难想像 井字的,一般做到绝就是双方平手了
除非本机先下,我记得是有个两条路的路线,先占了那个点就可以了。

但是做到绝的话就是平手了。so……

[ Last edited by 523066680 on 2009-10-1 at 10:03 ]



综合型编程论坛

我的作品索引
  
2009-10-1 09:58
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
sl543001
中级用户




积分 499
发帖 225
注册 2008-12-30
状态 离线
『第 9 楼』:  

我是利用穷举法,那两条路,以及所有夹角线全部考虑进去了!
现在研究的是让脚本像算象棋一样,计算所有可能后输出结果,貌似有点复杂!
===========================================
关于赛车:由于脚本运算速度低下,必须想办法提高
可以考虑输出txt文本然后TYPE,但估计效果不太好
还可以吧n行输出的内容存放到同一个变量里,一次性echo(利用行尾添加^符号给变量赋值多行文本)
最后,最好的建议是把画面倒过来,也就是车从上向下开,这样每次只要输出一行,但要把游戏里的车尽量放到title中

2009-10-1 10:11
查看资料  发送邮件  发短消息 网志  OICQ (354324773)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 10 楼』:  

想仔细哦,路可以这样,但是车子本身的位置……
而且最终目的是为了车子可移动,刷屏是必然了,刷屏不好,不做了。



综合型编程论坛

我的作品索引
  
2009-10-1 10:44
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
sl543001
中级用户




积分 499
发帖 225
注册 2008-12-30
状态 离线
『第 11 楼』:  

吧cmd窗口调小试试,比如20*20字节,窗口小刷屏应该会快点

2009-10-1 11:44
查看资料  发送邮件  发短消息 网志  OICQ (354324773)  编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 12 楼』:  

不要用cls,而是想办法重新把光标回到1.1后,直接echo !buff!,其中buff为整个屏幕
可以解决“闪”的问题,参考:http://www.cn-dos.net/forum/viewthread.php?tid=48603&fpage=2

[ Last edited by netbenton on 2009-10-1 at 10:24 ]



精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-10-1 12:22
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 13 楼』:  



  Quote:
而是想办法重新把光标回到1.1后

哇你叫我们看整个1000字符大的数据……
非Cls怎么回到坐标1.1后,说下。

额 我看了一下你后面的说明,是不是 用 str储存了整个屏幕的信息
然后一个echo就可以了?

[ Last edited by 523066680 on 2009-10-1 at 15:20 ]



综合型编程论坛

我的作品索引
  
2009-10-1 15:18
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 14 楼』:  

以下为让光标回到1.1,并接受键盘输入给出返回码的debug代码测试

**使用此方法的缺点是,屏幕只能是80个字符宽。**
@goto :begin
e 100 cd 16 86 c4 b4 02 cd 10 b4 4C CD 21
g
:begin
@echo off
pushd "%~dp0"
chcp 437 >nul
graftabl 936 >nul
::在使用时,前面是必须的。

:loop
echo;
echo;请随意按键。。。
debug <"%~nx0">nul
echo 刚按键的返回码为:%errorlevel%   
goto :loop


   此帖被 +15 点积分         点击查看详情   
评分人:【 523066680 分数: +15  时间:2009-10-2 09:34




精简
[你的+我的+他的]=>[大家的]    个人网志   
2009-10-1 23:08
查看资料  发送邮件  发短消息 网志  OICQ (37659560)  编辑帖子  回复  引用回复
523066680
银牌会员

SuperCleaner


积分 2362
发帖 1133
注册 2008-2-2
状态 离线
『第 15 楼』:  

换句台词了:“哇!用的好爽!”



综合型编程论坛

我的作品索引
  
2009-10-2 09:34
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (523066680)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: