Форум: "Игры";
Текущий архив: 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