Игра Sokoban
Учреждение
образования
“Белорусский государственный университет информатики и
радиоэлектроники”
Кафедра ЭВМ
Пояснительная
записка
к курсовой
работе по курсу
Объектно-ориентированное
программирование
по теме:
Игра Sokoban
Выполнил:
Холупов
Р.Н.
Минск 2012
СОДЕРЖАНИЕ
Введение
. Обзор литературы
. Системное проектирование
. Функциональное проектирование
. Разработка программных модулей
. Руководство пользователя
Заключение
Литература
Введение
Все мы когда то были детьми, наверняка самые светлые
воспоминания и впечатления связаны у нас с играми.
Игра теснейшим образом связана с развитием
личности
Игра - это жизненно важный и необходимый элемент
в развитии как индивидуума, так и общества в целом.
В данной работе была реализована игра «Sokoban».
Sokoban (Soko-Ban, яп. сокобан - «кладовщик») - логическая игра-головоломка, в
которой игрок передвигает ящики по лабиринту, показанному в виде плана, с целью
поставить все ящики на заданные конечные позиции. Только один ящик может быть
передвинут за раз, причём герой игры - «кладовщик» - может только толкать
ящики, но не тянуть их. Поскольку игру достаточно сложно воссоздать физически,
обычно она реализуется в виде компьютерной игры.
Игра Sokoban была создана в 1980 году Hiroyuki
Imabayashi, и издана в 1982 году компанией Thinking Rabbit (Япония). Кроме
того, компания выпустила три сиквела: Boxxle, Sokoban Perfect и Sokoban
Revenge.
Игра была реализована для множества компьютерных
платформ, включая практически все домашние и персональные компьютеры. Также
существуют версии игры для карманных компьютеров, игровых приставок и мобильных
телефонов.
1.
Обзор литературы
# - язык программирования, сочетающий
объектно-ориентированные и аспектно-ориентированные концепции. Разработан в
1998-2001 годах группой инженеров под руководством Андерсa Хейлсбергa в
компании Microsoft как основной язык разработки приложений для платформы
Microsoft .NET. Компилятор с C# входит в стандартную установку самой .NET,
поэтому программы на нём можно создавать и компилировать даже без
инструментальных средств вроде Visual Studio.# относится к семье языков с
C-подобным синтаксисом, из них его синтаксис наиболее близок к С++ и Java. Язык
имеет строгую статическую типизацию, поддерживает полиморфизм, перегрузку
операторов, указатели на функции-члены классов, атрибуты, события, свойства,
исключения, комментарии в формате XML. Переняв многое от своих предшественников
- языков С++, Java, Delphi, Модула и Smalltalk - С#, опираясь на практику их
использования, исключает некоторые модели, зарекомендовавшие себя как
проблематичные при разработке программных систем: так, C# не поддерживает
множественное наследование классов (в отличие от C++).# разрабатывался как язык
программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего,
от возможностей самой CLR. Это касается, прежде всего, системы типов C#,
которая отражает FCL. Присутствие или отсутствие тех или иных выразительных
особенностей языка диктуется тем, может ли конкретная языковая особенность быть
транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии
1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует
ожидать и в дальнейшем. (Однако эта закономерность была нарушена с выходом C#
3.0, представляющим собой расширения языка, не опирающиеся на расширения
платформы .NET.) CLR предоставляет C#, как и всем другим .NET-ориентированным
языкам, многие возможности, которых лишены «классические» языки
программирования. Например, сборка мусора не реализована в самом C#, а
производится CLR для программ, написанных на C# точно так же, как это делается
для программ на VB.NET, J# и др.
. Системное
проектирование
. Структурное проектирование.
Рассмотрим основные функции, реализованные в
программе:
· Возможность выбора карты в произвольном порядке;
· Переход к следующему уровню без
прохождения предыдущего;
· Отмену последнего сделанного хода;
· Сохранение результатов игры;
· Просмотр результатов игроков;
. Структурная схема:
Рис.1. Структурная схема
3. Функциональное
проектирование
Диаграмма классов
Разработка детальной схемы будущей программы
производилась на унифицированном языке моделирования (UML), который является
стандартным инструментом для создания "чертежей" программного
обеспечения. С помощью UML можно визуализировать, специфицировать,
конструировать и документировать программы. Диаграмма классов приложения
представлена на Рис.2.
Рис.2. Диаграмма классов
partial class Form1 : Form
Основная форма
public
static int CellWeight = 70;
|
Ширина
единицы поля
|
public
static int CellHeight = 70;
|
Высота
единицы поля
|
public
static int result = 0;
|
Количество
сделанных ходов
|
public
static int level = 0;
|
Текущий
уровень
|
Field
myField;
|
Объект
типа Field
|
public
Image myimage;
|
Объект
типа Image
|
public
Form1()
|
Конструктор.
Происходит загрузка первой карты, в сответствии с которой устанавливаются
размеры окна.
|
protected
override void OnPaint(PaintEventArgs e)
|
Обновление(прорисовка)
окна игры. Вызывается автоматически.
|
Graphics
g = Graphics.FromHwnd(this.Handle);
|
Объект
типа Graphics
|
private
void Form1_Load(object sender, EventArgs e)
|
Загрузка
основной формы.
|
private
void Form1_KeyUp(object sender, KeyEventArgs e)
|
Обработка
нажатия клавиши
|
int
kol;
|
Количество
прорисовываемых клеток (0,2,3)
|
Объкт
Graphics
|
Image
myimage1 = new Bitmap(Properties.Resources.Empty);
|
Объкт
Image
|
public
void загрузитьКартуToolStripMenuItem_Click(object sender, EventArgs e)
|
Загрузка
карты
|
string
fileName = openFileDialog1.FileName;
|
Строка
с именем уровня
|
private
void выходToolStripMenuItem_Click(object sender, EventArgs e)
|
Выход
из игры
|
private
void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
|
Отображение
формы form2
|
private
void отменаХодаToolStripMenuItem_Click(object sender, EventArgs e)
|
Отмена
предыдущего хода
|
Graphics
g1 = Graphics.FromHwnd(this.Handle);
|
Объект
Graphics
|
Image
myimage1 = new Bitmap(Properties.Resources.Empty);
|
Объект
Image
|
private
void следующийУровеньToolStripMenuItem_Click(object sender, EventArgs e)
|
Загрузка
следующего уровня
|
private
void сохранитьРезультатToolStripMenuItem_Click(object sender, EventArgs e)
|
Сохранение
результата. Отображается форма form3
|
private
void посмотретьРезультыToolStripMenuItem_Click(object sender, EventArgs e)
|
Просмотр
реультатов. Отображается форма form4
|
partial class Field
Класс для работы с картой
public
int x, y;
|
Координаты
человечка
|
public
int x1, y1;
|
Координаты
направления хода
|
public
int count = 0;
|
Счетчик
поставленных на места ящиков
|
public
int count1 = 0;
|
Количество
крестиков(place)
|
public
int width;
|
Ширина
поля
|
public
int height;
|
Высота
поля
|
public
int NextLevel = 1;
|
Следующий
уровень
|
public
Item[,] f;
|
Карта
|
public
Item[,] f2;
|
Копия
карты для отмены хода
|
public
Item GetItem(char cur)
|
Возвращает
значение поля(Empty, Wall, Men, Box, Place, Boxplace, Menplace)
|
public
void ReadMap(StreamReader reader)
|
Считывание
карты из файла в массив
|
public
void CopyMap()
|
Копирование
карты для отмены хода
|
public
int Move(int x1, int y1)
|
Движение
человечка по полю
|
public
void Draw(int x1, int y1, Graphics g1, Image myimage1, int kol)
|
Прорисовка
ближайших клеток поля(две или три)
|
public
void OpenNextLevel()
|
Открытие
следующего уровня игры
|
partial class Form2 : Form
Форма для вывода информации об игре
public
Form2()
|
конструктор
|
private
void button1_Click(object sender, EventArgs e)
|
Закрытие
окна с информацией об игре
|
partial class Form3: Form
Форма для сохранения результатов игры
public
Form3()
|
Конструктор
|
public
void button1_Click(object sender, EventArgs e)
|
Запись
результатов игры в файл(если файл не существует, то он будет создан),
закрытие окна сохранения результатов
|
partial class Form4 : Form
Форма для просмотра результатов игры
public
Form4()Конструктор
|
Чтение
и вывод результатов из файла на экран, если файл с данным именем игрока
существует
|
private
void button2_Click(object sender, EventArgs e)
|
Закрытие
окна
|
4. Разработка
программных модулей
На рис.3 изображена блок-схема
метода отменаХодаToolStripMenuItem_Click()
Рис. 3. Метод отмена
ХодаToolStripMenuItem_Click()
На рис.4 изображена блок-схема метода ReadMap()
Рис. 4. Метод ReadMap()
На рис.5 изображена блок-схема метода OpenNextLevel()
Рис.5. Метод OpenNextLevel()
. Руководство пользователя
После запуска программы появляется окно игры с
уже загруженной картой первого уровня(рис.6):
Рис.6. Карта первого уровня
Крестиками отмечены те места, куда необходимо
переместить кубики. Красным цветом горят кубики, которые еще не поставлены на
крестики, зеленым - те, которые уже стоят на месте.
Используя клавиши на клавиатуре (стрелки вверх,
вниз, вправо, влево), поставьте все ящики на места. После того как вы это
сделали, появится окно для сохранения результата данного уровня(рис.7):
Рис.7. Окно для сохранения
Здесь необходимо ввести ваше имя, под которым
будет сохранен результат. После того, как Вы это сделали, нажимаем клавишу
«Готово». Результат сохранился и загружается автоматически следующий уровень
игры. Далее действия повторяются.
В игре реализована возможность выбора уровня для
прохождения в произвольном порядке. Для этого необходимо выбрать в меню «Файл»
пункт «Загрузить карту» и открыть необходимый уровень:
Рис. 8. Меню файл
Также возможен переход к следующему уровню не
проходя текущий. Для этого нужно открыть меню «Файл» и выбрать пункт «Следующий
уровень»(рис. 9). После нажатия уровень автоматически загрузиться.
Рис. 9. Следующий уровень
Вы можете также сделать отмену последнего
сделанного вами хода. Для этого необходимо в меню «Файл» выбрать пункт «Отмена
хода»(рис. 10). Загрузится предыдущее расположение объектов на карте.
Рис. 10. Отмена хода
Рис. 11. Просмотр результатов
Для того, чтобы просмотреть результаты игры
игрока, необходимо выбрать в меню «Файл» пункт «Просмотреть результаты». На
экране появляется диалоговое окно, где необходимо ввести имя игрока, результат
которого Вы хотите видеть. Нажимаем «Готово»:
Для просмотра информации о программе необходимо
выбрать пункт «О программе». Появится окно с информацией о создателе игры:
Рис.12. О программе
Заключение
игра sokoban программирование
В результате мною был написан аналог игры
«Sokoban». Поставленная задача выполнена.
Для корректной работы программы необходимы
следующие требования:
Минимальные требования:
процессор AMD
400 MHz (или
аналогичный); оперативная память 32 Мб; Windows
95/98/NT; монитор.
Желательные требования:
процессор AMD
800 MHz (или
аналогичный); оперативная память 64 Мб; Windows
XP; монитор с
поддержкой 32-ух битных цветов.
Список литературы
1. Microsoft
Corporation - MSDN
Library - January
2005;
. Герберт Шилд
«Программирование на C/C++»;
. Джордж Шеферд
«Программирование на Visual
C++.Net»;
4. http://www.microsoft.com/Rus/Msdn/publish/articles