面向对象程序设计毕业论文_第1页
面向对象程序设计毕业论文_第2页
面向对象程序设计毕业论文_第3页
面向对象程序设计毕业论文_第4页
面向对象程序设计毕业论文_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《面向对象程序设计》课程设计《面向对象程序设计》课程设计报告2015/2016学年第二学期系部:计算机科学系专业:计算机网络工程班级:应本141姓名:学号:指导教师:成绩:[课程设计目的]1.巩固面向对象程序设计语言C++的基本语法和基本操作技能。2.掌握面向对象程序设计方法和使用集成环境调试和修改程序的方法。3.提高学生分析问题和解决问题的能力,为学习后续专业课程打好基础。[课程设计主要内容]一、系统环境1、硬件环境:个人pcWindowsxp(windows7)2、软件环境:Visualstdioc++2010Visualc++6.0二、实训题目具体实现题目1:需求分析类视图代码pacman.cpp//pacman.cpp:定义应用程序的入口点。//#include"stdafx.h"#include"pacman.h"#include"GObject.h"#defineWLENTH700#defineWHIGHT740#defineSTAGE_COUNT3#defineMAX_LOADSTRING100//全局变量:HINSTANCEhInst; //当前实例TCHARszTitle[MAX_LOADSTRING]; //标题栏文本TCHARszWindowClass[MAX_LOADSTRING]; //主窗口类名PacMan*p;GObject*e1;GObject*e2;GObject*e3;GObject*e4;//释放动态内存函数模板template<classT>voidRealese(Tt){ if(t!=NULL) deletet;}//此代码模块中包含的函数的前向声明:ATOM MyRegisterClass(HINSTANCEhInstance);BOOL InitInstance(HINSTANCE,int,HWND&);LRESULTCALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);INT_PTRCALLBACK About(HWND,UINT,WPARAM,LPARAM);voidResetGObjects();intAPIENTRY_tWinMain(HINSTANCEhInstance,HINSTANCEhPrevInstance,LPTSTRlpCmdLine,intnCmdShow){ UNREFERENCED_PARAMETER(hPrevInstance); UNREFERENCED_PARAMETER(lpCmdLine);//TODO:在此放置代码。 ints_n=0; p=newPacMan(P_ROW,P_ARRAY); e1=newRedOne(E_ROW,E_ARRAY); e2=newRedOne(E_ROW,E_ARRAY); e3=newBlueOne(E_ROW,E_ARRAY); e4=newYellowOne(E_ROW,E_ARRAY); GMap*MapArray[STAGE_COUNT]={newStage_1(),newStage_2(),newStage_3()}; GObject::pStage=MapArray[s_n]; Enermy::player=p; MSGmsg; HACCELhAccelTable; //初始化全局字符串 LoadString(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING); LoadString(hInstance,IDC_PACMAN,szWindowClass,MAX_LOADSTRING); MyRegisterClass(hInstance);//执行应用程序初始化: HWNDhWnd; if(!InitInstance(hInstance,nCmdShow,hWnd)) { returnFALSE; }hAccelTable=LoadAccelerators(hInstance,MAKEINTRESOURCE(IDC_PACMAN)); DWORDt=0; //主消息循环: while(p->GetTw()!=OVER&&s_n<3) { if(p->Win()) { HDChdc=GetDC(hWnd); s_n++; ResetGObjects(); if(s_n<3) { MessageBoxA(hWnd,"恭喜您过关","吃豆子提示",MB_OK); GObject::pStage=MapArray[s_n]; RECTscreenRect; screenRect.top=0; screenRect.left=0; screenRect.right=WLENTH; screenRect.bottom=WHIGHT; ::FillRect(hdc,&screenRect,CreateSolidBrush(RGB(255,255,255))); GObject::pStage->DrawMap(hdc); } continue; } if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } if(GetAsyncKeyState(VK_DOWN)&0x8000) { p->SetTwCommand(DOWN); } if(GetAsyncKeyState(VK_LEFT)&0x8000) { p->SetTwCommand(LEFT); } if(GetAsyncKeyState(VK_RIGHT)&0x8000) { p->SetTwCommand(RIGHT); } if(GetAsyncKeyState(VK_UP)&0x8000) { p->SetTwCommand(UP); } else { if(GetTickCount()-t>58) { HDChdc=GetDC(hWnd); e1->action(); e2->action(); e3->action(); e4->action(); p->action(); GObject::pStage->DrawPeas(hdc); e1->DrawBlank(hdc); e2->DrawBlank(hdc); e3->DrawBlank(hdc); e4->DrawBlank(hdc); p->DrawBlank(hdc); e1->Draw(hdc); e2->Draw(hdc); e3->Draw(hdc); e4->Draw(hdc); p->Draw(hdc); DeleteDC(hdc); t=GetTickCount(); } } } Realese(e1); Realese(e2); Realese(e3); Realese(e4); for(inti=0;i<STAGE_COUNT;i++) { Realese(MapArray[i]); } if(p->GetTw()==OVER) { MessageBoxA(hWnd,"出师未捷","吃豆子提示",MB_OK);} else { MessageBoxA(hWnd,"恭喜您赢得了胜利","吃豆子提示",MB_OK); } Realese(p);return(int)msg.wParam;}////函数:MyRegisterClass()////目的:注册窗口类。////注释:////仅当希望//此代码与添加到Windows95中的“RegisterClassEx”//函数之前的Win32系统兼容时,才需要此函数及其用法。调用此函数十分重要,//这样应用程序就可以获得关联的//“格式正确的”小图标。//ATOMMyRegisterClass(HINSTANCEhInstance){ WNDCLASSEXwcex; wcex.cbSize=sizeof(WNDCLASSEX); wcex.style =CS_HREDRAW|CS_VREDRAW; wcex.lpfnWndProc =WndProc; wcex.cbClsExtra =0; wcex.cbWndExtra =0; wcex.hInstance =hInstance; wcex.hIcon =LoadIcon(hInstance,MAKEINTRESOURCE(IDI_PACMAN)); wcex.hCursor =LoadCursor(NULL,IDC_ARROW); wcex.hbrBackground =(HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName =MAKEINTRESOURCE(IDC_PACMAN); wcex.lpszClassName =szWindowClass; wcex.hIconSm =LoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI_SMALL));returnRegisterClassEx(&wcex);}////函数:InitInstance(HINSTANCE,int)////目的:保存实例句柄并创建主窗口////注释:////在此函数中,我们在全局变量中保存实例句柄并//创建和显示主程序窗口。//BOOLInitInstance(HINSTANCEhInstance,intnCmdShow,HWND&hWnd){hInst=hInstance;//将实例句柄存储在全局变量中hWnd=CreateWindow(szWindowClass,szTitle,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);if(!hWnd){returnFALSE;}ShowWindow(hWnd,nCmdShow);UpdateWindow(hWnd);returnTRUE;}////函数:WndProc(HWND,UINT,WPARAM,LPARAM)////目的:处理主窗口的消息。////WM_COMMAND -处理应用程序菜单//WM_PAINT -绘制主窗口//WM_DESTROY -发送退出消息并返回////LRESULTCALLBACKWndProc(HWNDhWnd,UINTmessage,WPARAMwParam,LPARAMlParam){ intwmId,wmEvent; PAINTSTRUCTps; HDChdc; switch(message) { caseWM_COMMAND: wmId=LOWORD(wParam); wmEvent=HIWORD(wParam); //分析菜单选择: switch(wmId) { caseIDM_ABOUT: DialogBox(hInst,MAKEINTRESOURCE(IDD_ABOUTBOX),hWnd,About); break; caseIDM_START: caseIDM_EXIT: DestroyWindow(hWnd); default: returnDefWindowProc(hWnd,message,wParam,lParam); } break; caseWM_PAINT: hdc=BeginPaint(hWnd,&ps); //TODO:在此添加任意绘图代码... GObject::pStage->DrawMap(hdc); EndPaint(hWnd,&ps); break; caseWM_DESTROY: PostQuitMessage(0); ::exit(0); break; default: returnDefWindowProc(hWnd,message,wParam,lParam); } return0;}//“关于”框的消息处理程序。INT_PTRCALLBACKAbout(HWNDhDlg,UINTmessage,WPARAMwParam,LPARAMlParam){ UNREFERENCED_PARAMETER(lParam); switch(message) { caseWM_INITDIALOG: return(INT_PTR)TRUE; caseWM_COMMAND: if(LOWORD(wParam)==IDOK||LOWORD(wParam)==IDCANCEL) { EndDialog(hDlg,LOWORD(wParam)); return(INT_PTR)TRUE; } break; } return(INT_PTR)FALSE;}voidResetGObjects(){ p->SetPosition(P_ROW,P_ARRAY); e1->SetPosition(E_ROW,E_ARRAY); e2->SetPosition(E_ROW,E_ARRAY); e3->SetPosition(E_ROW,E_ARRAY); e4->SetPosition(E_ROW,E_ARRAY);}GMap.h#pragmaonce#include"stdafx.h"#include<list>#defineMAPLENTH19#defineP_ROW10#defineP_ARRAY9#defineE_ROW8#defineE_ARRAY9usingstd::list;classGMap{protected: staticintLD; staticintPD; voidInitOP(); boolmapData[MAPLENTH][MAPLENTH]; boolpeaMapData[MAPLENTH][MAPLENTH]; COLORREFcolor;public: voidDrawMap(HDC&hdc); voidDrawPeas(HDC&hdc); virtual~GMap(); GMap(){ }friendclassGObject;friendclassPacMan;};classStage_1:publicGMap{private: boolstaticinitData[MAPLENTH][MAPLENTH];public: Stage_1();};classStage_2:publicGMap{private: boolstaticinitData[MAPLENTH][MAPLENTH];public: Stage_2();};classStage_3:publicGMap{private: boolstaticinitData[MAPLENTH][MAPLENTH];public: Stage_3();};GMap.cpp#include"stdafx.h"#include"GMap.h"intGMap::LD=36;intGMap::PD=3;voidGMap::InitOP(){ peaMapData[E_ROW][E_ARRAY]=false; peaMapData[P_ROW][P_ARRAY]=false;}voidGMap::DrawMap(HDC&memDC){ for(inti=0;i<MAPLENTH;i++) { for(intj=0;j<MAPLENTH;j++) { if(!mapData[i][j]) { RECTrect; rect.left=j*LD; rect.top=i*LD; rect.right=(j+1)*LD; rect.bottom=(i+1)*LD; FillRect(memDC,&rect,CreateSolidBrush(color)); } } }}voidGMap::DrawPeas(HDC&hdc){ for(inti=0;i<MAPLENTH;i++) { for(intj=0;j<MAPLENTH;j++) { if(peaMapData[i][j]) { Ellipse(hdc,(LD/2-PD)+j*LD,(LD/2-PD)+i*LD,(LD/2+PD)+j*LD,(LD/2+PD)+i*LD); } } }}GMap::~GMap(){}#defineAtrue#defineBfalse boolStage_1::initData[MAPLENTH][MAPLENTH]= { B,B,B,B,B,B,B,B,B,A,B,B,B,B,B,B,B,B,B,//0 B,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,B,//1 B,A,A,B,A,A,B,B,B,A,B,B,B,A,A,B,A,A,B,//2 B,A,B,B,A,A,A,A,A,A,A,A,A,A,A,B,B,A,B,//3 B,A,B,A,A,A,B,B,B,A,B,B,B,A,A,A,B,A,B,//4 B,A,B,A,A,A,A,A,A,A,A,A,A,A,A,A,B,A,B,//5 B,A,A,A,A,A,B,B,A,A,A,B,B,A,A,A,A,A,B,//6 B,A,B,A,A,A,A,A,A,A,A,A,A,A,A,A,B,A,B,//7 B,A,B,A,A,A,A,A,B,A,B,A,A,A,A,A,B,A,B,//8 A,A,A,A,A,A,A,A,B,B,B,A,A,A,A,A,A,A,A,//9 B,A,B,A,A,A,A,A,A,A,A,A,A,A,A,A,B,A,B,//10 B,A,B,A,A,B,A,A,A,A,A,A,A,B,A,A,B,A,B,//11 B,A,B,A,B,B,B,A,A,A,A,A,B,B,B,A,B,A,B,//12 B,A,A,A,A,B,A,A,A,A,A,A,A,B,A,A,A,A,B,//13 B,A,B,B,A,A,A,A,A,A,A,A,A,A,A,B,B,A,B,//14 B,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,B,//15 B,A,A,A,A,B,B,B,A,B,A,B,B,B,A,A,A,A,B,//16 B,A,A,A,A,B,A,A,A,A,A,A,A,B,A,A,A,A,B,//17 B,B,B,B,B,B,B,B,B,A,B,B,B,B,B,B,B,B,B,//18 };#undefA#undefBStage_1::Stage_1(){ color=RGB(140,240,240); for(inti=0;i<MAPLENTH;i++) { for(intj=0;j<MAPLENTH;j++) { this->mapData[i][j]=this->initData[i][j]; this->peaMapData[i][j]=/*false;//*/this->initData[i][j]; } } //this->peaMapData[10][10]=true; this->InitOP();}#defineAtrue#defineBfalse boolStage_2::initData[MAPLENTH][MAPLENTH]= { B,B,B,B,B,B,B,B,B,A,B,B,B,A,B,B,B,B,B,//0 A,A,A,A,A,A,A,B,A,A,B,A,A,A,B,A,B,A,A,//1 B,A,A,A,B,A,A,B,A,A,B,A,B,A,B,A,B,A,B,//2 B,B,B,A,B,A,A,B,B,A,B,A,B,A,B,A,B,B,B,//3 B,A,A,A,A,A,A,A,A,A,A,A,B,B,B,A,A,A,B,//4 B,A,A,B,A,A,A,A,A,A,A,A,A,A,A,A,A,A,B,//5 B,A,A,B,A,A,A,B,B,B,B,B,B,A,A,B,A,A,B,//6 B,A,A,B,A,B,A,A,A,A,A,A,A,A,A,B,A,A,B,//7 B,A,A,B,A,B,A,A,B,A,B,A,A,B,A,B,A,A,B,//8 A,A,A,B,A,B,A,A,B,B,B,A,A,B,A,B,A,A,A,//9 B,A,A,B,A,B,A,A,A,A,A,A,A,B,A,A,A,A,B,//10 B,A,A,B,A,A,A,B,B,B,B,B,A,B,A,A,A,A,B,//11 B,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,B,//12 B,A,A,A,B,B,B,B,B,B,B,A,A,A,A,A,A,A,B,//13 B,A,A,A,A,A,A,A,A,A,A,A,A,B,A,A,A,A,B,//14 B,B,B,B,B,A,A,A,A,B,B,B,A,B,A,A,A,A,B,//15 B,A,A,A,B,B,B,A,A,A,A,B,A,B,B,B,A,A,B,//16 A,A,A,A,B,A,A,A,A,A,A,B,A,A,A,B,A,A,A,//17 B,B,B,B,B,B,B,B,B,A,B,B,B,A,B,B,B,B,B,//18 };#undefA#undefBStage_2::Stage_2(){ color=RGB(240,140,140); for(inti=0;i<MAPLENTH;i++) { for(intj=0;j<MAPLENTH;j++) { this->mapData[i][j]=this->initData[i][j]; this->peaMapData[i][j]=/*false;//*/this->initData[i][j]; } } //this->peaMapData[10][10]=true; this->InitOP();}#defineAtrue#defineBfalse boolStage_3::initData[MAPLENTH][MAPLENTH]= { B,B,B,B,B,B,B,B,B,A,B,B,B,B,B,B,B,B,B,//0 A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,//1 B,A,A,B,A,A,B,B,B,B,B,B,B,A,A,A,B,A,B,//2 B,A,B,B,A,A,A,A,A,A,A,A,B,A,A,A,B,A,B,//3 B,A,B,A,A,A,B,B,B,B,B,B,B,A,A,A,B,A,B,//4 B,A,B,A,B,B,B,A,A,A,A,A,B,B,B,A,B,A,B,//5 B,A,A,A,B,A,B,A,A,A,A,A,A,A,A,A,B,A,B,//6 B,A,B,A,B,A,A,A,A,A,A,A,A,B,A,A,B,A,B,//7 B,A,B,A,B,B,A,A,B,A,B,A,A,B,A,A,B,A,B,//8 B,A,A,A,A,B,A,A,B,B,B,A,A,B,A,A,B,A,B,//9 B,A,B,A,A,B,A,A,A,A,A,A,A,B,A,A,A,A,B,//10 B,A,B,A,A,B,A,A,A,A,A,A,B,B,B,A,B,A,B,//11 B,A,B,A,A,B,A,B,B,B,B,B,B,A,B,A,B,A,B,//12 B,A,B,A,A,B,A,A,A,A,A,A,A,A,B,A,B,A,B,//13 B,A,B,B,A,B,B,B,B,B,B,A,B,A,B,A,B,A,B,//14 B,A,A,A,A,B,A,A,A,A,A,A,B,A,B,A,B,A,B,//15 B,B,B,B,B,B,A,A,B,B,B,A,B,A,B,A,B,A,B,//16 A,A,A,A,A,A,A,A,B,A,A,A,A,A,B,A,A,A,A,//17 B,B,B,B,B,B,B,B,B,A,B,B,B,B,B,B,B,B,B,//18 };#undefA#undefBStage_3::Stage_3(){ color=RGB(100,300,100); for(inti=0;i<MAPLENTH;i++) { for(intj=0;j<MAPLENTH;j++) { this->mapData[i][j]=this->initData[i][j]; this->peaMapData[i][j]=/*false;//*/this->initData[i][j]; } } //this->peaMapData[10][10]=true; this->InitOP();}GObject.h#include"stdafx.h"#include"GMap.h"#definePLAYERSPEED6#defineENERMYSPEED4#defineLEGCOUNTS5#defineDISTANCE10#defineBLUE_ALERT8#defineD_OFFSET2#defineRD(DISTANCE+D_OFFSET)#include<time.h>enumTWARDS{UP,DOWN,LEFT,RIGHT,OVER};classGObject{protected: intmX; intmY; TWARDStwCommand; POINTpoint; intdRow; intdArray; intspeed; TWARDStw; intframe; boolAchive(); intPtTransfrom(intk); boolCollision(); virtualvoidAchiveCtrl();public: voidSetPosition(intRow,intArray); voidDrawBlank(HDC&hdc); voidvirtualDraw(HDC&hdc)=0; staticGMap*pStage; GObject(intRow,intArray){ frame=1; pStage=NULL; this->dRow=Row; this->dArray=Array; this->point.y=dRow*pStage->LD+pStage->LD/2; this->point.x=dArray*pStage->LD+pStage->LD/2; this->mX=point.x; this->mY=point.y;}voidvirtualaction()=0; intGetRow(); intGetArray(); };classPacMan:publicGObject{protected: virtualvoidAchiveCtrl();public: POINTGetPos(); TWARDSGetTw(); boolWin(); voidDraw(HDC&hdc); voidSetTwCommand(TWARDScommand); voidOver(); PacMan(intx,inty):GObject(x,y) { this->speed=PLAYERSPEED; twCommand=tw=LEFT; } voidaction();};classEnermy:publicGObject{protected: voidCatch(); voidvirtualMakeDecision(boolb)=0; COLORREFcolor;public: staticPacMan*player; voidvirtualDraw(HDC&hdc); Enermy(intx,inty):GObject(x,y) { this->speed=ENERMYSPEED; tw=LEFT; twCommand=UP; } voidvirtualaction();};classRedOne:publicEnermy{protected: voidvirtualMakeDecision(boolb);public: voidDraw(HDC&hdc); RedOne(intx,inty):Enermy(x,y) { color=RGB(255,0,0); }};classBlueOne:publicRedOne{protected: voidvirtualMakeDecision(boolb);public: voidDraw(HDC&hdc); BlueOne(intx,inty):RedOne(x,y) { color=RGB(0,0,255); }};classYellowOne:publicRedOne{protected: voidvirtualMakeDecision(boolb);public: voidDraw(HDC&hdc); YellowOne(intx,inty):RedOne(x,y) { color=RGB(200,200,100); }};GObject.cpp#include"stdafx.h"#include"GObject.h"//#include"GMap.h"GMap*GObject::pStage=NULL;boolGObject::Achive(){ intn=(point.x-pStage->LD/2)%pStage->LD; intk=(point.y-pStage->LD/2)%pStage->LD; booll=(n==0&&k==0); returnl;}voidGObject::AchiveCtrl(){ if(Achive()) { dArray=PtTransfrom(point.x); dRow=PtTransfrom(point.y); }}intGObject::PtTransfrom(intk){ return(k-(pStage->LD)/2)/pStage->LD;}intGObject::GetRow(){ returndRow;}intGObject::GetArray(){ returndArray;}voidGObject::DrawBlank(HDC&hdc){ RECTrect; rect.top=mY-RD; rect.left=mX-RD; rect.right=mX+RD; rect.bottom=mY+RD; FillRect(hdc,&rect,::CreateSolidBrush(RGB(255,255,255)));}voidGObject::SetPosition(intRow,intArray){ dRow=Row; dArray=Array; this->point.y=dRow*pStage->LD+pStage->LD/2; this->point.x=dArray*pStage->LD+pStage->LD/2;}boolGObject::Collision(){ boolb=false; AchiveCtrl(); if(dArray<0||dRow<0||dArray>MAPLENTH-1||dRow>MAPLENTH-1) { b=true; } elseif(Achive()) { switch(twCommand) { caseLEFT: if(dArray>0&&!pStage->mapData[dRow][dArray-1]) { b=true; } break; caseRIGHT: if(dArray<MAPLENTH-1&&!pStage->mapData[dRow][dArray+1]) {b=true;} break; caseUP: if(dRow>0&&!pStage->mapData[dRow-1][dArray]) { b=true; } break; caseDOWN: if(dRow<MAPLENTH-1&&!pStage->mapData[dRow+1][dArray]) { b=true; } break; } if(!b) { tw=twCommand; } } mX=point.x; mY=point.y; intMAX=pStage->LD*MAPLENTH+pStage->LD/2; intMIN=pStage->LD/2; switch(tw) { caseLEFT: if(dArray>0&&!pStage->mapData[dRow][dArray-1]) { b=true; break; } point.x-=speed; if(point.x<MIN) { point.x=MAX; } break; caseRIGHT: if(dArray<MAPLENTH-1&&!pStage->mapData[dRow][dArray+1]) { b=true; break; } point.x+=speed; if(point.x>MAX) { point.x=MIN; } break; caseUP: if(dRow>0&&!pStage->mapData[dRow-1][dArray]) { b=true; break; } point.y-=speed; if(point.y<MIN) { point.y=MAX; } break; caseDOWN: if(dRow<MAPLENTH-1&&!pStage->mapData[dRow+1][dArray]) { b=true; break; } point.y+=speed; if(point.y>MAX) { point.y=MIN; } break; } returnb;}voidPacMan::AchiveCtrl(){ GObject::AchiveCtrl(); if(Achive()) { if(dRow>=0&&dRow<MAPLENTH&&dArray>=0&&dArray<MAPLENTH) { if(pStage->peaMapData[dRow][dArray]) { pStage->peaMapData[dRow][dArray]=false; } } }}voidPacMan::action(){ Collision();}voidPacMan::SetTwCommand(TWARDScommand){ twCommand=command;}boolPacMan::Win(){ for(inti=0;i<=MAPLENTH;i++) { for(intj=0;j<=MAPLENTH;j++) { if(pStage->peaMapData[i][j]==true) { returnfalse; } } } returntrue;}POINTPacMan::GetPos(){ returnpoint;}voidPacMan::Over(){ tw=OVER;}TWARDSPacMan::GetTw(){ returntw;}voidPacMan::Draw(HDC&memDC){ if(tw==OVER) { } elseif(frame%2==0) { intx1=0,x2=0,y1=0,y2=0; intoffsetX=DISTANCE/2+D_OFFSET; intoffsetY=DISTANCE/2+D_OFFSET; switch(tw) { caseUP: x1=point.x-offsetX; x2=point.x+offsetX; y2=y1=point.y-offsetY; break; caseDOWN: x1=point.x+offsetX; x2=point.x-offsetX; y2=y1=point.y+offsetY; break; caseLEFT: x2=x1=point.x-offsetX; y1=point.y+offsetY; y2=point.y-offsetY; break; caseRIGHT: x2=x1=point.x+offsetX; y1=point.y-offsetY; y2=point.y+offsetY; break; } Arc(memDC,point.x-DISTANCE,point.y-DISTANCE, point.x+DISTANCE,point.y+DISTANCE, x1,y1, x2,y2); MoveToEx(memDC,x1,y1,NULL); LineTo(memDC,point.x,point.y); LineTo(memDC,x2,y2);} elseif(frame%3==0) { Ellipse(memDC,point.x-DISTANCE,point.y-DISTANCE, point.x+DISTANCE,point.y+DISTANCE); } else{ intx1=0,x2=0,y1=0,y2=0; switch(tw) { caseUP: x1=point.x-DISTANCE; x2=point.x+DISTANCE; y2=y1=point.y; break; caseDOWN: x1=point.x+DISTANCE; x2=point.x-DISTANCE; y2=y1=point.y; break; caseLEFT: x2=x1=point.x; y1=point.y+DISTANCE; y2=point.y-DISTANCE; break; caseRIGHT: x2=x1=point.x; y1=point.y-DISTANCE; y2=point.y+DISTANCE; break; } Arc(memDC,point.x-DISTANCE,point.y-DISTANCE, point.x+DISTANCE,point.y+DISTANCE, x1,y1, x2,y2); MoveToEx(memDC,x1,y1,NULL); LineTo(memDC,point.x,point.y); LineTo(memDC,x2,y2); } frame++;}PacMan*Enermy::player=NULL;voidEnermy::Catch(){ intDX=point.x-player->GetPos().x; intDY=point.y-player->GetPos().y; if((-RD<DX&&DX<RD)&&(-RD<DY&&DY<RD)) { player->Over(); }}voidEnermy::Draw(HDC&hdc){ HPENpen=::CreatePen(0,0,color); HPENoldpen=(HPEN)SelectObject(hdc,pen); Arc(hdc,point.x-DISTANCE,point.y-DISTANCE, point.x+DISTANCE,point.y+DISTANCE, point.x+DISTANCE,point.y, point.x-DISTANCE,point.y); intconstLEGLENTH=(DISTANCE)/(LEGCOUNTS); if(frame%2==0) { MoveToEx(hdc,point.x-DISTANCE,point.y,NULL); LineTo(hdc,point.x-DISTANCE,point.y+DISTANCE-LEGLENTH); MoveToEx(hdc,point.x+DISTANCE,point.y,NULL); LineTo(hdc,point.x+DISTANCE,point.y+DISTANCE-LEGLENTH); for(inti=0;i<LEGCOUNTS;i++) { Arc(hdc,point.x-DISTANCE+i*2*LEGLENTH,point.y+DISTANCE-2*LEGLENTH, point.x-DISTANCE+(i+1)*2*LEGLENTH,point.y+DISTANCE, point.x-DISTANCE+i*2*LEGLENTH,point.y+DISTANCE-LEGLENTH, point.x-DISTANCE+(i+1)*2*LEGLENTH,point.y+DISTANCE-LEGLENTH ); } } else{ MoveToEx(hdc,point.x-DISTANCE,point.y,NULL); LineTo(hdc,point.x-DISTANCE,point.y+DISTANCE); MoveToEx(hdc,point.x+DISTANCE,point.y,NULL); LineTo(hdc,point.x+DISTANCE,point.y+DISTANCE); MoveToEx(hdc,point.x-DISTANCE,point.y+DISTANCE,NULL); LineTo(hdc,point.x-DISTANCE+LEGLENTH,point.y+DISTANCE-LEGLENTH); for(inti=0;i<LEGCOUNTS-1;i++) { Arc(hdc,point.x-DISTANCE+(1+i*2)*LEGLENTH,point.y+DISTANCE-2*LEGLENTH, point.x-DISTANCE+(3+i*2)*LEGLENTH,point.y+DISTANCE, point.x-DISTANCE+(1+i*2)*LEGLENTH,point.y+DISTANCE-LEGLENTH, point.x-DISTANCE+(3+i*2)*LEGLENTH,point.y+DISTANCE-LEGLENTH ); } MoveToEx(hdc,point.x+DISTANCE,point.y+DISTANCE,NULL); LineTo(hdc,point.x+DISTANCE-LEGLENTH,point.y+DISTANCE-LEGLENTH); } intR=DISTANCE/5; switch(tw) { caseUP: Ellipse(hdc,point.x-2*R,point.y-2*R, point.x,point.y); Ellipse(hdc,point.x,point.y-2*R, point.x+2*R,point.y); break; caseDOWN: Ellipse(hdc,point.x-2*R,point.y,point.x,point.y+2*R); Ellipse(hdc,point.x,point.y,point.x+2*R,point.y+2*R); break; caseLEFT: Ellipse(hdc,point.x-3*R,point.y-R, point.x-R,point.y+R); Ellipse(hdc,point.x-R,point.y-R, point.x+R,point.y+R); break; caseRIGHT: Ellipse(hdc,point.x-R,point.y-R, point.x+R,point.y+R); Ellipse(hdc,point.x+R,point.y-R, point.x+3*R,point.y+R); break; } frame++; SelectObject(hdc,oldpen); DeleteObject(pen); return;}voidEnermy::action(){ boolb=Collision(); MakeDecision(b); Catch();}voidRedOne::Draw(HDC&hdc){ Enermy::Draw(hdc);}voidRedOne::MakeDecision(boolb){ inti=rand(); if(b) { if(i%4==0) { tw==UP?twCommand=LEFT:twCommand=UP; } elseif(i%3==0) { tw==DOWN?twCommand=UP:twCommand=DOWN; } elseif(i%2==0) { tw==RIGHT?twCommand=UP:twCommand=RIGHT; } else { tw==LEFT?twCommand=DOWN:twCommand=LEFT; } return; } if(i%4==0) { twCommand!=UP?tw==DOWN:twCommand==UP; } elseif(i%3==0) { tw!=DOWN?twCommand=UP:twCommand==DOWN; } elseif(i%2==0) { tw!=RIGHT?twCommand=LEFT:twCommand=RIGHT; } else { tw!=LEFT?twCommand=RIGHT:twCommand=LEFT; }}voidBlueOne::Draw(HDC&hdc){ Enermy::Draw(hdc);}voidBlueOne::MakeDecision(boolb){ constintDR=this->dRow-player->GetRow(); constintDA=this->dArray-player->GetArray(); if(!b&&DR==0) { if(DA<=BLUE_ALERT&&DA>0) { twCommand=LEFT; return; } if(DA<0&&DA>=-BLUE_ALERT) { twCommand=RIGHT; return; } } if(!b&&DA==0) { if(DR<=BLUE_ALERT&&DR>0) { twCommand=UP; return; } if(DR<0&&DR>=-BLUE_ALERT) { twCommand=DOWN; return; } } RedOne::MakeDecision(b);}voidYellowOne::MakeDecision(boolb){ constintDR=this->dRow-player->GetRow(); constintDA=this->dArray-player->GetArray(); if(!b) { if(DR*DR>DA*DA) { if(DA>0) { twCommand=LEFT; return; } elseif(DA<0) { twCommand=RIGHT; return; } } else { if(DR>0) { twCommand=UP; return; } if(DR<0) { twCommand=DOWN; return; } } } RedOne::MakeDecision(b);}voidYellowOne::Draw(HDC&hdc){ Enermy::Draw(hdc);}运行结果第一关图片:第二关图片:吃豆人被吃图片:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论