T3RRYT3RR0R

Connect 4 (golfed)

Oct 7th, 2020 (edited)
559
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 5.36 KB | None | 0 0
  1. @Echo off
  2. :Start
  3.  CHCP 65001 > nul & CLS & Mode 40,8
  4.  For /F %%a in ('echo prompt $E ^| cmd')do (Set "\E=%%a")
  5.  Set "?Won=(For /F "Tokens=1,2 Delims==" %%G in  ('Set W[ 2^> Nul') Do (For /F "Tokens=1,2,3,4 Delims=[]" %%w in ("%%H")Do (If "!%%w!!%%x!!%%y!!%%z!"=="$$$$" (<Nul Set /P "=%\E%[5;1H%\E%[90m123456%\E%[0m%\E%[%%wH!$:7=4!%\E%[%%xH!$:7=4!%\E%[%%yH!$:7=4!%\E%[%%zH!$:7=4!"&Echo/%\E%!!%\E%[K!$! Won& (If Not "!Mode!"=="A" (Pause > Nul )Else ( Timeout 4 1> Nul ))&Endlocal&Goto :Start)))) & (IF "!AvMoves!"=="" (Echo/%\E%!!%\E%[K%\E%[90mDraw.%\E%[90m& Timeout 5 > Nul &Endlocal &Goto :Start))"
  6.  Set "Move=(Echo/%\E%[7;1H%\E%[K!$! Move&For /F "Delims=" %%G in ('Choice /N /C:123456EN')Do If "%%G"=="N" (Endlocal & Goto :Start)Else if /I "%%G"=="E" (Endlocal & Exit /B 0)Else Call :Test %%G & For %%e in (!Errorlevel!)Do If "%%e"=="0" (Goto :$Move)Else (<Nul Set /P "=%\E%[%%e;%%GH!$!"&Set "%%e;%%G=$"&Set AvMoves=!AvMoves:"%%e;%%G" =!))"
  7.  Set "AiMove=Call :Brains $"
  8.  Set "Menu=(<Nul Set /P"=%\E%[?25l%\E%[5;1H%\E%[90m123456%\E%[0m%\E%[1;20H%\E%[K%\E%[COLmSelect mode%\E%[0m:%\E%[2;20H%\E%[K[%\E%[COLm1%\E%[0m] Player%\E%[3;20H%\E%[K[%\E%[COLm2%\E%[0m] Player%\E%[4;20H%\E%[K[%\E%[COLmA%\E%[0m] AI battle%\E%[5;20H%\E%[K[%\E%[36mN%\E%[0m] New%\E%[6;20H%\E%[K[%\E%[36mE%\E%[0m] Exit%\E%[0m%\E%[7;20H%\E%[K[%\E%[COLmV%\E%[0m] View Source code%\E%[7;1H%\E%[36m?%\E%[0m")"
  9.  Set "X=%\E%[32;7mx%\E%[0m"&Set "O=%\E%[31;7mo%\E%[0m"&Set "iX=O"&Set "iO=X"
  10.  Set AvMoves="4;1" "4;2" "4;3" "4;4" "4;5" "4;6" "3;1" "3;2" "3;3" "3;4" "3;5" "3;6" "2;1" "2;2" "2;3" "2;4" "2;5" "2;6" "1;1" "1;2" "1;3" "1;4" "1;5" "1;6" &Rem Trailing space required
  11.  Set "IfLine=For /F "Tokens=1,2 Delims==" %%G in  ('Set W[ 2^> Nul') Do (For /F "Tokens=1,2,3,4 Delims=[]" %%w in ("%%H")Do (If "!%%w!!%%x!!%%y!!%%z!"=="@" ("
  12.  Set "ONfind=Set "AvMoves=!AvMoves:"%%#;%%d" =!" & Exit /B 0"
  13.  Set "?Next= (Set /A "_y=%%~#-1,_x=%%~d"&For /L %%n in (0 1 23)Do For /F "Delims=" %%X in (' Echo/"!W[%%n]!" ^| Findstr 2^> Nul /LIC:"!_y!;!_x!" ')Do For /F "Tokens=1,2,3,4 Delims=[]" %%1 in ("!W[%%n]!")Do If "!%%~1!!%%~2!!%%~3!!%%~4!" == "!$o!!$o!!$o!" (Exit /B 1))"
  14.  Set "?AIw=If "!%%$V!"=="" (For /F "Tokens=2 Delims=;" %%d in ("%%$V")Do For /L %%# in (4 -1 1)Do (For /F "Delims=" %%i in ('Set /A "i=%%#+1"')Do if not "%%~i"=="5" (If not "!%%i;%%d!"=="" If "!%%#;%%d!"=="" (<Nul Set /P "=%\E%[%%#;%%dH!e$!"&Set "%%!!%%d=!$!" & %OnFind%))Else (If "!%%#;%%d!"=="" (<Nul Set /P "=%\E%[%%#;%%dH!e$!"&Set "%%!!%%d=!$!" & %OnFind%))))"
  15.  Set "?is=If "!%%$V!"=="" (For /F "Tokens=2 Delims=;" %%d in ("%%$V")Do For /L %%# in (4 -1 1)Do (For /F "Delims=" %%i in ('Set /A "i=%%#+1"')Do if not "%%~i"=="5" (If not "!%%i;%%d!"=="" If "!%%#;%%d!"=="" (%?Next%&<Nul Set /P "=%\E%[%%#;%%dH!e$!"&Set "%%!!%%d=!$!" & %OnFind%))Else (If "!%%#;%%d!"=="" (%?Next%&<Nul Set /P "=%\E%[%%#;%%dH!e$!"&Set "%%!!%%d=!$!" & %OnFind%))))"
  16.  Set "List_DEF=Set "#$L=0"&Set "$$L="&For %%n in (1 2)Do if %%n==2 (For %%G in (!$L!)Do (Set "%%~G" > Nul &Set /A "#$L+=1"))Else Set $L="
  17.  Setlocal EnableDelayedExpansion
  18.  %List_DEF:$L=WinLines% "W[0]=[1;1][1;2][1;3][1;4]" "W[1]=[1;2][1;3][1;4][1;5]" "W[2]=[1;3][1;4][1;5][1;6]" "W[3]=[2;1][2;2][2;3][2;4]" "W[4]=[2;2][2;3][2;4][2;5]" "W[5]=[2;3][2;4][2;5][2;6]" "W[6]=[3;1][3;2][3;3][3;4]" "W[7]=[3;2][3;3][3;4][3;5]" "W[8]=[3;3][3;4][3;5][3;6]" "W[9]=[4;1][4;2][4;3][4;4]" "W[10]=[4;2][4;3][4;4][4;5]" "W[11]=[4;3][4;4][4;5][4;6]" "W[12]=[1;1][2;1][3;1][4;1]" "W[13]=[1;2][2;2][3;2][4;2]" "W[14]=[1;3][2;3][3;3][4;3]" "W[15]=[1;4][2;4][3;4][4;4]" "W[16]=[1;5][2;5][3;5][4;5]" "W[17]=[1;6][2;6][3;6][4;6]" "W[18]=[4;1][3;2][2;3][1;4]" "W[19]=[4;2][3;3][2;4][1;5]" "W[20]=[4;3][3;4][2;5][1;6]" "W[21]=[4;6][3;5][2;4][1;3]" "W[22]=[4;5][3;4][2;3][1;2]" "W[23]=[1;1][2;2][3;3][4;4]"
  19.  (For %%G in (!AvMoves!)Do <Nul Set /P"=%\E%[%%~GH%\E%[34m◘%\E%[0m")
  20.  %Menu:COL=36%& Title Connect 4
  21.  (For /F "Delims=" %%G in ('Choice /T 10 /D A /N /C:NA21VE')Do If /I "%%G"=="N" (Endlocal & Goto :Start)Else If /I "%%G"=="E" (Endlocal & Exit /B 0)Else Set "Mode=%%G")
  22.  If "%Mode%"=="V" (notepad.exe "%~F0" & Endlocal & Echo/&Echo/Continue & Pause > Nul & Goto :Start)
  23.  %Menu:COL=90%
  24. :XMove
  25.  (If "%Mode%"=="A" (TITLE AI Battle & <Nul Set /P "=%\E%[5;20H%\E%[K[%\E%[90mN%\E%[0m] New%\E%[5;1H%\E%[90m123456%\E%[0m%\E%[6;20H%\E%[K[%\E%[90mE%\E%[0m] Exit"& %AIMove:$=X%)Else (<Nul Set /P "=%\E%[5;1H%\E%[32m123456%\E%[0m" & %Move:$=X%)) & %?won:$=X%
  26. :OMove
  27.  (If "%Mode%"=="2" (If Not "%Mode%"=="A" <Nul Set /P "=%\E%[5;1H%\E%[31m123456%\E%[0m" & %Move:$=O%) Else %AIMove:$=O%) & %?won:$=O%
  28. Goto :XMove
  29. :Test
  30.  For /L %%# in (4,-1,1)Do (Echo/"!AvMoves!"| %__AppDir__%findstr.exe /LIC:"%%#;%~1" > Nul 2> Nul && Exit /B %%#)
  31. Exit /B 0
  32. :Brains
  33.  Set "$=%1"& Set "e$=!%1!"& Set "$o=!i%1!"
  34.  Call :ForMove & If "!Errorlevel!"=="0" (Exit /B 0)
  35. :FindAIM
  36.  (Echo/%\E%[7;1H%\E%[K!%1! Move& For /F "Delims=" %%G in ('Set /A "i=!Random! %%6 + 1"')Do (Call :Test %%G & For %%e in (!Errorlevel!)Do If "%%e" == "0" (Goto :FindAIM)Else (<Nul Set /P "=%\E%[%%e;%%GH!%1!"&Set "%%e;%%G=%1"&Set "AvMoves=!AvMoves:"%%e;%%G" =!"&Exit /B 0)))
  37.  Exit /B 0
  38. :ForMove
  39. %IfLine:@=!$!!$!!$!% %?AIw:$V=w% Else %?AIw:$V=x% Else %?AIw:$V=y% Else %?AIw:$V=z%)))
  40. %IfLine:@=!$o!!$o!!$o!% %?is:$V=w% Else %?is:$V=x% Else %?is:$V=y% Else %?is:$V=z% )))
  41. %IfLine:@=!$o!!$o!%     %?is:$V=w% Else %?is:$V=x% Else %?is:$V=y% Else %?is:$V=z% )))
  42. %IfLine:@=!$!!$!%       %?is:$V=w% Else %?is:$V=x% Else %?is:$V=y% Else %?is:$V=z% )))
  43. Exit /B 1
Add Comment
Please, Sign In to add comment