自制的一个小地图生成器

话不多说,直接上代码,输入一个整数就行(有2个函数是借鉴大佬的)头文件私信找我

#include<iostream>
#include<ctime>
#include<windows.h>
#include<cstring>
#include<string>
#include<cmath>
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<colordlg.h> 
#include"colordlg.h"
#include"fontcolor.h"
#include <stdio.h>
#include <locale.h>
using namespace std;
typedef unsigned long long ul;
struct blocks{
ul map_x;
ul map_y;
int map_=2191;};
    blocks maps[1024][1024];
    ul maps_x,maps_y;//先y后x 
    string bl="■"; //□■0,三种切换 
//输入地图 
void map_in(){
    for(ul i = 1;i<=maps_y;i++)
        for(ul j = 1;j<=maps_x;j++)
            cin>>maps[i][j].map_;
    system("cls");
}
        
void COLOR_PRINT(int color){
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | color);
        cout<<bl;
    SetConsoleTextAttribute(handle, FOREGROUND_INTENSITY | 7);}
    /*  0 = 黑色     8 = 灰色
        1 = 蓝色     9 = 淡蓝色
        2 = 绿色     10 = 淡绿色
        3 = 浅绿色     11 = 淡浅绿色
        4 = 红色     12 = 淡红色
        5 = 紫色     13 = 淡紫色
        6 = 黄色     14 = 淡黄色
        7 = 白色     15 = 亮白色*/ 
                     


    //返回[left, right]的随机数
int randNext(int left, int right){
    static unsigned int seed = 0;seed++;
    srand((unsigned) time(NULL) + seed * seed);
    return rand() % (right - left + 1) + left;
}//small big
        
void seed_d(){//随机种子生成 洞穴 
    for(ul i = 1;i<=maps_y;i++)
    for(ul j = 1;j<=maps_x;j++)
    maps[i][j].map_=randNext(0,99);
    //洞穴输出
    for(ul i = 0;i<=maps_y+1;i++){
        for(ul j = 0;j<=maps_x+1;j++){
            if(maps[i][j].map_==2191)
                COLOR_PRINT(36);//边框 
            if(maps[i][j].map_>=0&&maps[i][j].map_<=54)
                COLOR_PRINT(8);//石头 
            if(maps[i][j].map_>=55&&maps[i][j].map_<=95)
                cout<<"  ";//COLOR_PRINT(7);//路
            if(maps[i][j].map_>=96&&maps[i][j].map_<=99)
                COLOR_PRINT(9);}//矿物 
        cout<<endl;
    }
}


void seed_q(){//全地形种子生成器 
    //0-54石头,55-95空气 96-99矿物,100-104草方块,105-109泥土,110基岩。
    //宽度函数可改变 
    for(ul i = 1;i<=3;i++)
        for(ul j = 1;j<=maps_x;j++)
            maps[i][j].map_=56;//2格高的空气
        
    for(ul i = 4;i<=4;i++){
        for(ul j = 1;j<=maps_x;j++){
            int ddd = randNext(1,4);
            if(ddd==1)
                maps[i][j].map_=56;//可能是空气 
            else
                maps[i][j].map_=104;//可能是草方块 
        }
    }
    
    for(ul i = 5;i<=5;i++)
        for(ul j = 1;j<=maps_x;j++)
            maps[i][j].map_=104;//加一层草方块 
        
    for(ul i = 6;i<=6;i++)
        for(ul j = 1;j<=maps_x;j++)
            maps[i][j].map_=106;//加一层泥土 
    
    for(ul i = 7;i<=7;i++){
        for(ul j = 1;j<=maps_x;j++){
            int ddd = randNext(1,4);
            if(ddd==1)
                maps[i][j].map_=53;//可能是石头 
            else
                maps[i][j].map_=106;//可能是泥土 
        }
    }
    
    for(ul i = 8;i<=8;i++)
        for(ul j = 1;j<=maps_x;j++)
            maps[i][j].map_=53;//加一层石头 

    for(ul i = 9;i<=20;i++)
        for(ul j = 1;j<=maps_x;j++)
            maps[i][j].map_=randNext(0,99);
    
    for(ul i = 21;i<=21;i++)
            for(ul j = 1;j<=maps_x;j++)
                maps[i][j].map_=110;//加一层石头 
    //0-54石头,8灰,55-95空气,双空格, 96-99矿物,1蓝色,总体没确定,100-104草方块,2,105-109泥土,11,110基岩0,2191边框36。
    maps_y=22;
    for(int i = 0;i<=maps_y;i++){
        for(int j = 0;j<=maps_x+1;j++){
            if(maps[i][j].map_==2191)
                COLOR_PRINT(15);//边框 
            if(maps[i][j].map_>=0&&maps[i][j].map_<=54)
                COLOR_PRINT(8); 
            if(maps[i][j].map_>=55&&maps[i][j].map_<=95)
                cout<<"  ";
            if(maps[i][j].map_>=96&&maps[i][j].map_<=103)
                COLOR_PRINT(1);
            if(maps[i][j].map_>=104&&maps[i][j].map_<=104)
                COLOR_PRINT(2);
            if(maps[i][j].map_>=105&&maps[i][j].map_<=109)
                COLOR_PRINT(6);
            if(maps[i][j].map_==110)
                COLOR_PRINT(0);    
        }cout<<endl;
    }
}    
int main(){
cin>>maps_x;
seed_q();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值