操作系统实验报告(贪吃蛇游戏)

更新时间:2024-05-07 04:36:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

南通大学计算机科学与技术学院

操作系统试验

报 告 书

试验题目 贪吃蛇游戏

专业班级 XXXXXX 学生姓名XXXXX

指导教师XXXX 日期2017年6月

主要内容

(一)设计内容:在Windows 9x/2000/XP/ME操作系统下,使用VC、VB、Java或C等编程语言,采用多道程序设计技术编写一个游戏软件或解决一个简单的实际问题,要求设计一个两道以上的程序,可以是固定的2道程序、也可以是灵活的多道模式。设计的内容可以是下面任选其一:

(1)用多道程序技术实现一个游戏程序。如大炮打飞机、赛车比赛等。

(2)用多道程序技术模拟客观世界中一个多任务实际问题的解决。

(二)设计要求:

(1) 本程序可运行在Windows 9x/2000/XP/ME操作系统下,可安装到任意路径下。 (2) 采用多进程或多线程方式运行,尽量体现进程间的同步和互斥关系。 (3)经调试后程序能够正常运行,并体现多道程序的特点。

(三)实验目的:

1. 掌握进程和线程的概念。

2. 掌握进程控制原语或进程控制系统调用的使用 3. 掌握多道程序设计的基本理论、方法和技术。 4. 掌握相关语言进程控制的API函数的使用。 5. 培养学生多道程序设计的能力。 6. 培养学生团队合作的能力。

(四)实验的选择:用多道程序技术实现一个游戏程序。游戏:《贪吃蛇》

实验思想:

1.首先制作游戏的窗体布局。其中包括窗体的大小,位置,添加按钮组件,在窗体上面划定游戏区域等。

2.为按钮添加监听器,为开始按钮,结束按钮,键盘,还有游戏结束的时候的确定按钮.

3.单击开始按钮,看到的效果是在游戏区域里面看到一个随机产生的食物,和蛇体。产生随见事物使用Random类,随机定位一个游戏区域里面的方块,然后使用Graphrics可以定位到这个方块的坐标图上颜色,这样就产生了肉眼可见的食物。关于蛇体,我们将蛇体的每个方块添加到集合里面,使用的是List,为什么不用数组,原因是数组的长度总是有限的,你不知道蛇体里面最终存放多少方格,而且数组比较繁琐。我们将蛇体的每个方块另外创建一个类(蛇体的每个方格)snakeAct,包含成员变量方格的坐标,每个snakeAct对象实例就是一个方块,将这个对象添加到列表List中就好了,然后再用Graphics,循环画出列表中的每个对象,就成功的画出了蛇体。设置蛇体的初始长度只有蛇头,并设置蛇头的初始位置为居中。 4.通过方向键设置蛇头的移动,定义move()方法,蛇头每移动一次位置就会变化到另外一个方块,对应的坐标x,y都是有相应的变化,例如按下UP键,坐标的变化就是,x不变,y减1。

5.蛇头可以运动只有面临的问题就是要吃食物,而吃食物的过程是在移动过程中,所以在move()方法中添加eat()方法,吃到食物的条件是蛇头的坐标和食物的坐标对应相等,蛇头吃到食物的过程就是将列表中没有吃到食物前的最后一个方格重新画一遍,这样列表的长度就加一,而列表中的对象就多了一个。

6.将食物添加到列表中之后,仍然只是蛇头可以移动,让蛇体跟着蛇头移动定义

othermove()方法,就是将蛇体的每个蛇块替换移动前的前一个蛇块的坐标,这样在移动只有,整个蛇体就可以移动了,othermove方法也写在move()方法里面,move()方法写在键盘的监听方法里面。

7.撞墙的或者蛇头撞到自己的身体,可以再move()方法里面进行预判,如果蛇头移动满足判定条件,才可以移动,若蛇头碰到墙壁或者自己的身体,弹出对话框,点击确定按钮,恢复初始化,清空列表。

(五)主函数流程图:

蛇开始移动 根据键盘控制蛇的移动方向 开始游戏

暂停 是 否

判断蛇头和食物的坐标是否重合

是否继续 是 否

随机生成下一个食物

是 否

判断蛇头和自身及墙、炸弹是否重合 是 游戏结束 (六)详细设计:

1.贪吃蛇的本体设计 贪吃蛇的头部拥有一个坐标(x,y),蛇体有一个长度length,蛇有一个运动方向direct,故定义一个结构体如下: struct Snake { intx,y; intlen; int direct; }Snake[20];

2.贪吃蛇食物设计 贪吃蛇的食物有一个坐标(x,y),此食物有一个标志isfood,当isfood为0时,表示食物还没被吃,为1时,表示被吃。 struct Food { int x;

int y;

intisfood; }Food;

(八)具体模块实现:

#include #include #include #include #include #include

#include using namespace std;

HANDLE hout=GetStdHandle(STD_OUTPUT_HANDLE); COORD coord;

void locate(intx,int y) {

coord.X=y; coord.Y=x;

SetConsoleCursorPosition(hout,coord); };

void hide() {

CONSOLE_CURSOR_INFO cursor_info={1,0}; SetConsoleCursorInfo(hout, &cursor_info); }

double random(double start, double end) {

return start+(end-start)*rand()/(RAND_MAX + 1.0); }

intm,n;

struct node {

intx,y;

}snake[1000];

intsnake_length,dir; node food;

int direct[4][2]={{-1,0},{1,0},{0,-1},{0,1}};

voidprint_wall() {

cout<< \

for (inti=1;i<=n;i++) cout<< \cout<

for (int j=0;j<=m-1;j++) {

cout<< \

for (inti=1;i<=n;i++) cout<< \cout<< \ }

cout<< \

for (inti=1;i<=n;i++) cout<< \}

voidprint_snake() {

终于成功解决,使得游戏的进行更加流畅了,并且长时间的游戏也不会导致游戏卡顿占用计算机过大的内存,这应该算是游戏的一个优化了。经过这次长达三个月的实验,我发现程序的编写不是想象的那么简单,每一步都需要多次演算一丝不苟精确无误,否则一步错步步错,不能及时发现的话最后需要花大量的时间也不一定能找出错误进行修正。另外,多人合作也使得编写加快了不少,只要能够沟通好,合作无间,解决问题会变容易很多。

2号:贪吃蛇游戏程序设计关键在于表示蛇的图形及蛇的移动。用一个小矩形快表示蛇的一节身体,身体每长一节,增加一个矩形块,蛇头(绿色)用三节表示。移动时必须从蛇头开始,所以蛇不可以向相反的方向移动,如果不按任意键,蛇自行在当前方向右前移,但按下有效方向键后,蛇头朝该方向移动,一步移动一节身体,所以按下有效方向键后,先确定蛇头的位置,而后蛇的身体随蛇头移动,图形的实现是从蛇头新位置开始画出蛇,这时,由于未清屏的原因,原来的蛇的位置和新的位置差一个单位,所以看起来蛇多一节身体,所以将蛇的最后节用背景色覆盖。食物的出现与消失也是画矩形块和覆盖矩形块。为了便于理解,定义两个结构体:食物与蛇,同时还定义了一个随意的墙。然后利用图形驱动,,制作美观的游戏界面,通过随机函数产生随机的食物,控制游戏过程食物的出现。定义键盘操作控制游戏过程蛇的移动方向,画出边界,并判断游戏是否结束,统计游戏过程中蛇吃的食物数量,计算并输出游戏成绩。

3号:和一起用c++语言编写了一个小游戏贪吃蛇,在编写的过程中不仅会到了编写代码的艰辛,也体会到了合作的乐趣和编写完成后的快乐。在编写的过程中我主要负责QT QApplication的任务,这对于开始学习这方面的我有些难度。

QApplication 类管理图形用户界面应用程序的控制流和主要设置。可以说

QApplication是Qt的整个后台管理的命脉。它包含主事件循环,在其中来自窗口系统和其它资源的所有事件被处理和调度。它也处理应用程序的初始化和结束,并且提供对话管理。它也处理绝大多数系统范围和应用程序范围的设置。QApplication 可以处理的范围非常广:

1.它使用用户的桌面设置。 2.它执行事件处理。

3.它分析命令行参数并且根据他们设置内部状态。 4.它定义了由QStyle对象封装的应用程序的观感。 5.它指定了应用程序如何分配颜色。 6.它定义了默认文本编码。

7.它提供了一些像desktop()和clipboard()这样的魔术般的对象。 8.它管理应用程序的鼠标光标处理。在刚要决定我们要做什么的时候,我们两个也非常迷茫,不知道从何下手,虽然知道有了大的方向,但是就像是老虎吃——不知从何下手。但是我们两个也没有放弃,而是更加积极的翻阅资料,查找参考书,在网上找线索或者团队交流。最终我们还是找到了属于我们自己的路。在整个的过程中,我体会到了很多的精神。第一就是“有志者事竟成”。在制作的过程中我们遇到了很多的问题,开始的时候我们就为自己找不到方向而困扰,然后,

因为制作的过程是在暑假,我们两个隔的很远,所以有些事沟通起来也不是非常方便,有些事在qq上在电话上说不清楚。所以,在很多方面上我们会出现很多的分歧,有的时候在某些方面也无法沟通明白,这样就出现了很多的问题。有的时候真的想放弃了,真的是觉得自己做不下去了。但是,最后我们还是坚持下来了。当结束的那一天,我深深的体会到“有志者事竟成”的无穷魅力!

本文来源:https://www.bwwdw.com/article/jv5g.html

Top