Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Крестики-нолики   Olga Levicheva   04 Nov 2002 18:35:51 
 Re: Крестики-нолики   Alex Kozhushko   04 Nov 2002 19:21:23 
 Кpестики-нолики   Sergey Pisarevskiy   04 Nov 2002 20:21:15 
 Re: Кpестики-нолики   Aleksey D. Tetyorko   07 Nov 2002 13:40:34 
 RE: Кpестики-нолики   Kropov Valentine   06 Nov 2002 08:38:41 
 Re: Кpестики-нолики   Andrew Ezhguroff   08 Nov 2002 04:38:09 
 Re: Кpестики-нолики   Andrew Ezhguroff   08 Nov 2002 06:23:08 
 Re: Кpестики-нолики (bat)   Aleksey D. Tetyorko   08 Nov 2002 12:57:21 
 Re: Кpестики-нолики (bat)   Andrew Ezhguroff   09 Nov 2002 01:13:07 
Архивное /ru.algorithms/641998c858e6.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional