项目来源:老九君
项目名称:精忠报国之笑傲江湖
视频课地址:网易云课堂
基本功能/架构:
第二天
- 今天看得比较快,基本把这个项目结束了吧,明天再仔细看一下有没有遗漏的这项目就应该算是结束了.项目难度的话一般,主要是windows的函数调用以前不知道的话刚看可能会蒙头,同样需要源码的同学私聊或者评论我私发给你,因为这毕竟不是我写的,接下来后天开始应该会开始一个tinyhttp的github项目模仿,欢迎继续关注
-
简易目录
1.COORD windows.h头文件
纵观项目,从player(玩家),monster(怪物),martial(门派)这几个关键结构体的定义和功能地图的切换的到怪物与地图的匹配(哪些怪物在哪些地图)还有地图描述信息的显示,全都使用了COORD结构,有关代码在后面
一开始看到这个地方特别疑惑,因为我在所有文件里都Ctrl F查询了,都没有找到COORD这样一个结构体的声明,最后才发现这是一个windows api里封装好的结构体,可以直接用,只有int x和int y两个成员,作用是表示一个字符在控制台屏幕上的坐标,其定义如下:
typedef struct _COORD {
SHORT X; // horizontal coordinate 水平坐标
SHORT Y; // vertical coordinate 竖直坐标
} COORD;
简单来说,COORD就像是给我们的控制台以左上角为(0,0)点建造了一个坐标系(只不过这个坐标系和平面直角坐标系的第四象限有点相似,但是又不同,Y也是向正方向增大的),例如我们在定义地图时某个地图坐标为(4,3),在后面要显示着地图相关信息的时候只要看怪物所在地图坐标横纵坐标是否与(4 , 3)一致即可.
注意:在项目中COORD并没有用来在屏幕上显示,更多的像是两个参数进行匹配,这不是c语言的标准库,不用太在意,会用就好
- 结构体的定义
/* 门派 */
typedef struct _martial{
int id; //门派编号
- - -
COORD hqCoord; //总部坐标(X-行,Y-列),与正常坐标轴相反
- - -
}Martial;
/* 玩家结构 */
typedef struct _player{
int id;
- - -
COORD currCoord;//玩家当前坐标(X-行,Y-列),与正常坐标轴相反
Bag bag;
}Player;
/* 怪物 */
typedef struct _monster{
int id;
- - -
COORD mCoord; //怪物坐在地图坐标(X-行,Y-列),与正常坐标轴相反
}Monster;
- 功能的实现
/* 显示怪物:怪物与地图的匹配 */
void ShowMonster()
{
- - -
//遍历怪物数组,找到所有跟玩家坐标相同的怪物
int monsterCount = sizeof(monsters)/ sizeof(Monster);
int monsterIndex[9];//最多9个怪物
int currCount = 0;//当前地图的怪物总数
for(i = 0; i < monsterCount; i++)
{
if(X == monsters[i].mCoord.X && Y == monsters[i].mCoord.Y && monsters[i].state != 0)