{我又来写黑历史了}....
以前学习C语言的时候,老是感觉只能做点数学题什么的(事实程序就是由许多道数学题构成)。
然后最近两个月开始学习C++,接触到OOP,然后感觉视界扩大了(误)特别是最近突然发现好像可以写些小游戏了(大误)。
前天埋头几个小时写了个贪吃蛇,而且成功运行了,但是回头看看代码,虽然使用了类,但还是C语言那套路....类被我当做一个单纯的函数集来使用。于是花了点时间重新构思了下,写下了这篇文章。
第一个类:坐标类
这个类要求
1,有两个变量分别代表X轴和Y轴,这样我们能把光标移动到任意一点。
2,蛇是否会撞到墙壁,就是坐标是否会重叠,所以这个类的对象要能相互比较。
第二个类:蛇类
用一种数据结构来储存坐标类的对象,作为蛇的身体。
以前学习C语言的时候,老是感觉只能做点数学题什么的(事实程序就是由许多道数学题构成)。
然后最近两个月开始学习C++,接触到OOP,然后感觉视界扩大了(误)特别是最近突然发现好像可以写些小游戏了(大误)。
前天埋头几个小时写了个贪吃蛇,而且成功运行了,但是回头看看代码,虽然使用了类,但还是C语言那套路....类被我当做一个单纯的函数集来使用。于是花了点时间重新构思了下,写下了这篇文章。
第一个类:坐标类
这个类要求
1,有两个变量分别代表X轴和Y轴,这样我们能把光标移动到任意一点。
2,蛇是否会撞到墙壁,就是坐标是否会重叠,所以这个类的对象要能相互比较。
3,构造函数和赋值也是必须的。
头文件:Coordinate.h
#ifndef _COORDINATE_H
#define _COORDINATE_H
class Coordinate
{
public:
Coordinate(int X, int Y)
{
x = X;
y = Y;
}
Coordinate() { }
bool operator == ( const Coordinate &a )
{
return a.x == x&&a.y == y;
}
bool operator !=( const Coordinate &a )
{
return !(a.x == x&&a.y == y);
}
Coordinate &operator=( const Coordinate &a )
{
x = a.x;
y = a.y;
return *this;
}
int x, y;
};
#endif
然后就能用windows的API函数来构建一个函数,这个函数接受一个坐标类的对象,并且把光标移动到该坐标。
头文件:GotoXY.h
#ifndef _GOTOXY_H
#define _GOTOXY_H
#include "Coordinate.h"
#include <Windows.h>
void gotoxy(Coordinate a)
{
COORD local;
local.X = a.x;
local.Y = a.y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), local);
}
#endif
第二个类:蛇类
用一种数据结构来储存坐标类的对象,作为蛇的身体。
这里用了STL模板库的<list>