Реферат: Курсовая работа по основам программирования. Игра "Паровоз"

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

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

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

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

--------------------------------------------------------------

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

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

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

ИГРА «Parovoz»

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

ПетроваЕ.Г.

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

Оценка____________________________

Подпись___________________________

"____"________________________2001г.

КАЗАНЬ

2001г.

<span Times New Roman",«serif»; mso-fareast-font-family:«Times New Roman»;mso-ansi-language:RU;mso-fareast-language: RU;mso-bidi-language:AR-SA">

СОДЕРЖАНИЕ

 TOC o «1-3»

1.Описание применения ._____________________________________________ 3

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

1.2. Правила игры.__________________________________________________ 3

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

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

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

2.2.1. CApp — класс приложения .________________________________________________ 4

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

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

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

Приложение________________________________________________________ 7

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

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

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

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

<span Times New Roman",«serif»;mso-fareast-font-family: «Times New Roman»;mso-ansi-language:RU;mso-fareast-language:RU;mso-bidi-language: AR-SA">

1.Описание применения .

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

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

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

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

 

<span Times New Roman",«serif»;mso-fareast-font-family: «Times New Roman»;mso-ansi-language:EN-US;mso-fareast-language:RU;mso-bidi-language: AR-SA">
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;      /*размерокна*/

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

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

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

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

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

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

                        CRectkr2;                   //кабина

                        intnumball;                   //номер дыма

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

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

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

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

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

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

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

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

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

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

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

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

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

            afx_msgvoid 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()

<span Times New Roman",«serif»;mso-fareast-font-family: «Times New Roman»;mso-ansi-language:EN-US;mso-fareast-language:RU;mso-bidi-language: AR-SA">
2.3. Образ главного окна.

<img src="/cache/referats/7000/image002.jpg" v:shapes="_x0000_s1032">
На рисунках 1, 2 представленыосновные образы окна приложения.

<div v:shape="_x0000_s1027">

Рис. 1. Главное окно после выбора пункта «старт»

<img src="/cache/referats/7000/image004.jpg" v:shapes="_x0000_s1033">

<div v:shape="_x0000_s1029">

Рис. 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=newCMainWnd;          /*созд объекта окна*/

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

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

}

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

{

            CPaintDCdc(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)         /*переключение между цветамисветофора*/

            {

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

                                    {

                                                dc.SelectObject(sv[0]);

                                                dc.Ellipse(ball1);

                                                dc.SelectObject(sv[3]);

                                                dc.Ellipse(ball2);

                                                dc.Ellipse(ball3);

                                                break;

                                    }

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

                                    {

                                                dc.SelectObject(sv[2]);

                                                dc.Ellipse(ball2);

                                                dc.SelectObject(sv[3]);

                                                dc.Ellipse(ball1);

                                                dc.Ellipse(ball3);

                                                break;

                                    }

                        case2:/*еесли зеленый*/

                                    {

                                                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;

                                    }

                                    elsekr2.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, UINTnRepCnt, UINT nFlags )

{

            if(game)

            {

                        switch(nChar)

                        {

                                    case234:

                                                {

                                                ns=0;

                                                break;

                                                }

                                    case231:

                                                {ns=2;

                                                            move=1;

                                                break;

                                                }

                                    case230:

                                                {ns=1;

                                                }

                        }

                        InvalidateRect(ball1);

                        InvalidateRect(ball2);

                        InvalidateRect(ball3);

            }

}

CApp app;

           

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

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

{

            public:

                        CRectwnd;      /*размер окна*/

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

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

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

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

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

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

                        CRectkr2;                   //кабина

                        intnumball;                   //номер дыма

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

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

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

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

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

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

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

                        afx_msgvoid OnGreen();

                        afx_msgvoid OnBlue();

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

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

                        afx_msgvoid OnExit();//выход

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

                        afx_msgvoid OnChar( UINT nChar, UINT nRepCnt, UINT nFlags );

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

};

class CApp: public CWinApp

{

            public:

                        BOOLInitInstance();

};

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

#define             IDM_BEGIN   100

#define             IDM_RED       101

#define             IDM_GREEN102

#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

еще рефераты
Еще работы по программированию, базе данных