零基础用c++实现诺基亚上的贪吃蛇,我惊呼爷青回!

本文介绍了如何从零基础用C++实现一款基于控制台的贪吃蛇游戏,通过设计蛇类,利用COORD结构表示位置,实现移动、食物生成和碰撞检测等功能。游戏界面简洁,让人回忆起诺基亚时代的贪吃蛇。文章提供完整源代码,适合编程初学者学习。
摘要由CSDN通过智能技术生成

今天是六一儿童节,奖励了自己一瓶旺仔牛奶,觉得还是意犹未尽,作为六岁零170个月的小孩子,我翻出了大一写的贪吃蛇小游戏,玩起来虽然粗糙,但是惊呼“爷青回”啊,让我回到了小板砖一样诺基亚上的贪吃蛇时代。

在这里插入图片描述

六一儿童节,建议大家收藏找回童年嗷,哈哈哈,喜欢作者的希望一键三连点个关注。在文章最后附有完整代码。

本文实现的是一个基于控制台的贪吃蛇小游戏,当时还不会界面这些操作,但是就是因为这样才有童年那味!

界面展示

初始界面中有一些游戏提示信息,还有贪吃蛇和食物的初始位置,以及四周的边框。
#标识我们的贪吃小蛇,*表示食物,●表示边框。
在这里插入图片描述
游戏结束图:
在这里插入图片描述

设计思路

设计一个蛇的类,如图所示:
在这里插入图片描述

绘制边框等操作

具体实现可看下面源码

class snake;
void Init_Console();//控制台初始化
void gotoPos(SHORT x = 0, SHORT y = 0);//光标坐标控制
void Init_Map();//画边框
void KeyConctrl(snake &, int);//键盘控制函数
void is_gameover();//结束提示
void Prompt_info(int, int);//提示信息
void dis_date(int, int, double, int);//得分信息

如何表现位置

蛇身和食物的位置都是使用的COORD结构。

COORD是WindowsAPI中定义的一种结构,表示一个字符在控制台屏幕上的坐标。

typedef struct _COORD {
   
SHORT X; // horizontal coordinate   
SHORT Y; // vertical coordinate   } COORD;

如何表现蛇身

使用“#”表示蛇身,每吃一个食物就变长一个“#”。

如何表现食物

使用“*”表现食物,每吃掉一个食物,下一个食物就会随机出现在地图里。

如何移动

用"#"表示贪吃蛇,每次移动从蛇头开始,所以蛇不能反向移动,也就是不能倒车。每次输入方向键后,蛇头就会朝着方向移动,然后蛇身在该点也改变自身的方向。
方向分为停止、左、右、上、下。

enum direction {
    go_stop = 0, go_left, go_right, go_up, go_down }dir;

每一次移动,都要进行碰撞检测,检测是否发生了碰撞。

//    //移动
	bool move()
	{
   
		switch (this->dir)
		{
   
		case go_stop:
			break;
		case go_left:
			in_Pos.X -= 2;
			if (check_snk(in_Pos))
			{
   
				return true;
			}
			dis();
			save_date();
			check_bit();
			break;
		case go_right:
			in_Pos.X += 2;
			if (check_snk(in_Pos))
			{
   
				return true;
			}
			dis();
			save_date();
			check_bit();
			break;
		case go_up:
			in_Pos.Y--;
			if (check_snk(in_Pos))
			{
   
				return true;
			}
			dis();
			save_date();
			check_bit();
			break;
		case go_down:
			in_Pos.Y++;
			if (check_snk(in_Pos))
			{
   
				return true;
			}
			dis();
			save_date();
			check_bit();
			break;
		}
		return false;
	}
};

检验碰撞

检验膨胀边框比较简单,就是测试蛇头的坐标有没有超过边框的范围。

//撞蛇 撞边检测
	bool check_snk(COORD snk_Pos)
	{
   
		//边界检测
		if (snk_Pos.Y <= 1 || (snk_Pos.Y >= 23) || (snk_Pos.X <= 1) || snk_Pos.X >= 45)
		{
   
			return true;
		}
		for (int i = clear_bit; i <= print_bit; i++)
		{
   
			if (_Pos[i].X == snk_Pos.X && _Pos[i].Y == snk_Pos.Y) return true;
		}
		return false;
	}

速度升级

每当贪吃蛇吃掉五个食物,得到500分之后,速度就会+1,速度最高设置为5。

void up_speed()
	{
   
		if (this->speed < 5)(this->speed)++;

	}

源代码

#include <iomanip>
#include <windows.h>
#include <iostream>
#include <conio.h>
using namespace std
评论 50
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值