Просмотр полной версии : Крестики-Нолики всё возможные варианты ходов.
В общем тупо задался целью,написать прогу.
Но что-то никак не могу придумать алгоритм.
В общем идея такая.
Написать программу,которая просчитает и отобразить пошагово всё возможные ходы игры крестики-нолики 3х3.
Меня инттересуют именно всё варианты ходов.
Но вот уже 4 день ничего в голосу не идет.
AGENTWPC74
18.03.2010, 23:18
В общем тупо задался целью,написать прогу.
Но что-то никак не могу придумать алгоритм.
В общем идея такая.
Написать программу,которая просчитает и отобразить пошагово всё возможные ходы игры крестики-нолики 3х3.
Меня инттересуют именно всё варианты ходов.
Но вот уже 4 день ничего в голосу не идет.
ходов может быть 9х9=81 вариант ходов
если не ошибаюсь . вот и пиши алгоритм. если крестик в ячке 1 то нолик ставлю ы ячейку 2
BrainDeaD
18.03.2010, 23:27
ошибаешься.
начать, думаю с того, что в игре существуют два вида пермутаций:
1) 5 крестиков и 4 нолика
2) 4 крестика и 5 ноликов
ошибаешься.
начать, думаю с того, что в игре существуют два вида пермутаций:
1) 5 крестиков и 4 нолика
2) 4 крестика и 5 ноликов
Нет это просто зависит от того кто первый ходит.
У меня тут мысли,просто есть 3 варианта первого хода,всё остальные ему идентичны.
Представим матрицу 3х3
Значит первый ход может быть 1х1 2х2 или 1х2,остальное это всё одно и тоже.
Вот я и думаю.Как отсекать похожие комбинации.
Delimiter
18.03.2010, 23:35
вызвать функцию :) все варианты естественно включают и одинаковые .....
варианты хода считаются разными на том основании что ходы делаются в разное время (что в теории игр не означает эквивалентными вариантами)
int a[3][3];
int step(int mode)
{
int i,j,fl;
for(i=0,fl=0;i<3;i++)
for(j=0;j<3;j++)
{
if(a[i][j]==0)
{
a[i][j]=mode;
step(mode*(-1));
a[i][j]=0;
fl=1;
}
}
if(fl==0)
{
printf("\r\n===================\r\n");
for(i=0;i<3;i++)
{
printf("*---*---*---*\r\n");
for(j=0;j<3;j++)
{
switch(a[i][j])
{
case 0:
printf("| ");
break;
case 1:
printf("| X ");
break;
case -1:
printf("| O ");
break;
}
}
printf("|\r\n");
}
printf("*---*---*---*\r\n");
}
return 0;
}
а если тебе нужны все варианты ... то эта задача к теории игр вооообще не относится
представь себе что имеешь 10 битовое число ,то тебе нужно всего лишь выбрать все комбинации где количество битов 1 равно количеству 0 .... это заваулированное условие твоей задачи ...
BrainDeaD
18.03.2010, 23:36
Нет это просто зависит от того кто первый ходит.
я думал нужны ВСЕ возможные комбинации.
-Gory King-
18.03.2010, 23:37
бля только что 2 голоса проиграл((
Да именно из-за приложения http://vkontakte.ru/app1741517 этим занялся.
В обычном варианте выиграть вообще не вариант,вот и решил посмотреть возможные варианты.
2 Delimiter Это мы получаем сразу итог,но я думаю про последовательно каждый щаг.
Delimiter
18.03.2010, 23:46
хааааааааа ... ноу проблем
int a[3][3];
int step(int mode)
{
int i,j,k,l,fl;
for(i=0,fl=0;i<3;i++)
for(j=0;j<3;j++)
{
if(a[i][j]==0)
{
a[i][j]=mode;
printf("\r\n===================\r\n");
for(k=0;k<3;k++)
{
printf("*---*---*---*\r\n");
for(l=0;l<3;l++)
{
switch(a[k][l])
{
case 0:
printf("| ");
break;
case 1:
printf("| X ");
break;
case -1:
printf("| O ");
break;
}
}
printf("|\r\n");
}
printf("*---*---*---*\r\n");
step(mode*(-1));
a[i][j]=0;
fl=1;
}
}
return 0;
}
может тебе лучче сразу програмку которая играет написать?
Спасибо, интересно самому попробовать.
Delimiter
19.03.2010, 00:08
анализируй после каждого хода а не ЛИНИЯ ли.... и возвращай если противник -100
если ты 100.... на каждом уровне действует МИНИМАКСНАЯ модель (каждый выбирает лучший для себя ход!)
Не понял что тут делается.
a[i][j]=mode;
И каким образом он выбирает из массива значения 0,1,-1
Delimiter
19.03.2010, 00:23
тут записывается в массив то что сейчас нужно ставить
возможные варианты 1 и -1
Понял,но не всё.
Надо всё пропустить через себя,не такой я быстрый и опытный.
Но понял что ты хочешь,попробую сам переделать.
Результат позже выложу
Delimiter
19.03.2010, 00:31
удачи!
если приложение на голоса с компом..то там нельзя выиграть у компа)
всевремя ничья.
Delimiter
19.03.2010, 00:35
да в игре на доске 3х3 .... при правильной игре обоих игроков всегда НИЧЬЯ!
Там несколько вариантов игры,есть на проигрыш и на ничью.Хочу посмотреть реально ли при игре в эти режимы выиграть!
__tp://slil.ru/28820273 На QT писал когда то под Linux
приложение бессмысленое абсолютно.
Если первый ходишь - проиграть просто невозможно !
А тут, комп всегда сводит к ничье. Приложение - обдералово банальное. В тестовой игре 3 раза комп вздрючил. На платной, он по алгоритму ходит.
Стратегия абсолютно банальная. Как то на паре, минут за 5 все возможные комбинации рассмотрел. Даже если ты ходишь второй, если мозги есть, то всегда можно свести к ничье. На этом и базируется алгоритм компьютера.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot