![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте! Я вот решил написать игру "Кто хочет стать миллионером".
Столкнулся с такой трудностью как создания массивов с вопросами и ответами. Инфа берется с файла. Там вот такая "иерархия": Код:
[Questions for "Кто хочет стать миллионером"] --- ^Завершите философскую русскую пословицу: "Век живи, век учись - ..." -Академиком станешь -Богатеньким будешь -В люди выйдешь +Дураком помрешь --- ^Какое небесное тело используется для определения известных актеров, спортсменов и музыкантов? -Астероид -Комета +Звезда -Планета --- Код:
Vopros: array of string; Variant1: array of string; Variant2: array of string; Variant3: array of string; Variant4: array of string; Otvet: array of string; --- обозначало новый вопрос (разделитель). ^ обозначало новый вопрос и заполнялось в массив Vopros + и - обозначало вариант ответа и все 4 варианта писались в массивы Variant (1-4) + обозначало правильный вариант ответа и заполнялось в массив Otvet И еще один вопрос: как потом послать строку массива в Lable каждый раз РАНДОМНО? Буду очень благодарен за ответы!! |
#2
|
||||
|
||||
![]() Пересмотри архитектуру игры.
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#3
|
|||
|
|||
![]() Цитата:
|
#4
|
||||
|
||||
![]() Подумай как по другому хранить вопросы и ответы. Подумай о том, что, например, вопросов у тебя 10 гигов. И ты их будешь загружить в программу все кучей?
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#5
|
|||
|
|||
![]() архитектуру однозначно надо переделать.
вопросов действительно может быть много и они вначале должны быть легкие вопросы и по мере игры усложнятся. если держать их в тхт то тебе придётся загружать все вопросы, разбивать их на уровни сложности, и тд.. тут лучше БД использовать. и еще Цитата:
и почему каждый вариант идёт как массив? они что каждый раз в одном и том же порядке будут? лучше рандомно варианты распологать .а массив с вариантами сделать размером всего 4. примерная БД будет такая: таблица Вопросы: id вопроса, вопрос, уровень сложности вопроса. Таблица Ответы: id ответа, ответ, номер вопроса к которому относится ответ, правильность ответа. ну и примерная логика выборки. допустим нужно показать первый вопрос уровня сложности 1. у тебя в БД несколько вопросов с уровнем сложности 1.ты выбираешь id'ы всех таких вопросов и потом из них рандомно выбираешь один ИД и загружаешь варианты ответа для этого ид. |
#6
|
||||
|
||||
![]() Зачем новичку БД, если он ещё string от array of string не отличает.
Dmitry_DM, прочитай про типы данных и ключевое слово type Собери тип которой будет в себе содержать вопросы и к каждому вопросу 3и варианта + 1н правильный ответ. Код:
type TMyQuestion : record fquest: string fopt1: string fopt2: string fopt3: string; fans: string; end; Заведи массив таких вопросов и файл из этого типа данных: Код:
var FQuestions : file of TMyQuestion; MyQuestions : array [0..99] of TMyQuestion; Запись типизированных данных в файл и считывание оных оттуда: Записывать: Код:
AssignFile(FQuestions, 'c:\FQuestions.dat'); Rewrite(FQuestions, 1); For i:=0 to Length(MyQuestions)-1 do BlockWrite(FQuestions, MyQuestions[i], Sizeof(FQuestions)); CloseFile(FQuestions); Читать по аналогии. Последний раз редактировалось Uniq!, 28.03.2013 в 17:39. |
#7
|
|||
|
|||
![]() спасибо за предложенные варианты! но я хочу пояснить более детально как все устроено.. есть 15 файлов (на 15 уровней сложности), я их сделал в ini формате. Каждый файл содержит множество вопросов. Вот пример 2 вопросов в ini на 1 уровне сложности.
Код:
[Question1] Question = 'Завершите философскую русскую пословицу: "Век живи, век учись - ..."' Otvet1 = 'Академиком станешь' Otvet2 = 'Богатеньким будешь' Otvet3 = 'В люди выйдешь' Otvet4 = 'Дураком помрешь' PrOtvet = 'Дураком помрешь' [Question2] Question = 'Какое небесное тело используется для определения известных актеров, спортсменов и музыкантов?' Otvet1 = 'Астероид' Otvet2 = 'Комета' Otvet3 = 'Звезда' Otvet4 = 'Планета' PrOtvet = 'Звезда' Потом я делаю так (знаю что не правильно, но понять что я хочу из этого можно..) Код:
... Question: array[1..15] of string; Otvet1: array[1..15] of string; Otvet2: array[1..15] of string; Otvet3: array[1..15] of string; Otvet4: array[1..15] of string; PrOtvet: array[1..15] of string; ... Ini := TIniFile.Create(ExtractFilePath(application.ExeName) + '\Data\Resources\Questions\100.ini'); for i := 1 to "конца файла" do begin Question[i] := Ini.ReadString('Question1', 'Question', ''); end; form1.Label3.Caption:= Question[i]; |
#8
|
||||
|
||||
![]() Значит, и типы сложно. Окей. начнём с простого:
Код:
Question: array[1..15] of string; После этого у тебя создасться пустой массив, в каждую ячейку которого ты сможешь положить целую строку. Зачем? Если тебе сюда нужно положить лишь один вопрос? Question: string; - правильный вариант. Сюда ты сможешь положить ТОЛЬКО одну строку (только один вопрос) Дальше перестраивай картину у себя в голове, и думай что будем менять дальше. Потуги сделать массив из 15ти вопросов\ответов я вижу. Но смысл их тогда перезаписывать? Из приведённого тобой примера: Код:
var Questions: array[1..15] of string; Otvet1: array[1..15] of string; for i := 1 to 15 do begin Questions[i] := Ini.ReadString('Question' + IntToStr(i), 'Question', ''); Otvet[i] := Ini.ReadString('Question' + IntToStr(i), 'Otvet1', ''); // и так далее... end; Но это ужасный код=\ Последний раз редактировалось Uniq!, 28.03.2013 в 19:58. |
#9
|
|||
|
|||
![]() Цитата:
|
#10
|
||||
|
||||
![]() Верным путем идете товарищ! Не бойтесь экспериментировать. Набьете шишек, но это будут ваши шишки.
![]() Я так понял INI вы выбрали с точки зрения удобства доступа к исходному тексту. Можно конечно и в Ini все хранить, но пока вы еще только начали, я бы рекомендовал вам про XML почитать. Он тоже позволяет хранить данные в виде текста, но возможности его на порядок выше чем Ini. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#11
|
||||
|
||||
![]() Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 09.05.2013 в 12:21. |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
Dmitry_DM (29.03.2013)
|