文章目录

  • 前言
  • 一、背景知识
  • 二、实验分析和理解
  • 三、头文件
  • 四、设计流程
  • 五、流程图
  • 六、算法设计
    • (1)相关变量
    • (2)创建链表
    • (3)随机出现食物并记录食物出现的坐标
    • (4)绘制初始界面和游戏地图
    • (5)创建节点,初始化蛇身,addNode创建身体
    • (6)检测是否死亡
  • 七、测试结果

前言

Linux环境下,基于Ncurse图形库的C语言小游戏


项目的目的与意义:承上启下
承上:C语言基础,数据结构链表基础,C变量、流程控制、函数、指针、结构体等
启下:Linux系统编程,文件编程,进程,线程,通信,第三方包等
基础操作:
C编程基础、Linux基本操作(编写、编译、运行程序等)

一、背景知识

这款游戏之所以叫贪吃蛇,其真正用意并不是告诉人们要贪心,它所传递的精神是人们只有不断努力地向前才能得到自己想要的食物就像现在社会存在的机会,而人们只有找好自己的目标才能成功。
尽管现在市面上存在的游戏版本很多,可是贪吃蛇的市场还是很大的。原因就在与它能引人入深,爱不释手。可以说该游戏的优势不仅在于它的简单易行,而且在于它很快顺利的运行。对于那些在外忙忙碌碌的人们,想让他们花费大量的时间在大型游戏上显然是不可能的,但是小游戏却刚好能够迎合他们的需求。哈哈

二、实验分析和理解

①首先需要考虑设计一个运行窗口来实时显示结果,
②然后考虑到蛇的身子是一节一节的,此时最容易联想到的数据结构就是顺序表、链表。
如果把蛇比做顺序表或者链表,在之后吃到食物的时候,身子会变长,这就涉及到插入的操作,所以为了更高的效率,我们用链表实现我们的蛇的部分,最初我们把蛇身子按照七个结点打印在屏幕。
③对于蛇的移动,在屏幕上面蛇的移动看起来是整个身子向前方平移一个单位,但是其原理是我们在屏幕的另一个地方把蛇从新打印一遍,又把之前的蛇身子去除掉。
④对于食物的产生,随机的在地图中产生一个节点,在蛇的头坐标(尾节点)和食物的坐标重复的时候,食物消失,蛇的节点数增加一个。

以此往复
直到死亡:蛇头的坐标和蛇身子的坐标重合 或 蛇头坐标与边界重合

三、头文件

#include <curses.h>
#include <stdlib.h>

四、设计流程

五、流程图

六、算法设计

(1)相关变量

int key;//输入的方向
int dir;//实现方向改变

(2)创建链表

贪吃蛇的身体如何保存是游戏的核心,所以我们需要用到链表来保存蛇的身体,这样就可以随时知道蛇身数据。

struct Snake
{int hang;int lie;struct Snake *next;
};

(3)随机出现食物并记录食物出现的坐标

       int x = rand()%20 ;int y = rand()%20 ;if(x==0)x+=1;if(y==0)y+=1;food.hang=x;food.lie=y;

rand()函数用来产生随机数

(4)绘制初始界面和游戏地图

      int hang,lie;move(0,0);for(hang=0;hang<20;hang++){if(hang==0){for(lie=0;lie<20;lie++){printw("--");}printw("\n");   //打完一行,换行for(lie=0;lie<=20;lie++){if(lie==0 || lie==20){printw("|");                   }else{printw("  ");}}printw("\n");          }if(hang>0 && hang<=19){for(lie=0;lie<=20;lie++){if(lie==0 || lie==20){printw("|");}else if(hasSnakeNode(hang,lie)){{printw("[]");}else if(hasFood(hang,lie)){printw("##");}else{printw("  ");}}printw("\n");}if(hang==19){for(lie=0;lie<20;lie++){printw("--");}printw("\n");}}

(5)创建节点,初始化蛇身,addNode创建身体

struct Snake *head=NULL;
struct Snake *tail=NULL;
int hasSnakeNode(int i, int j){struct Snake *p;p = head;while(p != NULL){if(p->hang==i && p->lie==j){return 1;}p=p->next;}return 0;
}
void initSnake()
{struct Snake *p;dir = RIGHT;//初始方向 向右while(head != NULL){p=head;head=head->next;free(p);}initFood();//出现食物head=(struct Snake *)malloc(sizeof(struct Snake));head->hang=1;head->lie=2;head->next=NULL;tail=head;addNode();addNode();
}

(6)检测是否死亡

       struct Snake *p;p=head;if(tail->hang<0||tail->lie==0||tail->hang==20||tail->lie==20){//撞边界                    return 1 ;}while(p->next != NULL){if(p->hang==tail->hang && p->lie==tail->lie){return 1 ;}p=p->next;}return 0 ;

七、测试结果

基于C语言的贪吃蛇游戏开发与设计相关推荐

  1. c语言贪吃蛇游戏的论文,基于c语言的贪吃蛇游戏论文.doc

    基于c语言的贪吃蛇游戏论文 第 PAGE \* Arabic \* MERGEFORMAT 15 页第 PAGE \* Arabic \* MERGEFORMAT 15 页 学校代码 学号 分 类 号 ...

  2. java毕业设计——基于java+J2ME的贪吃蛇游戏设计与实现(毕业论文+程序源码)——贪吃蛇游戏

    基于java+J2ME的贪吃蛇游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2ME的贪吃蛇游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下载开题报告P ...

  3. linux贪吃蛇c程序,Linux环境下C语言实现贪吃蛇游戏

    Linux环境下C语言实现贪吃蛇游戏 [liul@test snake]$ more snake.c #include #include #include #include #include #def ...

  4. 贪吃蛇c语言经典程序下载,C语言实现贪吃蛇游戏(单人版)

    本文实例为大家分享了C语言实现贪吃蛇游戏的具体代码,供大家参考,具体内容如下 相比于第一个:贪吃蛇游戏,功能更加丰富 #include"snake.h" //蛇的移动 void m ...

  5. 实验项目二:贪吃蛇游戏开发

    贪吃蛇游戏开发 一.前言 二.基本流程 三.游戏界面设计 1. 界面构造 2. 蛇的构造 3. 食物构造 四.游戏过程 1. 蛇的移动 2. 蛇吃食物与碰撞检测 五.游戏结束 1. 结束界面 六.扩展 ...

  6. 用C++语言实现贪吃蛇游戏

    最近更了个新的关于用C/C++写贪吃蛇的blog,感觉那个帮助会更大些,这篇中用DirectX技术不适合刚开始试着写游戏的同学,传送:https://blog.csdn.net/weixin_3781 ...

  7. 【C语言】贪吃蛇游戏的实现(一)

    (注意:本代码是在VC++6.0环境下编译的,在其他环境如codeblocks下运行可能会产生意想不到的问题,请尽量使用VC.至于为什么要使用VC编译,哦,我亲爱的朋友,这只有上帝才知道) 最近由于小 ...

  8. 纯C语言实现贪吃蛇游戏(VC6.0)

    转自C语言网 今天笔者为大家展示C语言写的贪吃蛇游戏,让大家玩一玩自己写的游戏~ 是纯C语言哦~VC6.0开发 无问题 首先,开始界面: 游戏界面如下: 代码如下: 笔者VC6.0下编写,测试无问题, ...

  9. 实验二、贪吃蛇游戏开发

    实验要求 实现贪吃蛇游戏基本功能,屏幕上随机出现一个"食物",称为豆子,上下左右控制"蛇"的移动,吃到"豆子"以后"蛇" ...

最新文章

  1. 批量恢复加密图像,联邦学习真的危了? | CVPR 2021
  2. windows 8 “Fetch”远程获取
  3. 使用情态动词提出请求和问题_53
  4. redis-3.0.0_rc5的RPM包制定
  5. Elasticsearch 并发修改乐观锁
  6. 视频编解码(十二):播放器编解码流程source、demux、decoder、output
  7. 胡萝卜,是鸡蛋,还是咖啡豆
  8. 芯烨 XP-C76II+ 打印机驱动
  9. 红旗河工程,南水北调西线工程,藏水入疆工程三合一
  10. shenyu自定义插件
  11. 解决 虚拟机安装 centos8 时出现设置基础软件仓库时出错
  12. Android多媒体之GL-ES战记第一集--勇者集结
  13. python 客户端同构_同构python算法
  14. 微信小程序--分享并设置分享链接的有效时间
  15. OCTA光学相干断层扫描血管成像
  16. c语言count的作用,C语言中count是什么意思?
  17. idea双击打不开我的解决方法
  18. 如何提高加好友通过率
  19. 【DBA100人】李建明:一名普通DBA的14年技术之路与成长智慧
  20. 第十二章 牛市股票还亏钱—外观模式

热门文章

  1. Canvas 实现绘制图表
  2. Visio中添加MathType公式
  3. 《摩诃般若波罗蜜多心经》 玄奘 译
  4. 般若波罗密多心经浅说
  5. 新内核版本ioctl的变化 _IO, _IOR, _IOW, _IOWR 幻数的理解
  6. HttpSession解析
  7. java adminlte 使用_AdminLTE的使用(转)
  8. 微信聊天api接口调用
  9. 微信小程序图片分包 || 微信小程序资源分包
  10. 接口测试面试题<一>