Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Вниз

Крестики-нолики   Найти похожие ветки 

 
SarDoX   (2005-09-02 12:54) [0]

вот надо бы такую игру написать(игра с компом). как лучше всего осуществить?
читал про всякие там коеффициенты выгодности хода и т.д - слишком замутно. решил сделать комп рандомом, т.к писать искуственный интеллект не представяю как.
на форме 9 кнопок. писал быстро, криво(за 15-30 мин где то)
что поменять. подскажите. можно вообще все переписать. сильно не бейте.

procedure proverka();
begin
if tb[1].Caption = tb[2].Caption  then if  tb[2].Caption = tb[3].Caption then form1.label1.caption:="Выйграли " + tb[1].Caption;
if tb[4].Caption = tb[5].Caption  then if  tb[5].Caption = tb[6].Caption then form1.label1.caption:="Выйграли " + tb[4].Caption;
if tb[7].Caption = tb[8].Caption  then if  tb[8].Caption = tb[9].Caption then form1.label1.caption:="Выйграли " + tb[7].Caption;
if tb[1].Caption = tb[4].Caption  then if  tb[4].Caption = tb[7].Caption then form1.label1.caption:="Выйграли " + tb[1].Caption;
if tb[2].Caption = tb[5].Caption  then if  tb[5].Caption = tb[8].Caption then form1.label1.caption:="Выйграли " + tb[2].Caption;
if tb[3].Caption = tb[6].Caption  then if  tb[6].Caption = tb[9].Caption then form1.label1.caption:="Âûéãðàëè " + tb[3].Caption;
if tb[1].Caption = tb[5].Caption  then if  tb[5].Caption = tb[9].Caption then form1.label1.caption:="Выйграли " + tb[1].Caption;
if tb[3].Caption = tb[5].Caption  then if  tb[5].Caption = tb[7].Caption then form1.label1.caption:="Выйграли " + tb[3].Caption;

end;

procedure comp();
var a,i:integer;
begin
randomize();
s:=s+1;
if s>2 then begin
proverka();
end;
if s=5 then begin
form1.label1.Caption:="The game is over. ";
exit;
end;

for i:=1 to 1000 do begin
a:=random(9);
if a=0 then a:=random(9);
if tb[a].Enabled = true then begin
tb[a].Caption:="0";
tb[a].Enabled:=false;
if s>2 then begin
proverka();
end;
break;

end;
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
button1.Caption:="X";
button1.Enabled := false;
comp();
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
button2.Caption:="X";
button2.Enabled := false;
comp();
end;

procedure TForm1.Button***Click(Sender: TObject);
begin
button***.Caption:="X";
button***.Enabled := false;
comp();
end;

procedure TForm1.FormCreate(Sender: TObject);
var a:integer;
begin
s:=0;
for a:=1 to 9 do  begin
tb[a]:= FindComponent("Button" + inttostr(a)) as tbutton;
end;
end;

end.


 
Antonn ©   (2005-09-02 14:17) [1]

можно все переписать:)

> читал про всякие там коеффициенты выгодности хода и
> т.д - слишком замутно

но так и надо - для примера (все значения в StringGride):
перебираешь в цикле клетки по горизонтали. Там где уже есть крестик или нолик - помечаешь как не нужную(туда ведь не поставишь ничего:)). если в процессе перебора наткнулся на крестик, запоминаешь начальную позицию, идешь дальше, считая при этом кол-во крестиков, пока не выйдешь на НЕ крестик. в эту ячейку ставишь коэф. и в ранее запомненую клетку тоже ставишь. точнее ссумируешь с предыдущим в ней значением. Получаешь 2 точки с неким коэф. выгодности. перебираешь весь массив, и не только по горизонтали, но и по вертикали и по диагоналям. получишь массив с кучей коэф. выбираешь любой из самых больших и ставишь туда:) Также учитываешь  близость к соседним точкам (своим и чужим), к краям поля.


 
SarDoX   (2005-09-02 14:24) [2]

спасибо, но ниче не понял.. раза четыре перечитал..


 
SarDoX   (2005-09-02 14:25) [3]

точнее понял, но осуществить не смогу.
по мне так легче с  бд работать :)


 
Trimp ©   (2005-09-03 13:30) [4]

Однажды, на одной олимпиаде у нас была задача сделать подобную игру на Turbo Pascal"е. Так вот если ты укажешь мыло то я тебе могу выслать эту игру. Уверен код тебе поможет.


 
SarDoX   (2005-09-03 14:37) [5]

SARDOX собака YANDEX.RU


 
Trimp ©   (2005-09-03 15:03) [6]

2 SarDoX
Отправил


 
Trimp ©   (2005-09-03 15:12) [7]

Ах, да, если всё таки ЕХЕ запустится то управление такое: W,A,S,D-перемещение по полю; F-установить крестик; Q-выход.


 
keal   (2005-09-05 13:33) [8]

когда-то писал эту игру. если комп ходил первым, то никогда не проигрывал. аи написал через таблицу (забыл ка называется, какае-то "... машина" "или Маркова", не помню). комп ходил всегда с угла :)

если найду исходник, скину.


 
Brother   (2005-09-12 04:33) [9]

Игруха по логике ужо сама себя изжила.
А варианта тут два: или рандомность или ход в центр первым
затем если соперник ходил по горизонтали ход против него а
далее выход на вилку. Это 100% победа.


 
Antonn ©   (2005-09-12 12:26) [10]

Brother   (12.09.05 4:33) [9]
А варианта тут два: или рандомность или ход в центр первым

мне показалось что говорили про большое крестики нолики, на большом поле, по 5 в ряд. 3*3 - не серьезно


 
Servelat ©   (2005-09-12 23:20) [11]


> мне показалось что говорили про большое крестики нолики

Тебе показалось :). Автор же сказал:

> на форме 9 кнопок


По сабжу:
Код в первом посте такой убогий, что его надо весь переписывать, а потом уже делать интеллект, или что там еще захочется. По поводу интеллекта, интересная статейка была в журнале игромания, можешь на сайте почитать их старые выпуски, может найдешь. Смысл сводился к тому, что в начале для машины все ходы равнозначны. Во время игры она ходит соответственно случайно. Потом, если она выиграла игру, (во время игры комп ведет протокол всех ходов ^^), она увеличивает для каждой игровой ситуации, в которой наше поле за игру побывало, коэффициент удачности хода. То есть вначале, все ходы равнозначны, потом, при следующей игре, комп глядит, "ага, в прошлый раз у меня такая фигня на поле уже была, значит сюда ходить в принципе не так хреново, как в остальные клетки", и ходит по проторенной дорожке с БОЛЬШЕЙ вероятностью, чем по остальным. Таким образом, после миллиона игр, твой комп начинает неплохо сечь, куда ж надо ходить чтоб противнику плохо было. Если лень самому обучать его милилион раз, можно стравить два таких интеллекта, и пущай думают до опупения. Знаю, что описал криво, но за нормальным описанием иди к первоисточнику. Засим прощаюсь.

ЗЫ

> 3*3 - не серьезно

здавая мысль, 5 на 5 инграть интереснее.  
__________________
Good luck & Have fun


 
Brother   (2005-09-13 04:34) [12]

Упс, проглядел



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.012 c
3-1138362893
neat
2006-01-27 14:54
2006.03.19
Фильтр для Table


2-1141639332
Dysan
2006-03-06 13:02
2006.03.19
как заменить программе саму себя?


15-1141096201
SkyRanger
2006-02-28 06:10
2006.03.19
Рекламма


15-1140422334
s()
2006-02-20 10:58
2006.03.19
LG


1-1140028531
Volf_555
2006-02-15 21:35
2006.03.19
Как вызвать стандартное контекстное меню для определ. типа файла?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский