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

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


Бывалый
***

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

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


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

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


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

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


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

 



- Текстовая версия 15.07.2025 1:52
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"