|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Aleksey D. Tetyorko 2:5020/400 08 Nov 2002 12:57:21 To : Andrew Ezhguroff Subject : Re: Кpестики-нолики (bat) -------------------------------------------------------------------------------- Hi, All! А играть со всеми этими реализациями вы пробовали!? Ходят они всегда одинаково, и либо всегда проигрывают, либо сводят к ничьей простейшим способом - например, первый ход в центр. Кто с ними будет играть!? И какой в этом интерес... Вот одна из простейших реализаций, взял в инете: ======================ttt.bat================================:: Tic Tac Toe :: Bruce Howells 03/1998 from the Fidonet Batpower conference :: some cosmetic tweaks by Michael Marquart :: tested in MSdos V6.22 and Windows 98SE @echo off if (%1)==(!!!) goto start if (%1)==() %comspec% /e:1024 /c %0 !!! if (%1)==(!) set C%2=O if (%1)==(!) set S%2=O if (%1)==(!) set r=:: if (%1)==(!) goto Computer goto quit :: NOTE to clear environment, exit gracefully with Escape when permitted :start cls :Again set r=:: for %%x in (1 2 3 4 5 6 7 8 9) do set S%%x=%%x echo .[3;1H.[0;1;33;41m echo .[4;27Hздддддддддддддддддддддддддддь echo .[5;27HЁ .[36mNOUGHTS AND CROSSES .[33mЁ echo .[6;27HЁ Ё echo .[7;27HЁ Ё echo .[8;27HЁ .[33m1 .[37mЁ .[33m2 .[37mЁ .[33m3 .[33mЁ echo .[9;27HЁ .[37mдддедддеддд .[33mЁ echo .[10;27HЁ .[33m4 .[37mЁ .[33m5 .[37mЁ .[33m6 .[33mЁ echo .[11;27HЁ .[37mдддедддеддд .[33mЁ echo .[12;27HЁ .[33m7 .[37mЁ .[33m8 .[37mЁ .[33m9 .[33mЁ echo .[13;27HЁ Ё echo .[14;27HЁ Ё echo .[15;27Hюддддддддддддддддддддддддддды echo .[16;27HимммммммммммммммммммммммммммК echo .[17;27HР .[37mEsc quits .[33mР echo .[18;27HхмммммммммммммммммммммммммммШ.[37m echo .[17;29H.[36mYou first? CHOICE .[17;39H /CYN. /N echo .[17;40H .["a";"a"p if errorlevel 3 goto Quit if "%S1%"=="1" echo .[8;37H.[0;33;41m1 if "%S2%"=="2" echo .[8;41H.[0;33;41m2 if "%S3%"=="3" echo .[8;45H.[0;33;41m3 if "%S4%"=="4" echo .[10;37H.[0;33;41m4 if "%S5%"=="5" echo .[10;41H.[0;33;41m5 if "%S6%"=="6" echo .[10;45H.[0;33;41m6 if "%S7%"=="7" echo .[12;37H.[0;33;41m7 if "%S8%"=="8" echo .[12;41H.[0;33;41m8 if "%S9%"=="9" echo .[12;45H.[0;33;41m9 if errorlevel 2 set r= if errorlevel 2 goto Computer :Human set m=XXX :Computer :: vars used by computer's move for %%x in (b C H k) do set %%x= if "%S1%"=="X" echo .[8;37H.[1;37;41mX if "%S2%"=="X" echo .[8;41H.[1;37;41mX if "%S3%"=="X" echo .[8;45H.[1;37;41mX if "%S4%"=="X" echo .[10;37H.[1;37;41mX if "%S5%"=="X" echo .[10;41H.[1;37;41mX if "%S6%"=="X" echo .[10;45H.[1;37;41mX if "%S7%"=="X" echo .[12;37H.[1;37;41mX if "%S8%"=="X" echo .[12;41H.[1;37;41mX if "%S9%"=="X" echo .[12;45H.[1;37;41mX if "%S1%"=="O" echo .[8;37H.[1;37;41mO if "%S2%"=="O" echo .[8;41H.[1;37;41mO if "%S3%"=="O" echo .[8;45H.[1;37;41mO if "%S4%"=="O" echo .[10;37H.[1;37;41mO if "%S5%"=="O" echo .[10;41H.[1;37;41mO if "%S6%"=="O" echo .[10;45H.[1;37;41mO if "%S7%"=="O" echo .[12;37H.[1;37;41mO if "%S8%"=="O" echo .[12;41H.[1;37;41mO if "%S9%"=="O" echo .[12;45H.[1;37;41mO echo .[1;37;41m if (%S1%%S2%%S3%)==(%m%) goto Win if (%S4%%S5%%S6%)==(%m%) goto Win if (%S7%%S8%%S9%)==(%m%) goto Win if (%S1%%S4%%S7%)==(%m%) goto Win if (%S2%%S5%%S8%)==(%m%) goto Win if (%S3%%S6%%S9%)==(%m%) goto Win if (%S1%%S5%%S9%)==(%m%) goto Win if (%S3%%S5%%S7%)==(%m%) goto Win set i=%i%+ if (%i%)==(++++++++++) goto Draw if (%r%)==(::) set m=XXX if not (%r%)==(::) set m=OOO %r% echo .[17;29HMy move... %r% if (%S5%)==(5) %0 ! 5 %r% set k= :: Subroutine :sub %r% if not (%k%)==() set b=%b%%k% :: Test for 2 O's in line %r% if (%k%)==(@) if not (%C%)==(%t%) goto %b% :: Test for 2 (or nil) X's in line %r% if (%k%)==(#) if not (%H%)==(%t%) goto %b% %r% if not (%k%)==() for %%x in (%S%) do if not (%%x)==(X) if not (%%x)==(O) %0 ! %%x %r% if not (%k%)==() goto %b% :: Test for lines with 2 O's %r% set t=OO %r% set k=@ %r% set C=%C1%%C3%%C2% :ChkHmn %r% set b= %r% set H=%H1%%H3%%H2% %r% set S=%S1% %S3% %S2% %r% goto sub :@ %r% set C=%C4%%C5%%C6% :# %r% set H=%H4%%H5%%H6% %r% set S=%S4% %S5% %S6% %r% goto sub :@@ %r% set C=%C7%%C9%%C8% :## %r% set H=%H7%%H9%%H8% %r% set S=%S7% %S9% %S8% %r% goto sub :@@@ %r% set C=%C1%%C9%%C5% :### %r% set H=%H1%%H9%%H5% %r% set S=%S1% %S9% %S5% %r% goto sub :@@@@ %r% set C=%C3%%C5%%C7% :#### %r% set H=%H3%%H5%%H7% %r% set S=%S3% %S5% %S7% %r% goto sub :@@@@@ %r% set C=%C1%%C7%%C4% :##### %r% set H=%H1%%H7%%H4% %r% set S=%S1% %S7% %S4% %r% goto sub :@@@@@@ %r% set C=%C2%%C5%%C8% :###### %r% set H=%H2%%H5%%H8% %r% set S=%S2% %S5% %S8% %r% goto sub :@@@@@@@ %r% set C=%C3%%C9%%C6% :####### %r% set H=%H3%%H9%%H6% %r% set S=%S3% %S9% %S6% %r% goto sub :@@@@@@@@ :: Test for lines with 2 X's %r% if (%t%)==(OO) set H=!! %r% if (%H%)==(!!) set k=# %r% if (%H%)==(!!) set t=XX %r% if (%H%)==(!!) goto ChkHmn :######## :: Test for lines with no X's %r% if (%t%)==(XX) set H=! %r% if (%H%)==(!) set t= %r% if (%H%)==(!) goto ChkHmn :: Check opposite corners %r% if (%S1%)==(O) if (%S9%)==(9) %0 ! 9 %r% if (%S3%)==(O) if (%S7%)==(7) %0 ! 7 %r% if (%S7%)==(O) if (%S3%)==(3) %0 ! 3 %r% if (%S9%)==(O) if (%S1%)==(1) %0 ! 1 :: Check for ANY corner %r% for %%x in (%S1% %S3% %S7% %S9%) do if not (%%x)==(X) if not (%%x)==(O) %0 ! %%x %r% for %%x in (%S8% %S6% %S4% %S2%) do if not (%%x)==(X) if not (%%x)==(O) %0 ! %%x set r= echo .[17;29HYOUR MOVE .["a";"a"p set a= :a echo .[14;34H %a% CHOICE .[17;39H /C123456789. /N echo .[17;40H .["a";"a"p if not "%a%"=="" echo .[0;1;33;41m.[14;34H .["a";"a"p for %%x in (1 2 3 4 5 6 7 8 9 10) do if errorlevel==%%x set e=%%x if (%e%)==(10) goto Quit set t= for %%x in (%S1% %S2% %S3% %S4% %S5% %S6% %S7% %S8% %S9%) do if (%%x)==(%e%) set t=Y if (%t%)==() for %%x in (set goto) do %%x a=.[5mINVALID MOVE set S%e%=X set H%e%=X if not (%a%)==() echo .[0;1;37;41m.[14;35H goto Human :Draw set m= echo .[17;29HDrawn game! :Win if (%m%)==(XXX) echo .[17;29HOK, you won! if (%m%)==(OOO) echo .[17;29HI WIN AGAIN! echo .[0;1;5;37;41m.[17;43HPLAY AGAIN? CHOICE .[17;54H /CYN. /N echo .[17;55H .["a";"a"p :Quit for %%x in (1 2 3 4 5 6 7 8 9) do set C%%x= for %%x in (1 2 3 4 5 6 7 8 9) do set H%%x= for %%x in (1 2 3 4 5 6 7 8 9) do set S%%x= for %%x in (a b C e H i k m r S t) do set %%x= if errorlevel 1 if not errorlevel 2 goto Again echo .[0;1;33;41m.[17;43H Р.[22;1H.[0;37;40m ================================end of file ttt.bat======================= Играет неплохо, для запуска нужен ansi. Hо варианты повторяются. Вы видели каку-нибудь программу, которая бы первым ходом ходила на сторону? Я нет, хотя любой первый ход не проигрывающий. Алексей --- ifmail v.2.15dev5 * Origin: CHIB (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/641998c858e6.html, оценка из 5, голосов 10
|