📄 map.c
字号:
/*
map.c
地图相关的函数实现
最后修改: 2007-06-19
*/
#include "map.h"
#include "graph.h"
#include <stdio.h>
char g_byMapUnit[5][8][8] =
{
{
/* 空地 */
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0},
},
{
/* 木 */
{7, 7, 7, 7, 7, 7, 7, 8},
{7, 6, 6, 6, 6, 6, 6, 8},
{7, 6, 6, 6, 6, 6, 6, 8},
{7, 6, 6, 6, 6, 6, 6, 8},
{7, 6, 6, 6, 6, 6, 6, 8},
{7, 6, 6, 6, 6, 6, 6, 8},
{7, 6, 6, 6, 6, 6, 6, 8},
{7, 8, 8, 8, 8, 8, 8, 8}
},
{
/* 铁 */
{ 7, 7, 7, 7, 7, 7, 7, 8},
{ 7, 15, 15, 15, 15, 15, 15, 8},
{ 7, 15, 15, 15, 15, 15, 15, 8},
{ 7, 15, 15, 15, 15, 15, 15, 8},
{ 7, 15, 15, 15, 15, 15, 15, 8},
{ 7, 15, 15, 15, 15, 15, 15, 8},
{ 7, 15, 15, 15, 15, 15, 15, 8},
{ 7, 8, 8, 8, 8, 8, 8, 8}
},
{
/* 草 */
{2, 0, 2, 2, 0, 2, 0, 2},
{0, 2, 2, 2, 0, 2, 2, 2},
{2, 2, 2, 0, 2, 2, 2, 2},
{2, 2, 0, 2, 2, 0, 0, 0},
{2, 0, 2, 2, 2, 0, 2, 0},
{2, 2, 0, 0, 2, 2, 2, 2},
{0, 2, 2, 2, 2, 2, 0, 0},
{2, 2, 2, 2, 0, 2, 0, 2}
},
{
/* 水 */
{9, 1, 1, 9, 9, 1, 1, 9},
{1, 7, 1, 1, 7, 1, 1, 1},
{1, 7, 1, 1, 7, 1, 1, 1},
{9, 7, 1, 9, 9, 1, 7, 9},
{9, 7, 1, 9, 9, 1, 7, 9},
{1, 1, 1, 7, 1, 1, 7, 1},
{1, 1, 1, 7, 1, 1, 7, 1},
{9, 1, 1, 9, 9, 1, 1, 9}
}
};
char g_byBase[16][8] =
{
/* 老家 */
{11, 11, 0, 0, 0, 0, 0, 0},
{ 0, 11, 11, 10, 0, 0, 0, 0},
{ 0, 11, 11, 10, 10, 0, 0, 0},
{ 0, 0, 10, 10, 10, 0, 0, 0},
{ 0, 0, 0, 10, 10, 2, 0, 0},
{12, 0, 0, 2, 2, 2, 0, 0},
{12, 12, 0, 0, 2, 2, 0, 0},
{ 0, 12, 5, 5, 5, 2, 2, 2},
{ 0, 12, 5, 5, 5, 2, 2, 2},
{12, 12, 0, 0, 2, 2, 0, 0},
{12, 0, 0, 2, 2, 2, 0, 0},
{ 0, 0, 0, 10, 10, 2, 0, 0},
{ 0, 0, 10, 10, 10, 0, 0, 0},
{ 0, 11, 11, 10, 10, 0, 0, 0},
{ 0, 11, 11, 10, 0, 0, 0, 0},
{11, 11, 0, 0, 0, 0, 0, 0}
};
char g_byMap[60][60]; /* 存储地图, 0-空白, 1-木, 2-铁, 3-草, 4-水 */
void SetMap(int nLX, int nLY, char byValue) /* 设地图值 */
{
g_byMap[nLX][nLY]=byValue;
}
char GetMap(int nLX, int nLY) /* 取地图值 */
{
return g_byMap[nLX][nLY];
}
char IsInMap(int nX, int nY) /* 物理点是否在地图内 */
{
return (nX>=0&&nX<480)&&(nY>=0&&nY<480);
}
char IsInMapL(int nLX, int nLY) /* 逻辑点是否在地图内 */
{
return (nLX>=0&&nLX<60)&&(nLY>=0&&nLY<60);
}
void DrawMapUnit(int nLX, int nLY, char byValue) /* 画地图元素 */
{
int i, j;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
PutPix(nLX*8+i, nLY*8+j, g_byMapUnit[byValue][i][j]);
}
}
}
void RestoreMapUnit(int nLX, int nLY) /* 还原地图元素 */
{
DrawMapUnit(nLX, nLY, GetMap(nLX, nLY));
}
void ClearMapUnit(int nLX, int nLY) /* 清除地图元素 */
{
SetMap(nLX, nLY, 0);
RestoreMapUnit(nLX, nLY);
}
void DrawBase() /* 画老家 */
{
int i, j;
for(i=0;i<16;i++)
{
for(j=0;j<8;j++)
{
PutPix(29*8+i, 59*8+j ,g_byBase[i][j]);
}
}
}
void DrawMap() /* 重绘整个地图 */
{
int i, j;
for(i=0;i<60;i++)
{
for(j=0;j<60;j++)
{
DrawMapUnit(i, j, g_byMap[i][j]);
}
}
DrawBase();
}
char ReadMap(char szPath[]) /* 从文件读取地图信息 */
{
FILE *p;
p=fopen(szPath, "rb");
if(p!=NULL)
{
fread(g_byMap, 60, 60, p);
fclose(p);
return 1;
}
else
{
return 0;
}
}
char WriteMap(char szPath[]) /* 写地图信息到文件 */
{
FILE *p;
p=fopen(szPath, "wb");
if(p!=NULL)
{
fwrite(g_byMap, 60, 60, p);
fclose(p);
return 1;
}
else
{
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -