C++入门——实现贪吃蛇游戏

本文详细介绍了如何使用C++实现经典贪吃蛇游戏,涉及键盘控制、蛇的移动、边界检测、食物生成与长度增加、以及游戏失败的处理。通过逐步代码解析,展示了游戏逻辑和关键函数的编写过程。
该文章已生成可运行项目,

参考

  1. 《C和C++游戏趣味编程》

贪吃蛇游戏

键盘控制小蛇上、下、左、右移动,迟到食物后长度加1;蛇头碰到自身或窗口边缘,游戏失败

程序框架

#include <graphics.h>
#include <conio.h>
#include <stdio.h>

// 全局变量定义

void startup()                       // 初始化函数
{
   
   

}

void show()                          // 绘制函数
{
   
   
	
}

void updateWithoutInput()            // 与输入无关的更新
{
   
   


}

void updateWithInput()               // 和输入有关的更新
{
   
   

}

int main()
{
   
   
	startup();                       // 初始化函数,仅执行一次
	while (1)
	{
   
   
		show();                      // 进行绘制
		updateWithoutInput();        // 和输入无关的更新
		updateWithInput();           // 和输入有关的更新
	}
	return 0;
}

绘制游戏地图和蛇

绘制网格状的游戏地图,使用二维数组Blocks存储每个网格的信息。二维数组Blocks中也可以记录蛇的信息。设定元素值为0表示空,画出灰色的方格;元素值为1表示蛇头,蛇头后的蛇身依次为2、3、4、5等正整数,画出彩色的方格

int i, j;
for (i = 0; i < HEIGHT; i++)
{
   
   
	for (j = 0; j < WIDTH; j++)
	{
   
   
		if (Blocks[i][j] > 0)
		{
   
   
			setfillcolor(HSVtoRGB(Blocks[i][j] * 10, 0.9, 1));
		}
		else
		{
   
   
			setfillcolor(RGB(150, 150, 150));
		}
		fillrectangle(j * BLOCK_SIZE, i * BLOCK_SIZE, (j + 1) * BLOCK_SIZE, (i + 1) * BLOCK_SIZE);
	}
}

在这里插入图片描述

小蛇向右移动

假设小蛇初始元素值为54321,其中1位蛇头,5432位蛇身。首先将二维数组中所有大于0的元素加1,得到65432;然后将最大值6变成0,即去除了原来的蛇尾;最后将2右边的元素由0变成1,即实现了小蛇向右移动

void moveSnake()
{
   
   
	int i, j;
	for (i = 0; i < HEIGHT; i++)
	{
   
   
		for (j = 0; j < WIDTH; j++)
		{
   
   
			if (Blocks[i][j] > 0)
			{
   
   
				Blocks[i][j]++;
			}
		}
	}
	int oldTail_i, oldTail_j, oldHead_i, oldHead_j;
	int max = 0;
	for (i = 0; i < HEIGHT; i++)
	{
   
   
		for (j = 0; j < WIDTH; j++)
		{
   
   
			if (max < Blocks[i][j])
			{
   
   
				max = Blocks[i][j];
				oldTail_i = i;
				oldTail_j = j;
			}
			if (Blocks[i][j] == 2)
			{
   
   
本文章已经生成可运行项目
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值