蛇鼠大战课程设计报告蛇鼠大战课程设计报告
计算机学院计算机科学与技术专业
《程序设计综合课程设计》报告
(20011/2012学年 第一学期)
学生姓名: 学生班级:
学生学号:
指导教师:
2011年12月31号
蛇
鼠 大 战 小 游 戏
目录
第一章 课程设计目的和要求 ................................ 1
1.1 目的 ....................................................... 1
1.2 要求 ....................
蛇鼠大战课程设计
计算机学院计算机科学与技术专业
《程序设计综合课程设计》报告
(20011/2012学年 第一学期)
学生姓名: 学生班级:
学生学号:
指导教师:
2011年12月31号
蛇
鼠 大 战 小 游 戏
目录
第一章 课程设计目的和要求 ................................ 1
1.1 目的 ....................................................... 1
1.2 要求 ....................................................... 1 第二章 课程设计任务内容 ................................... 2 第三章 详细设计说明 ....................................... 2
3.1 模块描述 ................................................... 2
3.2 性能 ....................................................... 3
3.3 输入项 ..................................................... 3
3.4 输出项 ..................................................... 3
3.5
逻辑 ................................................... 3
3.6 限制条件 ................................................... 5
3.7 测试
................................................... 5 第四章 软件使用说明 ....................................... 7 第五章 课程设计心得与体会 ................................ 10 附录1:参考文献 ........................................... 12 附录2:程序清单 ........................................... 13
第一章 课程设计目的和要求
1.1目的
通过此次课程设计,进一步加深对C++语言和运用的了解,将理论知识运用于开发的实践,并在实践中逐步掌握软件工具的使用。巩固已经学习过的C++理论知识;进一步学习程序设计、程序调试的能力;进一步学习面向对象编程的知识和程序调试的能力; 增强Visual C++编程环境的应用能力
掌握并且熟练应用《C++程序设计》中所学知识。掌握函数功能的划分方法,并运用此方法解决问题。学会程序测试
的制定,并且实现程序的测试。通过此次实践,积累经验,提高分析和解决问题的能力。
1.2要求
课程设计需要从整体来考虑,在大的方向下来考虑小的模块,在继续分工。作到最小化,可执行化。
1) 对于课程设计需要自己筹划一下自己如何去下手,让自己的方案能够用
C++来执行。
2) 对于运行结果的处理,再运行程序时可能会遇到一些其他问题,对于运行
结果的处理主要是在达不到自己的期望是,就要对其进行分析。
3) 错误的改正,在对于编程中错误的改正也是一重要的步骤,学会错误的改
正才能更好的提高自己。
1
第二章 课程设计任务内容
通过所学的C++编程语言知识,在VisualStudio2008 环境中编写程序,以实现以下内容:完成“蛇鼠大战”游戏,使该游戏能够实现如下功能:
1. 使用键盘进行游戏W(上)A(左)S(下)D(右);
2. 玩家使用蛇(?)吃掉鼠(◎)后自动计算积分;
3. 根据积分自动刷出代表死亡(?)和减分(?)的标志;
4. 在玩家吃到死亡,碰到墙壁后结束游戏并提示是否继续游戏,在吃到减
分标志时实现减分;
5. 实现重复游戏。
第三章 详细设计说明 3.1模块描述
该程序整体较易理解,分为四个模块
1.游戏界面:输出游戏界面;
2.移动模块:实现接收用户键盘输入;
3.判断模块:实现游戏判断。
2
3.2性能
该程序具有操作简单,无需组建等工序,直接编译、连接即可运行。操作简单,根据提示即可完成游戏的全过程。
3.3输入项
次游戏只需要使用W(上)A(左)S(下)D(右)进行游戏。
3.4输出项
系统会根据游戏进行情况自动显示输出当前积分和游戏中刷出的代表死和代表减分的标志数。
3.5流程逻辑
该程序采用模块化编程,结构简单易懂。主要思路为,初始化游戏,接收用户键盘输入,判断游戏情况,完成游戏。
主要流程图如下:
主流程如图3-5-1:
3
图3-5-1
开始游戏
接收用户键刷出新 盘操作 标记
否
是
是 玩家是否判断积分是
吃到鼠 否是5或15 倍数
否 否
玩家是否死
亡
是
输出是否
继续游戏
是 是否继
续游戏
否
结束游戏
4
第六节 限制条件
该程序必须在VisualStudio2008下编译通过 ,Visual C++6.0可能会提示错误。
第七节 测试计划 开始:
游戏开始,如图3-7-1:
图3-7-1
玩家用键盘游戏,如图3-7-2:
图3-7-2
5
积分达到条件输出新标志,如图3-7-3:
图3-7-3
6
游戏结束提示继续游戏,如图3-7-4:
图
3-7-
第四章 软件使用说明
该程序必须在Visual C++2008环境中运行,程序具有操作简单,无需组建等工序,直接编译、连接即可运行。操作简单,根据提示即可完成游戏的全过程。
1.初始游戏界面,初始化食物,初始化,?玩家通过键盘?,?,?,?控制蛇的移动。
7
2.当?坐标与食物坐标相同时,判断分值的得失。
3.当总分为5的倍数时,刷出?,该食物将导致积分-2,当总分为15的倍数时,刷出?,该食物将导致游戏结束。
8
4.随着游戏的继续,游戏将越来越充满乐趣,界面随机多变的食物带给游戏者
更多的游戏体验。
9
5.游戏中不幸导致游戏结束。
第五章 课程设计心得与体会
对于课程设计一开始有一种一头雾水的感觉,它是干什么的,我要怎么做。拿下来题目之后,觉得以我的能力根本就不可能实现这个题目的要求,可是慢慢我发现它并非不可实现。只要耐心的分析它要的功能需要什么函数实现,就可以做到。于是我就着手做这个程序,可是它也并不像我想得那么简单。在设计中刚开始出现了一百多个错误,令我一头雾水,但是在经过几天的检查与修改后,能够编译出来,这令我非常的高兴,但是运行结果有点出乎我的意料,所运行的结果,不能达到所期望的,但是经过一番修改后,能够输出,并且能进行游戏,这让我喜出望外。
说实话这是我第一次,编写一个600多行的程序。虽然写的程序比较繁琐,没有任何技巧,但我觉得这是个美好的开始,说明我也可以自己做东西了。在我自己写出之后都有点不敢相信自己,因为对于我来说是个编程的新手,刚学了一学期,在课程设计中,刚开始真有点对自己失去信心,但是在我真正的开始编写时,就发现事情并不是我想的那么糟,只要肯下决心就会让你自己发现原来自己的事,只有在自己真正的做了之后,才能感觉到那种成功的喜悦,那种失败的酸辛。
10
这次课程设计也让我感觉得到了我的不足,我也从网上找到过相同的程序源代码。并且比我的实现的功能还要多,可是我的程序却要比他们的多好几倍,这也使我很苦恼。我知道原因就是我的程序并没有分模块编译,这也是问题所在,因为模块化设计部并不太明白。我想既然这些问题暴露出来了,我也没必要回避了。这次设计先搞一段落,放假后才是我追上别人的最好的时间,我将利用这段时间,好好的把这个弱项补回来。
课程设计刚开始的时候,我真的感觉到无从下手。因为已经过去一个学期了,期间又没有怎么看书,大一的时候学的c++,不过基本上已经忘光了,而且那时候学的不深,如果单单写一个比较的小的程序还可以,大程序基本写不了。当老师把题目发给我们之后,刚开始是一筹莫展,不过短时间内就已经觉醒,重新对题目分析了一遍,了解了一下要用到哪方面的知识,然后着手去看书,重新熟悉一下以前的知识。然后去图书馆借了一些关于数据结构和c++的书。看过那些书之后,信心增加了不少,对接下来的程序编译有很大帮助。
语言程序的设计,并认通过这三周的课程设计,我独立完成了一个较大的C++
真完成了课程设计报告。
回忆这三周的时间,我收获很大。首先,我熟练地运用了所学的知识编写程序,并成功的完成,感觉成就感很强,这大大激发了我编程的兴趣;其次,在设计的过程中遇到了一些困难,我会认真的去思考,或者充分利用网络资源来寻求帮助,提高获取信息的能力。课程设计期间,我有向老师和同学寻求帮助,在交流中共同进步。最后,我了解了软件开发的大体过程及各个步骤,这对将来的学习和工作是很有帮助的。
对于信管专业的大学生来说,积累实战经验是一项极其重要的内容,很可能成为将来就业的敲门砖。而程序设计综合课程设计就是积累实战经验的一个过程,虽然程序的规模并不大,但能够让我们尽早地认识软件开发的重要性和必要性,为将来的就业打下坚实的基础。
经过两个星期的上机实践学习,使我对C++语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自己编程粗心大意,经常出错,通过学习也有所改进;再有对C++语言的一些标准函数不太了解,还有对函数调用的正确使用不够熟悉,以及对C++语言中经常出现的错误也不了解,通过实践,使我在这几个方面
11
的认识有所提高。这次的课程设让我认识到很多C++的内在要素:
1. 程序设计语言是程序设计的工具。这是我通过两周课程设计深深体会的一点,并且发现如果想有效的进行程序设计,正确地应用程序设计语言表达算法,必须准确的运用程序设计语言,掌握其语法知识。
2. 学习程序设计必须重视时间环节,多读程序,多编写程序,多上机实践。这次的课程设计就使得课堂教学、式样和实践之间的关系更为紧密。对我的学习有着很深远的影响。
3. 我发现作为一个程序设计人员,需要掌握面向过程的程序设计,也要掌握面向对象的程序设计。从前,人们通过C++语言学习面向过程的程序设计,再通过C++学习面向对象的程序设计。其实C++并不是纯粹的面向对象的语言,它是一种混合语言。学习C++既可以编写面向过程的程序,也可以编写面向对象的程序。这一点是我通过可课程设计所的实践发现的。
4. 深切的感受到了C++语法的复杂,内容的繁多。发现如果对它缺乏系统的了解,将难以真正的运用,编出来的程序错误百出。
附录1:参考文献
谭浩强著.C++程序设计.北京:清华大学出版社,2004
谭浩强著.C++程序设计题解与上机指导.北京:清华大学出版社,2005
12
附录2:程序清单 Main.h
#include "gongneng.h" #include "frame.h"
#include "specialfunc.h" Mian.cpp
#include "main.h"
#include
#include
using namespace std;
int main()
{
//
while(1)
{
int n=0,ch=0;
frame();
n=move(initial());
if(n==-1)
{
gotoxy(LEFTBORDER+6,BOTTOMBODER+2);
cout<<"是否重新游戏(Y/N),...";
n=0;
}
while(ch!='Y'&&ch!='N')
ch=toupper(getchar());
if(ch=='N')
break;
}
return 0;
}
13
Frame.h
int frame();
Frame.cpp
#include
using namespace std;
#include "specialfunc.h" #include "gongneng.h"
//
int frame()
{
system("cls");
int i=0;
//border
for( i=0;i<79;i++)
cout<<"*";
for( i=0;i<24;i++)
{
gotoxy(78,i);
cout<<"*";
}
for( i=0;i<24;i++)
{
gotoxy(0,i);
cout<<"*";
}
for(i=0;i<78;i++)
{
cout<<"*";
}
//head
gotoxy(LEFTBORDER,TOPBORDER);
for( i=LEFTBORDER;i<=RIGHTBORDER;i++)
cout<<"*";
//right
for( i=TOPBORDER;i<=BOTTOMBODER;i++)
{
gotoxy(RIGHTBORDER+1,i);
cout<<"*";
}
//letf
gotoxy(LEFTBORDER,BOTTOMBODER+1);
for( i=TOPBORDER;i<=BOTTOMBODER;i++)
14
{
gotoxy(LEFTBORDER,i);
cout<<"*";
}
//bottom
for( i=LEFTBORDER;i<=RIGHTBORDER;i++)
cout<<"*";
//score
gotoxy(RIGHTBORDER+2,TOPBORDER);
cout<<" ************************";
gotoxy(RIGHTBORDER+2,BOTTOMBODER);
cout<<" ************************";
gotoxy(RIGHTBORDER+2,TOPBORDER+2);
cout<<" 计 分 牌 ";
gotoxy(RIGHTBORDER+2,BOTTOMBODER-9);
cout<<" 死?:";
gotoxy(RIGHTBORDER+2,BOTTOMBODER-6);
cout<<" 毒?:";
gotoxy(RIGHTBORDER+2,BOTTOMBODER-3);
cout<<" 总分:";
//标题
gotoxy(1,2);
cout<<" 欢 迎 来 到 蛇 鼠 大 战 ";
return 0;
}
Gongneng.h
#include
int random(int a, int b);
COORD randdot();
int judge(COORD coord,int *score);
int move(COORD coord);
COORD initial();
#define LEFTBORDER 6
#define TOPBORDER 4
#define RIGHTBORDER 46
#define BOTTOMBODER 20
#define A 11
15
#define W 12
#define D 13
#define S 14
#define MI 1
#define DU -2
#define SI 3
#define SMI "◎"
#define SDU "?"
#define SSI "?"
//submove
int submove(COORD *coord,int direct,int *score);
Gongneng.cpp
#include "gongneng.h" #include "specialfunc.h" #include #include using namespace std;
#include #include
int dot[RIGHTBORDER-LEFTBORDER][BOTTOMBODER-TOPBORDER]={0};
int du=0;
int si=0;
//move 函数处理键盘控制的方向 int move(COORD coord)
{
//
COORD pos;
pos.X=coord.X;
pos.Y=coord.Y;
int score=0;
char ch=0;
while(1)
{
ch=toupper(_getch());
switch(ch)
{
case 'A':
16
if(pos.X-1>LEFTBORDER)
{
if(-1==submove(&pos,A,&score))
return -1;
}
else
{
gotoxy(LEFTBORDER,BOTTOMBODER+1);
cout<<"哈哈~~~太弱了~~~才"<TOPBORDER)
{
if(-1==submove(&pos,W,&score))
return -1;
}
else
{
gotoxy(LEFTBORDER,BOTTOMBODER+1);
cout<<"哈哈~~~太弱了~~~才"<X,coord->Y);
cout<<' ';
switch(direct)
{
case A:
coord->X-=1;
break;
case W:
coord->Y-=1;
break;
case D:
coord->X+=1;
break;
case S:
coord->Y+=1;
break;
}
gotoxy(coord->X,coord->Y);
cout<<"?";
//如果此点可吃产生下一个点
int temp=judge(*coord,score);
if(temp&&temp!=-1)
{
gotoxy(RIGHTBORDER+11,BOTTOMBODER-3);
cout<<*score;
}
else if (temp==-1)
{
gotoxy(LEFTBORDER,BOTTOMBODER+1);
cout<<"哈哈~~~太弱了~~~才"<<*score<<"分...";
}
return temp;
}
//?◎?
Specialfunc.h
void gotoxy(int x,int y);
Specialfunc.cpp
#include
//设置光标位置函数
21
void gotoxy(int x,int y)
{
COORD coord;
coord.X=x;
coord.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord);
}
22
本文档为【蛇鼠大战课程设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。