⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 map.c

📁 坦克大战,实现基本的游戏功能
💻 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 + -