小白99行C代码编写经典游戏贪吃蛇(多关版本)

本文介绍了如何使用C语言编写一个多关版本的贪吃蛇游戏,涉及地图打印、蛇身运动、方向键操控、四种判定及函数工具的实现。通过键盘控制,实现动态游戏体验,游戏包含不同难度级别,当达到一定长度时可以通关或选择重新开始。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

学完C语言但不会写贪吃蛇?

嗯嗯没毛病,书上的C语言其给人的感觉也就是用来输出设计好的文字和图像,或者拿来解决数学问题,一顿操作之后输出函数静静地在屏幕上输出结果。而这些都是静态的输出,但游戏应该是动态的输出。

所以要编写贪吃蛇,首先要解决的就是如何输出动态图像的问题。

一、实现原理

二维数组和链表?并没有用到,连开始用的结构体都在后期优化当中用两个一维数组代替了。

1、地图打印

二维数组存放地图打印刷新烦人,地图越大越晃眼。这里采用坐标函数配合printf()函数来打印地图,并且打印蛇身和食物也是用这个方法。

使用坐标函数需要调用头文件windows.h,然后自定义这个函数,名字叫什么都可以,这里沿用gotoxy()。其作用很简单,就是将光标移动到指定的坐标。

void gotoxy(int x,int y)
{
   
    COORD p;
    p.X=x,p.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}

gotoxy()的详细函数说明看这里。

两个for循环加gotoxy()就可轻松打印出方形地图,并且只需打印一次,不像二维数组一样要重复刷新。

注意我编写代码用的是汉字作为输出图形,一个汉字占两个字符位置,从设计的坐标位置到打印坐标位置横坐标要乘以2。

2、蛇身运动

只需用坐标打印新蛇头并删除蛇尾就能完成一次移动,随后让蛇身的后一节坐标依次等于前一节坐标,完成下次移动的准备。

整个蛇身的移动由循环函数实现,以Sleep()函数暂停以实现速度控制,而不是瞬间完成循环。

3、方向键操控

由kbhit()、getch()和switch()函数完成实现:敲击方向键,退出当前方向运动循环,重新进入键入方向对应的运动循环。

4、四种判定

撞墙判定:由蛇头部和墙坐标重合触发,退出运动循环进而选择重新开始或退出游戏。

自食判定:由蛇头部和蛇身坐标重合触发,退出运动循环进而选择重新开始或退出游戏。

增长判定:由蛇头部和食物坐标重合触发,然后蛇身增长,食物重新刷新。

通关判定:由蛇总体长度达到设定长度触发,退出运动循环进而选择下一难度或退出游戏。

5、函数工具

gotoxy()、srand()、rand()、Sleep()、kbhit()、getch(),system(),整个实现游戏的代码需要用到以上7个函数,其他的就只是for()、while()、if()、switch()等基本函数了。

其中srand()函数和rand()函数仅用于食物的随机刷新,srand()函数仅出现1次,rand()函数出现于2处。

kbhit()函数和getch()函数用于键盘方向键操作和游戏结束时的选择,kbhit()函数出现3次,getch()函数出现2次。

Sleep()函数仅出现1次。

system(“cls”)用于重启游戏时刷屏,仅出现1次。

这7个函数的讲解可查看我的其他博文,或自行搜索。

二、游戏试玩

1、编译环境

编码选择:建议选择GB18030,否则游戏中的汉字可能出现乱码。或者也可以选择把代码中的汉字重打一遍。

游戏源代码编译通用性检测:用了一新一老编译器测试,通用性良好,毕竟vc++6.0都能编译通过。

2、源代码

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include<time.h>
int I=13,J=16,L=6,level=1,_speed=700;
void gotoxy(int x,int y){
   
    COORD p;
    p.X=x,p.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),p);
}
int main()
{
   
res:int x[100],y[100],xo,yo,choose=2,length=3,fact=0,ability=0;
    x[1]=3,y[1]=6,x[2]=2,y[2]=6,x[3]=1,y[3]&
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值