Board logo

标题: [特效代码] [已解决]批处理 bat 怎样制作出OX棋,三子棋,井字棋, [打印本页]

作者: panda951    时间: 2015-3-10 20:31     标题: [已解决]批处理 bat 怎样制作出OX棋,三子棋,井字棋,

本帖最后由 panda951 于 2015-3-16 13:32 编辑

不要用if

只能用goto,set,set /p,echo,pause 这5个
作者: pcl_test    时间: 2015-3-10 23:54

本帖最后由 pcl_test 于 2015-3-13 14:58 编辑

回复 1# panda951
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo   1丨2 丨3
  4. echo  ─┼─┼─
  5. echo   4丨5 丨6
  6. echo  ─┼─┼─
  7. echo   7丨8 丨9
  8. echo 图中数字表示格子位置,输入相应数字即可在对应格子下子
  9. echo.
  10. set 1=.
  11. set 2=.
  12. set 3=.
  13. set 4=.
  14. set 5=.
  15. set 6=.
  16. set 7=.
  17. set 8=.
  18. set 9=.
  19. :main
  20. echo 玩家1 请输入格子位置[数字+回车] :
  21. set /p n=
  22. set !n!=O
  23. echo   !1!丨!2! 丨!3!
  24. echo  ─┼─┼─
  25. echo   !4!丨!5! 丨!6!   玩家1 O √
  26. echo  ─┼─┼─
  27. echo   !7!丨!8! 丨!9!   玩家2 X
  28. echo 玩家2 请输入格子位置[数字+回车] :
  29. set /p n=
  30. set !n!=X
  31. echo   !1!丨!2! 丨!3!
  32. echo  ─┼─┼─
  33. echo   !4!丨!5! 丨!6!   玩家1 O
  34. echo  ─┼─┼─
  35. echo   !7!丨!8! 丨!9!   玩家2 X √
  36. goto main
  37. pause
复制代码

作者: panda951    时间: 2015-3-12 16:28

回复 2# pcl_test


    谢谢 你的回答

如果不要显示他的框可以吗?只是要双方玩家输入名字 然后有1,2,3/4,5,6/7,8,9  等等一排就赢可以用这个代码实现吗?

能解释下这个代码什么意思吗?
set 1=.
set 2=.
set 3=.
set 4=.
set 5=.
set 6=.
set 7=.
set 8=.
set 9=.

我只学到set跟set /p     
没看过set 1=.

麻烦你了
作者: panda951    时间: 2015-3-12 16:38

回复 2# pcl_test


    能告诉我1-3/4-6/7-9就赢要怎样设置吗?
作者: panda951    时间: 2015-3-12 16:51

做这样的 可以用你给的代码做吗?
作者: panda951    时间: 2015-3-12 17:00

回复 2# pcl_test


    大哥最后一个问题了

要弄成那张图片那样大概是这样吗?
@echo off


echo insert player 1 name :
set /p A=
echo insert player 2 name :
set /p B=

:main
player 1 %A% move<1,2,3,4,5,6,7,8,9>
player 1 %A% move<>


goto main
goto p
:lose
echo lose
goto p
:win
echo win
goto p
:p
pause
作者: pcl_test    时间: 2015-3-12 21:18

本帖最后由 pcl_test 于 2015-3-12 22:25 编辑

回复 6# panda951
模拟图片代码,按图片的信息输入可实现同样效果,未实现判断功能,待续
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo insert player name 1 :
  4. set /p playerA=
  5. echo insert player name 2 :
  6. set /p playerB=
  7. echo begin
  8. set 1=1,
  9. set 2=2,
  10. set 3=3,
  11. set 4=4,
  12. set 5=5,
  13. set 6=6,
  14. set 7=7,
  15. set 8=8,
  16. set 9=9,
  17. set num=!1!!2!!3!!4!!5!!6!!7!!8!!9!
  18. set num=%num:~,-1%
  19. echo player 1 %playerA% move ^<%num%^>:
  20. set /p t=
  21. set %t%=
  22. set num=!1!!2!!3!!4!!5!!6!!7!!8!!9!
  23. set num=%num:~,-1%
  24. echo player 2 %playerB% move ^<%num%^>:
  25. set /p t=
  26. set %t%=
  27. set num=!1!!2!!3!!4!!5!!6!!7!!8!!9!
  28. set num=%num:~,-1%
  29. echo player 1 %playerA% move ^<%num%^>:
  30. set /p t=
  31. set %t%=
  32. set num=!1!!2!!3!!4!!5!!6!!7!!8!!9!
  33. set num=%num:~,-1%
  34. echo player 2 %playerB% move ^<%num%^>:
  35. set /p t=
  36. set %t%=
  37. set num=!1!!2!!3!!4!!5!!6!!7!!8!!9!
  38. set num=%num:~,-1%
  39. echo player 1 %playerA% move ^<%num%^>:
  40. set /p t=
  41. set %t%=
  42. echo player 1 %playerA% win
  43. pause
复制代码

作者: panda951    时间: 2015-3-12 22:14

回复 7# pcl_test


    如果要弄成player1/2 某一个先3排大概要怎样?其实这个已经可以了 不过想要好用一点的  XP

如果你不得空就不用把

差点忘记讲了---感谢你的帮忙XD
作者: panda951    时间: 2015-3-13 12:41

回复 7# pcl_test


    lol

还是不可以 他们讲要很像游戏那样
如-某一方先输入3条线就赢
这个不管输入什么都会player1 就赢的不能 可能我的表达方式不好。。。

以下是=完成的条件
1)        這遊戲至少有兩個玩家, 開始讓玩家輸入各自名字

2)        每一個玩家 一次只能選一個格子,不能重複, 例如 玩家1選了 6號,玩家2再選6號 程式就會直接結束
3)        玩家交替輸入號碼, 請提供選擇給玩家, 一直輸入到 當一方 選的號碼 3個支線鏈接成功 表示勝利。
4)        結果:   玩家1選 1,5,9  , 勝利  玩家2选1,5,9 胜利
作者: pcl_test    时间: 2015-3-13 12:45

回复 9# panda951
嗯,说了“只是模拟图片,未实现判断功能”,因为不用if基本实现不了
作者: panda951    时间: 2015-3-13 12:47

回复 10# pcl_test


    可是有人弄到没有用if就可以弄到 不过他不教
作者: panda951    时间: 2015-3-13 12:48

回复 10# pcl_test

他讲他用大部分goto跟set /p实现的。。。
作者: pcl_test    时间: 2015-3-14 01:33

回复 11# panda951
能力有限,帮顶一下,LZ也要自顶,不要沉了
作者: panda951    时间: 2015-3-14 14:40

顶啊。。。。。。
作者: panda951    时间: 2015-3-14 15:43

回复 13# pcl_test

大哥我想到一个办法不知道你觉得能不能实现

@echo off
setlocal enabledelayedexpansion
echo insert player name 1 :
set /p playerA=
echo insert player name 2 :
set /p playerB=

set 1=1,
set 2=2,
set 3=3,
set 4=4,
set 5=5,
set 6=6,
set 7=7,
set 8=8,
set 9=9,

:begin
set num=!1!!2!!3!!4!!5!!6!!7!!8!!9!
set num=%num:~,-1%
echo player 1 %playerA% move ^<%num%^>:
set /p t=
set %t%=
goto begin2
:begin2
set num=!1!!2!!3!!4!!5!!6!!7!!8!!9!
set num=%num:~,-1%
echo player 2 %playerB% move ^<%num%^>:
set /p t=
set %t%=
goto begin
:win1
echo player 1 %playerA% win
goto p
:win2
echo player 2 %playerB% win
goto p
:p
pause

缺的是我不知道要怎样设置输入了某3个数字就能到达那个位置的方法。。。。。。。
作者: pcl_test    时间: 2015-3-14 15:50

本帖最后由 pcl_test 于 2015-3-14 15:59 编辑

回复 15# panda951
没有跳转条件,所以只能在两个begin标签里循环,没有if“臣妾做不到呀”
作者: panda951    时间: 2015-3-14 18:16

回复 16# pcl_test


    我看我等死了 lol
作者: pcl_test    时间: 2015-3-14 22:23

回复 17# panda951
LZ自顶,不要沉了
作者: CrLf    时间: 2015-3-14 22:30

回复 16# pcl_test


    他说的大概是 goto %input% 吧,可以是可以,不过这么写太脆弱了
作者: pcl_test    时间: 2015-3-14 22:36

回复 19# CrLf
这个我没有思路呀
作者: panda951    时间: 2015-3-14 23:11

回复 19# CrLf


   大哥大概是这样吗?(他的设置)
SET /P link=
goto %link%
:1
set num=!1!!2!!3!!4!!5!!6!!7!!8!!9!
set num=%num:~,-1%
echo player 1 %playerA% move ^<%num%^>:
set /p t=
set %t%=

又错真的没办法了。。。。
爬了无数的文都找不到一个没用if的。。。
连goto/set的用法也找了很多还是想不出一个办法。。。(泪奔
作者: panda951    时间: 2015-3-14 23:12

回复 20# pcl_test


  话说大哥你是怎样学.bat的用法的?
作者: panda951    时间: 2015-3-14 23:14

回复 20# pcl_test


都不知道这个世界是什么回事

比如你们只是单纯帮人都没什么目的的都可以帮反而我帮过的他会却不教我。。。。。
作者: pcl_test    时间: 2015-3-14 23:40

回复 23# panda951
呵呵,不是有句话是这么说的,当有困难的时候,最好向曾经帮助过你的人求助而不是你曾经帮助过的人
作者: panda951    时间: 2015-3-14 23:51

回复 24# pcl_test


没听过呢。。。
我只知道我看透他的本性了 要别人帮他  可是自己却不想要帮人的人

最搞笑的理由-我等下要出门等我回来给你那个代码

我就问他现在不能给? 结果-下线了。。。
靠 已经私聊他很多次都不回 明明就在线

(17号就要了 他昨天到现在完全无视我)
作者: bailong360    时间: 2015-3-15 09:53

本帖最后由 bailong360 于 2015-3-15 10:07 编辑
  1. @Echo Off 2>nul 3>nul
  2. Set /P Player1=请输入玩家1姓名:
  3. Set /P Player2=请输入玩家2姓名:
  4. :Start
  5. Set /A N+=1
  6. Set .%N%=
  7. >nul Set .9||Goto Start
  8. :Loop
  9. echo   %.1%丨%.2% 丨%.3%
  10. echo  ─┼─┼─
  11. echo   %.4%丨%.5% 丨%.6%
  12. echo  ─┼─┼─
  13. echo   %.7%丨%.8% 丨%.9%
  14. Set /P Turn=请玩家%Player1%落子:
  15. Set ..%Turn%&&Goto :Eof
  16. Set .%Turn%=O
  17. Set ..%Turn%=0
  18. Set "_%.1%%.2%%.3%=0"
  19. Set "_%.4%%.5%%.6%=0"
  20. Set "_%.7%%.8%%.9%=0"
  21. Set "_%.1%%.4%%.7%=0"
  22. Set "_%.2%%.5%%.8%=0"
  23. Set "_%.3%%.6%%.9%=0"
  24. Set "_%.1%%.5%%.9%=0"
  25. Set "_%.3%%.5%%.7%=0"
  26. >nul Set _OOO&&(Echo 玩家%Player1%胜利&Pause&Goto :Eof)
  27. Set /P Turn=请玩家%Player2%落子:
  28. Set ..%Turn%&&Goto :Eof
  29. Set .%Turn%=X
  30. Set ..%Turn%=0
  31. Set "_%.1%%.2%%.3%=0"
  32. Set "_%.4%%.5%%.6%=0"
  33. Set "_%.7%%.8%%.9%=0"
  34. Set "_%.1%%.4%%.7%=0"
  35. Set "_%.2%%.5%%.8%=0"
  36. Set "_%.3%%.6%%.9%=0"
  37. Set "_%.1%%.5%%.9%=0"
  38. Set "_%.3%%.5%%.7%=0"
  39. >nul Set _XXX&&(Echo 玩家%Player2%胜利&Pause&Goto :Eof)
  40. Goto Loop
复制代码
符合要求否?
作者: pcl_test    时间: 2015-3-15 11:12

小改了下游戏体验
  1. @Echo Off 2>nul 3>nul
  2. echo   1丨2 丨3
  3. echo  ─┼─┼─
  4. echo   4丨5 丨6
  5. echo  ─┼─┼─
  6. echo   7丨8 丨9
  7. echo 说明:图中数字表示格子位置,输入相应数字即可在对应格子下子
  8. echo.
  9. Set /P Player1=请输入玩家1姓名:
  10. Set /P Player2=请输入玩家2姓名:
  11. echo.
  12. echo ^>^>^>^>游戏开始^<^<^<^<
  13. echo.
  14. :Start
  15. Set /A N+=1
  16. Set .%N%=
  17. >nul Set .9||Goto Start
  18. :Loop
  19. Set /P Turn=请玩家1 ^<%Player1%^> 落子:
  20. Set ..%Turn%&&Goto :Eof
  21. Set .%Turn%=O
  22. Set ..%Turn%=0
  23. Set "_%.1%%.2%%.3%=0"
  24. Set "_%.4%%.5%%.6%=0"
  25. Set "_%.7%%.8%%.9%=0"
  26. Set "_%.1%%.4%%.7%=0"
  27. Set "_%.2%%.5%%.8%=0"
  28. Set "_%.3%%.6%%.9%=0"
  29. Set "_%.1%%.5%%.9%=0"
  30. Set "_%.3%%.5%%.7%=0"
  31. echo   %.1%丨%.2% 丨%.3%
  32. echo  ─┼─┼─
  33. echo   %.4%丨%.5% 丨%.6%  玩家1 O √
  34. echo  ─┼─┼─
  35. echo   %.7%丨%.8% 丨%.9%  玩家2 X
  36. echo.
  37. >nul Set _OOO&&(Echo 玩家1 ^<%Player1%^> 胜利&Pause&Goto :Eof)
  38. Set /P Turn=请玩家2 ^<%Player2%^> 落子:
  39. Set ..%Turn%&&Goto :Eof
  40. Set .%Turn%=X
  41. Set ..%Turn%=0
  42. Set "_%.1%%.2%%.3%=0"
  43. Set "_%.4%%.5%%.6%=0"
  44. Set "_%.7%%.8%%.9%=0"
  45. Set "_%.1%%.4%%.7%=0"
  46. Set "_%.2%%.5%%.8%=0"
  47. Set "_%.3%%.6%%.9%=0"
  48. Set "_%.1%%.5%%.9%=0"
  49. Set "_%.3%%.5%%.7%=0"
  50. echo   %.1%丨%.2% 丨%.3%
  51. echo  ─┼─┼─
  52. echo   %.4%丨%.5% 丨%.6%  玩家1 O
  53. echo  ─┼─┼─
  54. echo   %.7%丨%.8% 丨%.9%  玩家2 X √
  55. echo.
  56. >nul Set _XXX&&(Echo 玩家2 ^<%Player2%^> 胜利&Pause&Goto :Eof)
  57. Goto Loop
复制代码

作者: pcl_test    时间: 2015-3-15 11:16

回复 25# panda951
LZ不放弃,顶起来就会有惊喜 ↖(^ω^)↗
作者: panda951    时间: 2015-3-15 17:44

回复 26# bailong360


  不要他的框只是要他的内容...
以下是图
我试试看了怎么改不到....有错吗?
  1. @Echo Off 2>nul 3>nul
  2. setlocal enabledelayedexpansion
  3. echo.
  4. Set /P Player1=请输入玩家1姓名:
  5. Set /P Player2=请输入玩家2姓名:
  6. echo.
  7. :Start
  8. Set /A N+=1
  9. Set .%N%=
  10. >nul Set .9||Goto Start
  11. :Loop
  12. Set /P Turn=请玩家1 ^<%Player1%^> 落子:
  13. Set ..%Turn%&&Goto :Eof
  14. Set .%Turn%=O
  15. Set ..%Turn%=0
  16. Set "_%.1%%.2%%.3%=0"
  17. Set "_%.4%%.5%%.6%=0"
  18. Set "_%.7%%.8%%.9%=0"
  19. Set "_%.1%%.4%%.7%=0"
  20. Set "_%.2%%.5%%.8%=0"
  21. Set "_%.3%%.6%%.9%=0"
  22. Set "_%.1%%.5%%.9%=0"
  23. Set "_%.3%%.5%%.7%=0"
  24. :begin
  25. set num=!1!!2!!3!!4!!5!!6!!7!!8!!9!
  26. set num=%num:~,-1%
  27. echo player 1 %playerA% move ^<%num%^>:
  28. set /p t=
  29. set %t%=
  30. goto begin2
  31. goto p
  32. echo.
  33. >nul Set _OOO&&(Echo 玩家1 ^<%Player1%^> 胜利&Pause&Goto :Eof)
  34. Set /P Turn=请玩家2 ^<%Player2%^> 落子:
  35. Set ..%Turn%&&Goto :Eof
  36. Set .%Turn%=X
  37. Set ..%Turn%=0
  38. Set "_%.1%%.2%%.3%=0"
  39. Set "_%.4%%.5%%.6%=0"
  40. Set "_%.7%%.8%%.9%=0"
  41. Set "_%.1%%.4%%.7%=0"
  42. Set "_%.2%%.5%%.8%=0"
  43. Set "_%.3%%.6%%.9%=0"
  44. Set "_%.1%%.5%%.9%=0"
  45. Set "_%.3%%.5%%.7%=0"
  46. :begin2
  47. set num=!1!!2!!3!!4!!5!!6!!7!!8!!9!
  48. set num=%num:~,-1%
  49. echo player 2 %playerB% move ^<%num%^>:
  50. set /p t=
  51. set %t%=
  52. goto begin
  53. goto p
  54. >nul Set _XXX&&(Echo 玩家2 ^<%Player2%^> 胜利&Pause&Goto :Eof)
  55. Goto Loop
  56. :p
  57. pause
复制代码

作者: panda951    时间: 2015-3-15 17:45

回复 28# pcl_test


    是啊

做完工回来就看到又有好心人帮忙  挺惊喜的 XD
作者: pcl_test    时间: 2015-3-15 19:20

本帖最后由 pcl_test 于 2015-3-15 19:47 编辑

回复 30# panda951
按你图的样式改了(说真的游戏体验没带格子的直观),记得给bailong360评分哟,多亏了他的思路
  1. @Echo Off 2>nul 3>nul
  2. setlocal enabledelayedexpansion
  3. echo insert player name 1 :
  4. Set /P Player1=
  5. echo insert player name 1 :
  6. Set /P Player2=
  7. :Start
  8. Set /A N+=1
  9. Set .%N%=
  10. >nul Set .9||Goto Start
  11. :RT
  12. Set /a T+=1
  13. Set #%T%=%T%,
  14. >nul Set #9||Goto RT
  15. echo begin
  16. :Loop
  17. set num=!#1!!#2!!#3!!#4!!#5!!#6!!#7!!#8!!#9!
  18. set num=%num:~,-1%
  19. echo player 1 %player1% move ^<%num%^>:
  20. Set /P Turn=
  21. Set ..%Turn%&&Goto :Eof
  22. set #%Turn%=
  23. Set .%Turn%=O
  24. Set ..%Turn%=0
  25. Set "_%.1%%.2%%.3%=0"
  26. Set "_%.4%%.5%%.6%=0"
  27. Set "_%.7%%.8%%.9%=0"
  28. Set "_%.1%%.4%%.7%=0"
  29. Set "_%.2%%.5%%.8%=0"
  30. Set "_%.3%%.6%%.9%=0"
  31. Set "_%.1%%.5%%.9%=0"
  32. Set "_%.3%%.5%%.7%=0"
  33. >nul Set _OOO&&(echo player 1 %player1% win&Pause&Goto :Eof)
  34. set num=!#1!!#2!!#3!!#4!!#5!!#6!!#7!!#8!!#9!
  35. set num=%num:~,-1%
  36. echo player 2 %player2% move ^<%num%^>:
  37. Set /P Turn=
  38. Set ..%Turn%&&Goto :Eof
  39. set #%Turn%=
  40. Set .%Turn%=X
  41. Set ..%Turn%=0
  42. Set "_%.1%%.2%%.3%=0"
  43. Set "_%.4%%.5%%.6%=0"
  44. Set "_%.7%%.8%%.9%=0"
  45. Set "_%.1%%.4%%.7%=0"
  46. Set "_%.2%%.5%%.8%=0"
  47. Set "_%.3%%.6%%.9%=0"
  48. Set "_%.1%%.5%%.9%=0"
  49. Set "_%.3%%.5%%.7%=0"
  50. >nul Set _XXX&&(echo player 2 %player2% win&Pause&Goto :Eof)
  51. Goto Loop
复制代码

作者: bailong360    时间: 2015-3-15 19:50

回复 31# pcl_test


    也只是偶然间想到罢了
作者: panda951    时间: 2015-3-15 20:13

回复 31# pcl_test


    这个绝对是可以了 麻烦你们真的不好意思。。。。
话说回来 你们觉得这个问题大概是给初学者学的吗。。。。
作者: pcl_test    时间: 2015-3-15 20:17

回复 33# panda951
嗯,以使用的命令确实是初学者常用的,就思路而言,那是要对批处理比较熟悉才容易想到
作者: pcl_test    时间: 2015-3-15 20:21

回复 33# panda951
此帖也该结了,记得在标题标上[已解决]哟
作者: bailong360    时间: 2015-3-15 20:24

回复 33# panda951


    观点与pcl_test兄基本一致
个人认为若是不限制命令的使用倒是像一个为初学者准备的题目
作者: panda951    时间: 2015-3-15 20:25

回复 34# pcl_test


    他的思路setlocal enabledelayedexpansion
>nul
#
!
|
_
%%
-1%
我都没学过的....
老师只留下一句不会就去google找找看 不会才来问我 1个礼拜后交
我只想讲我问你了你不回我的....要我怎样问你
附上我与老师的对话....
我被他无视了....
可能问题太多他懒的回答瓜....
作者: pcl_test    时间: 2015-3-15 20:36

本帖最后由 pcl_test 于 2015-3-15 20:53 编辑

回复 37# panda951
setlocal enabledelayedexpansion是开启变量延迟
>nul 2>nul 3>nul是用来屏蔽一些不必要的信息
#、_ 在这里只是普通符号
%ver%是变量的表示形式之一,!ver!是开启变量延迟之后的变量的表示形式
||是管道命令,就是||左边的命令要是执行失败或是没有执行那么就执行||右边的命令

话说你现在上的什么学?怎么要学批处理呢?应该改都是教VB或C什么的
作者: panda951    时间: 2015-3-15 20:47

回复 35# pcl_test


    ok 现在改
作者: panda951    时间: 2015-3-15 20:54

回复 38# pcl_test


叫电脑技术支援课程-CCSS

CCSS电脑技术支援专业课程着重于实际操作能力。此课程经特别设计,帮助学生掌握电脑系统技术支援等主要知识与技能。学生将学习:

维护相关器材及系统
各类电脑操作系统技术
安装、设置及维护电脑硬体及软件
规划和建设电脑系统
业界标准维修程序
就业前景
相关职业包括系统技术员、资讯科技支援技术员、电脑技术员、资讯科技客服人员、资讯科技执行员或督导员等.

lol 被骗去读了 读了7个多月学到????
作者: panda951    时间: 2015-3-15 20:56

回复 38# pcl_test

Html学了1个月左右
    C我是自学一点点 刚刚学不久
VB还没开始学
作者: pcl_test    时间: 2015-3-15 20:58

回复 40# panda951
哦,是这个的话,批处理还是要掌握的,此外可以自学powershell,那你是职高或是中高技生?
作者: panda951    时间: 2015-3-15 21:23

回复 42# pcl_test


    你讲的那2个我不知道什么意思....回答不到
不过在马来西亚这边叫技职教育(专门教技术课程的)
作者: panda951    时间: 2015-3-15 21:24

回复 42# pcl_test


    等下就去找找powershell的入门 XD
作者: CrLf    时间: 2015-3-15 21:49

回复 44# panda951


    http://www.bathome.net/forum-46-1.html
作者: panda951    时间: 2015-3-16 06:59

回复 45# CrLf


等我今天放学回来就去学习下 等多20+分钟就要出门了




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2