原来还有这么通俗易懂的贪吃蛇写法之CUnit类(思路很详细,有详细的代码解释)(一)

提示:阅读本文需要一定的C++基础,此思路只用于实现贪吃蛇的基本功能,没有图形化,没有使用EasyX库。(尊重原创,转载本文请指明出处)


前言

了解代码框架戳这儿:https://blog.csdn.net/weixin_43929310/article/details/112667309
此思路中,贪吃蛇一共会分成6个类,分别是CUnit类, CFood类,CMap类, CSnake类, CGame类, CMenu类,这些类中的成员和方法全部是public。这一篇介绍CUnit类。
下一篇:地图和食物https://blog.csdn.net/weixin_43929310/article/details/112787936


提示:全部代码请点击—>https://github.com/qing-qing-mei/Snake

一、了解一个点的显示与擦除

贪吃蛇作为一个入门级项目,虽说入门,其实对于真正的初学者做起来并不简单,对我也是如此,要想做好贪吃蛇,我们得首先知道如何贪吃蛇是怎么样动起来的。动起来听起来很难,其实就是一系列的点的显示与擦除,这些都是后话,让我们先来了解一个简单的例子:
假设我们的贪吃蛇初始长度为1,代表贪吃蛇的符号为 * ,那么显示贪吃蛇就是在指定的位置输出 *,让贪吃蛇消失其实就是在这个位置输出一个空格。

二、Cunit类:

1.代码

代码如下:
.h文件:

#pragma once
#include<windows.h>
class Cunit
{
public:
	Cunit(int x = 0, int y = 0, char pic = '*');
	virtual ~Cunit();
	void show();
	void erase();
	static void gotoxy(int x, int y);

public:
	int m_ix;
	int m_iy;
	char m_cPic;
};

.cpp文件:


```cpp
#include "CUnit.h"
#include<iostream>
using namespace std;
Cunit::Cunit(int x, int y, char pic)
{
	m_ix = x;
	m_iy = y;
	m_cPic = pic;
}
Cunit::~Cunit()
{
}
void Cunit::gotoxy(int x, int y)
{
	COORD pos = { x,y };
	pos.X = x;
	pos.Y = y;
	//设置光标位置 
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void Cunit::show()
{
	gotoxy(m_ix, m_iy);
	cout << m_cPic;
}
void Cunit::erase()
{
	gotoxy(m_ix, m_iy);
	cout << " ";
}

2.思路

我们构造了一个Cunit类,也叫点类,主要作用就是在指定位置,实现一个点的显示与擦除,类中有3个成员,(m_ix,m_iy)代表坐标,m_cPic代表指定符号。

额外的,我们发现有一个方法是gotoxy(),它的作用就是跳转到指定坐标,当然你也可以叫其它的名字(网上的文章基本都叫这个名字),在这个函数里,我们发现COORD,这个是什么呢?

其实它是一个结构体,表示一个字符在控制台屏幕上的二维坐标,是Windows帮我们写好了,既然表示二维坐标,那么COORD就一定会有两个成员分别表示x,y坐标,果不其然,成员X,Y表示横纵坐标,所以COORD pos;这句话就很容易看懂了,它就是一个结构体方便我们表示坐标。

接下来就是顺其自然的赋值了,然后我们又发现了一个陌生的东西,叫做:

SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
顾名思义:Set–>建立 Console–>控制台 Cursor–>游标、光标 Position–>位置
所以这里我们调用了一个Windows提供的API接口叫做SetConsoleCursorPosition(),中文名我把它译为 建立控制台光标的位置。调用这个接口需要用到 windows.h头文件。

这个接口有两个参数,GetStdHanle()也是一个API接口,获得标准的句柄;STD_OUTPUT_HANDLE便是标准输出句柄,pos则是我们刚刚指定的坐标位置;所以这个接口的功能我们也大致能够猜出来,把pos中存储的坐标通过GetStdHandle()接口获得的STD_OUTPUT_HANDLE(标准输出句柄),在指定位置输出。

其实这些个接口的功能如何实现我也没有详细了解过,如果有说得不对的地方请指正。
gotoxy()函数是贪吃蛇中一个十分重要的函数,它是写贪吃蛇的第一道坎。

后面的函数就十分简单了,show(),erase()分别表示点的擦除与显示,调用gotoxy()先将光标定位到指定位置。

最后一个用了虚函数,因为Cunit()是一个基类,食物类CFood和蛇类Csnake都来自于它。


总结

这是本系列的第一篇,后续的不久将会陆续写好。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值