IPB
ЛогинПароль:

> Игра "Определитель"
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 152
Пол: Женский

Репутация: -  0  +


Здравствуйте! Мне очень сильно нужно помощь! Нам задали написать тгру определитель, предварительно даже не рассмотрев хотя бы одну программу по написанию игр на Паскале. Я тоже не могу найти никакую литературу по теории игр и реализации их на Паскале. Суть игры состоит в следующем: Есть матрица 3 на 3. 2 Игрока ходят поочередно и ставят цифры в любое место матрицы, при том цифры не должны повторяться. Когда вся матрица заполнена, мы считаем ее детерминант. Если Д больше 0, то выиграет первый, если меньше, то второй, если равно, то ничья. Моя проблема в том, что откуда приступить в задаче. С чего вообще начать? Понятно какими методами нужно пользовться: перебором, отсечением альфа-бета, рекурсией. Но откуда приступить к написанию кода? Как сделать так, чтобы пользователь вписал цифру в таблицу и компьютер отвечал?

Пожалуйста, обьясните мне и не закрывайте тему! Спасибо большое!!!!


--------------------
Ты спрашиваешь, как я переношу длинные бессонные ночи?Как свеча: как только настает утро, я гасну, тем самым, имея возможность заново загореться.

Нима
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






:no: Дож, это - не мой вариант. Мой вариант - что-то в таком духе:

Type
TResult = Record
Digit: byte; Pos: Byte;
End;
Var
max_D: LongInt;
max_Matrix: String;

{
CurrMatrix - "развернутое" в строку представление матрицы
ToUse - оставшиеся для использования цифры
}
Procedure AI(CurrMatrix, ToUse: String);
Var
D: LongInt;
s_u, s_m: String;
Begin
If ToUse = '' Then Begin { цифр больше не осталось -> матрица заполнена }
D := get_determ(CurrMatrix); { считаем детерминант }
If D > max_D Then Begin { если найденный D больше/меньше всех предыдущих }
{ запоминаеи макс/мин детерминант и саму матрицу, при которой это произошло }
max_D := D; max_matrix := CurrMatrix;
End;
Exit; { и заканчиваем рекурсию }
End;

{ А вот если матрица заполнена не окончательно (ToUse не пустая строка)... }
{
... то генерируем возможные сочетания элементов,
и передаем это опять в AI:
}
For j := 1 To Length(ToUse) Do
For i := 1 To Length(CurrMatrix) Do
If CurrMatrix[i] = '0' Then Begin
s_m := CurrMatrix; s_m[i] := ToUse[j];
s_u := ToUse; Delete(s_u, j, 1);
AI(s_m, s_u); { Рекурсия !!! }
End;
End;

Procedure ComputerMove(CurrMatrix, ToUse: String; Var R: TResult);
Begin
AI(CurrMatrix, ToUse);
{
Когда мы здесь - уже известно, какая матрица из возможных
дает выигрышную комбинацию, и имея CurrMatrix и max_Matrix,
можно выбрать одну из цифр, НЕ присутствующих в CurrMatrix...

Результат (цифра и ее позиция в строке) возвращается через R,
а потом при отрисовке R.Pos легко переведется в строку и столбец матрицы...
}
End;
 К началу страницы 
+ Ответить 

Сообщений в этой теме
setare   Игра "Определитель"   18.09.2005 14:34
klem4   Игрой это назвать конечно можно с натяжкой :) Но т…   18.09.2005 15:12
volvo   klem4, время пошло !!! Через 15 минут…   18.09.2005 15:16
setare   Извините, но матрица же одна. Как поочередно каждо…   18.09.2005 15:22
klem4   Ну это я образно выразился, а вообще сейчас попроб…   18.09.2005 15:31
klem4   Вот на скорую руку ... Потестил, но могут быть оши…   18.09.2005 15:57
volvo   klem4, а компьютер как играть будет? AI его ты сде…   18.09.2005 15:59
klem4   я подумал что 2 человека, ну можно и компа сдела…   18.09.2005 16:00
volvo   Можно, конечно. :) Только учти, что задача компьют…   18.09.2005 16:12
klem4   ага, это я зря :(( да уж, если он еще и думать до…   18.09.2005 16:18
volvo   Ага, и сразу if d>0 then Det := 1 else …   18.09.2005 16:18
klem4   вот это здорово придумал :)   18.09.2005 16:21
setare   Извините, а здесь рекурсия используется? И еще аль…   18.09.2005 16:43
klem4   Вопрос : Играть с компютером надо ? Если да, то на…   18.09.2005 16:45
setare   Да!   18.09.2005 16:51
setare   Извините, но вы не могли бы подсказать как написат…   18.09.2005 20:58
Дож   klem4, а правильно ли твоя прога считает детермина…   18.09.2005 21:05
klem4   Все конечно может быть ... в торопях писал, но воо…   18.09.2005 21:21
Дож   вообще не очень понимаю о чем ты, а считал опреде…   18.09.2005 21:30
volvo   setare, а обязательно надо использовать "альф…   18.09.2005 21:33
klem4   да я забыл домножать на элементы первой строки :((…   18.09.2005 21:40
setare   Извините, пожалуйста, volvo, но не могли бы вы еще…   18.09.2005 21:47
Дож   Имелось ввиду нечто типа этого: Type PAIResult=^TI…   18.09.2005 22:07
setare   Ухты, ну и код. Здесь надо долго разбираться. А мо…   18.09.2005 22:22
Дож   Ну если я правильно понимаю что ты имеешь ввиду по…   18.09.2005 22:30
setare   Ладно не буду. Спасибо. А почему вы написали For…   18.09.2005 22:45
volvo   :no: Дож, это - не мой вариант. Мой вариант - что-…   18.09.2005 22:56
setare   Извините за глупый вопрос, но что значит при отрис…   18.09.2005 23:05
volvo   После того, как компьютер сделал свой ход, матри…   18.09.2005 23:12
setare   Спасибо за обьяснение! Если возникнут вопросы,…   18.09.2005 23:27
setare   volvo Здравствуйте, извините, значит в вашей после…   21.09.2005 23:38
volvo   Надо, конечно :) Я просто привел сам способ реализ…   22.09.2005 0:37


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 8.11.2025 14:57
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name