以下为《《计算机程序设计》课程设计贪吃蛇实验报告》的无排版文字预览,完整格式请下载

下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

《计算机程序设计》课程设计报告

课 题 名 称 贪吃蛇游戏

班 级 软件1班

学 号 ***4

姓 名 罗某某

指 导 教 师 宋某某

设 计 时 间 11/1/1 至 11/1/3

设 计 地 点 常熟***

常熟***计算机科学与***

目录

1 需求分析1

2 系统分析和设计1

2.1 数据结构的设计和选择的理由1

2.2 系统模块划分和模块结构2

2.3 流程图3

2.4 数据类型、全局变量和函数说明3

3 程序测试和运行结果4

4 课程报告小结5

4.1分数重叠显示5

4.2速度太快5

4.3食物可能出现在蛇身上5

附录A:程序源代码6

1 需求分析

【阐述课程设计应该完成的功能】

使用键盘的上下左右,来控制蛇的运动方向,ESC键退出,并显示得分。

2 系统分析和设计

2.1 数据结构的设计和选择的理由

本游戏中涉及的主要数据结构是如何表示运动的蛇、食物状态等问题。2.1.1 从游戏参考画面中我们可以看到,贪吃蛇的身体是一节节的,由一个个大小相同的方块组成,那么我们可以用一个(x,y)坐标为左上角的、固定宽度的正方形来表示一节蛇身。为表示连续的多节身体,那么我们可以采用数组(或链表,或线性表)等数据结构来表示。下面以数组方式为例:struct Point {??? int x, y;}struct Point nodes[MAX_LENGTH];? //蛇身数组,MAX_LENGTH为最大蛇长贪吃蛇是在不断的运动的,我们研究蛇的运动可以发现这样的特点:1. 蛇头由键盘控制,键盘不操作时,保持原有方向运动;(用 int direction;表示) 2. 运动时,蛇身后面一节移动到前面一节的位置。当我们用nodes[0]表示蛇头的时候,nodes[1]运动到nodes[0]处;nodes[2]运动到nodes[1]处...。3. 吃到一个食物以后,蛇身会增加一节。即该数组中的有效数据个数加一。(用int length;表示)根据上面的情况,我们可以设计蛇的数据结构如下:struct Snake {?? struct Point nodes[MAX_LENGTH];? //蛇身数组,保存每节蛇身的坐标。MAX_LENGTH为最大蛇长??? int length;??? //当前蛇长??? int direction; //蛇头运动方向??? int live;????? //蛇活的,还是已经死了?}2.1.2 关于食物,有两个属性:1. 坐标位置2. 状态:存在,或被吃。故我们用以下结构表示:struct Food {??? struct Point position;? //食物的位置??? int exist; ???????????? //存在?还是被吃?}

2.2 系统模块划分和模块结构

void main() {

init(); /*初始化*/

l=1;

while(l) /*循环游戏*/

{

select(); /*游戏速度和结束的选择菜单*/

gamePlay(); /*游戏主程序*/

}

close(); /*关闭游戏*/

}

2.3 流程图

2.4 数据类型、全局变量和函数说明

2.4.1数据类型

struct Point { /*一个存放点坐标的结构体*/

int x, y; /*被多个结构体调用的基本参数,所以统一用point结构体来表示*/

};

struct Snake { /*用来模拟蛇状态的结构体*/

struct Point nodes[MAX_LENGTH]; /*用来存放蛇每一节的位置*/

int length; /*蛇长*/

int direction; /*蛇移动的方向*/

int live; /*蛇是否活着*/

} snake;

/*比较形象的把蛇抽象为一个数据类型*/

struct Food { /*用来模拟食物状态的结构体*/

struct Point position; /*食物的位置*/

int exist; /*食物是否存在*/

} food;

2.4.2全局变量

Score\\得分

left,top,right,bottom\\游戏区域范围

lastx,lasty\\用来保存最后一节蛇的位置

keyCode\\用来保存按下的键

2.4.3函数说明

void init(void);\\初始化程序,给一些初始值赋值

void gamePlay(void);\\游戏主循环

void close(void); \\关闭游戏

void drawWall(void); \\画墙

void createFood(void); \\创造一个食物

void drawFood(void); \\画出食物

void drawSnake(void); \\画出蛇

void drawScore(void); \\画出分数

int touchWall(void); \\判断是否碰到墙

int touchSelf(void); \\判断是否碰到自己

void gameOver(void); \\游戏结束

void moveSnake(void); \\移动蛇

int oppositeDirection(int keyCode); \\判断是否方向有误

int foodEat(void); \\判断是否吃到食物

void expandSnake(void); \\把蛇增长一节

3 程序测试和运行结果

----------------------------------------------------------------------------选择速度开始或退出

----------------------------------------------------------------------------------------游戏运行中

--------------------------------------------------------------------------------------------------------游戏结束

4 课程报告小结

【遇到的问题及解决方法分析等】

4.1分数重叠显示

解决方法:每次都用一块黑的矩形覆盖

setfillstyle(1,16);

bar(45,45,150,80);

4.2速度太快

解决方法:循环delay

for(d=0;d<4;d++)

delay(GAME_SPEED);

4.3食物可能出现在蛇身上

解决方法:依次判断,若重叠则重新生成食物

void createFood() {

int i;

label:

food.position.x=left+10*((int)rand()%11);

food.position.y=top+10*((int)rand()%11);

for(i=0;i<=snake.length-1;i++){

if(snake.nodes[i].x==food.position.x&&snake.nodes[i].y==food.position.y)

goto label;

}

附录A:程序源代码

/*writer: neolone(LB)*/

#include

#include

#include

#include

#include

#include

#include

#define TRUE 1

#define FALSE 0

#define UP 0x4800

#define DOWN 0x5000

#define LEFT 0x4B00

#define RIGHT 0x4D00

#define ESC 0x011B

#define SPEED1 0x0231

#define SPEED2 0x0332

#define SPEED3 0x0433

#define QUIT 0x0B30

#define ENTER 0x1C0D

#define MAX_LENGTH 100/* max length of snake nodess */

#define GAME_SPEED 100 /* game speed */

/* data structure */

struct Point {

int x, y;

};

struct Snake {

struct Point nodes[MAX_LENGTH];

int length;

int direction;

int live;

} snake;

struct Food {

struct Point position;

int exist;

} food;

int score=0,max,max1,max2,max3,left=200,top=200,right=300,bottom=300,lastx,lasty,keyCode,keyCode2,sp,l,sel,times=1;

char text[80];

/* functions declaration */

void init(void);

void gamePlay(void);

void close(void);

void drawWall(void);

void createFood(void);

void drawFood(void);

void drawSnake(void);

void drawScore(void);

int touchWall(void);

int touchSelf(void);

void gameOver(void);

void moveSnake(void);

int oppositeDirection(int keyCode);

int foodEat(void);

void expandSnake(void);

void select(void);

/*------------------------*/

void main() {

init();

l=1;

while(l)

{

select();

gamePlay();

}

close();

}

void init() {

int gdriver=VGA ,gmode=VGAHI ;

snake.nodes[0].x=250;

snake.nodes[0].y=250;

snake.nodes[1].x=250;

snake.nodes[1].y=260;

snake.length=2;

snake.live=1;

snake.direction=UP;

score=0;

food.exist=0;

initgraph (&gdriver,&gmode,"C:\\tc20\\BGI");

randomize();/*sui ji shu fa sheng qi*/

drawWall();

}

void close() {

FILE *fp;

closegraph();

if((fp=fopen("data.txt","w"))==NULL) /*关闭时保存最高分*/

{

exit(0);

}

else

{

fprintf(fp,"%d,%d,%d",max1,max2,max3);

fclose(fp);

}

printf("pess any key to continue");

}

void gamePlay() {

int keyCode,d;

getch();

while(TRUE) {

drawScore();

drawWall();

if (touchWall() || touchSelf()) {

gameOver();

return;

}

if (!food.exist) createFood();

food.exist=1;

drawFood();

drawSnake();

for(d=0;d

delay(GAME_SPEED);

if (bioskey(1) != 0) {

keyCode = bioskey(0);

switch(keyCode) {

case ESC:

gameOver();

return;

default:

lastx=snake.nodes[snake.length-1].x;

lasty=snake.nodes[snake.length-1].y;

if (!oppositeDirection(keyCode)) {

snake.direction = keyCode;

}

}

}

moveSnake();

if (foodEat()) {

food.exist = FALSE;

score += 10;

expandSnake();

}

}

}

void drawWall() {

rectangle(left,top,right+10,bottom+10);

}

void createFood() {

int i;

label:

food.position.x=left+10*((int)rand()%11);

food.position.y=top+10*((int)rand()%11);

for(i=0;i<=snake.length-1;i++){

if(snake.nodes[i].x==food.position.x&&snake.nodes[i].y==food.position.y)

goto label;

}

}

void drawFood() {

setfillstyle(1,2);

bar(food.position.x,food.position.y,food.position.x+10,food.position.y+10);

}

void drawSnake() {

int j;

setfillstyle(1,4);

for(j=0;j<=snake.length-1;j++)

{

bar(snake.nodes[j].x,snake.nodes[j].y,snake.nodes[j].x+10,snake.nodes[j].y+10);

}

}

void drawScore(void) {

setfillstyle(1,16);

bar(45,45,150,80);

setcolor(WHITE);

sprintf(text,"writer:neolone");

outtextxy(170,50,text);

sprintf(text,"score:%5d",score);

outtextxy(50,50,text);

}

int touchWall() {

int x1=snake.nodes[0].x;

int y1=snake.nodes[0].y;

if(x1right||y1bottom)

return TRUE;

else

return FALSE;

}

int touchSelf() {

int i;

for (i=3;i

{

if(snake.nodes[0].x==snake.nodes[i].x&&snake.nodes[0].y==snake.nodes[i].y)

return TRUE;

}

return FALSE;

}

void gameOver() {

FILE *f

>>>>>>内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。<<<<<<

times=0;

}

switch(sel%4) { /*选择速度*/

case 0:

l=0;

gameOver();

close();

break;

case 1:

sp=5;

init();

sprintf(text,"Hightest score:%d",max1);

outtextxy(50,90,text);

break;

case 2:

sp=3;

init();

sprintf(text,"Hightest score:%d",max2);

outtextxy(50,90,text);

break;

case 3:

sp=1;

init();

sprintf(text,"Hightest score:%d",max3);

outtextxy(50,90,text);

break;

default :

break;

}

}

[文章尾部最后500字内容到此结束,中间部分内容请查看底下的图片预览]

以上为《《计算机程序设计》课程设计贪吃蛇实验报告》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

用计算机编程贪吃蛇,《计算机程序设计》课程设计贪吃蛇实验报告相关推荐

  1. c语言单源最短路径问题实验报告,数据结构课程设计最短路径问题实验报告-20210320182652.docx-原创力文档...

    IMB standardization office[IMB 5AB- IMBK 08- IMB 2C] IMB standardization office[IMB 5AB- IMBK 08- IM ...

  2. c语言课程设计文本编辑器实验报告6,C课程设计简易文本编辑器.doc

    C课程设计简易文本编辑器 目录 第一章 课程设计目的和要求1 1.1课程设计的目1 1.2 基本要求1 第二章 课程设计任务内容2 2.1 设计背景2 2.2简易文本编辑器设计内容2 第三章 详细设计 ...

  3. 操作系统课程设计pintos project1实验摘记

    前言: 本篇意在记录本学期结束的操作系统课程设计pintos project1实验报告和实现过程.整个实验参考了多篇文章也查阅了一些代码,其中部分内容或与其他文章相同,还请见谅.同时,也为了测试CSD ...

  4. c语言电子计算器课程设计报告,计算机程序设计课程设计报告.doc

    计算机程序设计课程设计报告.doc PAGE 1 计算机程序设计(C语言) 课程设计报告 题目:学生信息管理系统 学院: 计算机科学与工程学院 专业: 电子信息工程 班级:110406 姓名: 黄伟强 ...

  5. 厦门理工计算机课设,厦门理工学院11级C语言C语言程序设计课程设计报告

    <厦门理工学院11级C语言C语言程序设计课程设计报告>由会员分享,可在线阅读,更多相关<厦门理工学院11级C语言C语言程序设计课程设计报告(25页珍藏版)>请在人人文库网上搜索 ...

  6. c语言课程设计贪吃蛇报告,贪吃蛇C语言课程设计报告.doc

    贪吃蛇C语言课程设计报告 贪吃蛇游戏设计 姓名: 张力 学号: 完成日期: 月 日 一.设计目的 贪吃蛇游戏程序功能的实现主要是建立在二维数组和图形界面的应用上,通过编写游戏程序能够熟悉掌握相关数组和 ...

  7. java贪吃蛇课程设计报告_Java课程设计贪吃蛇讲解

    Java课程设计是必不可少的一个重要学习环节,Java程序设计的目的就是加深Java学习者对Java理论基础内容的理解和掌握.今天我们要讲的Java课程设计就是贪吃蛇的小程序设计,以下是具体讲解: 1 ...

  8. 《数据结构与算法分析》课程设计——贪吃蛇问题

    中国矿业大学信控学院 补一下我之前在博客园发布的内容  懒得调了,想复制完整代码直接复制最下面的,想复制分布代码去看我博客园链接吧 <数据结构与算法分析>课程设计--贪吃蛇问题 - 刷子z ...

  9. 贪吃蛇c语言课程设计报告下载,c语言课程设计-贪吃蛇游戏

    c语言课程设计-贪吃蛇游戏 C 语言课程设计 1 山东交通学院 C 语言课程设计 贪吃蛇游戏 院(系)别 交通与物流工程学院 班 级 物联 131 学 号 130516122 姓 名 王赛 指导教师 ...

最新文章

  1. 逻辑模型三要素-数据结构
  2. 求解两个非负整数的最大公约数(C语言实现)
  3. [javaSE] 多线程(守护线程)
  4. Golang的Int8 Int16 Int32 Int64区别
  5. 【Spring 5】响应式Web框架实战(上)
  6. koa 接口返回数据_koa+node基础搭建到实现api接口
  7. git基本使用知识点总结
  8. php简单登陆,PHP简单实现单点登录
  9. 2022年6月 青少年软件编程(Python) 等级考试试卷(二级)
  10. Spring boot Redis 乱码
  11. Linux下文件压缩、打包,看这一篇就够了
  12. 宏碁公司再次遭遇入侵,160GB敏感数据泄露
  13. 如何快速的开发一个完整的iOS直播app(美颜篇)
  14. strstr函数的自己实现
  15. 编程就是python吗_编程python是什么
  16. PMP考试自学可以吗? 一分钟让你搞清楚
  17. 15、【华为HCIE-Storage】--多路径技术
  18. python哪个方向工资高_学完Python的7大就业方向,哪个行业才能赚钱多?
  19. 你知道 iOS 开发者的六种不同角色吗?这些迷人领域的深入指南
  20. 一套代码实现1对1 、1对N在线课堂与低延迟大班课

热门文章

  1. 联想预装Win10/Win8换Win7 教程 以及svn使用教程
  2. 文献管理神器——Zotero配置及实用插件扩展
  3. Excel里半勾的打法
  4. office 2010 PPT 中添加GIF动画
  5. 因为假货,美国再次“拉黑”淘宝
  6. Markdown 简易入门教程
  7. NetStream简介
  8. DICOM文件读取及PNG格式图片展示
  9. 2-1 CAD基础 对象选取
  10. access重复数据累计_ACCESS数据库-sql语句查找重复记录、唯一记录和分组统计方法...