Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2007, 18:55   #1
steck
/\/\Et@/\|/|$T
Пользователь
 
Аватар для steck
 
Регистрация: 26.03.2007
Сообщений: 89
Счастье Выбор вопроса из списка

я пишу игру(на delphi) типа кто хочет стать милионером
но у меня есть проблемка:
как зделать так чтоб вопросы не повторялись т.е пример:пользователю должно задаться 5 вопросов в запасе у меня их 15 понятно что один и тот-же вопрос может попасца несколько раз
так как зделать так чтоб вопросы не повторялись

ещё для того чтоб вопросы шли в разной последовательности я использую random может знаете что другого?
there are no programmers there is no life

Последний раз редактировалось steck; 23.04.2007 в 18:58.
steck вне форума Ответить с цитированием
Старый 23.04.2007, 19:07   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Завести булевский массив вопросов. Если вопрос новый, то соответствующему элементу присвоить true, если элемент был, то можно, например шагать вправо или влево по массиву, пока не найдёт вопрос, отмеченный как false. А можно и повторно запустить random.

По поводу второй части вопроса, наверное всё-таки random и использовать randomize. По-другому тяжело генерить случайную последовательность.
Carbon вне форума Ответить с цитированием
Старый 18.05.2007, 16:46   #3
VTR
Форумчанин
 
Аватар для VTR
 
Регистрация: 25.04.2007
Сообщений: 105
Подмигивание Мой милионер

Я когдато писал такоеже. могу дать исходники, но не сейчас, позже примерно во вторник 22.05.07.
]
VTR вне форума Ответить с цитированием
Старый 29.05.2007, 15:33   #4
VTR
Форумчанин
 
Аватар для VTR
 
Регистрация: 25.04.2007
Сообщений: 105
По умолчанию

Вот исходник моего щасливчика. Там есть сам щасливчик и редактор вопросов.
http://conota.mylivepage.ru/file/?fileid=2406
]
VTR вне форума Ответить с цитированием
Старый 09.08.2007, 20:22   #5
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
Лампочка Можно и проще

Цитата:
Сообщение от Carbon Посмотреть сообщение
Завести булевский массив вопросов. Если вопрос новый, то соответствующему элементу присвоить true, если элемент был, то можно, например шагать вправо или влево по массиву, пока не найдёт вопрос, отмеченный как false. А можно и повторно запустить random.

По поводу второй части вопроса, наверное всё-таки random и использовать randomize. По-другому тяжело генерить случайную последовательность.
Можно сделат намного проще, с помощью множества:

Var R :Byte;
rr :Set of Byte;
begin
rr:=[]; // Очистить множество
rr:=rr + [ R ]; // Добавить в множество
rr:=rr - [ R ]; // Удалить из множества
If 10 in rr Then {Что-то делаем} ELSE {Ещё что-то};
end.
Думаю понятно.
Alter вне форума Ответить с цитированием
Старый 10.08.2007, 09:14   #6
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от Carbon Посмотреть сообщение
Завести булевский массив вопросов. Если вопрос новый, то соответствующему элементу присвоить true, если элемент был, то можно, например шагать вправо или влево по массиву, пока не найдёт вопрос, отмеченный как false. А можно и повторно запустить random.
По-любому выйдет много операций.

Цитата:
Можно сделат намного проще, с помощью множества:
Можно. А вдруг мне понадобится 257 вопросов?

Имхо, нужно завести массив индексов элемента массива. Оттуда рандомом выбирать индекс и выбирать вопрос с этим индексом из массива вопросов, а затем просто на место этого индекса ставить последний индекс и сокращать длину. Здесь никаких допопераций не требуется и размер практически не ограничен.
still_alive вне форума Ответить с цитированием
Старый 17.08.2007, 16:26   #7
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
Лампочка Если долго мучится

Цитата:
Сообщение от still_alive Посмотреть сообщение
По-любому выйдет много операций.


Можно. А вдруг мне понадобится 257 вопросов?

Имхо, нужно завести массив индексов элемента массива. Оттуда рандомом выбирать индекс и выбирать вопрос с этим индексом из массива вопросов, а затем просто на место этого индекса ставить последний индекс и сокращать длину. Здесь никаких допопераций не требуется и размер практически не ограничен.
Тогда можно использовать TStrings:
Использовать для определения наличия элемента в списке IndexOf() - возвратит индекс элемента >= 0 (если он там есть), удалять лучше так
BeginUpdate;
Delete;
EndUpdate;.
И так далее ...
-----------------------------------------------------------------------
УДАЛИТЕ ЭТО СООБЩЕНИЕ!!!

Последний раз редактировалось Alter; 17.08.2007 в 16:28.
Alter вне форума Ответить с цитированием
Старый 17.08.2007, 16:26   #8
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,239
Лампочка Если долго мучится, что-нибудь получится

Цитата:
Сообщение от still_alive Посмотреть сообщение
По-любому выйдет много операций.


Можно. А вдруг мне понадобится 257 вопросов?

Имхо, нужно завести массив индексов элемента массива. Оттуда рандомом выбирать индекс и выбирать вопрос с этим индексом из массива вопросов, а затем просто на место этого индекса ставить последний индекс и сокращать длину. Здесь никаких допопераций не требуется и размер практически не ограничен.
Тогда можно использовать TStrings:
Использовать для определения наличия элемента в списке IndexOf() - возвратит индекс элемента >= 0 (если он там есть), удалять лучше так
BeginUpdate;
Delete;
EndUpdate;.
И так далее ...
Alter вне форума Ответить с цитированием
Старый 18.08.2007, 00:02   #9
MadReason
Ищу работу
Форумчанин
 
Аватар для MadReason
 
Регистрация: 16.02.2007
Сообщений: 269
По умолчанию

присвой каждому вопросу номер, и когда вопрос попадается заноси его в массив или множество. делаешь рэндом сравниваешь номер вопроса с номерами в массиве, если совпал еще раз рэндом и т.д. так что много элементов не получится ~15=))).
Пишу на Delphi все что угодно, недорого, красиво, с комментариями
###icq 107335###
MadReason вне форума Ответить с цитированием
Старый 19.08.2007, 23:32   #10
Iceman
Форумчанин
 
Регистрация: 08.07.2007
Сообщений: 154
По умолчанию

ай просто при при начале игры сделай txt файл в котором все ети вопросы удаляютса после использования хватит мудрить для таких игр.
Iceman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Два тупых вопроса. proglamer Общие вопросы Delphi 2 10.04.2008 07:12
Два вопроса Никки Общие вопросы Delphi 2 19.01.2008 21:39
Два простых вопроса Relrin Общие вопросы Delphi 3 28.12.2007 16:00
Три вопроса по клавиатуре Никки Общие вопросы Delphi 14 20.12.2007 22:07