提示:阅读本文需要一定的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都来自于它。
总结
这是本系列的第一篇,后续的不久将会陆续写好。