实验报告嘉美142601017.docx

上传人:b****8 文档编号:10583154 上传时间:2023-02-21 格式:DOCX 页数:62 大小:335.31KB
下载 相关 举报
实验报告嘉美142601017.docx_第1页
第1页 / 共62页
实验报告嘉美142601017.docx_第2页
第2页 / 共62页
实验报告嘉美142601017.docx_第3页
第3页 / 共62页
实验报告嘉美142601017.docx_第4页
第4页 / 共62页
实验报告嘉美142601017.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

实验报告嘉美142601017.docx

《实验报告嘉美142601017.docx》由会员分享,可在线阅读,更多相关《实验报告嘉美142601017.docx(62页珍藏版)》请在冰豆网上搜索。

实验报告嘉美142601017.docx

实验报告嘉美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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1