Игра "Parovoz"

Запуск программы "Parovoz" в среде Windows, правила игры. Метод решения задачи, описание используемых классов, структур и функций. CApp - класс приложения, обеспечивающий инициализацию, выполнение и завершение программы. Основные образы окна приложения.

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

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

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

Государственный комитет Российской Федерации

по высшему образованию

Казанский государственный технический университет

имени А.Н. Туполева

Кафедра АСОИУ

КУРСОВАЯ РАБОТА

по основам программирования

ИГРА «Parovoz»

ИСПОЛНИТЕЛЬ: студентка группы 4221

Петрова Е.Г.

РУКОВОДИТЕЛЬ: Вафин Р.Р.

Содержание

  • 1. Описание применения
    • 1.1 Запуск программы
    • 1.2 Правила игры
  • 2. Описание программы
    • 2.1 Метод решения задачи
    • 2.2 Описание используемых классов, структур и функций
      • 2.2.1 CApp - класс приложения
      • 2.2.2 CМainWnd- класс главного окна
      • 2.2.3 Карта сообщений
  • 2.3 Образ главного окна
  • Приложение
    • Листинг файла main.cpp
    • Листинг файла main.h
    • Листинг файла menu1.h
    • Листинг файла menu1.rc
  • 1. Описание применения

1.1 Запуск программы

Запуск программы необходимо производить, находясь в среде Windows 95: запускаемый файл - parovoz.exe.

1.2 Правила игры

После запуска игры, на экране появляется окно с надписью «выберите пункт старт». Окно имеет меню, состоящее из нескольких пунктов. С помощью пунктов меню можно: изменять цвет движущегося объекта (паровозика в красный, синий, зелёный), начать (перезапустить), осуществить выход из игры. После выбора пункта меню «старт», в левом нижнем углу окна появляется паровоз, представляющий собой совокупность геометрических фигур - эллипсов (колёса) и прямоугольников (кабина, трубы). Паровоз движется слева направо и останавливается перед светофором, расположенным приблизительно в середине окна над паровозом. Пользователь имеет возможность регулировать цветом светофора нажатием клавиш `к', `з', `ж', соответствующим цветам светофора - красному, зеленому, жёлтому. Если паровоз подъезжает к светофору, а у светофора активным является зелёный цвет, он продолжает своё движение. В противном случае, паровоз останавливается. При достижении правой стенки, паровоз появляется у левой стенки, а активным цветом светофора становится жёлтый цвет. Из верхней части паровоза постоянно поднимаются в верхнюю часть окна окружности, представляющие собой клубни дыма, которые увеличиваются при подъёме.

2. Описание программы

2.1 Метод решения задачи

Программа выполнена в стиле объектно-ориентированного программирования, использованна библиотека MFC. Сама программа - приложение Windows. Для вывода графических объектов используются функции: Elliplse, Rectangle. Программой обрабатываются события от таймера, нажатия клавиш на клавиатуре, выбором соответствующих пунктов меню, а также событие WM_PAINT для перерисовки рабочей области.

2.2 Описание используемых классов, структур и функций

2.2.1 CApp - класс приложения

CApp - класс приложения, порождается классом CWinApp библиотеки MFC обеспечивает инициализацию, выполнение и завершение Windows программы: регистрирует создаёт и отображает основное окно приложения.

Член-функции класса CApp:

InitInstance - виртуальная функция, переопределяется в классе CApp

2.2.2 CМainWnd - класс главного окна

CMainWnd - класс главного окна приложения, наследуется из класса CFrameWnd библиотеки MFC.)

Член - данные класса СMainWnd:

CRect wnd; /*размер окна*/

CRect kol1,kol2,korp,kr,temp; /*прямоугольники*/

CRect svet,ball1,ball2,ball3;/*прямоугольники*/

CBrush br1[3],br2; /*кисти*/

CBrush sv[4]; /*цвета светофора*/

CRect noga; /*нога светофора*/

CRect balls[5]; /*шарики дыма*/

CRect kr2; //кабина

int numball; //номер дыма

int live[5]; //признак жизни дыма

bool game; /*признак игры или вне игры*/

int color; /*номер цвета паровоза*/

int ns; /*номер увета светофора*/

int move; /*флаг движения паровоза*

/Член - функции класса СMainWnd :

CmainWnd(); - конструктор класса окна

afx_msg void OnBegin();обработчик события на выбор пункта меню «старт»

afx_msg void OnRed(); - обработчик события на выбор пункта меню «Red»

afx_msg void OnGreen(); - обработчик события на выбор пункта меню «Green»

afx_msg void OnBlue(); - обработчик события на выбор пункта меню «Blue»

afx_msg void OnPaint(); - ф-ия перерисовки

afx_msg void OnTimer( UINT nIDEvent ); - обраб-чик таймера

afx_msg void OnExit(); - обработчик события на выбор пункта меню «Exit»

afx_msg void OnChar( UINT nChar, UINT nRepCnt, UINT nFlags ); - реакция на нажатие клавиши клавиатуры

DECLARE_MESSAGE_MAP() - карта сообщений

2.2.3 Карта сообщений

BEGIN_MESSAGE_MAP(CMainWnd,CFrameWnd)

ON_COMMAND(IDM_EXIT,OnExit)

ON_COMMAND(IDM_BEGIN,OnBegin)

ON_COMMAND(IDM_RED,OnRed)

ON_COMMAND(IDM_GREEN,OnGreen)

ON_COMMAND(IDM_BLUE,OnBlue)

ON_WM_PAINT()

ON_WM_TIMER()

ON_WM_CHAR()

END_MESSAGE_MAP()

2.3 Образ главного окна

На рисунках 1, 2 представлены основные образы окна приложения.

Приложение

Листинг файла main.cpp

/* в этом файле находятся описания всех функций */

#include <afxwin.h>

#include "main.h"

#include "menu1.h"

CMainWnd::CMainWnd() /*конструктор гл. окна*/

{

wnd.SetRect(0,0,400,355);//устан-ка размеров окна

Create(NULL,"parovoz",WS_DLGFRAME ,wnd,NULL,"MAINMENU");

game=false; /*нет игры*/

color=0; /*нач. цвет поезда*/

ns=0; /*нач. цвет светофора*/

br1[0].CreateSolidBrush(RGB(255,0,0));//создание кистей

br1[1].CreateSolidBrush(RGB(0,255,0));

br1[2].CreateSolidBrush(RGB(0,0,255));

sv[0].CreateSolidBrush(RGB(255,0,0));//создание кистей

sv[1].CreateSolidBrush(RGB(0,255,0));//светофора

sv[2].CreateSolidBrush(RGB(255,255,0));

sv[3].CreateSolidBrush(RGB(128,128,128));

br2.CreateSolidBrush(RGB(1,1,1));/*чёрный цвет*/

for(numball=0;numball<5;numball++)

{//обнуление признаков жизни дыма

live[numball]=0;

}

}

BOOL CApp:: InitInstance()/*ф-ия инициализации окна*/

{

m_pMainWnd=new CMainWnd; /*созд объекта окна*/

m_pMainWnd->ShowWindow(m_nCmdShow); /*показать окно*/

return true; /*удачное завершение*/

}

afx_msg void CMainWnd::OnPaint() /*ф-ия перерисовки*/

{

CPaintDC dc(this); /*созданиее контекста окна*/

dc.SelectObject(&br2); /*выбор кисти для светофора*/

dc.Rectangle(svet); //рисование корп. светофора

dc.Rectangle(noga); //рисование ноги

for(numball=0;numball<5;numball++)

{//рисование дыма

if(live[numball]==1)//если дым активен

{

dc.Ellipse(balls[numball]);

}

}

switch(ns) /*переключение между цветами светофора*/

{

case 0: /*если красный*/

{

dc.SelectObject(sv[0]);

dc.Ellipse(ball1);

dc.SelectObject(sv[3]);

dc.Ellipse(ball2);

dc.Ellipse(ball3);

break;

}

case 1: /*если жёлтый*/

{

dc.SelectObject(sv[2]);

dc.Ellipse(ball2);

dc.SelectObject(sv[3]);

dc.Ellipse(ball1);

dc.Ellipse(ball3);

break;

}

case 2:/*еесли зеленый*/

{

dc.SelectObject(sv[1]);

dc.Ellipse(ball3);

dc.SelectObject(sv[3]);

dc.Ellipse(ball1);

dc.Ellipse(ball2);

break;

}

}

dc.SelectObject(br1[color]); /*рисование паровоза*/

dc.Rectangle(korp); //корпус

dc.SelectObject(&br2);

dc.Rectangle(kr); //труба

dc.Rectangle(kr2); //кабина

dc.Ellipse(kol1); //колеса

dc.Ellipse(kol2);

char *s="выберете меню старт.";//начальная надпись

if(game==0) dc.TextOut(50,100,s,strlen(s));

}

void CMainWnd::OnExit() /*реакция на выход*/

{

SendMessage(WM_CLOSE); /*послать сообщение о закрытии окна*/

}

afx_msg void CMainWnd::OnTimer( UINT nIDEvent )

{/*обработчик таймера*/

if(game) /*если находимся в игре*/

{

if(nIDEvent==2)//запуск дыма

{

for(numball=0;numball<5;numball++)

{//если дым не активен, активизировать

if(live[numball]==0)

{

live[numball]=1;

balls[numball].SetRect(korp.left+35,kr.top-10,kr.right-5,korp.top);

break;

}

}

}

for(numball=0;numball<5;numball++)

{//сохранить предыдущ. положение дыма

temp.CopyRect(balls[numball]);

if(live[numball]==1)//если дым активен

{

balls[numball].OffsetRect(1,-6);//сместить дым

balls[numball].top--; //изменить размеры

balls[numball].right++;

InvalidateRect(temp); //перерисовать

InvalidateRect(balls[numball]);

if(balls[numball].top<=0) live[numball]=0;//убить

}

}

if( (korp.right<=svet.left)||(korp.left>=svet.left+3)||(move==1))

{ /*если не около светофора или зеленый цвет*/

if(korp.left<400)/*если не стена*/

{

temp.CopyRect(korp); /*сохранить предыдущие координаты*/

//сместить всю машину

korp.OffsetRect(3,0);

InvalidateRect(temp);

InvalidateRect(korp);

temp.CopyRect(kol1);

kol1.OffsetRect(3,0);

InvalidateRect(temp);

InvalidateRect(kol1);

temp.CopyRect(kol2);

kol2.OffsetRect(3,0);

InvalidateRect(temp);

InvalidateRect(kol2);

temp.CopyRect(kr);

kr.OffsetRect(3,0);

InvalidateRect(temp);

InvalidateRect(kr);

temp.CopyRect(kr2);

if(kr2.top==270)

{

kr2.top=275;

}

else kr2.top=270;

kr2.OffsetRect(3,0);

InvalidateRect(temp);

InvalidateRect(kr2);

}

else/*возврат в левую стенку*/

{

korp.SetRect(0,288,50,300);

kr.SetRect(30,280,40,288);

kr2.SetRect(10,270,25,288);

kol1.SetRect(5,295,15,305);

kol2.SetRect(35,295,45,305);

ns=1;

move=0;

InvalidateRect(ball1);

InvalidateRect(ball2);

InvalidateRect(ball3);

}

}

}

}

afx_msg void CMainWnd::OnRed()

{/*реакция на выбор красного цвета*/

color=0;

}

afx_msg void CMainWnd::OnGreen()

{/*выбор зеленого цвета*/

color=1;

}

afx_msg void CMainWnd::OnBlue()

{

color=2;

}

afx_msg void CMainWnd::OnBegin()

{

game=true;

color=0;

move=0;

svet.SetRect(200,100,240,230);

noga.SetRect(210,230,230,250);

ball1.SetRect(210,110,230,140);

ball2.SetRect(210,150,230,180);

ball3.SetRect(210,190,230,220);

korp.SetRect(0,288,50,300);

kr.SetRect(30,280,40,288);

kr2.SetRect(10,270,25,288);

kol1.SetRect(5,295,15,305);

kol2.SetRect(35,295,45,305);

SetTimer(1,100,NULL);

SetTimer(2,1000,NULL);

InvalidateRect(NULL);

}

BEGIN_MESSAGE_MAP(CMainWnd,CFrameWnd)

ON_COMMAND(IDM_EXIT,OnExit)

ON_COMMAND(IDM_BEGIN,OnBegin)

ON_COMMAND(IDM_RED,OnRed)

ON_COMMAND(IDM_GREEN,OnGreen)

ON_COMMAND(IDM_BLUE,OnBlue)

ON_WM_PAINT()

ON_WM_TIMER()

ON_WM_CHAR()

END_MESSAGE_MAP()

afx_msg void CMainWnd::OnChar( UINT nChar, UINT nRepCnt, UINT nFlags )

{

if(game)

{

switch(nChar)

{

case 234:

{

ns=0;

break;

}

case 231:

{ns=2;

move=1;

break;

}

case 230:

{ns=1;

}

}

InvalidateRect(ball1);

InvalidateRect(ball2);

InvalidateRect(ball3);

}

}

CApp app;

Листинг файла main.h

class CMainWnd: public CFrameWnd /*класс окна*/

{

public:

CRect wnd; /*размер окна*/

CRect kol1,kol2,korp,kr,temp; /*прямоугольники*/

CRect svet,ball1,ball2,ball3;/*прямоугольники*/

CBrush br1[3],br2; /*кисти*/

CBrush sv[4]; /*цвета светофора*/

CRect noga; /*нога светофора*/

CRect balls[5]; /*шарики дыма*/

CRect kr2; //кабина

int numball; //номер дыма

int live[5]; //признак жизни дыма

bool game; /*признак игры или вне игры*/

int color; /*номер цвета паровоза*/

int ns; /*номер увета светофора*/

int move; /*флаг движения паровоза*/

CMainWnd(); /*конструктор главного. окна*/

afx_msg void OnRed(); /*пунуты меню цвета*/

afx_msg void OnGreen();

afx_msg void OnBlue();

afx_msg void OnPaint(); /*ф-ия перерисовки*/

afx_msg void OnTimer( UINT nIDEvent ); /*обраб-чик таймера*/

afx_msg void OnExit();//выход

afx_msg void OnBegin();//перестартовать

afx_msg void OnChar( UINT nChar, UINT nRepCnt, UINT nFlags );

DECLARE_MESSAGE_MAP()//карта сообщений

};

class CApp: public CWinApp

{

public:

BOOL InitInstance();

};

Листинг файла menu1.h

#define IDM_BEGIN 100

#define IDM_RED 101

#define IDM_GREEN 102

#define IDM_BLUE 103

#define IDM_EXIT 104

Листинг файла menu1.rc

#include <afxres.h>

#include "menu1.h"

MAINMENU MENU DISCARDABLE

BEGIN

POPUP "GAME"

BEGIN

POPUP "COLOR"

BEGIN

MENUITEM "RED", IDM_RED

MENUITEM "GREEN", IDM_GREEN

MENUITEM "BLUE", IDM_BLUE

END

MENUITEM SEPARATOR

MENUITEM "START", IDM_BEGIN

MENUITEM "EXIT", IDM_EXIT

END

END


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

  • Разработка оконного приложения на языке C#, в окне которого будет игра "Лабиринт. Диаграмма вариантов использования языка UML. Описание разрабатываемой программы с точки зрения программиста. Разработка прикладного окна, классов Enemy и Dot, Wall и Map.

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

  • Разработка и создание игры "Змейка". Использование динамически-активных принципов языка Java. Графические объекты программы. Описание игры, правила, теоретические сведения. Классы приложения. Типы данных. Реализация. Метод. Объект. Блок-схема игры.

    курсовая работа [12,4 K], добавлен 18.06.2008

  • Основы организации приложения в Windows. Посылка и передача сообщений для окон. Создание и отображение главного окна приложения. Деактивация приложения, его фазы. Сообщения клавиатуры и функции для работы с ней. Определение состояния отдельных клавиш.

    лекция [65,7 K], добавлен 24.06.2009

  • Основы программирования на 32-битном Ассемблере, разработка с его помощью программы, демонстрирующей работу одного из разделов ОС Windоws. Описание используемых АРI-функций как интерфейса программирования приложений. Листинг программы, результаты работы.

    курсовая работа [164,5 K], добавлен 18.05.2014

  • Порядок разработки игровой программы, создаваемой в среде Delphi в процессе проектирования приложения, основанной на модульном принципе. Структура программы: объявление списка используемых модулей и несколько операторов, запускающих данное приложение.

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

  • Выбор состава технических и программных средств для создания данного приложения "Экзаменатор", использование среды разработки Borland Delphi. Основные компоненты и спецификация программы. Используемые технические средства, описание и запуск программы.

    курсовая работа [540,8 K], добавлен 18.07.2012

  • Теоретические основы разработки Windows-приложений с использованием библиотеки MFC. Создание приложения с помощью Visual C++. Описание логической структуры приложения. Установка и запуск программы. Входные и выходные данные. Преимущество MFC библиотек.

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

  • История Windows. Особенности Windows XP. Файловая система и структура. Основные принципы работы с системой. Начало и завершение работы, главное меню. Запуск и завершение программ. Окна и диалоги, панель задач. Установка Windows XP.

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

  • Разработка Windows-приложения, представляющего собой компьютерную игру "Кости". Организация входных и выходных данных. Минимальные требования. Выбор состава технических и программных средств. Спецификация программы, ее описание и внедрение, тестирование.

    курсовая работа [475,8 K], добавлен 18.07.2012

  • Основные элементы окна программы MathCAD. Выполнение операций с файлами, редактирование, настройка программы. Способы ввода и редактирования в рабочем поле окна программы. Задание на рабочей области необходимых функций и матриц, выполнение вычислений.

    контрольная работа [18,0 K], добавлен 11.09.2019

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