Èíôîðìàòèêà, ïðîãðàììèðîâàíèå: Êóðñîâàÿ ðàáîòà ïî îñíîâàì ïðîãðàììèðîâàíèÿ. Èãðà Ïàðîâîç, Ðåôåðàò

Ãîñóäàðñòâåííûé êîìèòåò Ðîññèéñêîé Ôåäåðàöèè

ïî âûñøåìó îáðàçîâàíèþ

Êàçàíñêèé ãîñóäàðñòâåííûé òåõíè÷åñêèé óíèâåðñèòåò

èìåíè À.Í. Òóïîëåâà

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

Êàôåäðà ÀÑÎÈÓ

ÊÓÐÑÎÂÀß ÐÀÁÎÒÀ

ïî îñíîâàì ïðîãðàììèðîâàíèÿ

ÈÃÐÀ «Parovoz»

ÈÑÏÎËÍÈÒÅËÜ: ñòóäåíòêà ãðóïïû 4221

Ïåòðîâà Å.Ã.

ÐÓÊÎÂÎÄÈÒÅËÜ: Âàôèí Ð.Ð.

Îöåíêà____________________________

Ïîäïèñü___________________________

"____"________________________2001ã.

ÊÀÇÀÍÜ

2001ã.


ÑÎÄÅÐÆÀÍÈÅ

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


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 ïðåäñòàâëåíûîñíîâíûå îáðàçû îêíà ïðèëîæåíèÿ.

Ðèñ. 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


Åùå èç ðàçäåëà Èíôîðìàòèêà, ïðîãðàììèðîâàíèå:


 Ýòî èíòåðåñíî
 Ðåêëàìà
 Ïîèñê ðåôåðàòîâ
 
 Àôîðèçì
Çàðåêàëàñü äåâî÷êà íå å…àòüñÿ!!! Çà…áàëàñü äåâî÷êà çàðåêàòüñÿ!!!!!!
 Ãîðîñêîï
Ãîðîñêîïû
 Ñ÷¸ò÷èêè
bigmir)net TOP 100