#include <algorithm>
#include <windows.h>
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <math.h>
#include <time.h>
#pragma GCC optimize(2)
using namespace std;
const int down = 21, can_in_num = 6, up = 21, item_num = 13, four_compose_num = 7, nine_compose_num = 19, max_int = 2147483000;
int mp[300][300], tree[300], mode = 2, can_in[can_in_num] = {0, 5, 6, 7, 8, 12};
int mp_x, player_x, player_y;
double life = 20;
char t;
CONSOLE_FONT_INFO consoleCurrentFont;
int four_bag_compose[four_compose_num][7] = {
{0, 7, -1, -1, -1, 10, 4},
{0, -1, 7, -1, -1, 10, 4},
{0, -1, -1, 7, -1, 10, 4},
{0, -1, -1, -1, 7, 10, 4},
{0, 10, 10, -1, -1, 11, 4},
{0, -1, -1, 10, 10, 11, 4},
{0, 10, 10, 10, 10, 12, 1}
};
int nine_bag_compose[nine_compose_num][12] = {
{0, 7, -1, -1, -1, -1, -1, -1, -1, -1, 10, 4},
{0, -1, 7, -1, -1, -1, -1, -1, -1, -1, 10, 4},
{0, -1, -1, 7, -1, -1, -1, -1, -1, -1, 10, 4},
{0, -1, -1, -1, 7, -1, -1, -1, -1, -1, 10, 4},
{0, -1, -1, -1, -1, 7, -1, -1, -1, -1, 10, 4},
{0, -1, -1, -1, -1, -1, 7, -1, -1, -1, 10, 4},
{0, -1, -1, -1, -1, -1, -1, 7, -1, -1, 10, 4},
{0, -1, -1, -1, -1, -1, -1, -1, 7, -1, 10, 4},
{0, -1, -1, -1, -1, -1, -1, -1, -1, 7, 10, 4},
{0, 10, 10, -1, -1, -1, -1, -1, -1, -1, 11, 4},
{0, -1, 10, 10, -1, -1, -1, -1, -1, -1, 11, 4},
{0, -1, -1, -1, 10, 10, -1, -1, -1, -1, 11, 4},
{0, -1, -1, -1, -1, 10, 10, -1, -1, -1, 11, 4},
{0, -1, -1, -1, -1, -1, -1, 10, 10, -1, 11, 4},
{0, -1, -1, -1, -1, -1, -1, -1, 10, 10, 11, 4},
{0, 10, 10, -1, 10, 10, -1, -1, -1, -1, 12, 1},
{0, -1, 10, 10, -1, 10, 10, -1, -1, -1, 12, 1},
{0, -1, -1, -1, 10, 10, -1, 10, 10, -1, 12, 1},
{0, -1, -1, -1, -1, 10, 10, -1, 10, 10, 12, 1},
};
string mode_name[3] = {"", "1(旁观者模式)", "2(生存模式)"};
string item[item_num] = {
"\033[48;2;0;255;255m ",//空气 air
"\033[48;2;188;188;188m ",//石头 stone
"\033[48;2;226;192;170m ",//铁矿 iron_ore
"\033[48;2;95;0;0m ",//泥土 dirt
"\033[48;2;196;255;14m ",//草方块 grass
"\033[38;2;255;0;0m\033[48;2;0;255;255m* \033[0m",//玫瑰 rose
"\033[38;2;27;150;51m\033[48;2;0;255;255mm \033[0m",//矮草丛 short_grass
"\033[48;2;135;135;0m ",//原木 wood
"\033[48;2;14;209;69m ",//树叶 leaf
"\033[48;2;252;238;75m ",//金矿 gold_ore
"\033[48;2;192;160;64m ",//木板 plank
"此物品无法放置",//木棍 stick
"\033[48;2;181;147;95m "//工作台 crafting_table
};
string h_item[item_num] = {
"\033[38;2;255;225;200m\033[48;2;0;255;255m()\033[0m",//空气 air
"\033[38;2;255;225;200m\033[48;2;188;188;188m()\033[0m",//石头 stone
"\033[38;2;255;225;200m\033[48;2;226;192;170m()\033[0m",//铁矿 iron_ore
"\033[38;2;255;225;200m\033[48;2;95;0;0m()\033[0m",//泥土 dirt
"\033[38;2;255;225;200m\033[48;2;196;255;14m()\033[0m",//草方块 grass
"\033[38;2;255;225;200m\033[48;2;0;255;255m()\033[0m",//玫瑰 rose
"\033[38;2;255;225;200m\033[48;2;0;255;255m()\033[0m",//矮草丛 short_grass
"\033[38;2;255;225;200m\033[48;2;135;135;0m()\033[0m",//原木 wood
"\033[38;2;255;225;200m\033[48;2;14;209;69m()\033[0m",//树叶 leaf
"\033[38;2;255;225;200m\033[48;2;252;238;75m()\033[0m",//金矿 gold_ore
"\033[38;2;255;225;200m\033[48;2;192;160;64m()\033[0m",//木板 plank
"此物品无法放置",//木棍 stick
"\033[38;2;255;225;200m\033[48;2;181;147;95m()\033[0m"//工作台 crafting_table
};
string b_item[item_num] = {
"\033[38;2;255;0;0m\033[48;2;0;255;255m∏\033[0m",//空气 air
"\033[38;2;255;0;0m\033[48;2;188;188;188m∏\033[0m",//石头 stone
"\033[38;2;255;0;0m\033[48;2;226;192;170m∏\033[0m",//铁矿 iron_ore
"\033[38;2;255;0;0m\033[48;2;95;0;0m∏\033[0m",//泥土 dirt
"\033[38;2;255;0;0m\033[48;2;196;255;14m∏\033[0m",//草方块 grass
"\033[38;2;255;0;0m\033[48;2;0;255;255m∏\033[0m",//玫瑰 rose
"\033[38;2;255;0;0m\033[48;2;0;255;255m∏\033[0m",//矮草丛 short_grass
"\033[38;2;255;0;0m\033[48;2;135;135;0m∏\033[0m",//原木 wood
"\033[38;2;255;0;0m\033[48;2;14;209;69m∏\033[0m",//树叶 leaf
"\033[38;2;255;0;0m\033[48;2;252;238;75m∏\033[0m",//金矿 gold_ore
"\033[38;2;255;0;0m\033[48;2;192;160;64m∏\033[0m",//木板 plank
"此物品无法放置",//木棍 stick
"\033[38;2;255;0;200m\033[48;2;181;147;95m∏\033[0m"//工作台 crafting_table
};
string item_name[item_num] = {"空气", "圆石", "铁矿", "泥土", "草方块", "玫瑰", "矮草丛", "原木", "树叶", "金矿", "木板", "木棍", "工作台"};
string item_English_name[item_num] = {"air", "cobblestone", "iron_ore", "dirt", "grass", "rose", "short_grass", "wood", "leaf", "gold_ore", "plank", "stick", "crafting_table"};
string fire[14] = {
" 1 1 ",
" 21 1 124 ",
" 2 2 2 4 ",
" 134 31 31 ",
" 234 2 32 ",
" 3 4 124 34 ",
"1324 324 231 ",
"2 14 1 34 1324",
"3 4 2314 34",
" 2 2 44 2 34",
"1 34 3 4 3 14",
" 4 3 3 4 ",
"2 24 2 4 2 2 ",
" 444 444 444",
};
long long int seed, old_seed;
const long long int long_long_int_max = 9223372036854775000;
struct player_bag
{
int id;
string name, English_name;
int amount;
}bag[37], player_four_bag[5], player_nine_bag[10];
int randnum(int a, int b, int rand_seed)
{
int n1 = max(a, b);
int n2 = min(a, b);
srand(rand_seed);
return rand() % (n1 - n2 + 1) + n2;
}
void mineral(int num, int item_num, int x, int y)
{
int generate = 2;
if (item_num == 2)
{
generate = 3;
}
mp[x][y] = item_num;
int j = 1;
while (j <= num)
{
int g_long = generate * 2 + 1;
int randd = randnum(0, g_long * g_long - 1, seed * 109 + 15028461);
if (mp[randd / g_long + x - generate][randd % g_long + y - generate] != item_num && randd / g_long + x - generate > 0)
{
int wsad[4] = {
mp[randd / g_long + x - generate - 1][randd % g_long + y - generate],
mp[randd / g_long + x - generate + 1][randd % g_long + y - generate],
mp[randd / g_long + x - generate][randd % g_long + y - generate - 1],
mp[randd / g_long + x - generate][randd % g_long + y - generate + 1]
};
if (wsad[0] == item_num || wsad[1] == item_num || wsad[2] == item_num || wsad[3] == item_num)
{
j++;
if (mp[randd / g_long + x - generate][randd % g_long + y - generate] == 0 || mp[randd / g_long + x - generate][randd % g_long + y - generate] == 1)
{
mp[randd / g_long + x - generate][randd % g_long + y - generate] = item_num;
}
}
else
{
seed++;
}
}
else
{
seed++;
}
}
}
void draw_tree(int tree_h, int leaf_h, int leaf_long, int x, int y)
{
int h = tree_h + leaf_h;
for (int i = leaf_h; i < h; i++)
{
for (int j = h / -2; j <= h / 2; j++)
{
if (x + j > 0 && mp[x + j][y + i] != 4)
{
mp[x + j][y + i] = 8;
}
}
}
for (int i = 0; i < leaf_long; i++)
{
mp[x][y + i] = 7;
}
mp[x + h / 2][y + h - 1] = 0;
if (x + h / -2 > 0)
{
mp[x + h / -2][y + h - 1] = 0;
}
}
void g_world()
{
srand(seed);
int x, y, sea_level_down;
x = 0;
y = 0;
sea_level_down = down;
for (int i = 0; i < mp_x; i++)
{
y = 0;
sea_level_down = rand() % 3 - 1 + sea_level_down;
for (int j = 0; j < sea_level_down - 3; j++)
{
if (randnum(1, 75, seed * 402 + 458152154) == 57)
{
mineral(20, 2, x, y);
}
else if (randnum(1, 150, seed * 453 + 7960604) == 48)
{
mineral(8, 9, x, y);
}
else
{
mp[x][y] = 1;
}
y++;
seed++;
}
for (int j = 0; j < 2; j++)
{
mp[x][y] = 3;
y++;
}
mp[x][y] = 4;
if ((int)(mp_x / 2.0) == x)
{
player_x = x;
player_y = y;
}
if (randnum(1, 4, seed) > 3)
{
y++;
if (mp[x][y] == 0)
{
mp[x][y] = 5;
}
}
else if (randnum(1, 4, seed) > 2)
{
y++;
if (mp[x][y] == 0)
{
mp[x][y] = 6;
}
}
else if (randnum(1, 10, seed) > 7)
{
if (tree[x - 1] == 0 && tree[x - 2] == 0 && tree[x - 3] == 0 && tree[x - 4] == 0 && tree[x - 5] == 0 && tree[x - 6] == 0 && tree[x - 7] == 0)
{
y++;
if (randnum(1, 5, seed * 872 + 570151509) > 2)
{
draw_tree(5, 2, 5, x, y);
}
else
{
draw_tree(4, 1, 3, x, y);
}
tree[x] = 1;
}
}
x++;
seed++;
}
}
void ncout(string text, bool end = 1, int time = 50)
{
for (int i = 0; i < text.length(); i++)
{
cout << text[i];
Sleep(time);
}
if (end == 1)
{
cout << endl;
Sleep(200);
}
}
void clear()
{
system("cls");
}
int check_num(int n, int m)
{
if (n == m)
{
return 1;
}
else if (n > m)
{
cout << "\033[31mError:用户输入的参数过多(" << n - 1 << ">" << m - 1 << ")\033[0m" << endl;
Sleep(1000);
return 0;
}
else
{
cout << "\033[31mError:用户输入的参数过少(" << n - 1 << "<" << m - 1 << ")\033[0m" << endl;
Sleep(1000);
return 0;
}
}
int string_num(string text, bool out = 1)
{
int num = 0;
for (int i = 0; i < text.size(); i++)
{
if (text[i] <= '9' && text[i] >= '0')
{
num = num + ((int)text[i] - 48) * pow(10, text.size() - i - 1);
}
else
{
if (out == 1)
{
cout << "\033[31mError:参数类型错误(参数为string类型或者为负数)\033[0m" << endl;
Sleep(1000);
}
return -1;
}
}
return num;
}
void bag_add(int id, int num)
{
for (int i = 1; i <= 36; i++)
{
if (bag[i].id == id)
{
bag[i].amount = bag[i].amount + num;
return ;
}
if (bag[i].id == -1)
{
bag[i].id = id;
bag[i].name = item_name[id];
bag[i].English_name = item_English_name[id];
bag[i].amount = num;
return ;
}
}
}
void dig
2D沙盒世界
最新推荐文章于 2024-11-06 23:10:00 发布
这个博客展示了如何使用C++编程创建一个2D沙盒世界,包括不同类型的地形、物品和交互功能。玩家可以探索环境,通过键盘控制移动,并与物品进行互动,如捡起和放置。代码中定义了各种物品、地形和游戏元素,同时有对物品栏系统的处理。
摘要由CSDN通过智能技术生成