Игра "Линии"
Создание программы, реализующей игру "Линии". Среда разработки программы, описание ее общего вида. Основные алгоритмы программы. Реализация программы в среде разработки Microsoft Visual Studio 2008 на языке объектно-ориентированного программирования С++.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 16.03.2012 |
Размер файла | 639,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
КУРСОВАЯ РАБОТА
По дисциплине «Практика на ЭВМ»
Тема
Игра «Линии»
Содержание
1. Постановка задачи
2. Описание программы
2.1 Среда разработки программы
2.2 Описание общего вида программы
3. Описание основных алгоритмов
4. Примеры работы программы
Список литературы
1. Постановка задачи
Целью курсовой работы является создание программы, реализующую игру «Линии». На поле 10x10 позиций строятся линии из одноцветных шаров. Перед каждым ходом игрока на поле случайным образом появляются три разноцветных шара. Игрок перемещает шар по полю с помощью мыши. Если удалось построить линию из пяти шаров одного цвета, они исчезают. Игра заканчивается, если на поле не остается свободных позиций для вывода шаров. Реализовать статистику игры.
2. Описание программы
2.1 Среда разработки программы
Программа реализована в среде разработки Microsoft Visual Studio 2008 на языке объектно-ориентированного программирования С++ с применением библиотеки классов MFC (Microsoft Foundations Classes). Программа создана на основе MFC-приложения с однодокументным интерфейсом. Преимуществами использования MFC и однодокументного приложения являются:
Библиотека содержит многоуровневую иерархию классов, насчитывающую около 200 членов. Они дают возможность создавать Windows-приложения на базе объектно-ориентированного подхода;
возможность многократного использования одного и того же кода;
упрощение взаимодействия с прикладным программным интерфейсом (API) Windows.
2.2 Описание общего вида программы
Программа содержит одно основное окно: “Untitled-lines”. При запуске программы появляется окно “Untitled-lines”, показанное на рис. 1.
Рис. 1. Вид окна “Untitled-lines”
Приведем описание элементов, расположенных на данном окне.
Описание окна “Untitled-lines”
Окно “Untitled-lines” представляет собой основное окно программы, в котором отображается игра Линии.
Перечислим основные элементы данного окна:
1. Элемент “Поле” представляет собой графический элемент, на котором производится игра Линии.
2. Окно содержит два меню «Игра», «Справка».
Меню «Игра» содержит набор инструментов для управления программой (см. рис. 2). Оно имеет следующие пункты:
2.1. Пункт “Новая игра” - позволяет начать новую игру.
2.2 Пункт «Открыть» - позволяет открыть файл.
2.3 Пункт «Сохранить» - позволяет сохранить игру.
2.4 Пункт «Статистика» - позволяет вывести статистику игры (см. рис 3).
2.5 Пункт «Выход» - позволяет выйти из игры.
Рис.2 Вид окна «Игра»
Рис.3. Вид окна «Статистика»
3. Меню «Справка» содержит данные о проекте lines (см. рис. 4). Оно имеет один пункт:
3.1 «О проекте»: Отображает окно с технической информацией (см. рис.5).
Рис. 4. Меню «Справка»
Рис. 5. Вид окна «О проекте»
3. Описание основных алгоритмов
При запуске программы появляется диалоговое окно “Untitled-lines”. В окне идет реализация игры.
Приведем последовательность действий алгоритма работы программы:
Алгоритм сначала в случайном порядке кидает 5 шариков.
{
m_iNumOfBalls=0; //Шариков на поле пока нет
m_iNumOfPoints=0;//Количество очков (пока ноль)
srand(GetTickCount()%32000); //Инициализируем датчик случайных чисел
for(int j=0;j<m_iNumOfRows;j++){
for(int i=0;i<m_iNumOfRows;i++){
m_field[i][j]=0; //заполняем поле нулями
}
}
Throw3Balls(5);//кидаем пять начальных шариков.
CString s1;
s1.Format(L"5 balls, 0 points");
return TRUE;
}
2.Алгоритм действий производимых с шариком.
{
int x, y;//место, в которое кидаем шарик
int iColor; //цвет шарика
if(iNum!=0){
for(int i=0;i<iNum;i++){
//выбор свободного места
do{
x=rand()%m_iNumOfRows;
y=rand()%m_iNumOfRows;
}while(m_field[x][y]!=0);
//выбор цвета
iColor=rand()%m_iNumOfColors+1;
SetField(x,y,iColor); //ставим шарик нужного цвета
Is5InLine(x, y, false);
}
return true;
{
//обмен шарика и пустого места
int iTmp;
iTmp = m_field[xTo][yTo];
SetField(xTo, yTo, m_field[xFrom][yFrom]);
SetField(xFrom, yFrom, iTmp);
}
3. Алгоритм проверяет совпала ли линия.
{
//проверяет, есть ли 5 или более шариков подряд
//int x1=x, y1=y;//координаты поля справа, слева и т.п.
int i;//смещение относительно точки (x, y)
bool bSeeFuther;//смотрим ли далее
//число совпадений вправо, влево, вверх и вниз
int iO=0, iW=0, iN=0, iS=0;
//число совпадений вправо-вверх, влево-вверх, вправо-вниз и влево-вниз
int iNO=0, iNW=0, iSO=0, iSW=0;
bool bRes =false;//возвращемое значение
//смотрим вправо
bSeeFuther=true;
i=1;
while(x+i<iNumOfRows && bSeeFuther)
{//если поле справа существует
bSeeFuther=false;
if(m_field[x+i][y]==m_field[x][y]){//и его цвет совпадает с цветом (x,y)
iO++;//увеличиваем счётчик совпадений вправо
bSeeFuther=true;
}
i++;
};
//смотрим влево
bSeeFuther=true;
i=1;
while(x-i>=0 && bSeeFuther){//если поле справа существует
bSeeFuther=false;
if(m_field[x-i][y]==m_field[x][y]){//и его цвет совпадает с цветом (x,y)
iW++;//увеличиваем счётчик совпадений вправо
bSeeFuther=true;
}
i++;
};
//смотрим вниз
bSeeFuther=true;
i=1;
while(y+i<iNumOfRows && bSeeFuther){//если поле справа существует
bSeeFuther=false;
if(m_field[x][y+i]==m_field[x][y]){//и его цвет совпадает с цветом (x,y)
iS++;//увеличиваем счётчик совпадений вправо
bSeeFuther=true;
}
i++;
};
//смотри вверх
bSeeFuther=true;
i=1;
while(y-i>=0 && bSeeFuther){//если поле справа существует
bSeeFuther=false;
if(m_field[x][y-i]==m_field[x][y]){//и его цвет совпадает с цветом (x,y)
iN++;//увеличиваем счётчик совпадений вправо
bSeeFuther=true;
}
i++;
};
/////////////проверки диагоналей/////////////
//смотрим вправо-вниз
bSeeFuther=true;
i=1;
//если поле справа внизу существует
while(x+i<iNumOfRows && y+i<iNumOfRows && bSeeFuther){
bSeeFuther=false;
if(m_field[x+i][y+i]==m_field[x][y]){//и его цвет совпадает с цветом (x,y)
iSO++;//увеличиваем счётчик совпадений вправо
bSeeFuther=true;
}
i++;
};
//смотрим вверх-влево
bSeeFuther=true;
i=1;
while(x-i>=0 && y-i>=0 && bSeeFuther){//если поле слева вверху существует
bSeeFuther=false;
if(m_field[x-i][y-i]==m_field[x][y]){//и его цвет совпадает с цветом (x,y)
iNW++;//увеличиваем счётчик совпадений вправо
bSeeFuther=true;
}
i++;
};
//смотрим вправо-вверх
bSeeFuther=true;
i=1;
while(x+i<iNumOfRows && y-i>=0 && bSeeFuther){//если поле справа вверху существует
bSeeFuther=false;
if(m_field[x+i][y-i]==m_field[x][y]){//и его цвет совпадает с цветом (x,y)
iNO++;//увеличиваем счётчик совпадений вправо
bSeeFuther=true;
}
i++;
};
//смотрим вниз-влево
bSeeFuther=true;
i=1;
while(x-i>=0 && y+i<iNumOfRows && bSeeFuther){//если поле слева внизу существует
bSeeFuther=false;
if(m_field[x-i][y+i]==m_field[x][y]){//и его цвет совпадает с цветом (x,y)
iSW++;//увеличиваем счётчик совпадений вправо
bSeeFuther=true;
}
i++;
};
//запоминаем, сколько шариков было до удаления
int iWasNumOfBalls = m_iNumOfBalls;
if(iS+iN+1>=5){//есть 5 в ряд
Delete5InLine(x,y-iN,x,y+iS);
bRes=true;
//return true;
}
if(iO+iW+1>=5){//есть 5 в ряд
Delete5InLine(x-iW,y,x+iO,y);
bRes=true;
//return true;
}
//есть 5 в ряд по диагонали слева-сверху справа-снизу
if(iNW+iSO+1>=5){
Delete5InLine(x-iNW,y-iNW,x+iSO,y+iSO);
bRes=true;
//return true;
}
//есть 5 в ряд по диагонали справа-сверху слева-снизу
if(iSW+iNO+1>=5){
Delete5InLine(x+iNO,y-iNO,x-iSW,y+iSW);
bRes=true;
//return true;
}
if(bAddPoints){
m_iNumOfPoints+=CalcPoints(iWasNumOfBalls-m_iNumOfBalls);
}
return bRes;//нет 5 в ряд
}
int ClinesDoc::CalcPoints(int iNumDeletedBalls)
{
int iRes;
if(iNumDeletedBalls<5){
return 0;
}
else{
iRes = 2* iNumDeletedBalls*iNumDeletedBalls
-20*iNumDeletedBalls+60;
}
return iRes;
}
void ClinesDoc::Delete5InLine(int x1, int y1, int x2, int y2)
{
//удаляет 5 шариков, расположенных в ряд
//от поля (x1, y1) до поля (x2, y2).
int i;
//удаление по горизонтали
if(y1==y2){
for(i=x1;i<=x2;i++){
if(m_field[i][y1]!=0){
SetField(i,y1,0);
}
}
}
//удаление по вертикали
if(x1==x2){
for(i=y1;i<=y2;i++){
if(m_field[x1][i]!=0){
SetField(x1,i,0);
}
}
}
//удаление по диагонали сверху-слева - снизу-справа
if((x1<x2) && (y1<y2)){
for(i=x1;i<=x2;i++){
if(m_field[i][y1-x1+i]!=0){
SetField(i,y1-x1+i,0);
}
}
}
//удаление по диагонали снизу-слева - сверху-справа
if((x1>x2) && (y1<y2)){
for(i=y1;i<=y2;i++){
if(m_field[x1+y1-i][i]!=0){
SetField(x1+y1-i,i,0);
}
}
}
}
4. Алгоритм окончания программы.
void ClinesDoc::StopGame(void)
{
AfxMessageBox(L"Игра закончена!");
//MessageBox(L"Игра закончена!+\nИгра закончена!+\nИгра закончена!+\nИгра закончена!+\nИгра закончена!");
/*Form *f = new Form();
f->*/
}
В данной процедуре мы сначала при запуске кидаем 5 шариков в случайном порядке. Потом перетаскиваем шарики, чтобы собрать линию из 5 одинаковых шариков. Игра заканчивается, когда поле будет полностью заполнено.
программа алгоритм игра объектный ориентированный
4. Примеры работы программы
Приведем примеры работы программы.
На рис. 6 приведен вид программы в процессе игры.
Рис. 6
На рис. 7 демонстрируется результат когда игра завершена.
Рис. 7
Список литературы
Павловская, Т. А. C/C++. Программирование на языке высокого уровня / Т. А. Павловская. - СПб.: Питер, 2010. - 461 с.
Прата, С. Язык программирования С++. Лекции и упражнения / С. Прата. М.: Вильямс, 2006. - 1184 с.
3. Богуславский, А.А. Основы программирования на языке Си++. Часть 4: Программирование для Microsoft Windows с использованием Visual C++ и библиотеки классов MFC / А. А. Богуславский, С.М. Соколов. - Коломна: КГПИ, 2002. - 490 с.
Размещено на Allbest.ru
Подобные документы
Характеристика основных принципов объектно-ориентированного программирования. Этапы разработки программы на языке C++, реализующей игру "Морской бой". Выбор языка программирования. Характеристика необходимых классов, наследований, виртуальных методов.
курсовая работа [657,6 K], добавлен 17.06.2012Разработка игры "Угадай персонажа", ее суть и содержание. Запоминание новых персонажей и вопросов, коррекция базы данных. Использование языка программирования С++ и среды разработки Microsoft Visual Studio 2010. Алгоритмы и методы, структура программы.
курсовая работа [571,9 K], добавлен 14.07.2012Объектно-ориентированная технология создания программ. Среда разработки Visual Studio.NET. Особенности среды Microsoft Visual Studio 2010. Приложения C# для расчетов по формулам, консольный ввод-вывод. Форматирование значений данных. Программы с циклами.
методичка [2,1 M], добавлен 11.09.2014Создание программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С# средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Определение математического аппарата, применение его в задаче.
курсовая работа [500,4 K], добавлен 13.01.2015Общие сведения о работе программы в среде программирования Microsoft Visual Studio 2008, на языке программирования C++. Ее функциональное назначение. Инсталляция и выполнение программы. Разработанные меню и интерфейсы. Алгоритм программного обеспечения.
курсовая работа [585,5 K], добавлен 24.03.2009Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.
курсовая работа [1,0 M], добавлен 26.12.2013Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.
курсовая работа [572,7 K], добавлен 14.07.2012Разработка программы "Виселица" с использованием программной среды Visual Basic и средств объектно-ориентированного программирования: программные требования, описание алгоритма, блок-схема программы и дополнительной процедуры. Листинг программы.
курсовая работа [188,2 K], добавлен 28.06.2009Изучение методов разработки приложений в среде визуального программирования Visual Studio. Создание программы, реализующей заказ железнодорожных билетов. Язык SQL-запросов в системе управления базами данных MS Access. Тестирование созданной программы.
курсовая работа [1,0 M], добавлен 03.07.2016Особенности разработки приложений для операционной системы с помощью императивного, структурированного, объектно-ориентированного языка программирования Delphi. Формальное начало программы. Выделение конца программного блока. Листинг и описание программы.
курсовая работа [1,2 M], добавлен 04.08.2014