Вы находитесь на странице: 1из 8

Техническое задание на разработку игры

«Поле Чудес»
ТЗ подготовил:
Студент группы 3ИНТ-1ДБ-002
МАТИ-РГТУ
Скляров Никита
Москва 2015

Описание проекта
Все помнят игру из 90-х годов под Windows 3.1 под названием «Поле чудес: Капитал-
шоу». Суть моей игры заключается в том же, что и оригинал, только в немного
«урезанном виде». Основной геймплей состоит из одного из туров оригинальной игры с
большей частью функционала. Игрок выступает в роли одного из трех игроков капитал-
шоу. Другие два игрока управляются компьютером. Интерфейс полностью скопирован
из оригинальной игры.

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

При запуске игры показывается главное меню с тремя кнопками: Новая игра, Об игре,
Выход. На заднем плане фон из оригинальной игры, откуда и взяты все текстуры и
увеличены вдвое. Само окно приложения нельзя изменять в размерах.

Игровой процесс
По нажатию кнопки Новая игра окно очищается и на окне по таймеру с периодом в 1/10
секунды размещаются детали игрового поля, после этого автоматически начинается игра,
объявляется задание, ход идет с пользователя, вращается барабан и игроку
предоставляется возможность выбрать букву при наличии положительного результата
вращения барабана. При неправильно угаданной букве ход переходит к следующему
игроку, там включается в работу ИИ, который просто рандомно выбирает букву из тех,
что еще не были использованы. Так игра идет до того момента пока пользователю не
выпадет сектор приз и он не заберет приз или не будет угадано слово. В конце на экране
показываются заработанные очки. После происходит переход в главное меню.

Раздел об игре
В разделе об игре описывается значение секторов, на которых нет очков или
множителей, также информация о создателе.
Игровой процесс в коде
После старта происходит отрисовка основных элементов меню и задание значений для
всех объектов (Для экономии места часть кода скоращена):

Vrag1..2.Visible:=false; - флаг видимости фигур ИИ


Memo1.Visible:=false; - флаг видимости объекта из пункта меню об игре
pole0..15.Visible:=false; - флаг видимости барабана
MainM.Visible:=false; - видимость кнопки возврата в меню
Fin.Visible:=false; - видимость финальной надписи игры
Ppriz.Visible:=false; - видимость иконки приза
Panel1.Visible:=false; - видимость панели с клавишами
Yakub.Visible:=false; - видимость картинки ведущего
Timer1.Enabled:=false; - принудительное отключение таймера
Money1..3.Visible:=false; - видимость фоновой картинки денег
MVrag1..2.Visible:=false; - надписи с количеством очков у ИИ
MMy.Visible:=false; - кол-во очков ГГ
Slovo.Visible:=false; - видимость поля клеток отгаданного слова
SlovoS.Visible:=false; - видимость надписи над полем
Golos.Visible:=false; - видимость иконки, где появляется надпись с заданием
GolosS.Visible:=false; - надпись задания
zadania[0..9]:='…’; - надпись задания
slova[0..9]:='…'; - слово ответ
Button1..32.Enabled:=false; - кнопки с буквами алфавита(ё не используется)
Priz.Visible:=false; - видимость кнопки получить приз
NPriz.Visible:=false; - видимость кнопки продолжить игру, и не брать приз

По нажатию на клавишу новая игра, происходит задание начальных значений для


элементов и выбор задания:

Timer1.Interval:=100; - выставляется таймер на 1/10 секунды


timers:=0; - устанавливается переменная для таймера в ноль
Timer1.Enabled:=true; - включается исполнение таймера
Randomize; - происходит забор ключа генерации из текущего времени
n:=Random(10); - генерируется случайное число от 0 до 9 для выбора задания
Slovo.ColCount:=Length(slova[n])div 2; - устанавливается количество колонок в
StringGrid под длину слова
a..c:=0; - устанавливается начальное кол-во очков
MMy.Caption:=IntToStr(a); - происходит запись очков в строки с результатами игрока
MVrag1..2.Caption:=IntToStr(b); - происходит запись очков в строки ИИ
player:=1; - устанавливается первый ход за игроком

Основной цикл игры находится в таймере:

case timers of – происходит выбор действия исходя из итерации таймера


0..19: NewGame.Visible:=false; - отрисовка игровых элементов поочередно за 2
секунды
40: GolosS.Caption:=zadania[n]; - устанавливается задание на основе сгенерированного
числа
98: GolosS.Visible:=false;
99: Golos.Visible:=false; - через 5 секунд убирается окно с заданием

Далее начинается основной цикл программы, то есть вращение барабана:

104: Randomize; - новый забор генерации ключа


105: Golos.Visible:=true; - отображение окна с текстом ведущего
106: begin
GolosS.Visible:=true; - отображение текста
if player=1 then GolosS.Caption:='Игрок вращает барабан';
if player=2 then GolosS.Caption:='Пятачок вращает барабан'; - вариации текста в
if player=3 then GolosS.Caption:='Пух вращает барабан'; - зависимости от игрока
gameP:=Random(70)+1; - генерация числа для вращения барабана
end;
107..170: begin – вращение барабана осуществляется сменой картинок барабана до
достижения таймера сгенерированного значения.
if timers-107=gameP then timers:=171; - после достижения данного значения
происходит переход к 171 итерации
case timers-107 of
0,32,64 : begin pole0.Visible:=false; pole1.Visible:=true; end;
2,34,66: begin pole1.Visible:=false; pole2.Visible:=true; end;
4,36,68: begin pole2.Visible:=false; pole3.Visible:=true; end;
6,38,70: begin pole3.Visible:=false; pole4.Visible:=true; end;
8,40: begin pole4.Visible:=false; pole5.Visible:=true; end;
10,42: begin pole5.Visible:=false; pole6.Visible:=true; end;
12,44: begin pole6.Visible:=false; pole7.Visible:=true; end;
14,46: begin pole7.Visible:=false; pole8.Visible:=true; end;
16,48: begin pole8.Visible:=false; pole9.Visible:=true; end;
18,50: begin pole9.Visible:=false; pole10.Visible:=true; end;
20,52: begin pole10.Visible:=false; pole11.Visible:=true; end;
22,54: begin pole11.Visible:=false; pole12.Visible:=true; end;
24,56: begin pole12.Visible:=false; pole13.Visible:=true; end;
26,58: begin pole13.Visible:=false; pole14.Visible:=true; end;
28,60: begin pole14.Visible:=false; pole15.Visible:=true; end;
30,62: begin pole15.Visible:=false; pole0.Visible:=true; end;
end;
end;
175: begin Prov(); GolosS.Caption:='Сектор '+sector+' на барабане'; end; - вывод
информации о секторе у ведущего
176: begin – далее в зависимости от того какой игрок и какой сектор выпал на
барабане, выбирается дальнейшее действие, о подробностях функций будет описано
позже
if player=1 then
begin
if pole6.Visible=true then begin timers:= 2000; other(); pole1.Visible:=false end;
if pole4.Visible=true then begin timers:= 2000; other(); pole1.Visible:=false end;
if pole10.Visible=true then begin timers:= 2000; other(); pole1.Visible:=false end;
if pole14.Visible=true then begin timers:= 2000; other(); pole1.Visible:=false end;
if pole12.Visible=true then begin timers:= 2000; other(); pole1.Visible:=false end;
if pole0.Visible=true then begin timers:= 2000; Select(); end;
if pole1.Visible=true then begin timers:= 2000; Select(); end;
if pole2.Visible=true then begin timers:= 2000; Select(); end;
if pole3.Visible=true then begin timers:= 2000; Select(); end;
if pole5.Visible=true then begin timers:= 2000; Select(); end;
if pole7.Visible=true then begin timers:= 2000; Select(); end;
if pole8.Visible=true then begin timers:= 2000; Select(); end;
if pole9.Visible=true then begin timers:= 2000; Select(); end;
if pole11.Visible=true then begin timers:= 2000; Select(); end;
if pole13.Visible=true then begin timers:= 2000; Select(); end;
if pole15.Visible=true then begin timers:= 2000; Select(); end;
end
else begin
EnemyC(); - если ход у ИИ, то происходит активация отдельной процедуры
end;
end;

180: Game(); - проверка результата и выдача очков


185: begin – проверка угадано ли слово
Ncheck:=0;
for check:=0 to Slovo.ColCount-1 do
begin
if Slovo.Cells[check,0]<>'' then Ncheck:=Ncheck+1;
end;
if Ncheck=Slovo.ColCount then
begin
timers:=2985; - если слово угадано переход к финалу игры
GolosS.Caption:='Победитель!';
end;
end;
200: begin GolosS.Visible:=false; Golos.Visible:=false; end; - убираются элементы с
сообщениями от ведущего
209: polee(); - возвращение барабана в исходное положение
210: timers:=100; - возвращение в начало итерации

2980: timers:=220; - зацикливание работы игры при долгом выборе буквы либо ожидании
действия игрока

2998..3014: …. - начало финальной части игры, возвращение элементов в исходные


положения и уборка их из окна

3015: begin – финальная надпись и результаты


Fin.Visible:=true; - видимость финальной надписи
if player=1 then Fin.Caption:='Вы победили! Ваши очки: '+ MMy.Caption else
Fin.Caption:='Вы проиграли! Ваши очки: '+ MMy.Caption; - если ход был у игрока когда
было отгадано слово, то он победитель, если у ИИ,то игрок проиграл.
if player=4 then begin Fin.Caption:='Вы забрали приз! Ваш автомобиль у выхода'; - если
человек забирает приз, то для него отдельная надпись
Ppriz.Visible:=true; end; end;
3105: free(); - очистка в процедуре всех переменных и полей, возвращение элементов
в стартовые позиции
end;
timers:=timers+1; - каждая итерация таймера сопровождается увеличением счетчика
MMy.Caption:=IntToStr(a); - каждая итерация таймера сопровождается
MVrag1.Caption:=IntToStr(b); - обновлением очков у игроков
MVrag2.Caption:=IntToStr(c);
if timers>3200 then Timer1.Enabled:=false; - после завершения игры при подходе к 3200
итерации таймер сам отключается.

Отдельные процедуры и их значения


Процедура Select и NSelect включает и выключает видимые на поле клавиши.
Процедура free присваивает всем элементам стандартные значения.
Процедура EnemyC отвечает за выбор действия для ИИ после вращения барабана.
Процедура Plus отвечает за случайный выбор одной из подходящих к слову букв и
установку ее в итоговое поле.
Процедура II отвечает за выбор случайной еще не использованной буквы в данном
раунде.
Процедура other отвечает за обработку не цифровых секторов барабана:
if pole4.Visible=true then begin
II();
end;
if pole6.Visible=true then begin
prizz();
end;
if pole10.Visible=true then begin
correct:=0; timers:=177;
end;
if pole12.Visible=true then begin
Plus();
timers:=181;
end;
if pole14.Visible=true then begin
smert();
end;
Процедура prizz отвечает за выдачу приза для игрока, либо выбор буквы для ИИ.
Процедура smert отвечает за обнуление очков и переход хода.
Процедура pole восстанавливает исходное положение барабана.
Процедура Prov записывает во фразу ведущего выпавший сектор барабана.
Процедура Game отвечает за выдачу очков и смену хода.
При клике на каждую клавишу с буквой вызывается отдельная процедура для её
обработки, вот пример:
case n of
0..3, 5..9: begin correct:=0; GolosS.Caption:='Нет такой буквы!'; timers:=177;
Button32.Visible:=false; end; - в заданиях 0..3 и 5..9 нет такой буквы
4: begin correct:=1; Slovo.Cells[3,0]:='Я'; timers:=177; GolosS.Caption:='Есть такая
буква!'; Button32.Visible:=false; end; - в 4 задании есть такая буква и она 4 по счету, сразу
появится на табло
end;
NSelect(); - отключается активность клавиш
Скриншоты геймплея

(Интерфейс выбора приза или продолжения игры)


(Переход хода)

(В финальной версии надпись перенесена вверх)