#include<stdio.h>
#include<Windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<math.h>
/
//定义gotoxy(int x,int y)函数,可以使光标直接移动到(x,y)处
//这里其实也能用二维数组将光标一个一个打到指定位置(不难,感兴趣可以尝试),但只能向后移动,
//所以,蛇每动一次就要用system("cls")清一下屏还原光标,导致画面太闪,体验感极差,影响操作
//下面是windows里面的函数,不是重点,不用细看,可以忽略。
int wherex() { CONSOLE_SCREEN_BUFFER_INFO pBuffer;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &pBuffer); return (pBuffer.dwCursorPosition.X+1); }
//获取光标的位置
int wherey() { CONSOLE_SCREEN_BUFFER_INFO pBuffer; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &pBuffer);
return (pBuffer.dwCursorPosition.Y+1); }
//设置光标的位置
void gotoxy(int x,int y) { COORD c; c.X=x-1; c.Y=y-1; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c); }
///定义完成。可以直接使用/定义结构体
struct s{char name[4];
struct s *next;
int x;
int y;};
#define   S  struct s
//一些其他函数
void println(S *a);//打印蛇身
void sheweizhi(S *a,int x, int y);//重置坐标
void jiaohuan(int *a,int *b);/交换数字
void jiayi(S*shewei);///蛇身加一
int panduan1(S*a ,int x,int y);对其进一步完善
int panduan2(S*a ,int x,int y);对其进一步完善int main()
{int x=9,y=10;/记录位置
char fangxiang='d',fangxiangcheck='d';蛇默认移动方向S  *head,*sheshen,*shewei;srand((int)time(NULL));///设置时间种子,使其真正随机int shiwux=11,shiwuy=10;/使下面的循环能够进去将蛇初始化(先设置蛇尾以防止打印时蛇头被蛇尾的空格覆盖)
初始化蛇尾
shewei=(S *)malloc(sizeof(S));//开设一个链表的起始点
strcpy(shewei->name,"  ");//设置蛇尾样子
shewei->x=5;shewei->y=10;//设置蛇尾坐标/初始化蛇身
sheshen=(S *)malloc(sizeof(S));//动态分配空间shewei->next=sheshen;//连接strcpy(sheshen->name,"□");//设置蛇身样子sheshen->x =7;    sheshen->y=10;//初始化蛇身坐标//初始化蛇头head=(S *)malloc(sizeof(S));sheshen->next=head;//连接strcpy(head->name,"■");//设置蛇头样子head->x=9;head->y=10;//设置蛇头坐标head->next=NULL;///链表结束jiayi(shewei);     jiayi(shewei);    /初始化蛇长度//初始化完成
while(1)///建立循环,开始游戏
{
println(shewei);//打印蛇此时的蛇//暂停程序,暂停200毫秒,参数可修改
Sleep(200);///不能乱放,比如放在println上面,会有延迟
//循环监听程序
if(kbhit()){fangxiang=getch();}/核心所在,在循环中监听有无字符输入
//
/检查,让程序更加强壮,减少BUG
if(fabs((double)(fangxiang-fangxiangcheck))==3||fabs((double)(fangxiang-fangxiangcheck))==4)fangxiang=fangxiangcheck;
if(fangxiang!='w'&&fangxiang!='d'&&fangxiang!='a'&&fangxiang!='s')fangxiang=fangxiangcheck;
检查完成
判断方向
switch(fangxiang)
{
case 'w':y-=1;break;case 's': y+=1;break;case 'a': x-=2;break;case 'd': x+=2;break;}
fangxiangcheck=fangxiang;///
sheweizhi(shewei,x,y);/重置蛇位置
if(head->x==shiwux&&head->y==shiwuy)/判断是否吃到食物
{jiayi(shewei);//蛇身长度加一do{shiwux=rand()%78+1,shiwuy=rand()%24+1;}while(panduan1(shewei,shiwux,shiwuy)||shiwux%2==0);/再次随机获取食物位置,并且不和蛇身重叠,每个蛇的部件都是两个字节gotoxy(shiwux,shiwuy);printf("※");打印
}
if(x>79||x<1||y<1||y>25) break;判断是否撞墙死亡,设置边界
if(panduan2(shewei,head->x,head->y)) break;判断是否撞自己死亡
}
游戏结束
getch();暂停一下,防止闪退
return 0;
}
void jiaohuan(int *a,int *b)///交换啊a,b
{int temp;temp=*a;*a=*b;*b=temp;
}
void println(S *a)///打印蛇的位置{while(a){ gotoxy(a->x,a->y);printf("%s",a->name);
a=a->next;}}
void sheweizhi(S *a,int x,int y)///x,y不能被修改,所以不要用地址,但蛇的x,y要用{///循环交换,将后一个的位置换到前一个while(a->next){jiaohuan(&a->x,&a->next->x);jiaohuan(&a->y,&a->next->y);a=a->next;}a->x=x;a->y=y;}
void jiayi(S*shewei){S *newshe,*temp=shewei->next;newshe=(S *)malloc(sizeof(S));开设新的结点shewei->next=newshe;//连接strcpy(newshe->name,"□");设置新蛇样子newshe->x=shewei->x;newshe->y=shewei->y;设置新蛇位置newshe->next=temp;连接/重设蛇尾位置if(temp->x==shewei->x)shewei->y+=(shewei->y-temp->y);else shewei->x+=(shewei->x-temp->x);
}
int panduan1(S *a,int x,int y)//判断链表中有误x,y
{
while(a)
{if(a->x==x&&a->y==y)return 1;
a=a->next;}return 0;
}
int panduan2(S *a,int x,int y)
{a=a->next;/蛇尾不判断while(a->next)
{if(a->x==x&&a->y==y)return 1;
a=a->next;}return 0;
}

基于链表的贪吃蛇(C语言)相关推荐

  1. 贪吃蛇_C语言_链表实现_SCAU课程设计

    个人大一下课程设计作品,本文中直接附上源代码(通过visual stdio 2019 实现  ): 课题:贪吃蛇(链表实现~) 语言:C/C++ 运行环境(软件):Visual Stdio 2019( ...

  2. C语言贪吃蛇游戏代码,贪吃蛇C语言代码实现大全

    一.C语言贪吃蛇代码实现前言 设计贪吃蛇游戏的主要目的是让大家夯实C语言基础,训练编程思维,培养解决问题的思路,领略多姿多彩的C语言. 贪吃蛇是非常经典的一款游戏,本次我们模拟在控制台实现贪吃蛇游戏, ...

  3. 基于Stm32f407 的贪吃蛇小游戏【正点原子-探索者开发板】

    基于单片机stm32f407的单机小游戏----贪吃蛇小游戏 1.介绍 这是我花一个星期完成的一个简单地单机贪吃蛇小游戏项目,芯片是stm32f407,项目是基于正点原子-探索者开发板完成的,有需要的 ...

  4. Linux下基于SDL库贪吃蛇游戏

    Linux下基于SDL库贪吃蛇游戏   SDL(Simple DirectMediaLayer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成.SDL提供了数种控制图像.声音.输出入的函数,让开 ...

  5. 基于单片机的贪吃蛇游戏设计_前端入门,基于html,css,javascript的贪吃蛇游戏

    源代码: 贪吃蛇 .box1{ font-size: 15px; float:left; display: block; margin-right: 150px; } .box2{ font-size ...

  6. python贪吃蛇设计目标_基于 pygame 设计贪吃蛇游戏

    基于 pygame 设计贪吃蛇游戏 贪吃蛇游戏通过玩家控制蛇移动,不断吃到食物增长,直到碰到蛇身或边界游戏结束.其运行效果如下所示: 游戏开始时,先导入可能需要用到的包. import time im ...

  7. 基于React的贪吃蛇游戏的设计与实现

    代码地址如下: http://www.demodashi.com/demo/11818.html 贪吃蛇小游戏(第二版) 一年半前层用react写过贪吃蛇小游戏https://github.com/c ...

  8. 基于HTML5的贪吃蛇游戏的设计与实现

    基于HTML5的贪吃蛇游戏的设计与实现 功能要求: 贪吃蛇游戏是一款经典的单机休闲游戏,玩家通过上下左右按键控制蛇头的移动方向使其向指定方向前进,并吃掉随机位置上产生食物来获得分数.每吃掉一次食物,贪 ...

  9. 基于STM32的贪吃蛇小游戏

    基于STM32的贪吃蛇小游戏 初学32一个月,学的并不多,便想着做一个贪吃蛇小游戏,因为有51单片机做贪吃蛇的经验,所以实现出来并不困难. 作品简介 游戏面版将在4.3寸480*800)液晶上显示,初 ...

最新文章

  1. Linux环境下MySQL基础命令(3)----增、删、改、查语句
  2. 【原创】如何优化一个网站使之提高访问速度--更新20120216
  3. vue项目-点击添加或者修改按钮浏览器的屏幕变黑,再次点击屏幕之后浏览器恢复正常(火狐浏览器、ChromeCoreLauncher双核浏览器)
  4. 免费网络学术资源获取
  5. Uipath 学习栏目基础教学:11、录制
  6. 计算机等级的有关知识,计算机等级二级基础知识.doc
  7. 机器学习--逻辑斯谛回归(Logistic Regression)
  8. 牛津英语3a_空中课堂 | 牛津英语3A学霸笔记 (全) 附3B
  9. YDOOK: USB 转 TTL 模块 连线使用实例教程
  10. 计算机插曲符号怎么找不到,怎么打出来简谱的符号?
  11. 圆柱体积怎么算立方公式_圆柱体积公式怎么算
  12. 植物大战僵尸全明星服务器维修多长时间,植物大战僵尸全明星常见问题怎么解决?...
  13. 一个公务员工作七年后的肺腑之言
  14. Jmeter接口测试之断言详解
  15. IO、BIO、NIO、AIO
  16. 华熙LIVE·五棵松商业北区明年国庆亮相 互动体验升级
  17. 分钱、用人和交替,看《大明王朝1566》
  18. [天方夜谭]上帝夜访点点
  19. 测试地图最短路径搜索(二):换个稍微复杂点的路径模板
  20. 2018年5月30日 星期三 天气多云

热门文章

  1. 各浏览器内核JS运行速度比较
  2. 程序员眼中最牛的UI设计师是怎样的?
  3. 汇编语言跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
  4. win10推送_微软 Win10 最稳版本 2004 正式版推送!最低配置要求汇总,全新 UI 虚拟桌面,支持几乎所有 CPU...
  5. linux 服务器的性能考核指标QPS、TPS、RT、Load、PV、UV
  6. 他写代码如入定,人称阿里“扫地僧”
  7. 【求职】瓜子C++方向面经
  8. python的写操作_Python—文件读写操作
  9. 自然数拆分 Lunatic版 TYVJ1172(完全背包)
  10. MATLAB画三维墨西哥草帽图,数字图像处理之图像分割-20210401063921.ppt-原创力文档...