实验报告嘉美142601017.docx
- 文档编号:4392657
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:62
- 大小:335.31KB
实验报告嘉美142601017.docx
《实验报告嘉美142601017.docx》由会员分享,可在线阅读,更多相关《实验报告嘉美142601017.docx(62页珍藏版)》请在冰点文库上搜索。
实验报告嘉美142601017
2015----2016学年第二学期
系部:
计算机科学系________
班级:
应本141____________
姓名:
李嘉美______________
学号:
142601017___________
专业:
计算机网络技术(网络工程方向)
指导教师:
薄文娟___________
课设时间:
2016年6月6日—12日
成绩:
_________________________
一、课程设计目的:
1.巩固面向对象程序设计语言C++的基本语法和基本操作技能。
2.掌握面向对象程序设计方法和使用集成环境调试和修改程序的方法。
3.提高分析问题和解决问题的能力,为学习后续专业课程打好基础。
二、系统环境
题目一、硬件环境:
windows2007
软件环境:
MicrosoftVisualc++2010Express
题目二、硬件环境:
windows2007
软件环境:
Visualc++6.0
三、需求分析:
1、题目一:
吃豆子游戏
吃豆子游戏敌人与吃豆人遇到墙的位置都不能穿越,需绕道而行。
红色随机动,接近吃豆人时动作没有任改变;黄色S形接近吃豆人,直到找到吃豆人;蓝色与吃豆人在同一行时,会直线追逐吃豆人。
游戏中有五个文件,GMap.h,GMap.cpp,GObject.h,GObject.cpp,pacman.cpp
题目二:
简单文本编辑器
启动VisualC++,选择“文件”->“新建”,弹出“新建”对话框新建一个工程项目。
2、类视图:
四、题目一课程设计的解决方案(具体实现):
1、打开MicrosoftVisualc++2010Express
2、进入起始页点击文件新建项目
3、选择Win32控制台应用程序添加名称、位置点击下一步
4、选择应用程序设置Windows应用程序点击完成
5、点击项目添加类选择c++类并填写类名GMap点击完成
6、点击项目添加类选择c++类并填写类名GObject点击完成
7、编辑pacman.Cpp,编辑完成后打开pacman.Cpp启动调试
题目二课程设计的解决方案(具体实现):
选择“工程”选项卡列表中的“MFCAppWizard(exe)”选项,创建一个使用MFC基础类库进程编程的可执行程序。
在“工程名称”编辑框中输入要创建的项目名称:
MyEdit。
单击“确定”,进入“MFC应用程序向导-步骤1”对话框,选择创建的应用程序类型为“基本对话框”,之后各个步骤均选用默认设置,生成应用程序框架。
五、题目一课程设计内容(涉及的步骤、流程图、结构图、源程序及输出结果)
1、GMap.h
#pragmaonce
#include"stdafx.h"
#include
#defineMAPLENTH19
#defineP_ROW10
#defineP_ARRAY9
#defineE_ROW8
#defineE_ARRAY9
usingstd:
:
list;
//抽象类GMap
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();
};
2、GMap.cpp
#include"StdAfx.h"
#include"GMap.h"
intGMap:
:
LD=36;
intGMap:
:
PD=3;
//敌我双方出现位置没有豆子出现
voidGMap:
:
InitOP()
{
peaMapData[E_ROW][E_ARRAY]=false;
peaMapData[E_ROW][E_ARRAY]=false;
}
voidGMap:
:
DrawMap(HDC&memDC)
{
for(inti=0;i { for(intj=0;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 { for(intj=0;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(void) { } //Stage_1成员定义: #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, B,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,B, B,A,A,B,A,A,B,B,B,A,B,B,B,A,A,B,A,A,B, B,A,B,B,A,A,A,A,A,A,A,A,A,A,A,B,B,A,B, B,A,B,A,A,A,B,B,B,A,B,B,B,A,A,A,B,A,B, B,A,B,A,A,A,A,A,A,A,A,A,A,A,A,A,B,A,B, B,A,A,A,A,A,B,B,A,A,A,B,B,A,A,A,A,A,B, B,A,B,A,A,A,A,A,A,A,A,A,A,A,A,A,B,A,B, B,A,B,A,A,A,A,A,B,A,B,A,A,A,A,A,B,A,B, A,A,A,A,A,A,A,A,B,B,B,A,A,A,A,A,A,A,A, B,A,B,A,A,A,A,A,A,A,A,A,A,A,A,A,B,A,B, B,A,B,A,A,B,A,A,A,A,A,A,A,B,A,A,B,A,B, B,A,B,A,B,B,B,A,A,A,A,A,B,B,B,A,B,A,B, B,A,A,A,A,B,A,A,A,A,A,A,A,B,A,A,A,A,B, B,A,B,B,A,A,A,A,A,A,A,A,A,A,A,B,B,A,B, B,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,B, B,A,A,A,A,B,B,B,A,B,A,B,B,B,A,A,A,A,B, B,A,A,A,A,B,A,A,A,A,A,A,A,B,A,A,A,A,B, B,B,B,B,B,B,B,B,B,A,B,B,B,B,B,B,B,B,B, }; #undefA #undefB Stage_1: : Stage_1() { color=RGB(140,240,240); for(inti=0;i { for(intj=0;j { this->mapData[i][j]=this->initData[i][j]; this->peaMapData[i][j]=this->initData[i][j]; } } //敌我双方出现位置没有豆子出现 this->InitOP(); } //Stage_2成员定义: #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, A,A,A,A,A,A,A,B,A,A,B,A,A,A,B,A,B,A,A, B,A,A,A,B,A,A,B,A,A,B,A,B,A,B,A,B,A,B, B,B,B,A,B,A,A,B,B,A,B,A,B,A,B,A,B,B,B, B,A,A,A,A,A,A,A,A,A,A,A,B,B,B,A,A,A,B, B,A,A,B,A,A,A,A,A,A,A,A,A,A,A,A,A,A,B, B,A,A,B,A,A,A,B,B,B,B,B,B,A,A,B,A,A,B, B,A,A,B,A,B,A,A,A,A,A,A,A,A,A,B,A,A,B, B,A,A,B,A,B,A,A,B,A,B,A,A,B,A,B,A,A,B, A,A,A,B,A,B,A,A,B,B,B,A,A,B,A,B,A,A,A, B,A,A,B,A,B,A,A,A,A,A,A,A,B,A,A,A,A,B, B,A,A,B,A,A,A,B,B,B,B,B,A,B,A,A,A,A,B, B,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,B, B,A,A,A,B,B,B,B,B,B,B,A,A,A,A,A,A,A,B, B,A,A,A,A,A,A,A,A,A,A,A,A,B,A,A,A,A,B, B,B,B,B,B,A,A,A,A,B,B,B,A,B,A,A,A,A,B, B,A,A,A,B,B,B,A,A,A,A,B,A,B,B,B,A,A,B, A,A,A,A,B,A,A,A,A,A,A,B,A,A,A,B,A,A,A, B,B,B,B,B,B,B,B,B,A,B,B,B,A,B,B,B,B,B, }; #undefA #undefB Stage_2: : Stage_2() { color=RGB(240,140,140); for(inti=0;i { for(intj=0;j { this->mapData[i][j]=this->initData[i][j]; this->peaMapData[i][j]=this->initData[i][j]; } } //敌我双方出现位置没有豆子出现 this->InitOP(); } //Stage_3成员定义: #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, A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A,A, B,A,A,B,A,A,B,B,B,B,B,B,B,A,A,A,B,A,B, B,A,B,B,A,A,A,A,A,A,A,A,B,A,A,A,B,A,B, B,A,B,A,A,A,B,B,B,B,B,B,B,A,A,A,B,A,B, B,A,B,A,B,B,B,A,A,A,A,A,B,B,B,A,B,A,B, B,A,A,A,B,A,B,A,A,A,A,A,A,A,A,A,B,A,B, B,A,B,A,B,A,A,A,A,A,A,A,A,B,A,A,B,A,B, B,A,B,A,B,B,A,A,B,A,B,A,A,B,A,A,B,A,B, B,A,A,A,A,B,A,A,B,B,B,A,A,B,A,A,B,A,B, B,A,B,A,A,B,A,A,A,A,A,A,A,B,A,A,A,A,B, B,A,B,A,A,B,A,A,A,A,A,A,B,B,B,A,B,A,B, B,A,B,A,A,B,A,B,B,B,B,B,B,A,B,A,B,A,B, B,A,B,A,A,B,A,A,A,A,A,A,A,A,B,A,B,A,B, B,A,B,B,A,B,B,B,B,B,B,A,B,A,B,A,B,A,B, B,A,A,A,A,B,A,A,A,A,A,A,B,A,B,A,B,A,B, B,B,B,B,B,B,A,A,B,B,B,A,B,A,B,A,B,A,B, A,A,A,A,A,A,A,A,B,A,A,A,A,A,B,A,A,A,A, B,B,B,B,B,B,B,B,B,A,B,B,B,B,B,B,B,B,B, }; #undefA #undefB Stage_3: : Stage_3() { color=RGB(100,300,100); for(inti=0;i { for(intj=0;j { this->mapData[i][j]=this->initData[i][j]; this->peaMapData[i][j]=this->initData[i][j]; } } //敌我双方出现位置没有豆子出现 this->InitOP(); } 3、GObject.h #include"stdafx.h" //方向枚举 #include"GMap.h" #definePLAYERSPEED6//玩家速度 #defineENERMYSPEED4//敌人速度 #defineLEGCOUNTS5//敌人腿的数量 #defineDISTANCE10//图形范围 #defineBLUE_ALERT8//蓝色警戒范围 #defineD_OFFSET2//绘图误差 #defineRD(DISTANCE+D_OFFSET)//绘图范围12 #include //方向枚举 enumTWARDS{UP,DOWN,LEFT,RIGHT,OVER}; //物体类 classGObject { protected: intmX; intmY; TWARDStwCommand;//指令缓存 POINTpoint;//中心坐标 intdRow;//逻辑横坐标 intdArray;//逻辑纵坐标 intspeed;//速度 TWARDStw;//朝向 intframe;//帧数 //子程序 boolAchive();//判断物体是否到达逻辑坐标位置 boolCollision();//逻辑碰撞检测,将物体摆放到合理位置 intPtTransform(intk);//将实际坐标转换为逻辑坐标 virtualvoidAchiveCtrl();//到达逻辑点后更新数据 public: intGetRow(); intGetArray(); 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;//数据变更的表现 }; //大嘴,玩家控制 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); } }; 4、GObject.cpp #include"StdAfx.h" #include"GObject.h" //GObject成员定义: 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); return1; } voidGObject: : AchiveCtrl() { if(Achive()) { dArray=PtTransform(point.x);//更新列 dRow=PtTransform(point.y);//更新行 } } intGObject: : PtTransform(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();//更新行,列的数据若是大嘴,则会执行PacMan重写的AchiveCtrl函数消除豆子 //判断指令的有效性 if(dArray<0||dRow<0||dArray>MAPLENTH-1||dRo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 142601017
![提示](https://static.bingdoc.com/images/bang_tan.gif)