话不多说,直接上代码,输入一个整数就行(有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();
}