三 地图的绘制

#include<graphics.h> 
#include<iostream> 
#include<fstream>
#include<set>
#include <iomanip>//输出宽度setw
#define MinSize 18
using namespace std;
int Map[28][32];
IMAGE MapPic[100]; 

int calhex(string s) {
    int base = 1,res = 0;
    for (int i = 1; i >= 0; i--) {
        if (s[i] >= 'A') res += base * (s[i] - 'A' + 10);
        else res += base * (s[i] - '0');
        base *= 16;
    }
    return res;
}
void LoadTxtMap() {
    std::ifstream map_file;
    map_file.open("map.txt");
    for (int i = 0; i < 28; i++) {
        for (int j = 0; j < 32; j++) {
            string tem;
            map_file >> tem; 
            Map[i][j] = calhex(tem);
        }
    }
}
void OutoutTxtMap() { 
    for (int i = 0; i < 28; i++) {
        for (int j = 0; j < 32; j++) {
            cout << setw(3) << Map[i][j] << ' ';
        }
        cout << '\n';
    }
}
void LoadPic() {
    loadimage(&MapPic[1], _T("Image\\wall.png"), MinSize, MinSize, false);
    loadimage(&MapPic[2], _T("Image\\iron.png"), MinSize, MinSize, false);
    loadimage(&MapPic[3], _T("Image\\border.png"), MinSize, MinSize, false);
    loadimage(&MapPic[4], _T("Image\\border.png"), MinSize, MinSize, false);//没找到素材
    loadimage(&MapPic[5], _T("Image\\commander0.png"), MinSize*2, MinSize*2, false);   
    loadimage(&MapPic[6], _T("Image\\enemy_mark_ps.png"), MinSize, MinSize, false);
    loadimage(&MapPic[7], _T("Image\\player_mark_ps.png"), MinSize, MinSize, false);
    loadimage(&MapPic[8], _T("Image\\flag_ps.png"), MinSize*2, MinSize*2, false);
}
void PicShow() {
    initgraph(MinSize*32, MinSize*28);
    set<int> CanShow;
     CanShow.insert(16),CanShow.insert(32), CanShow.insert(17), CanShow.insert(15),
        CanShow.insert(200), CanShow.insert(201), CanShow.insert(202), CanShow.insert(203), CanShow.insert(0);
    for (int i = 0; i < 28; i++) {
        for (int j = 0; j < 32; j++) {
            IMAGE pic;
            switch (Map[i][j])
            {
                /*
                        0空地
                        1 2 4 8代表左上,右上,左下,右下  15整块砖块
                        16 铁
                        17 边界 
                        106 敌军的maek
                        20 玩家的 mark
                        88 字母I
                        19 字母P
                        112 数字2
                        108 棋子的左上角 表示关卡 还有三个(顺时针)252 253 109
                        111 数字1 
                        200 老窝左上角
                */
            case 0:
                break; 
            case 16:
                pic = MapPic[2];
                break;
            case 15:
                pic = MapPic[1];
                break;
            case 17:
                pic = MapPic[3];
                break; 
            case 200:
                pic = MapPic[5];
                break;
            default:
                break;
            }
            if (CanShow.count(Map[i][j]))  //只要一层
                if (Map[i][j])
                    putimage(j * MinSize, i * MinSize, &pic);
                else;
            else {   
                putimage(j * MinSize, i * MinSize, &MapPic[3] ); //放一层边界
                switch (Map[i][j]){
                case 106:
                    putimage(j * MinSize, i * MinSize, &MapPic[6]);
                    break;
                case 90:// I 
                case 88:
                    outtextxy(j * MinSize, i * MinSize, TCHAR('I'));
                    break;
                case 19:// P
                    outtextxy(j * MinSize, i * MinSize, TCHAR('P'));
                    break;
                case 20:// P
                    putimage(j * MinSize, i * MinSize, &MapPic[7]);
                    break;
                case 108:
                    putimage(j * MinSize, i * MinSize, &MapPic[8]);
                    break;
                default:
                    break;
                }
            }
            if (Map[i][j] >= 110 && Map[i][j] <= 168) {
                char a[10];  
                _itoa_s(Map[i][j], a, 10); 
                TCHAR s[] = _T("a");
                outtextxy(j * MinSize, i * MinSize, s);
            }
        }
    }
    putimage(29 * MinSize, 22 * MinSize, &MapPic[8]);
}
int MapShow() { 
    LoadTxtMap();
    if(0) OutoutTxtMap(); 
    else {
        LoadPic();
        PicShow();
    }
    system("pause");
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/SunChuangYu/p/12825052.html