贪吃蛇的简单实现(c语言)

这篇具有很好参考价值的文章主要介绍了贪吃蛇的简单实现(c语言)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:学完了C语言的基础语法,和一点数据结构的知识,拿贪吃蛇来练练手,并熟悉以前的知识。写完之后,有一种成就感,为以后的学习饱满激情。

注意这里的讲解是由部分到整体的思路。

目录

控制台不能是终端:

mode和title命令

GetStdHandle函数

隐藏光标函数(HideCurso)的实现:

GetConsoleCursorInfo函数

SetConsoleCursorInfo函数

综上,可以利用以上函数分装成一个函数隐藏光标HideCurso:

在窗口内任意位置打印(SetPos)的函数的实习:

SetCursorPostion函数:

SetPos函数的实现:

实现KEY_PRESS来检测按键被按的情况

按键检测函数GetAsynckeyState

KEY_PRESS的实现:

setlocale函数

游戏实现的大体框架:

游戏开始GameStart实现

1.欢迎界面WelcomeGame的实现

2.创建地图CreateMap的实现

3.CreateSnake创建蛇

3.1蛇身体节点的定义

3.2 蛇的定义

3.3创建蛇CreateSnake的实现

3.4创建食物并打印,CreateFood函数的实现

3.4将上面的函数分装进函数IniteSnake

4.打印蛇,PrintSnake函数的实现

5.最后一步将上述的函数分装进GameStart函数

游戏运行GameRun函数的实现 

GameRun 中需要实现的逻辑

PrintHelpInfo打印帮助信息函数的实现:

PrintScore的实现

SnakeMove的实现

Pause暂停函数的实现:

SnakeNext蛇走一步函数的实现:

接下来说一下NextIsFood函数的实现:

IsKill函数的实现:

游戏结束GameEnd函数的实现:

整个游戏逻辑的运行逻辑的实现:

整个游戏的源码(有感兴趣的可以自取):


这里先放一张最后的成果图和一段视频来展示效果

 

贪吃蛇游戏

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

这里先讲一些可能需要用到的windows的控制台函数和一些系统操作。

控制台不能是终端:

终端的控制台:

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

修改过程:

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇 贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

mode和title命令

	system("title 贪吃蛇");
	system("mode con cols=100 lines=30");

mode改变控制台窗口的大小,cols表示行,lines表示列。

title就是改变控制台的名称。

效果展示:

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

GetStdHandle函数

其返回值类型是HANDLE(是一个指针),获得一个句柄。

//获得一个句柄
HANDLE hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;//CONSOLE_CURSOR_INFO是控制台光标标的结构体类型
//CursorInfo是我们创建的变量

CONSOLE_CURSOR_INFO是一个结构体其中有两个成员,dwSize 和 dVisible ,dwSize 表示光标占一个单位光标高度的百分比,比如下图。贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

 dVisiable 表示光标是否可见,将光标的信息为不可见:

CursorInfo.bVisible = false;

隐藏光标函数(HideCurso)的实现:

GetConsoleCursorInfo函数

获取控制台的光标信息:

	CONSOLE_CURSOR_INFO CursorInfo;
	GetConsoleCursorInfo(hOutPut, &CursorInfo);//将光标信息放入CursorInfo这个变量中

SetConsoleCursorInfo函数

设置控制台光标的信息:

将光标的信息设置为不可见。

CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(hOutPut, &CursorInfo);
CursorInfo.bVisible = false;
SetConsoleCursorInfo(hOutPut, &CursorInfo);//将CursorInfo中的数据设置为控制台的光标的信息。

综上,可以利用以上函数分装成一个函数隐藏光标HideCurso:

void HideCursor()
{
	HANDLE hOutPut = NULL;
	hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_CURSOR_INFO CursorInfo;
	GetConsoleCursorInfo(hOutPut, &CursorInfo);
	CursorInfo.bVisible = false;
	SetConsoleCursorInfo(hOutPut, &CursorInfo);
}

效果:

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

上图看不见光标。

在窗口内任意位置打印(SetPos)的函数的实习:

SetCursorPostion函数:

他有两个参数一个是句柄Ll类型为HANDLE,另一个类型为COORD这是一个结构体类型。

typedef sruct COORD
{
    short x;
    short y;
}COORD;

定位光标的位置,说到位置这里就不得不聊聊控制台的坐标系的定义

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

这里注意:一个单位的x不等于一个的单位的y,两个单位的x才等于一个单位的y。

SetPos函数的实现:

void SetPos(short x, short y)
{
    HANDLE hOutPut = NULL;
    hOutPut = GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos = { x,y };
    SetConsoleCursorPosition(hOutPut, pos);
}

调用函数SetPos可以直接将光标定位到你给的坐标处。

实现KEY_PRESS来检测按键被按的情况

按键检测函数GetAsynckeyState

short GetAsyncKeyState(int vKey);


他的返回值是short,如果按下了一个间他会返回一个二进制形势下最低位为1的数,否则为0。

 虚拟键码:这里会用到的比如,

上:VK_UP

下:VK_DOWN

左:VK_LEFT

右:VK_RIGHT

f3(加速):VK_F3

f4(减速):VK_F4

空格暂停:SPACE

esc退出:ESCAE

KEY_PRESS的实现:

#define KEY_PRESS(vk) ((GetAsyncKeyState(vk)&1)?1:0)

如果vk这个虚拟键位代表的按键被按过,则返回1,否则返回0。

setlocale函数

setlocale(LC_ALL, "");//可以将模式改为当前所在地区的模式,可以打印一些特殊的字符
int main()
{
	char* ret =  setlocale(LC_ALL, "");
	printf("%s\n", ret);
	return 0;
}

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

宽字符:

一个宽字符是两个字符的大小。

	setlocale(LC_ALL, "");
	printf("ab\n");
	wprintf(L"%lc", L'我');

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

将C改为当前地区的模式时,可以打印宽字符。

宽字符打印与普通字符打印的区别

宽字符 普通字符
使用函数 wprintf printf
换位符 %lc  %ls %c %s
使用

wprintf(L"%ls",L"helloworld");

wprintf(L"%lc",L'a');

printf("%s","helloworld");

printf("%c",'a');

游戏实现的大体框架:

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇 游戏大揽

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇 贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇


游戏开始GameStart实现

1.欢迎界面WelcomeGame的实现

void WelcomeGame()
{
    system("mode con cols=100 lines=30");
    system("title 贪吃蛇");
    HideCursor();
    SetPos(35, 15);
    wprintf(L"%ls", L"欢迎来到贪吃蛇小游戏");
    SetPos(36, 22);
    system("pause");
    system("cls");
    SetPos(30, 12);
    wprintf(L"%ls", L"你可以用↑.↓.←.→来控制蛇的移动");
    SetPos(30, 13);
    wprintf(L"%ls", L"F3加速,F4减速");
    SetPos(36, 22);
    system("pause");
    system("cls");
}

这里实现的结果就是大揽里的前两周照片,SetPos,HideCurso两个函数再前面已经实现完了这里就不讲了。

2.创建地图CreateMap的实现

#define WALL L'□'
void CreateMap()
{
	for (int i = 1; i <= 29; i++)
	{
		wprintf(L"%lc", WALL);
	}
	SetPos(0, 26);
	for (int i = 1; i <= 29; i++)
	{
		wprintf(L"%lc", WALL);
	}

	for (int i = 1; i <= 26; i++)
	{
		SetPos(0, i);
		wprintf(L"%lc", WALL);
	}
	for (int i = 1; i <= 26; i++)
	{
		SetPos(56, i);
		wprintf(L"%lc", WALL);
	}
}

注意:system("mode con cols=100 lines=30");这是已开设我们设置的窗口大小,这里我们的地图大小为 (58,27)坐标从零开始并且2x=y并且宽字符的宽度为两个x,所以一行打印29个墙就可以了。

还有一点需要注意,以上代码打印出的墙的x坐标的值都为偶数,所以在后面代码中蛇的节点的坐标和食物的坐标的x值也应为偶数,若为偶数,那么蛇再装到上面墙的是时候总是撞在墙与墙之间的空隙中,影响也不大,但必须保证蛇的x坐标与食物的x坐标都为奇数或都为偶数,否则吃不到食物。

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

表示墙的这个字符可以再输入法中找到, 贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

3.CreateSnake创建蛇

蛇的身体是用链表的一个一个的节点组成的来的。

3.1蛇身体节点的定义

typedef struct SnakeNode
{
	short x;
	short y;
	struct SnakeNode* next;
}SnakeNode,* pSnakeNode;

其中的x,y表示这个节点在控制台中的坐标。

这里食物的定义与蛇的节点的定义一样。

3.2 蛇的定义

enum DIRECTION
{
	UP = 1,//上
	DOWN,//下
	RIGHT,//左
	LEFT//右
};
enum STATUS
{
	OK = 1,//状态正常
	KILL_BY_WALL,//撞墙死亡
	KILL_BY_SELF,//自己要到自己死亡
	END_NORMAL//按esc退出
};
typedef struct Snake
{
	pSnakeNode _psnake;//指向蛇的头节点的指针
	int sleep_time;//Sleep(sleep_time)来控制蛇的速度
	enum DIRECTION dir;//蛇的方向
	pSnakeNode _pfood;//一个指向食物的指针
	int food_score;//一个食物的分数
	int score;//总分
	enum STATUS status;//蛇当前的装态
}Snake,* pSnake;

3.3创建蛇CreateSnake的实现

void CreateSnake(pSnake ps)
{
	ps->_psnake = NULL;
	for (int i = 0; i < 5; i++)
	{
		pSnakeNode tmp = (pSnakeNode)malloc(sizeof(SnakeNode));
		if (tmp == NULL)
		{
			perror("CreateSnake():malloc:");
			return;
		}
		tmp->next = NULL;
		if (ps->_psnake == NULL)
		{
			tmp->x = 10;
			tmp->y = 4;
			ps->_psnake = tmp;
		}
		else
		{
			tmp->x = 10 + 2 * i;
			tmp->y = 4;
			tmp->next = ps->_psnake;
			ps->_psnake = tmp;
		}
	}
}

运用for循环创建5个节点作为蛇的身体,注意这五个节点每两个节点的坐标应该相邻,确保蛇的身体是连续的。还有蛇的节点坐标别等于墙的坐标。

注意:这里生成的蛇的节点的坐标都是偶数,那么食物的x坐标必须为偶数,否则蛇的头一半吃到食物另一半吃不到食物,就等于永远吃不到食物,就是一个bug了。

3.4创建食物并打印,CreateFood函数的实现

//注意rand的使用需要有srand((unsigned)time(NULL))这一句,这里没有是因为在源码的main函数中
void RandPos(pSnakeNode* tmp)
{
	int x1 = 0;
	int y1 = 0;
	do
	{
		x1 = rand() % 53 + 2;
		y1 = rand() % 25 + 1;
	} while (x1%2);//保证食物的x坐标为偶数
	tmp->x = x1;
	tmp->y = y1;
}
#define FOOD L'★'
void CreateFood(pSnake ps)
{
	pSnakeNode tmp = (pSnakeNode)malloc(sizeof(SnakeNode));
	if (tmp == NULL)
	{
		perror("CreateFood():malloc:");
		return;
	}
	again:
		RandPos(tmp);
		pSnakeNode cur = ps->_psnake;
        //生成的食物的坐标不能与蛇的节点的坐标一样
		while (cur)
		{
			if (tmp->x == cur->x && tmp->y == cur->y)
				goto again;
			cur = cur->next;
		}
		ps->_pfood = tmp;
		SetPos(tmp->x, tmp->y);
        //打印食物
		wprintf(L"%lc", FOOD);
		return;
}

RandPos函数是随机生成一个坐标,这里需要注意的是生成的坐标的范围,因为我想要的地图的大小为58(x)*27(y)去除墙的所以x的范围为[2,54],y的范围为[1,25],注意这里生成的食物x坐标的奇偶性要与蛇的节点的x保持一致。

注意:生成的食物的坐标不能与蛇的节点的坐标一样。

3.4将上面的函数分装进函数IniteSnake

void IniteSnake(pSnake ps)
{

	CreateSnake(ps);
	CreateFood(ps);
    //以下的为其他初始化蛇的信息
	ps->dir = RIGHT;
	ps->status = OK;
	ps->sleep_time = 200;
	ps->food_score = 10;
	ps->score = 0;
}

4.打印蛇,PrintSnake函数的实现

上面已经初始化完了蛇的节点,那么就可以着手打印了。

void PrintSnake(pSnake ps)
{
	pSnakeNode cur = ps->_psnake;
	while (cur)
	{
		SetPos(cur->x, cur->y);
		wprintf(L"%lc", BODY);
		cur = cur->next;
	}
}

 初始化完了节点,打印就很简单了,定位光标位置直接按链表的顺序直接打印就完了。

5.最后一步将上述的函数分装进GameStart函数

void GameStart(pSnake ps)
{

	WelcomeGame();
	CreateMap();
	IniteSnake(ps);
	PrintSnake(ps);
    //getchar();可以用getchar函数来观察打印的效果

}

辛苦了这么久看一下打印效果:

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇

游戏运行GameRun函数的实现 

这里采用总分的方式来挨个实现:

GameRun 中需要实现的逻辑

void GameRun(pSnake ps)
{
	PrintHelpInfo();//打印游戏提示信息
	do
	{
		PrintScore(ps);//打印游戏分数
		SnakeMove(ps);//蛇的移动
		IsKill(ps);//判断蛇的状态并修改蛇的状态
		Sleep(ps->sleep_time);
	} while (ps->status==OK);//蛇为其他状态时,跳出循环
	return;
}

简单的一句话总结就是,蛇每走一步判断一下状态并更新一下分数。

PrintHelpInfo打印帮助信息函数的实现:

void PrintHelpInfo()
{
	SetPos(60, 20);
	wprintf(L"%ls", L"你可以用↑.↓.←.→来控制蛇的移动");
	SetPos(60, 21);
	wprintf(L"%ls", L"F3加速,得分增加;F4减速,得分减少");
	SetPos(60, 22);
	wprintf(L"%ls", L"空格是暂停");
	SetPos(60, 23);
	wprintf(L"%ls", L"ESC是退出游戏");
}

这里比较简单,需要注意的就是找个合适的位置打印。

PrintScore的实现

void PrintScore(pSnake ps)
{
	SetPos(60, 5);
	printf("食物分数:%2d 总分数:%d", ps->food_score, ps->score);
}

每次打印时都会覆盖上次打印的数据。

SnakeMove的实现

这里比较重要,也比较难一些。

void SnakeMove(pSnake ps)
{
    //以下的判断按键按的情况,并做出相应的反应
    //蛇现在的运动方向为下,那么我们知道,按上时不改变蛇的方向
	if (KEY_PRESS(VK_UP) && ps->dir != DOWN)
	{
        //如果是方向键则改变蛇的方向
		ps->dir = UP;
	}
	else if (KEY_PRESS(VK_DOWN) && ps->dir != UP)
	{
		ps->dir = DOWN;
	}
	else if (KEY_PRESS(VK_LEFT) && ps->dir != RIGHT)
	{
		ps->dir = LEFT;
	}
	else if (KEY_PRESS(VK_RIGHT) && ps->dir != LEFT)
	{
		ps->dir = RIGHT;
	}
	else if (KEY_PRESS(VK_F3))
	{
        //f3是加速,将系统休眠时间改小就可以了,别忘了每个食物的加分,并限制一下,不能一直加速
		if (ps->sleep_time > 100)
		{
			ps->sleep_time -= 20;
			ps->food_score += 2;
		}
	}
	else if (KEY_PRESS(VK_F4))
	{
        //f4跟f3一样
		if (ps->sleep_time < 300&&ps->food_score>10)
		{
			ps->sleep_time += 20;
			ps->food_score -= 2;
		}
	}
	else if (KEY_PRESS(VK_SPACE))
	{
		Pause();//这个函数实现暂停
	}
	else if (KEY_PRESS(VK_ESCAPE))
	{
        //只需要改变蛇状态就可以了
		ps->status = END_NORMAL;
	}
	SnakeNext(ps);//蛇走下一步
}

注意: 蛇现在的运动方向为下,那么我们根据以前玩贪吃蛇的知识知道,按上时不改变蛇的方向

Pause暂停函数的实现:

void Pause()
{
	while (1)
	{
		if (KEY_PRESS(VK_SPACE))
			break;
		Sleep(200);
	}
}

实现思路:让系统一致Sleep就可以了,当再次检测到你按下空格时,则跳出循环。

SnakeNext蛇走一步函数的实现:

void SnakeNext(pSnake ps)
{
    //创建一个新节点,这个新节点可以理解为新的蛇头
	pSnakeNode movenext = (pSnakeNode)malloc(sizeof(SnakeNode));
	if (movenext == NULL)
	{
		perror("SnakeNext():malloc:");
		return;
	}
    //基于蛇头的坐标和蛇移动的方向,确定新节点的坐标
	if (ps->dir == UP)
	{
		movenext->x = ps->_psnake->x;
		movenext->y = ps->_psnake->y-1;
	}
	else if (ps->dir == DOWN)
	{
		movenext->x = ps->_psnake->x;
		movenext->y = ps->_psnake->y + 1;
	}
	else if (ps->dir == LEFT)
	{
		movenext->x = ps->_psnake->x-2;
		movenext->y = ps->_psnake->y;
	}
	else if (ps->dir == RIGHT)
	{
		movenext->x = ps->_psnake->x+2;
		movenext->y = ps->_psnake->y;
	}
    //判断蛇的下一步是否是食物,如果是食物那么,就将食物的这个节点改为新的蛇头,并释放掉movenext
	if (NextIsFood(ps, movenext))
	{
		SetPos(ps->_pfood->x, ps->_pfood->y);
        //将食物的位置覆盖式打印为蛇的身体,表示被吃掉
		wprintf(L"%lc", BODY);
		ps->_pfood->next = ps->_psnake;
		ps->_psnake = ps->_pfood;
        //总分增加
		ps->score += ps->food_score;
        free(movenext);
        //食物被吃掉,这在重新创建一个新的食物。
		CreateFood(ps);
	}
	else
	{   //下一步没有吃到食物,则将movenext节点头插到蛇的链表中
		movenext->next = ps->_psnake;
		ps->_psnake = movenext;
		pSnakeNode cur = ps->_psnake;
        //循环打印蛇身,注意跳出循环的条件,当cur指向倒数第二个节点时跳出
		while (cur->next->next != NULL)
		{
			SetPos(cur->x, cur->y);
			wprintf(L"%lc", BODY);
			cur = cur->next;
		}
        //打印倒数第二个节点
		SetPos(cur->x, cur->y);
		wprintf(L"%lc", BODY);
        //将原来最后一节身体被覆盖打印成空格,因为这里是没有吃到食物身体没有变长
		SetPos(cur->next->x, cur->next->y);
		wprintf(L"  ");
        //一定要释放最后一个节点,因为加上了一个节点movenext
		free(cur->next);
        //现在cur指向尾结点,将尾结点的next置为NULL
		cur->next = NULL;
	}
}

思路:根据创建一个新的节点,这个节点是由蛇的方向和头结点的坐标确定的;然后,如果movenext的坐标与食物一样,表示吃到食物,直接将食物的节点头插进蛇的链表;如果movenext与食物的坐标没重合,那么就将movenext头插进链表,并将原链表的尾结点释放。

接下来说一下NextIsFood函数的实现:
int NextIsFood(pSnake ps, pSnakeNode movenext)
{
	if (ps->_pfood->x == movenext->x && ps->_pfood->y == movenext->y)
		return 1;
	else
		return 0;
}

如果与食物坐标重合就返回1,否则返回0.不用怕,这个函数就是很简单。

IsKill函数的实现:

void IsKill(pSnake ps)
{    //判断蛇头的坐标是否与坐标重合,如果重合那么就改变蛇的状态
	if (ps->_psnake->x == 0 || ps->_psnake->x == 56 ||
		ps->_psnake->y == 0 || ps->_psnake->y == 26)
	{
		ps->status = KILL_BY_WALL;
		return;
	}
    //判断是否要到自己
	else
	{
        //要从蛇头的下一个节点开始,遍历链表
		pSnakeNode cur = ps->_psnake->next;
		while (cur)
		{
			if (ps->_psnake->x == cur->x && ps->_psnake->y == cur->y)
			{
				ps->status = KILL_BY_SELF;
				return;
			}
			cur = cur->next;
		}
	}
	return;
}

思路:判断是否撞墙,是否要咬自己,如果为真则改变蛇的相应状态,并跳出函数。

这里说一些为什么在判断是否咬到自己这种情况时,不能从蛇头开始遍历,如果是这样,则cur和ps->_psnake都指向蛇头,坐标重合,状态被修改,结果就是一进游戏你就咬到自己,所从蛇头的下一个节点开始遍历。


游戏结束GameEnd函数的实现:

这里实现逻辑比较简单,直接上代码:

void GameEnd(pSnake ps)
{
	SetPos(30, 14);
    //根据蛇的状态打印信息
	if (ps->status== END_NORMAL)
	{
		printf("正常退出\n");
	}
	else if (ps->status == KILL_BY_SELF)
	{
		printf("咬到自己,死亡\n");
	}
	else if (ps->status == KILL_BY_WALL)
	{
		printf("撞到了墙,死亡\n");
	}
    //将开辟的空间释放
	pSnakeNode cur = ps->_psnake;
	pSnakeNode prev = cur;
	while (cur)
	{
		prev = cur;
		cur = cur->next;
		free(prev);
	}
    free(ps->_pfood);
}

注意:释放链表的方式,使用的是前后指针的方法,如果不太懂可以看我双链表的博客。


整个游戏逻辑的运行逻辑的实现:

void test()
{
	char op;
	do
	{
		Snake s;
		GameStart(&s);
		GameRun(&s);
		GameEnd(&s);
		SetPos(30, 15);
		wprintf(L"%ls",L"是否再来一局?(Y/N):");
		scanf(" %c", &op);
	} while (op == 'y' || op == 'Y');
}
int main()
{
	setlocale(LC_ALL, "");
	test();
	return 0;
}

这里就不多说了哈,主要一点就是加入了,游戏结束你是否还要再来一局。

整个游戏的源码(有感兴趣的可以自取):

    里面也有单向链表,和双向链表的源码。

     这里是我的gitee仓库的链接,项目的名称为Snake追风逐梦又一天/newer_C - 码云 - 开源中国 (gitee.com)https://gitee.com/small-bit-big-dream/newer_-c

到这里就结束了,拜拜!

贪吃蛇的简单实现(c语言),c语言,开发语言,链表,贪吃蛇文章来源地址https://www.toymoban.com/news/detail-855798.html

到了这里,关于贪吃蛇的简单实现(c语言)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 甜甜圈和贪吃蛇的后续

    代码复现-项目复现 云课五分钟-02第一个代码复现-终端甜甜圈C++-CSDN博客   云课五分钟-03第一个开源游戏复现-贪吃蛇-CSDN博客 不同的地图    加入班级和标识     这些案例都是来源网络,只是方便熟悉一下云课使用过程。 此部分学生掌握情况非常赞,几乎全员100分,但是实

    2024年04月24日
    浏览(30)
  • 【C语言】简单贪吃蛇实现保姆级教学!!!

    关注小庄 顿顿解馋૮(˶ᵔ ᵕ ᵔ˶)ა 新年快乐呀小伙伴 引言: 小伙伴们应该都有一个做游戏的梦吧?今天让小庄来用C语言简单实现一下我们的童年邪典贪吃蛇,顺便巩固我们的C语言知识,请安心食用~ 如下是我们将实现的效果 请看vcr 平时我们运行程序弹出的黑框框就是控

    2024年02月19日
    浏览(22)
  • c语言->贪吃蛇实战技巧结合EasyX简单实现页面管理(简单实现)

    ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 贪吃蛇是久负盛名的游戏,它也和俄罗斯⽅块,扫雷等游戏位列经典游戏的⾏列。 在编程语⾔的教学中,我们以贪吃蛇为例,从设计到代码实现来提升学⽣的编

    2024年04月15日
    浏览(43)
  • c语言及数据结构实现简单贪吃蛇小游戏

    目录 一·贪吃蛇简单介绍: 二·贪吃蛇的实现的开始准备: 2.1:欢迎界面的实现: 2.2地图的绘制: 2.3.1初始化蛇: 2.3.2初始化食物:  三·贪吃蛇的运行操作: 3.1辅助信息的打印: 3.2蛇的下一步移动操作: 3.2.1判断玩家按键情况: 3.2.2下一步遇到食物: 3.2.3下一步不是食物:

    2024年04月27日
    浏览(46)
  • 如何用MetaGPT帮你写一个贪吃蛇的小游戏项目

    MetaGPT是基于大型语言模型(LLMs)的多智能体写作框架,目前在Github开源,其Start数量也是比较高的,是一款非常不错的开源框架。 下面将带你进入MetaGPT的大门,开启MetaGPT的体验之旅。首先是入门教程,如何安装及使用MetaGPT。 一、环境安装 python 环境安装,MetaGPT所需的Python环

    2024年01月19日
    浏览(36)
  • C语言—贪吃蛇(链表)超详解

    目录 游戏背景 游戏展示效果 需要实现的功能 贪吃蛇地图绘制: 蛇吃食物的功能: 蛇的移动控制: 蛇撞墙死亡: 蛇撞自身死亡: 计算得分: 蛇身加速、减速: 暂停游戏: 技术要点 win32 API 控制台程序 控制台坐标 COORD   成员: ​编辑 什么是句柄? 示例用法: GetConso

    2024年04月26日
    浏览(25)
  • 贪吃蛇项目(基于C语言和数据结构中的链表)

    首先先建立3个文件。 Snake.h 函数的声明 Snake.c 函数的定义 Test.c     贪吃蛇的测试    我们分析这整个项目 首先在我们实现游戏开始的部分之前,我们要先创建贪吃蛇的节点,再由此创建整个贪吃蛇所包含的一些信息: 我们枚举一下这个贪吃蛇中所有的一些状态: 然后我们

    2024年02月20日
    浏览(47)
  • 使用C语言实现简单的通用的链表

    在数据结构中,我们已经学习到了简单的静态链表以及单链表和双链表,它们各有优缺点,但是有个共同的问题是他们呢无法存储不同的数据。下面提供了一种方法,可以将不同节点的数据链接起来。 下面的代码都是基础的C语言代码,涉及到的知识点基本覆盖到C语言学习的

    2024年02月08日
    浏览(32)
  • Qt超简单实现贪吃蛇

    为了能够最简单地完成程序,所以没有用类的继承等知识。感兴趣的朋友可以改写一下。 为了存储一条蛇, 我们需要的变量有: 蛇的头坐标 蛇的尾巴, 用一个链表存储 蛇的移动方向 下面是Snake类的定义: 贪吃蛇中的唯一难点, 就是蛇移动的逻辑了. 蛇移动不必更新身体每一个点

    2024年01月17日
    浏览(26)
  • 使用Java实现一个简单的贪吃蛇小游戏

    基于java实现贪吃蛇小游戏,主要通过绘制不同的图片并以一定速度一帧一帧地在窗体上进行展示。 开发工具:eclipse java工具包:jdk1.8 代码地址:https://gitee.com/jay_musu/games-and-tools.git 创建一个新的项目,并命名。创建一个名为images的文件夹用来存放游戏相关图片。然后再在项

    2024年02月11日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包