Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.
Принцип игры в том, что компьютер загадывает слово, а пользователь предлагает буквы, которые могут входить в это слово. Разработать программу, реализующую задачу “игра в слова ”. KHANGMAN - пользователь должен отгадать слово буква за буквой. Задание: Разработать программу, реализующей функцию игры “Игры в слова”. На экран выводятся русский алфавит и поле с зашифрованным словом, пользователь угадывает буквы пока не угадает слово полностью.В результате выполненных работ был получен программный продукт «Игра в слова» и комплект документации к нему.
План
Содержание
Содержание
Введение
Постановка задачи. Спецификация на программный продукт
Проектирование a. Функциональная схема b. Диаграмма классов
Алгоритмы
Программирование a. Обоснование выбора среды программирования b. Оценка стиля программирования c. Листинг программы
Отладка программы
Тестирование
Руководство пользователя
Выводы
Введение
Игра в слова (Виселица ) как развивающая игра.
Развивающие игры - это игры на развитие внимания, памяти, мышления и т.п. Игры должны быть оригинальными, интересными и нести в себе задачу, вопрос, проблему, которые необходимо решить ребенку, только в этом случае они выполняют свою цель. Одной из разновидностей развивающих игр являются настольные игры, которые в интересной красочной форме учат ребенка самостоятельности, сообразительности, образности мышления.
Например, детское домино с изображением геометрических фигур на фишках, не только научит ребенка взаимодействовать в коллективе, но и запомнить основные фигуры (круг, квадрат, треугольник, прямоугольник). В данном проекте под название «Игра в слова» необходима интуиция, логика. Играя, ребенок осваивает новые роли, развивает навыки и расширяет жизненный опыт. У взрослых игра не исчезает, а превращается в рекреационную деятельность, имеющую ценность как дополнение к жизни. Теория функционального удовольствия К. Бюлера рассматривает удовольствие, получаемое непосредственно от игрового процесса в качестве главной мотивации. Согласно концепции игры, разработанной Гербертом Спенсером под влиянием идей Ф. Шиллера, игра является средством избавления от нереализованной энергии.
Принцип игры в том, что компьютер загадывает слово, а пользователь предлагает буквы, которые могут входить в это слово. Если эта буква есть в слове то компьютер ее пишет в соответствующих полях - столько раз, сколько она встречается в слове. Если нету такой буквы то к виселице добавляется круг к петле, изображающий голову. Пользователь продолжает угадывать буквы до тех пор, пока не отгадает все слово. За каждый не правильный ответ первый игрок добавляет одну часть туловища к виселице, в данном проекте их 9. Если туловище в виселице нарисовано полностью, то отгадывающий игрок проигрывает, считается повешенным. Если игроку удается угадать слово, он выигрывает.
Разработать программу, реализующую задачу “игра в слова ”. Смысл игры заключается в том, что на экране есть поля с буквами, которые нужно угадать используя русский алфавит расположенный ниже игрового поля. Программа будет работать как на «быстрых», так и на «медленных» компьютерах одинаково.
Существующие аналоги.
Video Games Hangman - логическая игра, в которой необходимо угадывать названия современных видеоигр. На разгадывание названия отводится определенное количество попыток. Когда название разгадано, вы увидите год выхода игры, а также поддерживаемые платформы.
Hang The Alien - абсолютно аналогичная игра. Единственное отличие то что вместо человека на виселице находится инопланетянин.
KHANGMAN - пользователь должен отгадать слово буква за буквой. Ему дается 10 попыток, каждая неудачная попытка пририсовывает деталь изображения виселицы. На момент текущей версии программа доступна на 24 языках.
Постановка задач
Задание: Разработать программу, реализующей функцию игры “Игры в слова”.
Спецификация на программный продукт «Игра в слова».
1.1. Цели
Разработка программы, реализующей функцию игры «Игра в слова».
1.2. Соглашения о терминах.
Курсив - выделение терминов.
1.3. Предполагаемая аудитория.
Документ предназначен для участников разработки.
1.4. Границы проекта.
Развивающий продукт. Область применения: домашние ПК.
2. Общее описание.
2.1. Видение продукта.
Совершенно новый продукт. Без возрастных ограничений.
2.2. Функциональность продукта.
Главная функция - развивать наблюдательность, логическое мышление пользователя. На экран выводятся русский алфавит и поле с зашифрованным словом, пользователь угадывает буквы пока не угадает слово полностью.
3.1.1. Сохранение имени пользователя в памяти (Средний приоритет).
3.1.2. Ввод и вывод имени и сохранение в файле.
3.2. Игра.
3.2.1. Основные функции игры (Высокий приоритет).
3.2.2. Выбор буквы.
3.2.3. Особенностей нет.
3.3. Регистрация пользователя.
3.3.1. Сохранение имени пользователя в памяти (Средний приоритет).
3.3.2. Ввод имени и сохранение его в памяти.
3.3.3. Отсутствие имени не позволяет начать игру.
4. Требование к интерфейсу.
4.1. Интерфейсы пользователей (UX).
Стандартный графический интерфейс
4.1.1. 640*480 - 1680*1050.
4.1.2. Мышь.
4.2. Программные интерфейсы.
Стандартные устройства.
4.3. Интерфейсы оборудования.
Стандартные интерфейсы.
4.4. Интерфейсы связи и коммуникации.
Стандартные интерфейсы передачи информации.
5. Другие нефункциональные требования.
5.1. Требования к производительности.
Хорошая производительность даже на очень старых ПК.
5.2. Требования к сохранности (данных).
Безопасная, так как не может повредить файлы ПК.
5.3. Критерии качества программного обеспечения.
Требования отсутствуют.
5.4. Требования к безопасности системы.
Мобильность, надежность, стабильность.
6. Прочие требования.
Отказоустойчивость
Проектирование
Функциональная схема
Диаграмма классов
Алгоритмы
Игра Регистрация Рекорды
Программирование
Обоснование выбора среды программирования
При решении поставленной задачи оптимально использовать для представления информационных материалов язык Delphi (Object Pascal).
Delphi был очень удобен для создания продукта «Игра в слова» т.к.: 1. Интегрированный отладчик Delphi имеет много полезных свойств.
2. Высокоскоростной компилятор позволяет быстро и без проблем перевести Ваши программы в машинный код. Компилятор, встроенный в Delphi является на данный момент самым быстрым в мире.
3. Визуальное построение приложений позволяет быстро и качественно создать интерфейс Вашей программы.
4. Простые и функциональные способы построения баз данных (БД).
5. Разработчик программ может самостоятельно строить объекты для Delphi. Это очень полезно для составления уникальных приложений.
{Все с инспектором объектов типа закончили, дальше нужный код}
Button1.Click; //Имитируем нажатие кнопки end;
{Обработчик события из вкладки Events. Это мы убираем выделение из STRINGGRID} procedure TFORM1.STRINGGRID1DRAWCELL(Sender: TOBJECT; ACOL, AROW: Integer;
Rect: TRECT; State: TGRIDDRAWSTATE);
Var
STRINGGRID: TSTRINGGRID;
Can: TCANVAS;
begin
STRINGGRID := Sender as TSTRINGGRID;
Can := STRINGGRID.Canvas;
Can.Font := STRINGGRID.Font;
if (AROW >= STRINGGRID.FIXEDROWS) and (ACOL >= STRINGGRID.FIXEDCOLS) then Can.Brush.Color := STRINGGRID.Color else Can.Brush.Color := STRINGGRID2.Color;
If ACTIVECONTROL = Sender then // Эта строка "выключает" выделение if (GDSELECTED in State) then begin
procedure TFORM1.FORMCLOSE(Sender: TOBJECT; var Action: TCLOSEACTION);
begin s.Free; //Освобождаем память end;
{Обработчик события из вкладки Events для STRINGGRID1} procedure TFORM1.STRINGGRID1SELECTCELL(Sender: TOBJECT; ACOL, AROW: Integer; var CANSELECT: Boolean);
var s1:char; //Символ, в который ткнули мышью i,j:integer; //Счетчики циклов
TEMPS:String; //Временная строка, которая составляется из угаданных символов begin
{Если мы ткнули не в пустую ячейку, то s1 принимает значение из этой ячейки} if length(STRINGGRID1.Cells[ACOL,AROW])>0 then s1:= STRINGGRID1.Cells[ACOL,AROW][9];
{Проверяем наличие выбранного символа в ответе} if pos(s1,Zagadal)>0 then Begin //Если наш символ есть в тексте, то записываем его в STRINGGRID2 for i:=1 to length(Zagadal) do Begin //Проходим по всей длине загаданного слова if Zagadal[i]=s1 then Begin //
STRINGGRID2.Cells[i-1,0]:=s1;//Каждый одинаковый символ записываем в соотв. ему позиции end; //Т.е. если в слове 3 буквы О, то все 3 и запишутся в STRINGLIST2 на их позиции из ответа end;
end; //Закончили проверку встречи символа
{TEMPS - это временная строка, которая составляется из символов внутри STRINGGRID2
Рассматриваем STRINGGRID2 как строку и заполняем TEMPS, исходя из наличия в STRINGGRID2 символов} for i:=0 to STRINGGRID2.COLCOUNT do Begin TEMPS:=TEMPS STRINGGRID2.Cells[i,0];
{Очищаем пробелы из TEMPS} for j:=length(TEMPS) downto 1 do Begin if pos(" ",TEMPS)>0 then delete(TEMPS,pos(" ",TEMPS),1);
end;
end; //Закончили работу с TEMPS
{Проверяем соответствие TEMPS и ZAGADALTEMP. В обоих строках удалены пробелы и остается проверять только на символы. Если они совпали, значит пользователь угадал слово и выводится сообщение - Ты победил} if TEMPS=ZAGADALTEMP then Begin
SHOWMESSAGE("Победа");
end;
STRINGGRID1.Cells[ACOL,AROW]:=""; //Очищаем нажатую ячейку от Буквы, чтоб не нажимали тысячи раз уже нажатую end;
procedure TFORM1.Button1Click(Sender: TOBJECT);
var i,j:Integer;
MYGRID: TSTRINGGRID;
begin zapolnenie; //Наша процедура, заполняющая таблицу Буквами i:=1;
Randomize;
While odd(i) do i:=Random(S.Count-1); //Это строка проверяет i на нечетнссть.
{Так как вопросы нечет - Вопрос, Чет - ответ, логично Выбирать вопросы из нечетной строки, а ответы из четной. Пока i не примет нечетное значение идет выборка i случайным образом}
Label1.Caption:=S.Strings[i]; //Вопрос выбран, отображаем его в Label1
Zagadal:=(S.Strings[i 1]); //Запоминаем ответ для в вопроса в глобальную переменную
ZAGADALTEMP:=Zagadal; //Это тот же ответ, только в нем мы исключим пробелы
STRINGGRID2.COLCOUNT:=length(S.Strings[i 1]); //Отображаем в STRINGGRID2 столько ячеек сколько символов в ответе
STRINGGRID2.Width:=length(S.Strings[i 1])*STRINGGRID2.DEFAULTCOLWIDTH 15; //Меняем ширину в зависимости от длины ответа for i:=0 to STRINGGRID2.COLCOUNT do STRINGGRID2.Cells[i,0]:=""; //При нажатии на кнопку очищаем STRINGGRID2 от прошлого ответа for j:=length(ZAGADALTEMP) downto 1 do //Удаляем пробелы из ZAGADALTEMP if pos(" ",ZAGADALTEMP)>0 then Delete(ZAGADALTEMP,pos(" ",ZAGADALTEMP),1);
begin k:=192; // 192 - это Числовой код Буквы А. Заполняем нашу таблицу буквами А..Я for j:=0 to 3 do Begin //4 строки for i:=0 to 7 do STRINGGRID1.Cells[i,j]:=" " chr(I k); k:=k 8;i:=i 1; //8 колонок end;
{===============}
S:=TSTRINGLIST.Create; //Создаем контейнер для хранения строк
S.LOADFROMFILE("HMRUSBASE.txt"); //Загружаем в него весь текстовый файл
{Игнорируем нажатие стрелок на клавиатуре, для исключения переходов по таблице через них} procedure TFORM1.STRINGGRID1KEYDOWN(Sender: TOBJECT; var Key: Word;
Shift: TSHIFTSTATE);
begin if (Key=VK_Up) or (Key=VK_Down) or (Key=VK_Left) or (Key=VK_RIGHT) then Key:=VK_Shift;
end;
procedure TFORM1.Button3Click(Sender: TOBJECT);
begin if MESSAGEDLG("Выходим из программы ?", MTCONFIRMATION, [MBYES, MBNO], 0) = MRYES then close;
end;
procedure TFORM1.Button2Click(Sender: TOBJECT);
begin showmessage(‘’);
end;
end.
Отладка
Отладка программы «Игра в слова»
№ Тип ошибки Пример Решение
1 Логическая ошибка Не отображается русский алфавит в таблице Заполняем нашу таблицу буквами А..Я begin k:=192; for j:=0 to 3 do Begin //4 строки for i:=0 to 7 do STRINGGRID1.Cells[i,j]:=" " chr(I k); k:=k 8;i:=i 1; //8 колонок end;
2 Логическая ошибка При нажатии на кнопку новая игра не очищались прошлые слова Были добавлены следующие строки, for i:=0 to STRINGGRID2.COLCOUNT do STRINGGRID2.Cells[i,0]:="";
3 Логическая ошибка При загрузке слов из текстового файла выводилась ошибка Исправлена ошибка неверного чтения из файла.
4 Логическая ошибка Когда пользователь угадал слово программа сравнивала загаданное слово не с тем что выбирал пользователь. STEMPS - переменная хранящая слово угадывающее пользователем for j:=length(TEMPS) downto 1 do Begin if pos(" ",TEMPS)>0 then delete(TEMPS,pos(" ",TEMPS),1); end; if TEMPS=ZAGADALTEMP then Begin SHOWMESSAGE("Победа"); end;
5 Логическая ошибка Когда пользователь выбирал букву она оставалась в таблице Было добавлено STRINGGRID1.Cells[ACOL,AROW]:="";
Тестирование
№ Название теста Нормальные условия Критические условия Экстремальные условия
1 Загрузка слова из файла Производится загрузка слова из файла и сравнивается с буквами, которые вводит пользователь. Производится загрузка слова из некорректного файла - Вывод сообщения об ошибке. Загрузка слова из несуществующего файла - Вывод сообщения об ошибке.
2 Загрузка подсказки из файла. Производится загрузка подсказки из файла и сравнивается с буквами, которые вводит пользователь. Производится загрузка подсказки из некорректного файла - Вывод сообщения об ошибке. Загрузка подсказки из несуществующего файла - Вывод сообщения об ошибке.
3 Выбор буквы в таблице Буква корректно выбирается и пропадает из таблицы. Выбор уже отсутсвующей буквы не возможен. Если пользователь выберет неправильную букву, то буква не пропадет
Руководство пользователя программа развивающая игра слово
Запуск программы.
Запускаем файл «igra_v_slova.exe». Вам откроется фоновый режим программы.
После запуска игры откроется следующая форма:
Необходимо нажать на кнопку «Начать игру» для запуска новой игры.
Поле с загаданным словом.
Русский алфавит, из которого Вы будете угадывать загаданное слово
Поле с подсказками:
Для выходы из игры необходимо нажать кнопку «Выход»:
Вывод
В результате выполненных работ был получен программный продукт «Игра в слова» и комплект документации к нему. Программа реализовывалась полностью с соответствием технического задания.
В процессе выполнения работ были закреплены навыки работы в среде Delphi и получен опыт разработки программного продукта и документации к нему.
Размещено на .ru
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы