手把手教你用C++写贪吃蛇

最近女朋友挺无聊的(不是左手,也不是右手),决定用C++写一个贪吃蛇的游戏给他玩玩。顺便更新一下博客,把思路记下来。

相信看这篇博客的人都用过诺基亚的手机,玩过贪吃蛇(不接受反驳)。贪吃蛇的玩法就是一条小蛇在转圈圈儿,同时要去吃食物,每吃一个,自身增加1节长度,直到撞到自己或者撞到墙才算失败。游戏规则是非常的简单。相信各位早就看懂了,那接下来就开始敲代码吧:
在这里插入图片描述
首先在这个游戏中有蛇,有食物还有墙。因此我们需要设计三个类来依次表示他们。

首先我们先在excel中模拟一下贪吃蛇的游戏过程如下:
在这里插入图片描述
我们可以假定用*表示墙,用=表示蛇身,用@表示蛇头,用#表示食物。因此,整个过程我们可以用一个二维数组来维护整个蛇,墙以及食物的状态。先建立一个墙的类,内容如下:

#pragma once
#include<iostream>

class Wall {
   
public:
	enum
	{
   
		ROW = 25, COLUMN = 25
	};

	//构造函数
	Wall();

	//根据条件设置点的元素,可能为食物,可能为蛇身可能为蛇头
	void setPoint(int x, int y, char ele);

	//获取某一坐标的元素,用于给需要移动到的下一点判断是否会装上
	char getPoint(int x, int y)const;

	//在屏幕上输出当前状态
	void drawWall();

	//重载绘制方法,此时传入一个参数为得分,并写在第一行
	void drawWall(unsigned int score);

private:
	char gameArr[ROW][COLUMN];  //维护一个二维数组
};

						wall.h

然后对墙这个类里面的基本方法进行实现,内容如下:

#include"Wall.h"

//构造函数,先把墙搭建好,即i=0或i=ROW - 1或j=0或j=COLUMN - 1的地方就为墙用'*'表示,其他地方为待使用区域用' '表示
Wall::Wall() {
   
	for (int i = 0; i < ROW; ++i)
		for (int j = 0; j < COLUMN; ++j)
			if (i == 0 || j == 0 || i == ROW - 1 || j == COLUMN - 1)
				this->gameArr[i][j] = '*';
			else
				this->gameArr[i][j] = ' ';
}

//根据传入的元素,设置点位的状态,可能是食物'#',也可能是蛇头'@'或蛇身'='
void Wall::setPoint(int x, int y, char ele) {
   
	this->gameArr[x][y] = ele;
}

//返回点位的元素,用来判断是否会撞上,或者是否吃到了食物
char Wall::getPoint(int x, int y)const {
   
	return this->gameArr[x][y];
}

//将二维数组中维护的状态输出在屏幕上,同时在右侧加入开发者,玩法等信息
void Wall::drawWall() {
   
	for (int i = 0; i < ROW; ++i) {
   
		for (int j = 0; j < COLUMN; j++)
			std::cout << this->gameArr[i][j] << " ";
		if (i == 6)
			std::cout << "开发者: 方人也WJ";
		if (i == 8)
			std::cout << "玩法——a: left | w: up | s:down | d: right";
		std::cout << std::endl;
	}
}

//重载的输出信息,并且通过传入的分数参数计算当前的得分
void Wall::drawWall(unsigned int score) {
   
	for (int i = 0; i < ROW; ++i) {
   
		for (int j = 0; j < COLUMN; j++)
			std
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值