C++实战贪食蛇,简单易理解 2021-08-16

C++实战贪食蛇

学了那么久的C++语法,没有点小项目来玩玩的话是会感觉挺枯燥的。这篇文章记录C++的贪食蛇,简单易懂。

首先使用的是多文件的写法,代码开起来不会太多。直接开始吧。

一、总体思路

把需要的蛇、食物、坐标都封装成类,然后在主函数中去调用蛇的形状就用多个矩形连起来来代替。食物是随机在界面中产生食物也是用矩形来代替。食物中有一个属性是用来标识蛇有没有吃掉食物的。蛇吃了食物就把标记变换,然后if判断判断标记是否改变得出食物是否被吃掉。食物被吃掉之后,在可见的界面中随机一个位置产生一个食物,然后蛇自己的身体增一。所以蛇中就必须有一个属性是用来表示蛇身长度的或者说大小。蛇和食物都是需要定位的,所以也封装了一个点类,当蛇头碰到食物的时候,也就是蛇头的坐标等于食物的坐标的时候,就是吃的过程。然后就是蛇的移动和改方向(改方向需要按键交互,只需改变蛇的头部方向即可,蛇身的节点直接使用上一个节点的坐标即可)。最后是结束游戏的判断,有主要的两个条件会使游戏结束:一是蛇头碰到墙,二是蛇头碰到自己的身体。第一个只需判断是否出界即可,第二个就比较有意思,先把蛇头的坐标记录下来,然后就用循环去判断蛇头的坐标是否等于蛇身中每个节点的坐标 。条件成立就结束游戏,不成立就继续。这里为什么要记录下来呢?因为不记录下来的话,蛇头和第一个要判断的蛇身节点判断结束后蛇头就变了,变的速度很快。所以要记录下来才行,不记录直接判断的话是有Bug的。

1.1 开发环境

Visual Studio 2019

1.2 插件

easyX 如果没有的话直接在网上下载就好,用不到五分钟。使用的时候直接包含头文件easyx.h

#include<easyx.h>

1.3 自定义的头文件和源文件

封装类,采用面向对象和面向过程的相互结合。

每个类写在一个头文件中。

已经分别创建三个头文件

头文件 源文件
Point point.h point.cpp
Snake snake.h snake.cpp
Food food.h food.cpp
1.3.1 头文件
  • Point类(点,用来定位),在自定义头文件"point.h"中。
#pragma once
//创建一个点类,用于定位蛇和食物
class Point
{
   
public:
	//缺省的方式写构造函数
	Point(int x=0,int y=0):x(x),y(y){
   }
	int& getX();	//X坐标的接口
	int& getY();	//Y坐标的接口
protected:
	int x;
	int y;
};
  • Snake类(蛇,封装蛇的属性和行为),在自定义头文件"snake.h"中。
#pragma once
#include<easyx.h>	//包含图形库头文件,画图使用
#include"point.h"
#include<ctime>		//包含时间头文件,我们想让蛇的身体一闪一闪的
#include"food.h"	//包含食物头文件,因为等下的吃食物的函数中要用到Food的对象
class Snake
{
   
public:
	//枚举
	enum posNum
	{
   
		//分别是0	 1 2 3	的别名
		LEFT,RIGHT,UP,DOWN
	};
	//缺省的方式写构造函数,传的是点的个数
	Snake(int size = 100);
	void drawSnake();			//画蛇
	void moveSnake();			//移动蛇
	void keyDown();				//按键交互
	void eatFood(Food& food);	//吃食物
	bool GameOver();			//判断游戏是否结束
	int& getCurSize();			//获取当前的大小,主要用于统计最后的分数
protected:
	Point* pos;		//点类的指针
	int curSize;	//当前蛇身的大小
	int position;	//方向,按键交互的时候就是改变蛇头的方向即可
};
  • Food类(食物,封装行为和属性),在自定义头文件"food.h"中
#pragma once
#include<easyx.h>
#include"point.h"
#include<ctime>
class Food
{
   
	//声明Snake类是Food类的友元类,方便Snake直接访问到Food的成员
	friend class Snake;
public:
	Food();
	void drawFood();<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值