C语言小游戏设计报告

课程设计名称:贪吃蛇小游戏

专业班级:计科15-2

学号:150809229

姓名:XXX

一.设计目标

通过设计,培养学生对电脑的动手能力,使学生巩固《C语言程序设计》课程学习的内容,掌握编写程序的基本方法,强化对其的动手能力,可以独自完成程序的编写。

二.设计内容和要求

  1. 设计内容

    编写贪吃蛇的小游戏,使其可以成功运行并且操作玩耍。

  2. 设计要求

    1)源程序要有适当的注释,使程序便于阅读。

    2)要有程序运行结果作为依据

三.程序流程

1.编写地图

运用函数,数组编写地图

2.相同的方法把蛇添加进地图

3.再添加食物,标题与方法

四.实验结果

可以控制蛇任意的移动并且蛇的长度随着吃的食物的增加而加长

五.设计体会

经过对C语言课程的实践学习,使我对C语言有进一步的认识与体会,通过实践,也使我发现了许多的不足之处。首先,对C语言的的一些标准的基础函数不了解,还有一些使用的不熟悉,调用的不准确,还有对C语言常出现的一些错误不知如何解决,通过实践,使我在这几个方面的认识有所提高。在本次的实践中掌握了C语言的基本知识。

我认为要学号C语言程序这门课程,不仅要认真阅读课本知识,更重要的是通过上机的实践才能增强和巩固我的知识。只有这样我们才能成为合格的计算机人才。

六.源程序清单

/************************************************************

//************************************************************

//******友情提示:如想速度快点,请改小_sleep(500)函数中参数*****

//************************************************************

//************************************************************

//************************************************************

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

#include <time.h>

const int H = 20;   //地图的高

const int L = 60;  //地图的长

char GameMap[H][L];   //游戏地图

int  key;  //按键保存

int  sum = 1, over = 0;  //蛇的长度, 游戏结束(自吃或碰墙)

int  dx[4] = {0, 0, -1, 1};  //左、右、上、下的方向

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

struct Snake   //蛇的每个节点的数据类型

{

int x, y;  //左边位置

int now;   //保存当前节点的方向, 0,1,2,3分别为左右上下

}Snake[H*L];

const char Shead = '@';  //蛇头

const char Sbody = '#';  //蛇身

const char Sfood = '*';  //食物

const char Snode = '.';  //'.'在地图上标示为空

void Initial();  //地图的初始化

void Create_Food(); //在地图上随机产生食物

void Show();   //刷新显示地图

void Button();  //取出按键,并判断方向

void Move();   //蛇的移动

void Check_Border();  //检查蛇头是否越界

void Check_Head(int x, int y);   //检查蛇头移动后的位置情况

int main()

{

Initial();

Show();

return 0;

}

void Initial()  //地图的初始化

{

int i, j;

int hx, hy;

system("title 贪吃蛇");  //控制台的标题

memset(GameMap, '.', sizeof(GameMap));  //初始化地图全部为空'.'

system("cls");

srand(time(0));   //随机种子

hx = rand()%H;    //产生蛇头

hy = rand()%L;

GameMap[hx][hy] = Shead;

Snake[0].x = hx;  Snake[0].y = hy;

Snake[0].now = -1;

Create_Food();   //随机产生食物

for(i = 0; i < H; i++)   //地图显示

{

for(j = 0; j < L; j++)

printf("%c", GameMap[i][j]);

printf("\n");

}

printf("\nC语言小游戏贪吃蛇\n");

printf("按任意方向键开始游戏\n");

getch();   //先接受一个按键,使蛇开始往该方向走

Button();  //取出按键,并判断方向

}

void Create_Food()  //在地图上随机产生食物

{

int fx, fy;

while(1)

{

fx = rand()%H;

fy = rand()%L;

if(GameMap[fx][fy] == '.')  //不能出现在蛇所占有的位置

{

GameMap[fx][fy] = Sfood;

break;

}

}

}

void Show()  //刷新显示地图

{

int i, j;

while(1)

{

_sleep(500); //延迟半秒(1000为1s),即每半秒刷新一次地图

Button();   //先判断按键在移动

Move();

if(over)  //自吃或碰墙即游戏结束

{

printf("\n**游戏结束**\n");

printf("     >_<\n");

getchar();

break;

}

system("cls");   //清空地图再显示刷新吼的地图

for(i = 0; i < H; i++)

{

for(j = 0; j < L; j++)

printf("%c", GameMap[i][j]);

printf("\n");

}

printf("\nC语言小游戏贪吃蛇\n");

printf("按任意方向键开始游戏\n");

}

}

void Button()  //取出按键,并判断方向

{

if(kbhit() != 0) //检查当前是否有键盘输入,若有则返回一个非0值,否则返回0

{

while(kbhit() != 0)  //可能存在多个按键,要全部取完,以最后一个为主

key = getch(); //将按键从控制台中取出并保存到key中

switch(key)

{   //左

case 75:  Snake[0].now = 0;

break;

//右

case 77:  Snake[0].now = 1;

break;

//上

case 72:  Snake[0].now = 2;

break;

//下

case 80:  Snake[0].now = 3;

break;

}

}

}

void Move()   //蛇的移动

{

int i, x, y;

int t = sum;  //保存当前蛇的长度

//记录当前蛇头的位置,并设置为空,蛇头先移动

x = Snake[0].x;  y = Snake[0].y;  GameMap[x][y] = '.';

Snake[0].x = Snake[0].x + dx[ Snake[0].now ];

Snake[0].y = Snake[0].y + dy[ Snake[0].now ];

Check_Border();   //蛇头是否越界

Check_Head(x, y);  //蛇头移动后的位置情况,参数为: 蛇头的开始位置

if(sum == t)  //未吃到食物即蛇身移动哦

for(i = 1; i < sum; i++)  //要从蛇尾节点向前移动哦,前一个节点作为参照

{

if(i == 1)   //尾节点设置为空再移动

GameMap[ Snake[i].x ][ Snake[i].y ] = '.';

if(i == sum-1)  //为蛇头后面的蛇身节点,特殊处理

{

Snake[i].x = x;

Snake[i].y = y;

Snake[i].now = Snake[0].now;

}

else   //其他蛇身即走到前一个蛇身位置

{

Snake[i].x = Snake[i+1].x;

Snake[i].y = Snake[i+1].y;

Snake[i].now = Snake[i+1].now;

}

GameMap[ Snake[i].x ][ Snake[i].y ] = '#'; //移动后要置为'#'蛇身

}

}

void Check_Border()  //检查蛇头是否越界

{

if(Snake[0].x < 0 || Snake[0].x >= H

|| Snake[0].y < 0 || Snake[0].y >= L)

over = 1;

}

void Check_Head(int x, int y)  //检查蛇头移动后的位置情况

{

if(GameMap[ Snake[0].x ][ Snake[0].y ] == '.')  //为空

GameMap[ Snake[0].x ][ Snake[0].y ] = '@';

else

if(GameMap[ Snake[0].x ][ Snake[0].y ] == '*')  //为食物

{

GameMap[ Snake[0].x ][ Snake[0].y ] = '@';

Snake[sum].x = x;   //新增加的蛇身为蛇头后面的那个

Snake[sum].y = y;

Snake[sum].now = Snake[0].now;

GameMap[ Snake[sum].x ][ Snake[sum].y ] = '#';

sum++;

Create_Food();  //食物吃完了马上再产生一个食物

}

else

over = 1;

}

转载于:https://blog.51cto.com/11503509/1767069

C语言小游戏设计报告相关推荐

  1. 小游戏C语言报告,C语言小游戏设计报告

    C语言小游戏设计报告 发布时间:2020-06-19 03:34:29 来源:51CTO 阅读:1412 作者:迷蒙的天空 C语言小游戏设计报告 课程设计名称:贪吃蛇小游戏 专业班级:计科15-2 学 ...

  2. c语言课时设计猜坐标游戏,c语言小游戏课程设计报告.docx

    c语言小游戏课程设计报告 中国地质大学 本科生课程论文封面 课程名称c语言课程设计 教师姓名陈喆老师 本科生姓名周宜诺 本科生学号XX 本科生专业土地资源管理 所在院系公共管理学院 类别: 日期: 课 ...

  3. java 2048游戏_JAVA2048游戏 本课程设计是基于java语言的2048小游戏设计 联合开发网 - pudn.com...

    JAVA2048游戏 所属分类:游戏 开发工具:Java 文件大小:789KB 下载次数:4 上传日期:2020-11-23 10:57:11 上 传 者:滴滴滴大萌 说明:  本课程设计是基于jav ...

  4. 基于c语言的小游戏,--基于C语言的小游戏设计.doc

    --基于C语言的小游戏设计.doc 级丌 密公 本科生毕业(学位)论文 基于c语言的爪游软设计 李俊佶 (2009061322) TOC \o "1-5" \h \z 指导教师姓名 ...

  5. c语言大作业走迷宫,C语言笔记07_小游戏设计——“走迷宫”

    C语言07 小游戏设计--走迷宫 目标: 我们要设计一个完整的小游戏"走迷宫".你将可以通过控制键盘上的"W"."S"."A&qu ...

  6. 拼图游戏C语言课设实验报告,C语言拼图游戏实验报告.doc

    C语言拼图游戏实验报告 课程设计实验报告 班级:光电104-2 姓名:刘云龙 学号:201058501220 一.实验题目:使用C语言编写一个小游戏(拼图游戏) 二.实验目的:C语言是每一个通信学生的 ...

  7. Java课程设计——挖地雷游戏设计报告

    源文件: 大学生Java课程设计--挖地雷游戏设计报告源文件-其它文档类资源-CSDN文库 目 录 摘 要. 1 一.引言. 2 1.设计任务和基本要求. 2 二.报告正文. 3 1.需求分析. 3 ...

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

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

  9. c语言min函数_C语言探索之旅 | 第一部分第十课:第一个C语言小游戏

    内容简介 前言 准备工作和建议 我的代码 改进方案 第一部分第十一课预告 1. 前言 上一课是 C语言探索之旅 | 第一部分第九课:循环语句 . 经过前面这么多课的努力,我们终于迎来了第一个比较正式的 ...

最新文章

  1. 35岁,工作十几年,被开除15次,面试被拒200多次,还有必要继续做程序员吗?...
  2. Microbiome:根系分泌物驱动土壤记忆抵御植物病原菌
  3. python话雷达图-Python 详解雷达图/蛛网图
  4. Wand mixture在Horseshoe模型中的应用
  5. IDEA2021.03 项目全部变红,但是可以正常编译运行
  6. 奇安信为什么大量招人_券商招人鄙视链:985学历vs美本学历,究竟谁垫底?
  7. ASA IPSEC ×××配置
  8. 线程池什么时候调用shutdown方法_ThreadPoolExecutor.shutdown()?
  9. SQL搜索转为XML搜索
  10. 【博士招生】卢森堡大学​SnT(CVI²)研究小组,DeepFake 检测领域
  11. 【剑指 offer】(十九)—— 二叉树镜像
  12. Hadoop作业性能指标及參数调优实例 (二)Hadoop作业性能调优7个建议
  13. 如何使用Wondershare PDFelement制作PDF文件
  14. 【无标题】梦笔记2022-02-20
  15. 关于JAVA输入输出流造成的Runtime线程阻塞问题【新人笔记】
  16. JAVA菜鸟的第一天
  17. c语言char sex是什么意思,2012年计算机二级C语言入门教程:结构体
  18. 停用Windows Defender Antivirus Service内存
  19. 利用Python实现校园网自动登录(部署在树莓派)
  20. SeasonJoe学长的考研日记

热门文章

  1. W3C DOM 事件模型(简述)
  2. js实现点击复制功能
  3. 易语言超级列表框的增删改查
  4. manjaro安装gcc
  5. Java GUI程序示例
  6. 电脑端登录多个微信 PC端登录多个微信 win10多微信登录 win7登录多个微信
  7. Window10管理员已阻止你运行此应用,简单解决办法(CP2102驱动安装)
  8. 美国新冠3-11月确诊人数和死亡人数统计分析
  9. 第一课——进制转换学习实例
  10. 【安全01】防火墙的性能指标