Курсовая работа по основам программирования. Игра "Паровоз" — страница 3

  • Просмотров 2783
  • Скачиваний 263
  • Размер файла 21
    Кб

описания всех функций */ #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);