c语言写贪吃蛇什么水平(怎样在mac上用C语言写出一个贪吃蛇游戏)

:暂无数据 2026-06-27 14:20:01 :0

c语言写贪吃蛇什么水平(怎样在mac上用C语言写出一个贪吃蛇游戏)

今天给各位分享怎样在mac上用C语言写出一个贪吃蛇游戏的知识,其中也会对怎样在mac上用C语言写出一个贪吃蛇游戏进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录

怎样在mac上用C语言写出一个贪吃蛇游戏

***隐藏网址***

主要是贪吃蛇本身的核心逻辑才70行左右(偷懒用了STL的list,不用自己实现链表)

当时装逼用英语写的注释,请不要打我!

核心逻辑大概是这样子 每次移动的时候:

1. 如果蛇头出界或者碰到自己,game over

2. 如果蛇头吃到食物,蛇变长。

3. 否则(蛇头什么都没碰到)移动蛇。

用链表存蛇身的各个位置的话,链表尾部当蛇头,那蛇变长的操作很简单:把新的蛇头位置插入链表尾部。

移动蛇的操作也简单:把新的蛇头位置插入链表尾部,删除链表头。

然后,剩下的事情还有两个:

1. 拿到蛇身的所有位置,在对应位置画上蛇身

2. 获取用户输入,改变蛇的移动方向

那。。。你需要了解的只有:

  1. opengl怎么在指定位置画方块(圆圈)

  2. opengl怎么处理用户输入

没了。

C语言学到什么程度能写贪吃蛇

贪吃蛇虽然只是个很小的游戏,但是代码却不简单,所谓麻雀虽小,五脏俱全,能独立完成这个游戏,那得学到精通才行。

我已经能用C语言编像贪吃蛇之类的游戏了,请问我的水平现在怎么样

这要看你怎么编写的,用TC还是VC还是其它的。另外编写这种游戏用了多长时间,使用的方法(是否很优化),健壮性如何,代码的规范程度(甚至包括行数,用2000+的代码合用1000-的代码水平肯定不一样),等等。不能简单的将水平归类。
说一个例子,我是本科才开始学计算机的。在大一下半学期,我们的C语言课设就让每个人编写一个小游戏,每个人被分配的游戏不同,难度比贪吃蛇差不多,稍简单有限(如四子棋、连连看)。用TC编写,DOS下运行,支持鼠标键盘。
在学习VC时,让自己编写游戏,题材不限。此时有人写贪吃蛇、俄罗斯方块,我写的是拼版(可以选图形、块数、背景等,之后加入人工智能A*算法自动拼简单图形)。当时觉得比较有成就,不过现在(大四毕业)看来,代码很差,可读性不高,功能实现,但效率很低。
再举个例子,当时我们没人需要用VC做扫雷,那时每个人都研究Windows的扫雷,力争和它一模一样,结果是没办法完全一样,因为水平有限,许多东西无法实现。
所以说,但从成果上是无法准确定位水平的。不过能编出这种游戏了,比一般人还是要高一些~
个人见解,仅供参考

课程设计 C语言编程贪吃蛇 用心回答的送400分

用心得回答:
首先,需要一个链表,存放蛇本身
其次,需要一个抽象的地图,用来存放
诸如苹果啊,障碍啊,蛇的位置之类的信息。
然后,需要graphic.h头文件里面画图的函数。
写一个蛇移动的函数,原理就那个链表,中间判断蛇是不是死了。
如果蛇死了,游戏就结束了。
在移动过程中判断蛇是不是吃到东西了,如果吃到东西了,就调用
吃东西的函数(比如加分,伸长),怎么伸长呢?用的也是那个链表。
然后写一个main.
流程大体是这样的:
List snake;
int map;
int main()
{
init();
L:
while(1)
{
延时();
移动();
if( 判断() == 游戏结束)
break;
}
一些处理过程();
if( 再来一次 == 1)
goto L;
return 0;
}
大体上就这么回事。
估计你真的会C语言的话,两天也就写完了。
主要是graphics.h里面的函数的用法要当心点。

C语言可以编写贪吃蛇游戏吗

当然可以边游戏了,汉字可以用点阵显示,如果是windows c 的话显示汉字就更简单了!游戏窗体可以用windows c 编程实现!
给你一个贪吃蛇的游戏吧,在tc 下编译成功!可以q聊:969370950
#include《stdio.h》
#include《dos.h》
#include《conio.h》
#include《stdlib.h》
#define ESC 0x011b
#define LEFT 0x4b00
#define RIGHT 0x4d00
#define UP 0x4800
#define DOWN 0x5000
#define F5 0x3f00
#define S 0x1f73
int score=0;
unsigned level=0;
void GAMEOVER()
{char ch;
while(1)
{clrscr();gotoxy(35,10);
highvideo();
cprintf("Game Over!\n");
cprintf("\n\n\r You Score:%d",score);
cprintf("\n\n\r Press Q To Exit The Game!");
cprintf("\n\n\r Press S To Start The Game Again!");
ch=getch();
if(ch==’q’||ch==’Q’)exit(0);
if(ch==’s’||ch==’S’)
{DRAWGAME();
GAMEPLAY();
}
}
}
int DRAWGAME()
{int i;
clrscr();
textcolor(CYAN);
for(i=1;i《25;i++)
{gotoxy(1,i);
highvideo();
cprintf("%c",5);
gotoxy(60,i);
highvideo();
cprintf("%c",5);
gotoxy(79,i);
highvideo();
cprintf("%c",5);
}
for(i=1;i《80;i++)
{gotoxy(i,1);
highvideo();
cprintf("%c",5);
gotoxy(i,24);
highvideo();
cprintf("%c",5);
}
gotoxy(65,3);
cprintf("Snake Game! ");
gotoxy(63,7);
cprintf("Made By ZhiPing");
gotoxy(63,11);
cprintf("QQ:1017257402");
gotoxy(63,15);
cprintf("Level:");
gotoxy(63,18);
cprintf("Score:");
gotoxy(72,18);cprintf("%d",score);
gotoxy(68,19);
cprintf("%c",24);
gotoxy(68,23);
cprintf("%c",25);
gotoxy(65,21);
cprintf("%c",27);
gotoxy(71,21);
cprintf("%c",26);
gotoxy(67,21);
cprintf("Esc");
}
int GAMEPLAY()
{int snakex,key,direction=4,food=0,foodx,foody,node=2,i;
char ch;
snakex=12;
while(1)
{while(!kbhit())
{textcolor(YELLOW);
if(food==0)
{randomize();
foodx=rand()%59;
foody=rand()%23;
while(foodx《2)foodx++;
while(foody《2)foody++;
food=1;
}
for(i=0;i《node;i++)
{if(i》0)
textcolor(i);
gotoxy(snakex);
highvideo();
cprintf("%c",2); textcolor(YELLOW);
}
delay(5000000000-level*1000);
gotoxy(snakex);
cprintf("%c",32);
gotoxy(foodx,foody);
highvideo();
cprintf("%c",3);
for(i=node-1;i》0;i--)
{snakex;
snakey;
}
if(direction==1)snakey--;
if(direction==2)snakey++;
if(direction==3)snakex--;
if(direction==4)snakex++;
for(i=4;i《node;i++)
if(snakex)GAMEOVER();
if(snakex==foody)
{food=0;score+=10;node++;
if(node》30){level++;
for(i=0;i《node;i++)
{gotoxy(snakex);
cprintf("%c",32);
}
node=2;
}
snakex;
snakey;
gotoxy(72,18);cprintf("%d",score);
}
gotoxy(72,15);
highvideo();
cprintf("%d",level);
if(snakex==60){GAMEOVER();}
if(snakey==24){GAMEOVER();}
}
key=bioskey(0);
if(key==ESC)
{gotoxy(13,12);
textcolor(GREEN);
highvideo();
cprintf("Are you sure to exit the game!(y/n?):");
ch=getch();
if(ch==’y’||ch==’Y’)exit(0);
else {gotoxy(13,12); cprintf(" ");}
}
if(key==LEFT&&direction!=4)direction=3;
if(key==RIGHT&&direction!=3)direction=4;
if(key==UP&&direction!=2)direction=1;
if(key==DOWN&&direction!=1)direction=2;
if(key==S){gotoxy(5,12);
highvideo();
cprintf("Please select the level you want to play(1~55):");
scanf("%d",&level);
gotoxy(5,12);
cprintf(" ");
}
if(key==F5)getch();
}
}
void GAMEHELP()
{int i=1;
textcolor(CYAN);
highvideo();
cprintf("Welcome To This Program,This Program is Called Snake Game!");
cprintf("\n\n\rAnd As We Know This is A Very Old Game,But It Still Worths Playing!");
cprintf("\n\n\rI Just Write It To Improve My Ability For The C Program!");
cprintf("\n\n\rThe Operation Is As follows:");
cprintf("\n\n\rPress The Direction Key To control The Snake,And Press Esc To Exit The Game!");
cprintf("\n\n\rAnd Press F5 To Pause The Game,And Anykey To Start!");
cprintf("\n\n\rWhile You are playing the game,\n\n\rYou can press S to select the game level you want to play!");
cprintf("\n\n\rHope You Will Enjoy The Game!And If You Have Any New Ideas,\n\n\rWilling To Hearing From You!Made By ZhiPing《QQ:969370950》");
printf("\n\n\rPress Anykey To Start The Game Now!Or after 30 seconds auto to run! ");
while(!kbhit()&&i《30)
{gotoxy(40,23);
textcolor(i);
highvideo();
cprintf("%d",i);
sleep(1);
i++;
}
}
void main()
{GAMEHELP();
DRAWGAME();
GAMEPLAY();
}

现在我已经能用C语言编写像贪吃蛇之类的游戏了,请问我的水平现在是什么地步

嗯,定位为对C语言和Windows编程有了一定基础。
路还很长,以后拼的是对平台的熟悉程度,对业务的理解,和对程序本身的理解

学C语言已经半年多了却对俄罗斯方块,贪吃蛇之类的小游戏的编写一点头绪都没有! 问题块: 1)

单纯学C你是写不出图形程序的,你可以看到,C标准库支持的是dos程序,就是那个黑不溜秋的东西。

如果想知道你离小游戏还多远,咱们可以这么算一下,下面给出几个假设条件:

  1. 提供给你图形绘制函数,你只需要传相应的参数,就能画出图形,点,线,圆,颜色填充之类。

  2. 给出线程函数,让你可以创建系统线程,或者使用定时器等控制贪吃蛇身体的移动。具体的方式可以变,你需要一个按照固定时间间隔来移动蛇身的函数。

那你觉着,你该怎样写一个贪吃蛇?

思路是:

  1. 使用链表等结构,存储蛇的身体,好处就是,可以任意长度。你要想好链表中存储什么属性可以更好地描述蛇的状态,它超哪个方向走,它的身体各个节点处于哪个位置。

  2. 划分屏幕坐标系,将贪吃蛇映射为坐标系中的点。

  3. 写出碰撞检测函数,贪吃蛇碰到了一个食物,就在链表头部添加一个节点并将头结点更新为这个结点。

  4. 使用碰撞检测函数检测贪吃蛇是否撞到了自己。

  5. 检测蛇是否撞到了屏幕边界。

  6. 使用线程或定时器沿着一个方向移动你的贪吃蛇,移动规律是朝着当前链表头部冲的方向匀速移动,你可以设定0.5s对表头的x/y坐标进行加,减。时间间隔影响了蛇的速度,如果允许长度超过一个程度升级加速,你就要设置下这里的参数。

  7. 根据表头的移动,设计算法计算蛇的身体各个点的移动轨迹。这个是关键,这个算法想错了,你的蛇就会乱跑。一个比较直接的做法是,将蛇身体的每个节点依次前移,不是坐标的移动,是填充,让后面节点填充它前面节点移动前的位置。

大致是这样,我只是给出个思路,如果我有写错的地方,欢迎指正,又或者是你可以按照你的思路来进行,学习,思路是很重要的,代码是死的,人是活的。

分析问题,你要将实际的问题抽象出编程用的模型。抽象的过程就是,先假设你已经有了你想要的函数,你可以先给出函数的声明,比如碰撞检测函数,线程函数等等。这些函数你不会写,先空着,想象它们已经完成了。

然后你要做的就是,用这些已经被假设存在的构造快,来实现你的逻辑。这个逻辑是什么,就要看你怎么抽象一个具体的问题。就像贪吃蛇,通用的思路是把它抽象为坐标和链表结构。如果你用了另外一种思路,整个过程可能截然不同。

整个过程写完了,你需要知道,那些被你假设了的函数,到底怎么实现。

给个思路:

界面显示用MFC来做,线程,定时器什么的,有相应的windowsAPI,这些图形和线程功能,都需要操作系统做支持,所以你要用到一些windows的API。这些资料都是有的,你可以去找。

以上。再次声明,如有疏漏,请见谅。

以上就是我们为大家找到的有关“c语言写贪吃蛇什么水平(怎样在mac上用C语言写出一个贪吃蛇游戏)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

c语言写贪吃蛇什么水平(怎样在mac上用C语言写出一个贪吃蛇游戏)

本文编辑:admin

更多文章:


mariadb忘记密码(mysql用户密码忘记了怎么办)

mariadb忘记密码(mysql用户密码忘记了怎么办)

大家好,mariadb忘记密码相信很多的网友都不是很明白,包括mysql用户密码忘记了怎么办也是一样,不过没有关系,接下来就来为大家分享关于mariadb忘记密码和mysql用户密码忘记了怎么办的一些知识点,大家可以关注收藏,免得下次来找不

2026年10月15日 07:50

mysql端口号(如何查看自己数据库的端口号)

mysql端口号(如何查看自己数据库的端口号)

“mysql端口号”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看mysql端口号(如何查看自己数据库的端口号)!

2026年10月15日 06:30

printf打印16进制(C语言 十六进制怎么输出)

printf打印16进制(C语言 十六进制怎么输出)

大家好,今天小编来为大家解答以下的问题,关于printf打印16进制,C语言 十六进制怎么输出这个很多人还不知道,现在让我们一起来看看吧!

2026年10月15日 06:00

avantage怎么设置为中文(Avantage安装丢失GIT)

avantage怎么设置为中文(Avantage安装丢失GIT)

大家好,如果您还对avantage怎么设置为中文不太了解,没有关系,今天就由本站为大家分享avantage怎么设置为中文的知识,包括Avantage安装丢失GIT的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月15日 03:00

ospf协议的作用是什么(OSPF路由协议的作用是什么)

ospf协议的作用是什么(OSPF路由协议的作用是什么)

“ospf协议的作用是什么”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看ospf协议的作用是什么(OSPF路由协议的作用是什么)!

2026年10月15日 02:40

方案对比特效js(在一个网页中如何实现两个JS特效)

方案对比特效js(在一个网页中如何实现两个JS特效)

各位老铁们好,相信很多人对方案对比特效js都不是特别的了解,因此呢,今天就来为大家分享下关于方案对比特效js以及在一个网页中如何实现两个JS特效的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月15日 02:10

activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)

activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)

今天给各位分享登陆视频监控网页时提示activex控件未注册,怎么解决的知识,其中也会对登陆视频监控网页时提示activex控件未注册,怎么解决进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月14日 20:30

学生信息管理系统c语言(用C语言编程学生信息管理系统!)

学生信息管理系统c语言(用C语言编程学生信息管理系统!)

今天给各位分享用C语言编程学生信息管理系统!的知识,其中也会对用C语言编程学生信息管理系统!进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月14日 20:20

excel连接sql数据库教程(excel怎么连接sql数据库)

excel连接sql数据库教程(excel怎么连接sql数据库)

本篇文章给大家谈谈excel连接sql数据库教程,以及excel怎么连接sql数据库对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年10月14日 19:40

null s brawl(null和空字符有区别吗)

null s brawl(null和空字符有区别吗)

今天给各位分享null和空字符有区别吗的知识,其中也会对null和空字符有区别吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年10月14日 19:00

最近更新

热刺vs马赛比赛(热刺赛程比分)
2026-10-15 09:10:01 浏览:0
热门文章

标签列表