Разработка интерактивного Win32-приложения в среде Microsoft Visual Studio
Знакомство с этапами и особенностями создания программы с помощью среды программирования MS Visual Studio C++ и с использованием библиотеки Microsoft Foundational Classes. Общая характеристика приложения, повторяющего общеизвестную игру "Колонки".
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 16.09.2014 |
Размер файла | 1,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Разработка интерактивного Win32-приложения в среде Microsoft Visual Studio
1.Постановка задания
Создание программы с использованием среды программирования MS Visual Studio C++ с использованием библиотеки Microsoft Foundational Classes (MFC).
Необходимо разработать алгоритм программы, которая выполняет перемещение фигур по экрану сверху вниз, координацию их местонахождения в соответствии с действиями играющего. Фигуры состоят из квадратов одинакового размера, набор фигур - конечный, последовательность выпадения фигур - случайная. Игрок должен вкладывать фигуры так, чтобы складывались рядом квадраты одинаковых цветов. При этом образованная из квадратов одинакового цвета фигура, должна автоматически исчезать. Результат - исполняемое приложение, повторяющее общеизвестную игру “Колонки”.
2.Описание интерфейса
игра программа microsoft
После запуска программы на экране появляется игровое поле с фигурой.
Рис.
Вверху экрана - игра. Игра содержит такие пункты:
* новая
* выход
Рис.
Имеется возможность выбрать уровень игры
Первый
Второй
Третий
Рис.
При проигрыше появляется информация о счёте.
Рис.
При составлении из кубиков одинакового цвета фигуры - фигура исчезает, баллы засчитываются в счёт.
Реализация в VS C++
#include<afxwin.h>
#include<stdio.h>
#include<time.h>
#include"resource.h"
#define size 20
//--------------------------------
// class Shape
//--------------------------------
class Shape
{
public:
bool cells[3][3]; // матрица сохраняет значение произведения для подвижного объекта
void NewShape(); // конструктор создает наш прямоугольник
void ClearShape(bool c[3][3]); // очищает матрицу cells[3][3]
};
void Shape::ClearShape(bool c[3][3])
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
c[i][j] = false;
}
void Shape::NewShape()
{
ClearShape(cells);
for (int i = 0; i < 3; i++)
cells[i][0] = true;
}
//
class TetrisWnd : public CFrameWnd
{
public:
TetrisWnd();
void NewShape(); //создает новый объект родительского класса наверху окна типа стартует
COLORREF ShapeColor(int color); // мы имеем 5 цветов эта функция возвращает rgb цвет соответственно от номера
void SetLevel(int); //изменение уровня
bool CheckLeft(); // проверка можно сместить влево
bool CheckRight(); // проверка можно сместить вправо
void ShowTitle(); // show the window title
void CheckForLine(); // проверяет 3 одинаковые элементы стоят в ряд
bool IsAtBottom(); // проверка нет ли дна
void MoveUp(); //сдвигает элементы вверх
void MoveDown();//сдвигает элементы вниз
void ClearStock(); // очищает сохранены цвета
CRect GetRect(); // возвращает прямоугольник для функции стандартной нужно
private:
CMenu menu;
Shape shape;
short stock[20][10]; //сохраняет цвета неподвижных элементов очень важен массив цветов
int curY; //координаты подвижного прямоугольника
int curX;
bool bGame; //в игре или нет
int score;
int level;
bool level1;
bool level2;
bool level3;
int color[3]; // сохраняет номера цветов
protected:
protected:
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
afx_msg void OnPaint();
afx_msg void OnTimer(UINT nIDEvent);
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);
afx_msg void OnGameNew();
afx_msg void OnGameExit();
afx_msg void OnClose();
afx_msg void OnLevelLevel1();
afx_msg void OnUpdateLevelLevel1(CCmdUI* pCmdUI);
afx_msg void OnLevelLevel2();
afx_msg void OnUpdateLevelLevel2(CCmdUI* pCmdUI);
afx_msg void OnLevelLevel3();
afx_msg void OnUpdateLevelLevel3(CCmdUI* pCmdUI);
afx_msg void OnHelpAbout();
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(TetrisWnd, CFrameWnd)
ON_WM_PAINT()
ON_WM_TIMER()
ON_WM_KEYDOWN()
ON_COMMAND(ID_GAME_NEW, OnGameNew)
ON_COMMAND(ID_GAME_EXIT, OnGameExit)
ON_WM_CLOSE()
ON_COMMAND(ID_LEVEL_LEVEL1, OnLevelLevel1)
ON_UPDATE_COMMAND_UI(ID_LEVEL_LEVEL1, OnUpdateLevelLevel1)
ON_COMMAND(ID_LEVEL_LEVEL2, OnLevelLevel2)
ON_UPDATE_COMMAND_UI(ID_LEVEL_LEVEL2, OnUpdateLevelLevel2)
ON_COMMAND(ID_LEVEL_LEVEL3, OnLevelLevel3)
ON_UPDATE_COMMAND_UI(ID_LEVEL_LEVEL3, OnUpdateLevelLevel3)
ON_COMMAND(ID_HELP_ABOUT, OnHelpAbout)
END_MESSAGE_MAP()
TetrisWnd::TetrisWnd()
{
CString s = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
AfxGetApp()->LoadStandardCursor(IDC_ARROW),
(HBRUSH)GetStockObject(BLACK_BRUSH),
AfxGetApp()->LoadIcon(IDI_ICON1));
Create(s, "Колонки");
menu.LoadMenu(IDR_MENU1);
SetMenu(&menu);
level = 700;
SetLevel(1);
srand(time(0));
ClearStock();
}
class MyApp : public CWinApp
{
public:
virtual BOOL InitInstance()
{
m_pMainWnd = new TetrisWnd;
m_pMainWnd->ShowWindow(SW_SHOWNORMAL);
return TRUE;
}
};
MyApp app;
//////////////////////////////////////////////////////////////////
BOOL TetrisWnd::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style &= ~WS_MAXIMIZEBOX;
cs.style &= ~WS_THICKFRAME;
cs.cx = 220; //размеры окна
cs.cy = 460;
return CFrameWnd::PreCreateWindow(cs);
}
void TetrisWnd::MoveUp()
{
int c = color[0];
color[0] = color[1];
color[1] = color[2];
color[2] = c;
}
void TetrisWnd::MoveDown()
{
int c = color[2];
color[2] = color[1];
color[1] = color[0];
color[0] = c;
}
void TetrisWnd::OnPaint() //перерисовки элементов самая главная процедура
{
CPaintDC dc(this);
CBrush brush;
for (int i = 0; i < 3; i++) //рисует новый подвижной элемент в соответствии с координатами
{
brush.CreateSolidBrush(ShapeColor(color[i]));
dc.SelectObject(&brush);
for (int j = 0; j < 3; j++)
{
if (shape.cells[i][j] == true)
dc.Rectangle(curX + j*size, curY + i*size, curX + (j + 1)*size, curY + (i + 1)*size);
}
brush.DeleteObject();
}
for (int i = 0; i < 20; i++) ///так как stock [i] [j] сохраняется все элементы то нам нужно их перерисовать
{
for (int j = 0; j < 10; j++)
{
if (stock[i][j] != -1)
{
brush.CreateSolidBrush(ShapeColor(stock[i][j]));
dc.SelectObject(&brush);
dc.Rectangle(j*size, i*size, (j + 1)*size, (i + 1)*size);
brush.DeleteObject();
}
}
}
}
CRect TetrisWnd::GetRect()
{
CRect r;
r.left = curX - size;
r.right = curX + size * 5;
r.top = curY - size;
r.bottom = curY + size * 5;
return r;
}
void TetrisWnd::OnTimer(UINT nIDEvent) //+ Нам нужно каждый раз следить или элемент может двигаться или ли сложилось 3 элемента в ряд
{
CPaintDC dc(this);
CBrush brush;
if (nIDEvent == 1 && bGame == true)
{
if (IsAtBottom()) //если элемент остановился
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
{
if (shape.cells[i][j] == true)
stock[curY / size + i][curX / 20 + j] = (color[i]); //сохраняем его цвета в массив неподвижных объектов есть stock чтобы позже его нарисовать
}
NewShape(); //создание нового подвижного объекта
if (IsAtBottom())
{
bGame = false;
}
InvalidateRect(GetRect());
CheckForLine(); //проверяем в 3 в ряд не собрались
return;
}
curY += 20;
InvalidateRect(GetRect());
}
else if (bGame == false)
{
KillTimer(1);
CString s;
s.Format("%d", score);
MessageBox("Вы проиграли !\rВаш счет : " + s);
}
CFrameWnd::OnTimer(nIDEvent);
}
void TetrisWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
switch (nChar)
{
case VK_CONTROL:
case VK_UP: MoveUp(); break;
case VK_LEFT: if (CheckLeft()) return; curX -= 20; break;
case VK_RIGHT: if (CheckRight()) return; curX += 20; break;
case VK_DOWN: MoveDown(); break;
case VK_SPACE: KillTimer(1); SetTimer(1, 20, NULL); break;
}
InvalidateRect(GetRect());
CFrameWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
void TetrisWnd::OnGameNew()
{
ClearStock();
score = 0;
bGame = true;
SetLevel(1);
NewShape();
ShowTitle();
Invalidate();
}
void TetrisWnd::ClearStock()
{
for (int i = 0; i < 20; i++)
for (int j = 0; j < 10; j++)
stock[i][j] = -1;
}
bool TetrisWnd::IsAtBottom()
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (shape.cells[i][j] == true)
{
if ((curY / 20 + i) >= 19 || stock[curY / 20 + i + 1][curX / 20 + j] != -1)
return true;
}
}
}
return false;
}
void TetrisWnd::CheckForLine()
{
int i, j, k, c = 0;
bool flag;
for (i = 0; i < 20; i++)
{
flag = false;
for (j = 0; j < 8; j++)
if (stock[i][j] == stock[i][j + 1] && stock[i][j + 1] == stock[i][j + 2] && stock[i][j] != -1 && stock[i][j + 1] != -1 && stock[i][j + 2] != -1) flag = true;
if (flag == true && j != 0)
{
c++;
score++;
ShowTitle();
for (k = i; k>0; k--)
{
for (j = 0; j < 10; j++)
{
stock[k][j] = stock[k - 1][j];
}
}
}
}
for (k = 0; k < c; k++)
for (j = 0; j < 10; j++)
stock[k][j] = -1;
for (j = 0; j < 10; j++)
for (i = 0; i < 20; i++)
{
if (stock[i][j] == stock[i + 1][j] && stock[i + 1][j] == stock[i + 2][j] && stock[i][j] != -1 && stock[i + 1][j] != -1 && stock[i + 2][j] != -1)
{
for (k = 0; k < 20; k++)
stock[k][j] = -1;
}
}
Invalidate();
}
void TetrisWnd::ShowTitle() //вывод результата
{
CString title;
title.Format("Колонки : %d", score);
SetWindowText(title);
}
bool TetrisWnd::CheckRight()
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (shape.cells[i][j] == true)
{
if ((curX / size + j) >= 9 || stock[curY / size + i][curX / size + j + 1] != -1)
return true;
}
}
}
return false;
}
bool TetrisWnd::CheckLeft()
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
if (shape.cells[i][j] == true)
{
if ((curX / size + j) <= 0 || stock[curY / size + i][curX / size + j - 1] != -1)
return true;
}
}
}
return false;
}
//системные функции
void TetrisWnd::OnGameExit()
{
OnClose();
}
void TetrisWnd::OnClose()
{
KillTimer(1);
CFrameWnd::OnClose();
}
void TetrisWnd::OnLevelLevel1()
{
SetLevel(1);
}
void TetrisWnd::OnUpdateLevelLevel1(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(level1);
}
void TetrisWnd::OnLevelLevel2()
{
SetLevel(2);
}
void TetrisWnd::OnUpdateLevelLevel2(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(level2);
}
void TetrisWnd::OnLevelLevel3()
{
SetLevel(3);
}
void TetrisWnd::OnUpdateLevelLevel3(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(level3);
}
void TetrisWnd::SetLevel(int lev)
{
level1 = level2 = level3 = false;
switch (lev)
{
case 1: level = 700; level1 = true; break;
case 2: level = 500; level2 = true; break;
case 3: level = 300; level3 = true; break;
}
}
void TetrisWnd::OnHelpAbout()
{
CDialog dlg(IDD_ABOUT);
dlg.DoModal();
}
COLORREF TetrisWnd::ShapeColor(int color)//цвета в соответствии с номера
{
switch (color)
{
case 0: return RGB(255, 0, 0);
case 1: return RGB(0, 0, 255);
case 2: return RGB(0, 255, 0);
case 3: return RGB(8, 232, 222);
case 4: return RGB(112, 41, 99);
}
return RGB(255, 255, 255);
}
void TetrisWnd::NewShape()
{
KillTimer(1);
SetTimer(1, level, NULL);
curY = 0;
curX = 60;
shape.NewShape();
for (int i = 0; i < 2; i++)
color[i] = (rand() %4);
do
{
color[2] = (rand() % 4);
} while (color[2] == color[1]);
}
Выводы
В данной курсовой работе была выполнена поставленная задача - создание исполняемого приложения, повторяющего общеизвестную игру “Колонки”. При помощи этой программы можно приятно провести время, совершенствовать координацию и развивать логическое мышление. Программа не занимает много места, не требовательна к установленному программному обеспечению.
Размещено на Allbest.ru
...Подобные документы
Объектно-ориентированная технология создания программ. Среда разработки Visual Studio.NET. Особенности среды Microsoft Visual Studio 2010. Приложения C# для расчетов по формулам, консольный ввод-вывод. Форматирование значений данных. Программы с циклами.
методичка [2,1 M], добавлен 11.09.2014Общие сведения о работе программы в среде программирования Microsoft Visual Studio 2008, на языке программирования C++. Ее функциональное назначение. Инсталляция и выполнение программы. Разработанные меню и интерфейсы. Алгоритм программного обеспечения.
курсовая работа [585,5 K], добавлен 24.03.2009Создание приложения Windows Forms в среде Microsoft Visual Studio 2008. Разработка программы "Курсовой" для организации работы по учёту курсовых работ в учебных заведениях с возможностью добавления, удаления, редактирования и поиска информации.
курсовая работа [2,2 M], добавлен 28.06.2011Теоретические основы разработки Windows-приложений с использованием библиотеки MFC. Создание приложения с помощью Visual C++. Описание логической структуры приложения. Установка и запуск программы. Входные и выходные данные. Преимущество MFC библиотек.
курсовая работа [563,2 K], добавлен 21.06.2011Создание программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С# средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Определение математического аппарата, применение его в задаче.
курсовая работа [500,4 K], добавлен 13.01.2015Разработка игры "Угадай персонажа", ее суть и содержание. Запоминание новых персонажей и вопросов, коррекция базы данных. Использование языка программирования С++ и среды разработки Microsoft Visual Studio 2010. Алгоритмы и методы, структура программы.
курсовая работа [571,9 K], добавлен 14.07.2012Теоретические основы написания Windows-приложений с использованием библиотеки MFC. Основы программирования под Windows. Проектирование приложений в среде Microsoft Visual C++. Описание логической структуры приложения, его функциональное назначение.
курсовая работа [1,3 M], добавлен 12.12.2011Microsoft Visual C++ и среда программирования Microsoft Developer Studio 6.0. Решение интеллектуальной задачи на компьютере. Построение алгоритма кодирования на Visual C++. Алгоритм решения задачи. Описание программы "Sort". Инструкции пользователя.
курсовая работа [46,0 K], добавлен 27.11.2007Средства интегрированной среды Microsoft Visual Studio, предоставляемые программисту для реализации программ на языке С++. Особенности стиля написания программ. Типовые приемы и методы создания и отладки программ. Листинги программ и их тестирование.
лабораторная работа [814,3 K], добавлен 26.05.2013Изучение особенностей проектирования прикладных программ с помощь средств Visual Studio 2010 на языке C#. Расчет конического соединения, конусного градиента, усилия для разрыва соединения и требуемой силы сжатия. Реализация и тестирование программы.
курсовая работа [1,7 M], добавлен 19.02.2013Разработка и освоение в современном производстве информационной подсистемы. Создание базы данных в среде MS SQL Server 2008 и приложения в среде MS Visual Studio 2012. Процесс ввода при выборе пунктов меню. Заполнение формы с критериями на фильтрацию.
отчет по практике [834,4 K], добавлен 27.11.2013Разработка программного продукта, предназначенного для тестирования знаний пользователя по теме "Тепловые двигатели" нa языкe C++ в среде Micrоsоft Visual Studio с использовaниeм библиотeки MFC. Функциональное назначение созданного Windows-приложения.
курсовая работа [954,4 K], добавлен 25.06.2011Техника создания графики при помощи API функций, экспортируемых библиотекой GDI32.DLL. Разработка на языке программирования С++ в среде программирования Microsoft Visual C++ программы для отображения часов реального времени в цифровом и аналоговом виде.
курсовая работа [2,8 M], добавлен 27.01.2010Разработка программы FileInfo, выдающей полную информацию о заданном файле с применением языка программирования С++, используя API функции Win 32. Использование пространств имён .NetFramework. Руководство пользователя и системные требования программы.
курсовая работа [1,2 M], добавлен 25.04.2012Разработка приложения с помощью среды Microsoft Visual Studio 2010 Express. Интерфейс приложения. Разработка конечного программного продукта, демонстрирующего работу многопоточного приложения, использующего взаимоисключение на основе критической секции.
лабораторная работа [300,4 K], добавлен 21.07.2012Технология создания многопоточных приложений в современных системах программирования с использованием языка C# в Visual Studio.NET. Разработка алгоритма и структуры программы. Описание и особенности тестирования приложения с разным количеством потоков.
курсовая работа [773,0 K], добавлен 14.03.2013Создание приложения на языке программирования Visual C++ с использованием библиотеки MFC на тему "Тестирование по разделу "Законы механики Ньютона". Описание логической структуры программы, тестовых прогонов. Требования к техническому обеспечению.
курсовая работа [2,2 M], добавлен 29.06.2011Разработка алгоритма программного бизнес-приложения в интегрированной среде Microsoft Visual Studio 2005 на языке С#, в целях автоматизации работы помощника инспектора ПТО, регистрирующего и направляющего на технический осмотр транспортные средства.
дипломная работа [1,8 M], добавлен 24.12.2013Виды и принципы компьютерного моделирования. Среда моделирования Microsoft Robotic Studio. Моделирование пространства и объектов рабочей области с помощью визуальной среды Visual Simulation Environment. Создание программы управления мобильным роботом.
дипломная работа [5,0 M], добавлен 15.06.2014Общая характеристика сетевой игры с несколькими клиентами в программной среде MS Visual Studio 2010 на языке программирования C++ с использованием функций работы с сокетами. Реализация системного сервиса, разработки интерфейса, алгоритм его тестирования.
курсовая работа [495,3 K], добавлен 06.01.2013