没有合适的资源?快使用搜索试试~ 我知道了~
首页C语言实训报告(贪吃蛇的设计及源码).doc
C语言实训报告(贪吃蛇的设计及源码).doc
需积分: 33 395 浏览量
更新于2023-05-23
评论 1
收藏 164KB DOC 举报
一、项目概述二、需求分析三、软件设计四、关键技术五、功能扩展六、源码分析七、实训收获八、对实训教学的意见和建议九、源程序
资源详情
资源评论
资源推荐

C 程序设计实训报告
实训题目:贪吃蛇
学 院:
专业班级:
姓 名:
学 号:
指导老师:

一、 项目概述
所开发的软件系统名称为贪吃蛇,游戏行业逐渐发展,很多人闲暇时光喜欢玩小游戏放松,
贪吃蛇就是一款针对五岁以上群众的益智类游戏,是游戏产业的初期作品,了解他的基础构造
和组成有利于更好的学习和理解 C 语言。
二、 需求分析
系统特点设定:
贪吃蛇开始有 5 个字符的长度,吃到果子可以加分并长大,吃到自己的身体、毒物或碰壁
则会结束游戏。
软件功能说明:
(1)初始页面显示贪吃蛇游戏标题以及开始游戏或设置游戏。
(2)贪吃蛇的初始定位在地图正中,蛇头向左。wsad 或上下左右均可分别控制上下左右移动
方向。
(3)设置界面可以选择设置地图、设置蛇的移动速度。初始界面大小:20*60。初始移动速度
100000000。
(4)蛇初始长度为 5 格,吃到果子‘0’(与毒物‘*’一同刷新出现,吃到 30 分(GOD LIKE)后
会清空一次毒物。)会增长一格长度的身体,并积分+1。
(5)当吃到第十个果子会得到称号 MVP,并获得系统奖励食物‘$’,吃掉后可以获得 4 积分。第
三十个会得称号 GOD LIKE,获得系统奖励清空地图现有毒物,并在接下来的两步之内获得系
统奖励食物‘$’。
(6)当吃到蛇身体、毒物或碰壁则会结束游戏并打印积分、称号总结面板。
运行环境规定
(1)设备:机房电脑
(2)支撑软件:Qt
(3)操作系统:win7
三、 软件设计
setup 函数:可以根据用户喜欢自行设定地图大小、蛇身移动速度。
createMap 函数:利用数组的排列创建视觉效果上的地图。#为地图边界,即围墙。
showMap 函数:输出数组所构成的地图。
createSnake 函数:创建蛇,包括舌头蛇身,初始化蛇所在位置。
showMapAndSnake 函数:打印地图以及蛇,两个图层重合,最终达到共同显示的目的。
createFood 函数:创建食物(果子),使之随机生成在地图之中又不与围墙、蛇身重合。
createNoFood 函数:创建毒物,使之随机生成在地图之中又不与围墙、蛇身重合。
eatFood 函数:吃到食物或毒物的判断函数,根据吃到的不同物品来返回不同值。
moveTail 函数:移动尾巴,呈现尾巴与蛇身共同移动的视觉效果。
run 函数:运动的主函数,包括判断撞墙、不开反向行动等等。
delay 函数:缓存达到控制蛇身自动移动快慢的效果
四、 关键技术
char ch = getch();获取键盘输入。
system("cls");清空界面。
1

char map[ROW][LINE];创建二维数组,用于地图的构建
scanf("%d",&line);接收键盘信息并赋值给 line
printf("%c",map[i][j]);打印地图。
food_x = rand()%ROW+1;创建一个随机值赋值给横坐标 head_x。
food_y = rand()%LINE+1; 创建一个随机值赋值给纵坐标 head_y。
if(direct=='a'){ if(ch=='d'){ continue; }}控制蛇身不能反向移动。
snake[head_x-1][head_y]=++head_v;控制头部永远在数组最末即视觉上的第一个。
for(int i=0;i<times;i++){ }根据 times 调节缓存来控制蛇的移动速度。
五、 功能扩展
void createNoFood(char map[ROW][LINE],int snake[ROW][LINE]){
int nofood_x = 0;
int nofood_y = 0;
while(map[nofood_x][nofood_y]=='#'||snake[nofood_x]
[nofood_y]!=0){
nofood_x = rand()%ROW+1;
nofood_y = rand()%LINE+1;
}
map[nofood_x][nofood_y] = '*';
}
创建不能吃的食物(毒物),即吃后会死亡,当吃下一个食物后调用该
函数即与下一个食物一同生成。位置与食物一样随机生成,并且可以不消失
的存在屏幕中不消失。意味着游戏越深入,行走受限制越大,越容易死。
if(count==10){
printf("get achievement:MVP.\n");
}
if(count==30){
printf("get achievement:GOD LIKE.\n");
createMap(map);
createFood(map,snake);
}
当吃够十个食物后会提示得到了 MVP 的称号,并获得系统奖励食物‘$’,吃
掉后可以获得 4 积分。当吃够三十个食物的时候得到 GOD LIKE 的称号,并且
作为奖励,系统会清空当前界面的所有毒物,不再出现,在接下来的两步之内
同样会获得系统奖励食物‘$’。这样设计的原因是经过测试,当吃到 50 个食物
后将逐渐陷入必死局的两难境地,所以帮助清空一次可以增长游戏时间。
游戏结束后,会输出所获得过的称号。
六、 源码分析
利用 while(1)接收键盘事件;
if(head_x==0||head_x==ROW-1||head_y==0||head_y==LINE-1)因为墙的
坐标是数组的第一和最后一列、行,又因为数组从 0 计数,所以最后一行一列的坐
标均需-1。
因为方向只有 wasd,并且上下左右按键也给赋予了对应的 wasd,所以可以通过
switch(direct)来判断和执行移动。
2
剩余12页未读,继续阅读










安全验证
文档复制为VIP权益,开通VIP直接复制

评论0