Разработки программы, реализующей игру "Слова"

Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.07.2012
Размер файла 572,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования

Московский государственный университет технологий и управления

имени К.Г. Разумовского

Университетский колледж информационных технологий

Специальность 230105 «Программное обеспечение вычислительной техники и автоматизированных систем»

КУРСОВОЙ ПРОЕКТ

по дисциплине «Технология разработки программных продуктов»

на тему Разработки программы, реализующей игру «Слова»

Студент С.Р. Пушица

Руководитель проекта

И.А. Кумскова

МОСКВА 2012

Содержание

Содержание

Введение

Постановка задачи. Спецификация на программный продукт

Проектирование

a. Функциональная схема

b. Диаграмма классов

Алгоритмы

Программирование

a. Обоснование выбора среды программирования

b. Оценка стиля программирования

c. Листинг программы

Отладка программы

Тестирование

Руководство пользователя

Выводы

Введение

Игра в слова (Виселица ) как развивающая игра.

Развивающие игры -- это игры на развитие внимания, памяти, мышления и т.п. Игры должны быть оригинальными, интересными и нести в себе задачу, вопрос, проблему, которые необходимо решить ребенку, только в этом случае они выполняют свою цель. Одной из разновидностей развивающих игр являются настольные игры, которые в интересной красочной форме учат ребенка самостоятельности, сообразительности, образности мышления.

Например, детское домино с изображением геометрических фигур на фишках, не только научит ребенка взаимодействовать в коллективе, но и запомнить основные фигуры (круг, квадрат, треугольник, прямоугольник). В данном проекте под название «Игра в слова» необходима интуиция, логика. Играя, ребёнок осваивает новые роли, развивает навыки и расширяет жизненный опыт. У взрослых игра не исчезает, а превращается в рекреационную деятельность, имеющую ценность как дополнение к жизни. Теория функционального удовольствия К. Бюлера рассматривает удовольствие, получаемое непосредственно от игрового процесса в качестве главной мотивации. Согласно концепции игры, разработанной Гербертом Спенсером под влиянием идей Ф. Шиллера, игра является средством избавления от нереализованной энергии.

Принцип игры в том, что компьютер загадывает слово, а пользователь предлагает буквы, которые могут входить в это слово. Если эта буква есть в слове то компьютер ее пишет в соответствующих полях - столько раз, сколько она встречается в слове. Если нету такой буквы то к виселице добавляется круг к петле, изображающий голову. Пользователь продолжает угадывать буквы до тех пор, пока не отгадает все слово. За каждый не правильный ответ первый игрок добавляет одну часть туловища к виселице, в данном проекте их 9. Если туловище в виселице нарисовано полностью, то отгадывающий игрок проигрывает, считается повешенным. Если игроку удаётся угадать слово, он выигрывает.

Разработать программу, реализующую задачу “игра в слова ”. Смысл игры заключается в том, что на экране есть поля с буквами, которые нужно угадать используя русский алфавит расположенный ниже игрового поля. Программа будет работать как на «быстрых», так и на «медленных» компьютерах одинаково.

Существующие аналоги.

Video Games Hangman -- логическая игра, в которой необходимо угадывать названия современных видеоигр. На разгадывание названия отводится определенное количество попыток. Когда название разгадано, вы увидите год выхода игры, а также поддерживаемые платформы.

Hang The Alien - абсолютно аналогичная игра. Единственное отличие то что вместо человека на виселице находится инопланетянин.

KHangMan - пользователь должен отгадать слово буква за буквой. Ему даётся 10 попыток, каждая неудачная попытка пририсовывает деталь изображения виселицы. На момент текущей версии программа доступна на 24 языках.

Постановка задач

Задание: Разработать программу, реализующей функцию игры “Игры в слова”.

Спецификация на программный продукт «Игра в слова».

1. Введение.

1.1. Цели

Разработка программы, реализующей функцию игры «Игра в слова».

1.2. Соглашения о терминах.

Курсив - выделение терминов.

1.3. Предполагаемая аудитория.

Документ предназначен для участников разработки.

1.4. Границы проекта.

Развивающий продукт. Область применения: домашние ПК.

2. Общее описание.

2.1. Видение продукта.

Совершенно новый продукт. Без возрастных ограничений.

2.2. Функциональность продукта.

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

2.3. Классы и характеристики пользователей.

Все классы пользователей.

2.4. Среда функционирования продукта (операционная среда).

OC Windows.

2.5. Рамки, ограничения, правила и стандарты.

Ограничения накладываются внутренним устройством выбранного ПО.

2.6. Документация для пользователя.

Руководство пользователя.

3. Функции.

3.1. Таблица рекордов.

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. Это очень полезно для составления уникальных приложений.

Оценка стиля программирования

1. Оценка модульности программы - 0.23

2. Оценка структурности кодирования - 50,44

3. Оценка структурированности - 0,342

4. Оценка читабельности - 0,421

Листинг файла Main.pas

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm)

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

Button1: TButton;

Label1: TLabel;

Button2: TButton;

Button3: TButton;

procedure FormCreate(Sender: TObject);

procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;

var CanSelect: Boolean);

procedure Button1Click(Sender: TObject);

procedure Zapolnenie; //Эту процедуру создали мы сами

procedure StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure Button3Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

S:TStringList; //Сюда загружаем вопросы из текстового файла

Zagadal, ZagadalTemp:String; //То что загадал компьютер .

{ZadalTemp - Это строка для проверки. Из неё мы удаляем пробелы и сверяем с тем что есть}

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

var i,j,k:Integer;

begin

StringGrid2.RowCount:=1;

StringGrid2.Height:=25;

StringGrid2.ScrollBars:=ssnone;

StringGrid2.DefaultColWidth:=25;

StringGrid2.FixedCols:=0;

StringGrid1.RowCount:=4;

StringGrid1.ColCount:=8;

StringGrid1.Width:=StringGrid1.DefaultColWidth*StringGrid1.ColCount;

StringGrid1.ScrollBars:=ssNone;

StringGrid1.FixedCols:=0;

StringGrid1.FixedRows:=0;

StringGrid1.Options:= [];

StringGrid1.Color:=Form1.Color;

Label1.WordWrap:=True;

Label1.AutoSize:=False;

Label1.Left:=10;

Label1.Top:=10;

Label1.Height:=50;

Label1.Width:=StringGrid1.Width;

Label1.Font.Style:=[fsBold];

Label1.Font.Size:=10;

StringGrid1.Left:=10;

StringGrid1.Top:=Label1.Top+Label1.Height+40;

StringGrid2.Top:=StringGrid1.Top+StringGrid1.Height+10;

Button1.Caption:='Начать игру';

Button1.Top:=StringGrid2.Top+StringGrid2.Height+20;

Form1.Height:=Button1.Top+Button1.Height+90;

Form1.Caption:='Игра в слова';

{Все с инспектором объектов типа закончили, дальше нужный код}

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

Can.Font.Color := 0;

Can.Brush.Color := StringGrid1.Color;

end;

Can.FillRect(Rect);

Can.TextOut(Rect.Left+2,Rect.Top+2, StringGrid.Cells[ACol, ARow]);

end;

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);

end;

{Созданная нами процедура заполняет StringGrid1 ,буквами}

procedure TForm1.zapolnenie;

var i,j,k:Integer;

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'); //Загружаем в него весь текстовый файл

Randomize; //Запускаем генератор случайных значений

end;

{Процедура для StringGrid2 из вкладки Events. Убирает выделение с ячейки}

procedure TForm1.StringGrid2DrawCell(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

Can.Font.Color := 0;

Can.Brush.Color := StringGrid1.Color;

end;

Can.FillRect(Rect);

Can.TextOut(Rect.Left+2,Rect.Top+2, StringGrid.Cells[ACol, ARow]);

end;

{Игнорируем нажатие стрелок на клавиатуре, для исключения переходов по таблице через них}

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 и получен опыт разработки программного продукта и документации к нему.

Размещено на Allbest.ru


Подобные документы

  • Приемы программирования в Delphi. Алгоритм поиска альфа-бета отсечения, преимущества. Описание программного средства. Разработка программы, реализующая алгоритм игры "реверси". Руководство пользователя. Листинг программы. Навыки реализации алгоритмов.

    курсовая работа [357,1 K], добавлен 28.02.2011

  • Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.

    курсовая работа [1,5 M], добавлен 17.01.2011

  • Особенности визуальной среды программирования Microsoft Visual Studio 2015 Enterprise. Средства объектно-ориентированного программирования. Этапы проектирования программного комплекса. Отладка и тестирование программы игры "Виселица".

    курсовая работа [2,4 M], добавлен 31.01.2016

  • Создание программы, реализующей игру "Линии". Среда разработки программы, описание ее общего вида. Основные алгоритмы программы. Реализация программы в среде разработки Microsoft Visual Studio 2008 на языке объектно-ориентированного программирования С++.

    курсовая работа [639,0 K], добавлен 16.03.2012

  • Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.

    курсовая работа [1,2 M], добавлен 04.08.2014

  • Разработка компьютерной программы, которая реализует игру "Арканоид". Освоение приемов программирования на языке С++ с использованием средств OpenGL, разбор структуры и логики игры, приобретение навыков работы с 3D графикой. Руководство пользователя.

    курсовая работа [1,2 M], добавлен 02.03.2017

  • Написание программы, состоящей из двух модулей и реализующей простейший калькулятор. Разработка алгоритма решения задачи, реализация его в среде программирования Delphi. Список использованных переменных. Блок-схема программы, руководство пользователя.

    курсовая работа [106,6 K], добавлен 16.06.2014

  • Характеристика основных принципов объектно-ориентированного программирования. Этапы разработки программы на языке C++, реализующей игру "Морской бой". Выбор языка программирования. Характеристика необходимых классов, наследований, виртуальных методов.

    курсовая работа [657,6 K], добавлен 17.06.2012

  • Разработка программы "Виселица" с использованием программной среды Visual Basic и средств объектно-ориентированного программирования: программные требования, описание алгоритма, блок-схема программы и дополнительной процедуры. Листинг программы.

    курсовая работа [188,2 K], добавлен 28.06.2009

  • История создания игры "Тетрис", смысл и правила данной головоломки. Разработка поля игры и фигур тетрамино. Процедуры и функции, используемые для реализации движения фигур, их поворота и складывания в ряды, удаления и подсчета количества целых рядов.

    курсовая работа [87,0 K], добавлен 02.02.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.