贪吃蛇游戏程序设计实验报告

  • 格式:doc
  • 大小:766.50 KB
  • 文档页数:11

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Windows编程大作业贪吃蛇设计与实现

学校:武汉轻工大学

院系:

班级:

姓名:

学号:

2015年12月16日

目录

一、题目介绍

二、设计目的

三、详细设计

3.1贪吃蛇本体设计

3.2贪吃蛇食物设计

3.3游戏界面设计

3.3.1游戏初始化

3.3.2游戏开始

3.3.3游戏暂停

3.3.4游戏退出

3.3.5游戏总界面

3.3.6游戏区域与背景

3.3.7关于SNAKE

3.4玩法规则设计

3.5核心设计

四、功能测试

五、总结

六、参考文献

一、题目介绍:

编写一个基于MFC的小游戏。

基本要求:

1、实现一个小游戏

2、实现基本游戏控制功能

3、具有游戏数据保存功能

4、界面布局合理、美观;

二、设计目的:

通过使用vc++6.0实现一个小游戏的课程设计,进一步掌握MFC的高级使用方法和锻炼自己动手写程序的能力。了解游戏设计的整个过程,通过熟练使用MFC来设计游戏。程序主要包括:游戏界面设计,游戏菜单栏设计,游戏初始化,游戏控制等。培养和锻炼开发游戏的能力。

三、详细设计

3.1贪吃蛇的本体设计

贪吃蛇的头部拥有一个坐标(x,y),蛇体有一个长度len,蛇有一个运动方向direct,故定义一个结构体如下:

struct Snake

{

int x,y;

int len;

int direct;

}Snake[50];

3.2贪吃蛇食物设计

贪吃蛇的食物有一个坐标(x,y),此食物有一个标志isfood,当isfood为0时,表示食物还没被吃,为1时,表示被吃。

struct Food

{

int x;

int y;

int isfood;

}Food;

3.3游戏界面设计

3.3.1游戏初始化

游戏初始蛇体长度为3,颜色为灰色,食物标志为1,因为此时没有显示出食物,需要随机生成后,才置为0;

void CSNAKEView::OnInitialUpdate()

{

CView::OnInitialUpdate();

Snake[0].x=10;

Snake[0].y=10;

Snake[1].x=11;

Snake[1].y=10;

Snake[2].x=12;

Snake[2].y=10;

Snake[0].direct=3;

Snake[0].len=3;

Food.isfood=1;//初始化贪吃蛇起初有3个节点,长度为3,起始坐标;食物默认为1无0有

// TODO: Add your specialized code here and/or call the base class

}

void CSNAKEView::oninit()

{

CDC *pDC=GetDC();

CBrush DrawBrush=(RGB(100,100,100));

CBrush *Drawbrush=pDC->SelectObject(&DrawBrush);

for(int i=0;i<=Snake[0].len-1;i++)

pDC->Rectangle(Snake[i].x*20,Snake[i].y*20,(Snake[i].x+1)*20,(Snake[i].y+1)*20);

pDC->SelectObject(DrawBrush);

}

3.3.2游戏开始

点击游戏开始菜单后,出现一个对话框,提示一秒后,将开始游戏。

void CSNAKEView::OnStart()

{

// TODO: Add your command handler code here

SetTimer(1,1000,NULL);

AfxMessageBox("1秒后开始游戏!");

}

3.3.3游戏暂停

点击游戏暂停菜单后,出现显示“已暂停游戏”的对话框。

void CSNAKEView::OnPause()

{

// TODO: Add your command handler code here

KillTimer(1);

AfxMessageBox("已暂停游戏");

}

3.3.4游戏退出

点击游戏退出菜单,显示“退出游戏”的对话框,随后关闭游戏界面。

void CSNAKEView::OnExit()

// TODO: Add your command handler code here

AfxMessageBox("退出游戏...");

exit (0);

}

3.3.5游戏总界面大小设计

使用CMainFrame的PreCreateWindow函数对总界面进行初始化。

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)

{

if( !CFrameWnd::PreCreateWindow(cs) )

return FALSE;

// TODO: Modify the Window class or styles here by modifying

// the CREATESTRUCT cs

cs.style &= ~WS_OVERLAPPED;

cs.cy = 615;

cs.cx = 530;

return TRUE;

}

3.3.6操作游戏界面大小及背景色设计

将背景色设置为黑色,并将游戏区域显示出来。

void CSNAKEView::OnDraw(CDC* pDC)

{

CSNAKEDoc* pDoc = GetDocument();

ASSERT_V ALID(pDoc);

// TODO: add draw code for native data here

CBrush backBrush(RGB(0,0,0));//设置画刷为希望的背景色

CBrush* pOldBrush = pDC->SelectObject(&backBrush);//保存旧画刷

CRect rect;

pDC->GetClipBox(&rect);//擦除需要的区域

pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(),PA TCOPY);//用创建的画刷绘制背景区域

pDC->SelectObject(pOldBrush);

pDC->Rectangle(19,19,501,501);//设置需要区域的起始坐标和长宽。

oninit();

}

3.3.7版权所有

点击帮助中的关于SNAKE,或者点击,会显示对话框---版权归刘坤炜所有。

3.4玩法规则设计

当按键盘上的“上”“下”“左”“右”键时,蛇体方向的改变。按“上”时,如果蛇的方向不是朝下的,就将direct方向置为1,使其向上运动,当然如果本身就是向上运动的,那么蛇的运动方向没有变化;如果蛇的方向朝下,按上,则不能改变它的方向。其他按法与上类似。

void CSNAKEView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)