#include<iostream>
#include<conio.h>
#include<string>
#include<map>
#include<cmath>
#include<windows.h>
#include<time.h>
#define Sleep_time 0.03
#define KEY_DOWN(VK_NONAME)((GetAsyncKeyState(VK_NONAME)& 0x8000)?1:0)
using namespace std;
int fallspeed;
int food=20;
bool fy=0;
int jumpspeed=-3;
int gravity=1;
int y=400,x=500;
int restartposy,restartposx,face,health=1000,lasthealth=1000,breath=100,hungry=1000,dienum;
bool attack,defense,hurt,mode;
struct TNT {
int y;
int x;
int time;//爆炸延时
int issave;//是否有伤害
};
struct BLOCK {
int color;
string ch;
string type;
};
struct MOB {
int fallspeed;
int health;
bool hurt;
int y;
int x;
int attack;
string shap;
bool isenemy;//是否敌对
int color;
string name;
};
struct ARROW {
string shap;
double y;
double x;
double fallspeed;
double plusx;
};
TNT tnt[20];
string die;
ARROW arrow[100];
MOB mobs[50]={
{0,1000/*血量*/,0/*是否受伤*/,0/*坐标y*/,0/*坐标x*/,100,"危",true,7,"危"},
{0,10,0,0,0,10,"[]",true,7,"[]"},
};
MOB mob[100]={
{0,10000,0,500,500,200,"[]",true,7,"[]"}
};
void initfd(){
for(int i=0;i<100;i++){
if(mob[i].shap==""||mob[i].shap!= "FD")continue;
mob[i].x=rand()% 999;
}
}
BLOCK block[50]={
{0," ","air"},//空气 1
{14,"██","block"},//土块 2
{14,"██","block"},//石头 3
{2,"██","block"},//草方块 4
{15,"██","block"},//雪块 5
{4,"██","block"},//岩浆块 6
{14,"▓▓","fallblock"},//沙块 7
{8,"II","fallblock"},//铁砧 8
{9,"██","water"},//水 9
{9,"▇▇","water"},//水 10
{9,"▆▆","water"},//水 11
{9,"▅▅","water"},//水 12
{9,"▄▄","water"},//水 13
{9,"▃▃","water"},//水 14
{9,"▂▂","water"},//水 15
{9,"▁▁","water"},//水 16
{12,"██","lava"},//岩浆 17
{12,"▇▇","lava"},//岩浆 18
{12,"▆▆","lava"},//岩浆 19
{12,"▅▅","lava"},//岩浆 20
{12,"▄▄","lava"},//岩浆 21
{12,"▃▃","lava"},//岩浆 22
{12,"▂▂","lava"},//岩浆 23
{12,"▁▁","lava"},//岩浆 24
{12,"危","background"},//危 25
{13,"██","background"},//木头 26
{4,"▓▓","background"},//树叶 27
{15,"▓▓","background"},//带雪树叶 28
{15,"▅▅","bomb"},//TNT爆炸气浪 29
{12,"Ⅲ","TNT"},//TNT 30
{7,"Ⅲ","TNT"},//TNT2 31
{6,"∷","ladder"},//梯子 32
{16,"▓▓","block"},//铁 33
{144,"▓▓","block"},//钻 34
{25,"▓▓","block"},//煤 35
};
int board[1005][1005];
int setboard[1005][1005];
map<int,int>bag;
int clear_buffer(){
while(kbhit()){
if(getch()!=EOF);
for(int i=1;i<=256;i++){
if(GetAsyncKeyState(i));
}
}
return 0;
}
void color(int a){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
/* 1 深蓝色
2 深绿色
3 深青色
4 深红色
5 深粉色
i 黄色
7 深白色
8 灰色
9 浅蓝色
10 浅绿色
11 浅青色
12 浅红色
13 浅粉色
14 浅黄色
15 浅白色
背景
1~15 黑色
16~31 深蓝色
32~47 深绿色
48~63 深青色
64~79 深红色
'S'~95 深粉色
96~111 深黄色
112~127 深白色
128~143 灰色
144~159 浅蓝色
160~1'A' 浅绿色
176~191 浅青色
192~207 浅红色
208~223 浅粉色
224~239 浅黄色
240~255 浅白色
*/
}
void __init(){//++下,--上
//煤:440~344
int kz,_31;
for(int i=0;i<35;i++){
kz=999-rand()%96-344;
for(int i=0;i<20;i++){
_31=rand()%999+1;
if(setboard[kz][_31]==2)setboard[kz][_31]=35;
}
}
kz=0;
//铁:506~474
for(int i=0;i<15;i++){
kz=999-rand()%32-474;
for(int i=0;i<15;i++){
_31=rand()%999+1;
if(setboard[kz][_31]==2)setboard[kz][_31]=34;
}
}
//钻:474~442
for(int i=0;i<15;i++){
kz=999-rand()%32-442;
for(int i=0;i<7;i++){
_31=rand()%999+1;
if(setboard[kz][_31]==2)setboard[kz][_31]=33;
}
}
}
int init(){ //听说有人要我增加地图生成的注释,所以我就写了。
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
board[i][j]=0;//初始化地图 (我们的y是倒着来的)
}
}
double lasty=rand()% 101+400;//lasty代表上一个我们选择的点的高度。
for(int i=5;i<1000;i+=5){ //i每次加5,每隔5个点连一条线
double y=rand()% 21-10+lasty;//y代表这个点我们选择的高度,为了不出现太陡峭的山,我们只允许这个高度在刚才的点的高低10格内。
y=min(450.0,y);//这是最小高度,防止整个地图都在水里。
double high=lasty;//这个high是用来统计当前高度的,用double可以更加精确。
int dirt=rand()% 5+2;//dirt代表这一列上泥土高度。
for(int j=i-5;j<i;j++){
high+=(y-lasty)/ 5;//high每次增加差距的1/5。
for(int k=999;k >=(int)high;k--){
if(k==(int)high){ //如果是最高点
setboard[k][j]=3;//就用草地
if(high<=350){ //如果high比较高
setboard[k][j]=4;//就用雪地
}
} else if(k-dirt <=(int)high){ //泥土
setboard[k][j]=1;
} else {
setboard[k][j]=2;//石头
}
}
}
lasty=y;//赋值
}
//再来一边,填满最后几格
int dirt=rand()% 5+2;
double high=lasty;
for(int j=995;j<999;j++){
for(int k=999;k >=(int)high;k--){
if(k==(int)high){
setboard[k][j]=3;
if(high<=350){
setboard[k][j]=4;
}
} else if(k-dirt <=(int)high){
setboard[k][j]=1;
} else {
setboard[k][j]=2;
}
}
}
//填满水,这里默认把海平面高度设为410。
for(int i=0;i<1000;i++){
for(int j=600;j>=410;j--){
if(setboard[j][i]==0){
setboard[j][i]=8;
}
}
}
//沙子
for(int i=0;i<1000;i++){
bool a=0;
for(int j=999;j>=0;j--){
if(a&&setboard[j][i]!= 0 &&setboard[j][i]!= 8){
setboard[j][i]=6;
continue;
}
if(setboard[j][i]==8){
continue;
}
if(setboard[j][i+3]==8){
a=true;
setboard[j][i]=6;
}
if(setboard[j][i+2]==8){
a=true;
setboard[j][i]=6;
}
if(setboard[j][i+1]==8){
a=true;
setboard[j][i]=6;
}
if(setboard[j][i-1]==8){
a=true;
setboard[j][i]=6;
}
if(setboard[j][i-2]==8){
a=true;
setboard[j][i]=6;
}
if(setboard[j][i-3]==8){
a=true;
setboard[j][i]=6;
}
if(setboard[j-2][i]==8){
a=true;
setboard[j][i]=6;
}
if(setboard[j-1][i]==8){
a=true;
setboard[j][i]=6;
}
if(setboard[j-3][i]==8){
a=true;
setboard[j][i]=6;
}
if(setboard[j-4][i]==8){
a=true;
setboard[j][i]=6;
}
}
}
//树
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
if(setboard[j][i]==0&&block[setboard[j+1][i]].type=="block"){
if(rand()% 10==1){
setboard[j][i]=25;
setboard[j-1][i]=25;
setboard[j-2][i]=25;
setboard[j-3][i]=25;
setboard[j-3][i+1]=26;
setboard[j-3][i-1]=26;
setboard[j-4][i+2]=26;
setboard[j-4][i+1]=26;
setboard[j-4][i]=26;
setboard[j-4][i-1]=26;
setboard[j-4][i-2]=26;
setboard[j-5][i+2]=26;
setboard[j-5][i+1]=26;
setboard[j-5][i]=26;
setboard[j-5][i-1]=26;
setboard[j-5][i-2]=26;
setboard[j-6][i+1]=26;
setboard[j-6][i]=26;
setboard[j-6][i-1]=26;
if(j<=350){
setboard[j-3][i+1]=27;
setboard[j-3][i-1]=27;
setboard[j-4][i+2]=27;
setboard[j-4][i+1]=27;
setboard[j-4][i]=27;
setboard[j-4][i-1]=27;
setboard[j-4][i-2]=27;
setboard[j-5][i+2]=27;
setboard[j-5][i+1]=27;
setboard[j-5][i]=27;
setboard[j-5][i-1]=27;
setboard[j-5][i-2]=27;
setboard[j-6][i+1]=27;
setboard[j-6][i]=27;
setboard[j-6][i-1]=27;
}
}
}
}
}
//地洞
for(int j=999;j>=700;j--){
if(rand()% 20==1){
setboard[j-3][2]=0;
setboard[j-2][2]=0;
setboard[j-2][3]=0;
setboard[j-1][2]=0;
setboard[j-1][3]=0;
setboard[j-1][4]=0;
setboard[j][2]=0;
setboard[j][3]=0;
setboard[j][4]=0;
setboard[j][5]=0;
setboard[j+1][2]=0;
setboard[j+1][3]=0;
setboard[j+1][4]=0;
setboard[j+2][2]=0;
setboard[j+2][3]=0;
setboard[j+3][2]=0;
}
}
//在这里加上矿物生成
__init();
for(int i=3;i<997;i++){
for(int j=996;j>=500;j--){
if(block[setboard[j+3][i]].type=="block"&&block[setboard[j-3][i]].type=="block"&&setboard[j][i]==0&&setboard[j+1][i]==0&&setboard[j+2][i]==0&&setboard[j-1][i]==0 &&setboard[j-2][i]==0){
j+=rand()% 5-2;
j=max(3,j);
j=min(996,j);
if(rand()% 500<=499){
setboard[j-3][i]=0;
setboard[j-2][i-1]=0;
setboard[j-2][i]=0;
setboard[j-2][i+1]=0;
setboard[j-1][i-2]=0;
setboard[j-1][i-1]=0;
setboard[j-1][i]=0;
setboard[j-1][i+1]=0;
setboard[j-1][i+2]=0;
setboard[j][i-3]=0;
setboard[j][i-2]=0;
setboard[j][i-1]=0;
setboard[j][i]=0;
setboard[j][i+1]=0;
setboard[j][i+2]=0;
setboard[j][i+3]=0;
setboard[j+1][i-2]=0;
setboard[j+1][i-1]=0;
setboard[j+1][i]=0;
setboard[j+1][i+1]=0;
setboard[j+1][i+2]=0;
setboard[j+2][i-1]=0;
setboard[j+2][i]=0;
setboard[j+2][i+1]=0;
setboard[j+3][i]=0;
if(rand()% 20==1){
for(int k=0;k<100;k++){
if(mob[k].shap==""){
mob[k]={0,1000,0,0,0,100,"SS",true,7,"僵尸"};
mob[k].x=i;
mob[k].y=j;
break;
}
}
}
}
} else if(block[setboard[j+3][i]].type=="block"&&block[setboard[j+2][i]].type=="block"&&block[setboard[j+1][i]].type=="block"&&block[setboard[j][i]].type=="block"&&block[setboard[j-1][i]].type=="block"&&block[setboard[j-2][i]].type=="block"&&block[setboard[j-3][i]].type=="block"){
if(rand()% 500==1){
setboard[j-3][i]=0;
setboard[j-2][i-1]=0;
setboard[j-2][i]=0;
setboard[j-2][i+1]=0;
setboard[j-1][i-2]=0;
setboard[j-1][i-1]=0;
setboard[j-1][i]=0;
setboard[j-1][i+1]=0;
setboard[j-1][i+2]=0;
setboard[j][i-3]=0;
setboard[j][i-2]=0;
setboard[j][i-1]=0;
setboard[j][i]=0;
setboard[j][i+1]=0;
setboard[j][i+2]=0;
setboard[j][i+3]=0;
setboard[j+1][i-2]=0;
setboard[j+1][i-1]=0;
setboard[j+1][i]=0;
setboard[j+1][i+1]=0;
setboard[j+1][i+2]=0;
setboard[j+2][i-1]=0;
setboard[j+2][i]=0;
setboard[j+2][i+1]=0;
setboard[j+3][i]=0;
}
}
}
}
//出生点
bool a=false;
for(int i=400;i<1000;i++){
for(int j=0;j<1000;j++){
if(setboard[j][i]==0&&block[setboard[j+1][i]].type=="block" &&(setboard[j+1][i]==3||setboard[j+1][i]==4)){
restartposy=j;
restartposx=i;
y=j;
x=i;
a=true;
break;
}
}
if(a){
break;
}
}
return 0;
}
int Arrowmove(){
for(int i=0;i<100;i++){
if(arrow[i].shap==""){
continue;
}
arrow[i].x+=(int)arrow[i].plusx;
arrow[i].plusx-=0.1;
for(int j=(int)arrow[j].y+1;j <=(int)arrow[j].y +(int)arrow[j].fallspeed;j++){
if(block[board[j][(int)arrow[j].x]].type=="block"||block[board[j][(int)arrow[j].x]].type=="fallblock"){
arrow[i].fallspeed=0;
return 0;
}
}
arrow[i].y+=arrow[i].fallspeed;
arrow[i].fallspeed+=1;
if(arrow[i].y > 999){
arrow[i].shap="";
}
if(block[board[(int)arrow[i].y+1][(int)arrow[i].x]].type=="block"||block[board[(int)arrow[i].y+1][(int)arrow[i].x]].type=="fallblock"){
arrow[i].shap="";
}
}
return 0;
}
int mobmove(){//这是生物的AI
for(int j=0;j<100;j++){
if(mob[j].shap==""){
continue;
}
mob[j].hurt=false;
mob[j].color=7;
if(mob[j].health<=0||mob[j].y > 999){
if(mob[j].name=="[]"){
system("Cls");
cout<<"YOU WIN!";
system("Minecraft-1.exe");
} else {
mob[j].shap="";
mob[j].color=7;
continue;
}
}
if(block[board[mob[j].y][mob[j].x]].type=="lava"){
mob[j].health-=200;
mob[j].hurt=true;
} else if((board[mob[j].y+1][mob[j].x]==5)||((mob[j].y==y||mob[j].y==y-1)&&(mob[j].x==x+1||mob[j].x==x||mob[j].x==x-1)&& KEY_DOWN(' '))){
mob[j].health-=100;
mob[j].hurt=true;
}
if(mob[j].y==y&&mob[j].x==x&&mob[j].isenemy&&fy==0){
health-=mob[j].attack;
hurt=true;
die="被 "+mob[j].name+" 杀死了";
}
for(int i=mob[j].y-1;i>=mob[j].y+mob[j].fallspeed;i--){
if(block[board[i-1][mob[j].x]].type=="block"){
mob[j].fallspeed=0-mob[j].y+i+1;
return 0;
}
}
for(int i=mob[j].y+1;i<=mob[j].y+mob[j].fallspeed;i++){
if(block[board[i][mob[j].x]].type=="block"||block[board[i][mob[j].x]].type=="fallblock"){
if(mob[j].fallspeed>=5&&block[board[i-1][mob[j].x]].type=="water"){
mob[j].health-=50 *(mob[j].fallspeed-4);
mob[j].hurt=true;
}
mob[j].fallspeed=0;
return 0;
}
}
mob[j].y+=mob[j].fallspeed;
mob[j].fallspeed+=gravity;
if(mob[j].isenemy){
if(mob[j].y > y &&(block[board[mob[j].y+1][mob[j].x]].type=="block"||block[board[mob[j].y+1][mob[j].x]].type=="fallblock")){
if(mob[j].y > y+50){
mob[j].fallspeed=-7;
}
mob[j].fallspeed=-3;
}
if(mob[j].x<x){
if(block[board[mob[j].y][mob[j].x+1]].type!= "block"||block[board[mob[j].y][mob[j].x+1]].type!= "fallblock"){
mob[j].x++;
} else if(block[board[mob[j].y+1][mob[j].x]].type=="block"||block[board[mob[j].y+1][mob[j].x]].type!= "fallblock"){
mob[j].fallspeed=-3;
}
} else if(mob[j].x > x){
if(block[board[mob[j].y][mob[j].x-1]].type!= "block"||block[board[mob[j].y][mob[j].x-1]].type!= "fallblock"){
mob[j].x--;
} else if(block[board[mob[j].y+1][mob[j].x]].type=="block"||block[board[mob[j].y+1][mob[j].x]].type!= "fallblock"){
mob[j].fallspeed=-3;
}
}
} else {
if(rand()% 3==0){
if(block[board[mob[j].y][mob[j].x+1]].type!= "block"||block[board[mob[j].y][mob[j].x+1]].type!= "fallblock"){
mob[j].x++;
} else if(block[board[mob[j].y+1][mob[j].x]].type=="block"||block[board[mob[j].y+1][mob[j].x]].type!= "fallblock"){
mob[j].fallspeed=-3;
}
} else if(rand()% 3==1){
if(block[board[mob[j].y][mob[j].x-1]].type!= "block"||block[board[mob[j].y][mob[j].x-1]].type!= "fallblock"){
mob[j].x--;
} else if(block[board[mob[j].y+1][mob[j].x]].type=="block"||block[board[mob[j].y+1][mob[j].x]].type!= "fallblock"){
mob[j].fallspeed=-3;
}
}
}
if(mob[j].hurt){
mob[j].color=12;
}
}
return 0;
}
int print(){
if(!mode){
color(8);
printf("HP:");
color(12);
cout<<health<<endl;
for(int i=0;i<health;i+=100){
printf("◆");
}
color(7);
for(int i=health;i<lasthealth;i+=100){
printf("◇");
}
printf("\n");
color(8);
printf("AIR:");
color(11);
printf("%d\n",breath);
for(int i=0;i<breath;i+=10){
printf("●");
}
for(int i=breath;i<91;i+=10){
printf("○");
}
printf("\n");
color(8);
cout<<"HUNGRY:";
color(14);
cout<<hungry<<endl;
for(int i=0;i<hungry;i+=100){
cout<<"§";
}
cout<<endl;
}
color(8);
cout<<"DIENUM:";
color(4);
cout<<dienum<<endl;
for(int i=y-6;i<=y+6;i++){
for(int j=x-6;j<=x+6;j++){
bool ismob=false;
for(int s=0;s<100;s++){
if(mob[s].shap==""){
continue;
} else if(mob[s].x==j&&mob[s].y==i){
color(mob[s].color);
cout<<mob[s].shap;
ismob=true;
break;
}
}
if(ismob){
continue;
}
for(int s=0;s<100;s++){
if(arrow[s].shap==""){
continue;
} else if((int)arrow[s].x==j &&(int)arrow[s].y==i){
color(7);
cout<<arrow[s].shap;
ismob=true;
break;
}
}
if(ismob){
continue;
} else if(i==y&&j==x){
if(KEY_DOWN(VK_DOWN)){
color(14);
if(hurt){
color(12);
}
cout<<"()";
} else {
color(9);
if(hurt){
color(12);
}
cout<<"∏";
}
} else if(i==y-1&&j==x){
if(!KEY_DOWN(VK_DOWN)){
color(14);
if(hurt){
color(12);
}
cout<<"()";
} else {
color(block[board[i][j]].color);
cout<<block[board[i][j]].ch;
}
} else {
if(i<0||i>=1000||j<0||j>=1000){
cout<<" ";
continue;
}
color(block[board[i][j]].color);
cout<<block[board[i][j]].ch;
}
}
cout<<endl;
}
color(7);
cout<<"Y:";
color(6);
cout<<1000-y<<endl;
color(7);
cout<<"X:";
color(6);
cout<<x<<endl;
return 0;
}
int move(){
if(board[y][x]==31){
y+=fallspeed;
return 0;
}
if(block[board[y][x]].type=="water"){
if(fallspeed > 1){
fallspeed=1;
}
} else {
for(int i=y-1;i>=y+fallspeed;i--){
if(block[board[i-1][x]].type=="block"||block[board[i-1][x]].type=="fallblock"){
fallspeed=0-y+i+1;
return 0;
}
}
}
for(int i=y+1;i<=y+fallspeed;i++){
if(block[board[i][x]].type=="block"||block[board[i][x]].type=="fallblock"){
if(fallspeed>=5&&block[board[i-1][x]].type!= "water"){
health-=50 *(fallspeed-4);
if(fallspeed>=7){
die="落地过猛!";
} else {
die="从高处摔了下来!";
}
hurt=true;
}
fallspeed=0;
return 0;
}
}
y+=fallspeed;
fallspeed+=gravity;
return 0;
}
int bomb(){//这是tnt爆炸的核心函数
for(int i=0;i<20;i++){
if(tnt[i].time==0){
int atk=0;
if(abs(x-tnt[i].x)+ abs(y-tnt[i].y)==4){
atk=50;
fallspeed-=1;
x+=x-tnt[i].x;
}
if(abs(x-tnt[i].x)+ abs(y-tnt[i].y)==3){
atk=100;
fallspeed-=2;
x+=x-tnt[i].x;
}
if(abs(x-tnt[i].x)+ abs(y-tnt[i].y)==2){
atk=300;
fallspeed-=4;
x+=2 *(x-tnt[i].x);
}
if(abs(x-tnt[i].x)+ abs(y-tnt[i].y)==1){
atk=500;
fallspeed-=7;
x+=5 *(x-tnt[i].x);
}
if(abs(x-tnt[i].x)+ abs(y-tnt[i].y)==0){
atk=800;
fallspeed-=10;
}
tnt[i].time--;
if(!tnt[i].issave){
health-=atk;
}
die="被TNT炸死了";
if(atk > 0&&!tnt[i].issave){
hurt=true;
}
if(!tnt[i].issave){
for(int yy=tnt[i].y-3;yy<=tnt[i].y+3;yy++){
for(int xx=tnt[i].x-3;xx<=tnt[i].x+3;xx++){
if((int)(sqrt(abs(yy-tnt[i].y)* abs(yy-tnt[i].y)+ abs(xx-tnt[i].x)* abs(xx-tnt[i].x))+ 0.9999)==3){
setboard[yy][xx]=28;
}
if((int)(sqrt(abs(yy-tnt[i].y)* abs(yy-tnt[i].y)+ abs(xx-tnt[i].x)* abs(xx-tnt[i].x))+ 0.9999)< 3){
setboard[yy][xx]=0;
}
}
}
}
} else if(tnt[i].time==-1){
setboard[tnt[i].y][tnt[i].x]=0;
if(!tnt[i].issave){
for(int yy=tnt[i].y-3;yy<=tnt[i].y+3;yy++){
for(int xx=tnt[i].x-3;xx<=tnt[i].x+3;xx++){
if((int)(sqrt(abs(yy-tnt[i].y)* abs(yy-tnt[i].y)+ abs(xx-tnt[i].x)* abs(xx-tnt[i].x))+ 0.9999)<= 3){
setboard[yy][xx]=0;
}
}
}
}
tnt[i].time--;
} else if(tnt[i].time > 0){
tnt[i].time--;
if(tnt[i].time % 2==0){
setboard[tnt[i].y][tnt[i].x]=29;
} else {
setboard[tnt[i].y][tnt[i].x]=30;
}
}
}
return 0;
}
int check(){
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
if(block[board[i][j]].type=="water"&&board[i][j]!= 15){
if(board[i+1][j]==0){
setboard[i+1][j]=board[i][j];
setboard[i+1][j]=8;
} else if(block[board[i+1][j]].type=="lava"){
setboard[i+1][j]=2;
} else if(block[board[i+1][j]].type=="block"||block[board[i+1][j]].type=="fallblock"){
if(board[i][j+1]==0){
setboard[i][j+1]=board[i][j]+1;
} else if(block[board[i][j+1]].type=="lava"){
setboard[i][j+1]=2;
}
if(board[i][j-1]==0){
setboard[i][j-1]=board[i][j]+1;
} else if(block[board[i][j-1]].type=="lava"){
setboard[i][j-1]=2;
}
}
}
if(block[board[i][j]].type=="lava"&&board[i][j]!= 23){
if(board[i+1][j]==0){
setboard[i+1][j]=board[i][j];
setboard[i+1][j]=16;
} else if(block[board[i+1][j]].type=="water"){
setboard[i+1][j]=2;
} else if(block[board[i+1][j]].type=="block"||block[board[i+1][j]].type=="fallblock"){
if(board[i][j+1]==0){
setboard[i][j+1]=board[i][j]+1;
} else if(block[board[i][j+1]].type=="water"){
setboard[i][j+1]=2;
}
if(board[i][j-1]==0){
setboard[i][j-1]=board[i][j]+1;
} else if(block[board[i][j-1]].type=="water"){
setboard[i][j-1]=2;
}
}
}
if(block[board[i][j]].type=="fallblock"){
if(board[i+2][j]==0&&board[i+1][j]==0&&i+2<100){
setboard[i][j]=0;
setboard[i+2][j]=board[i][j];
if(board[i][j]==7&&j==x&&i+2==y){
health-=600;
hurt=true;
die="被压扁了";
}
} else if(board[i+1][j]==0&&i+1<100){
setboard[i][j]=0;
setboard[i+1][j]=board[i][j];
if(board[i][j]==7&&j==x&&i+1==y){
health-=600;
hurt=true;
die="被压扁了";
} else if(board[i][j]==7&&j==x&&i+2==y){
health-=600;
hurt=true;
die="被压扁了";
}
}
}
}
}
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
board[i][j]=setboard[i][j];
}
}
}
void putblock(int type,int toward){
if(toward==7){
setboard[y-1][x+1]=type;
}
if(toward==8){
setboard[y-1][x]=type;
}
if(toward==9){
setboard[y-1][x-1]=type;
}
if(toward==4){
setboard[y][x+1]=type;
}
if(toward==6){
setboard[y][x-1]=type;
}
if(toward==1){
setboard[y+1][x+1]=type;
}
if(toward==2){
setboard[y+1][x]=type;
}
if(toward==3){
setboard[y+1][x-1]=type;
}
}
void to_order(char order[],string str){
for(int i=0;i<str.length();i++){
order[i]=str[i];
}
return;
}
int main(){
system("title Minecraft_2D-主世界");
int tools[9]={32,16,3,4,5,6,7,8,9};
int now=0;
srand((int)time(0));
for(int i=0;i<20;i++){
tnt[i].time=-2;
}
initfd();
init();
while(1){
system("cls");
if(health>1500){
health=1500;
}
if(!mode){
move();
}
if(KEY_DOWN('G')&&setboard[y-2][x]==0){
setboard[y-2][x]=tools[now];
}
if(KEY_DOWN('V')&&setboard[y][x-1]==0){
setboard[y][x-1]=tools[now];
}
if(KEY_DOWN('B')){
setboard[y+1][x]=tools[now];
}
if(KEY_DOWN('N')&&setboard[y][x+1]==0){
setboard[y][x+1]=tools[now];
}
if(KEY_DOWN('H')&&setboard[y-1][x+1]==0){
setboard[y-1][x+1]=tools[now];
}
if(KEY_DOWN('F')&&setboard[y-1][x-1]==0){
setboard[y-1][x-1]=tools[now];
}
check();
bomb();
Arrowmove();
mobmove();
if(mode){
hurt=false;
}
print();
Sleep(Sleep_time);
hungry--;
hungry=max(hungry,0);
if(hungry==0){
die="被饿死了";
hurt=true;
health-=10;
}
if(mode){
health=1000;
}
if(health<=0){
Sleep(500);
system("cls");
color(12);
cout<<" GAME OVER "<<endl;
color(7);
cout<<" STEVE "<<die<<endl;
dienum++;
Sleep(2000);
x=restartposx;
y=restartposy;
health=1000;
hungry=1000;
breath=100;
fallspeed=0;
}
health+=(hungry+201)/ 300;
if(attack){
attack=0;
}
if(defense){
defense=0;
}
if(hurt){
hurt=false;
lasthealth=health;
}
if(block[board[y][x]].type=="water"){
fallspeed=1;
if(KEY_DOWN(VK_UP)){
fallspeed=-1;
}
}
if(block[board[y-1][x]].type=="water"){
die="被水淹死了!";
breath--;
} else {
breath++;
if(breath > 100){
breath=100;
}
}
if(board[y][x]==31){
fallspeed=0;
if(KEY_DOWN(VK_UP)){
fallspeed=-1;
}
if(KEY_DOWN(VK_DOWN)){
fallspeed=1;
}
}
if(block[board[y][x]].type=="lava"){//iron
if(block[board[y-1][x]].type=="lava"){
if(block[board[y-2][x]].type=="iron"
&&block[board[y-1][x-1]].type=="iron"
&&block[board[y-1][x+1]].type=="iron"
&&block[board[y][x-1]].type=="iron"
&&block[board[y][x+1]].type=="iron"
&&block[board[y+1][x]].type=="iron"
){
cout<<"你正在进入下界!";
cout<<"由于数组原因,作者不得不再次加载一个程序,不然你的电脑可能会boom!";
system("Minecraft-2.exe");
}
}
else if(block[board[y+1][x]].type=="lava"){
if(block[board[y-1][x]].type=="iron"
&&block[board[y+1][x-1]].type=="iron"
&&block[board[y+11][x+1]].type=="iron"
&&block[board[y][x-1]].type=="iron"
&&block[board[y][x+1]].type=="iron"
&&block[board[y+2][x]].type=="iron"
){
cout<<"你正在进入下界!";
cout<<"由于数组原因,作者不得不再次加载一个程序,不然你的电脑可能会boom!";
system("Minecraft-2.exe");
}
}
fallspeed=1;
if(KEY_DOWN(VK_UP)){
fallspeed=-1;
}
die="试图在岩浆里游泳!";
hurt=true;
health-=100;
}
if(KEY_DOWN(VK_UP)&&!KEY_DOWN(VK_DOWN)){
if(mode){
y--;
} else {
if(block[board[y][x]].type!= "water"&&board[y][x]!= 31){
if(block[board[y+1][x]].type=="block"||block[board[y+1][x]].type=="fallblock"){
fallspeed=jumpspeed;
}
}
}
}
if(KEY_DOWN(VK_LEFT)){
if((block[board[y][x-1]].type!= "block"&&block[board[y][x-1]].type!= "fallblock")|| mode){
if(KEY_DOWN(VK_DOWN)||(block[board[y-1][x-1]].type!= "block"&&block[board[y-1][x-1]].type!= "fallblock")|| mode){
x-=1;
}
}
face=-1;
}
if(KEY_DOWN(VK_RIGHT)){
if((block[board[y][x+1]].type!= "block"&&block[board[y][x+1]].type!= "fallblock")|| mode){
if(KEY_DOWN(VK_DOWN)||(block[board[y-1][x+1]].type!= "block" &&block[board[y-1][x+1]].type!= "fallblock")|| mode){
x+=1;
}
}
face=1;
}
if(KEY_DOWN(VK_DOWN)){
if(mode){
y++;
} else {
fallspeed+=1;
}
}
if(KEY_DOWN(' ')){
attack=true;
}
if(KEY_DOWN('R')){
fy+=1;
hungry-=20;
}
if(KEY_DOWN('G')&& 1000-hungry<=90){
food-=1;
hungry+=90;
}
if(KEY_DOWN('K')){
for(int i=0;i<100;i++){
if(mob[i].y==y&&mob[i].x==x&&mob[i].isenemy){
mob[i].health-=20;
}
}
}
if(KEY_DOWN('J')){
for(int i=0;i<100;i++){
if(mob[i].y==y-1&&mob[i].x==x&&mob[i].isenemy){
mob[i].health-=20;
}
}
}
if(KEY_DOWN('I')){
for(int i=0;i<100;i++){
if(mob[i].y==y&&mob[i].x==x+1&&mob[i].isenemy){
mob[i].health-=20;
}
}
}
if(KEY_DOWN('L')){
for(int i=0;i<100;i++){
if(mob[i].y==y+1&&mob[i].x==x&&mob[i].isenemy){
mob[i].health-=20;
}
}
}
if(KEY_DOWN(VK_F1)){
for(int i=0;i<35;i++){
switch(i){
case 1:
cout<<i<<":土块:"<<bag[i]<<"个 ";
break;
case 2:
cout<<i<<":石头:∞个";
break;
case 3:
cout<<i<<":草方块:"<<bag[i]<<"个";
break;
case 4:
cout<<i<<":雪块:"<<bag[i]<<"个";
break;
case 5:
cout<<i<<":岩浆块:"<<bag[i]<<"个";
break;
case 6:
cout<<i<<":沙块:∞个";
break;
case 7:
cout<<i<<":铁砧:∞个";
break;
case 8:
cout<<i<<":水:∞个";
break;
case 17:
cout<<i<<":岩浆:∞个";
break;
case 29:
cout<<i<<":TNT:∞个";
break;
case 30:
cout<<i<<":TNT2:∞个";
break;
case 31:
cout<<i<<":梯子:∞个";
break;
case 32:
cout<<i<<":铁:"<<bag[i]<<"个";
break;
case 33:
cout<<i<<":钻石:"<<bag[i]<<"个";
break;
case 34:
cout<<i<<":煤炭:"<<bag[i]<<"个";
break;
}
}
cout<<endl<<"你要\n1.丢弃某个东西 2.把某个东西放到物品栏中";
int kkkz,num;
cin>>kkkz;
if(kkkz==1){
cout<<"你丢弃的物品号码(对应号码如上)\n";
cin>>kkkz;
cout<<"丢弃个数\n";
cin>>num;
if(num>bag[kkkz]){
bag[kkkz]=0;
}
if(num<bag[kkkz]){
bag[kkkz]-num;
}
}
if(kkkz==2){
cout<<"要放的东西\n";
cin>>kkkz;
cout<<"第几个\n";
cin>>num;
swap(tools[num-1],kkkz);
}
system("cls");
}
if(KEY_DOWN('1'))now=0;
if(KEY_DOWN('2'))now=1;
if(KEY_DOWN('3'))now=2;
if(KEY_DOWN('4'))now=3;
if(KEY_DOWN('5'))now=4;
if(KEY_DOWN('6'))now=5;
if(KEY_DOWN('7'))now=6;
if(KEY_DOWN('8'))now=7;
if(KEY_DOWN('9'))now=8;
if(KEY_DOWN('C')){
hungry+=100;
hungry=min(hungry,1000);
}
if(KEY_DOWN('Z')){
for(int i=0;i<20;i++){
if(tnt[i].time==-2){
tnt[i]={y,x,10,0};
break;
}
}
}
if(KEY_DOWN('i')){
for(int i=0;i<20;i++){
if(tnt[i].time==-2){
tnt[i]={y,x,10,1};
break;
}
}
}
if(KEY_DOWN('[')){
for(int i=0;i<20;i++){
if(tnt[i].time==-2){
tnt[i]={y,x,10,2};
break;
}
}
}//看到了吗?
if(KEY_DOWN(']')){
for(int i=0;i<20;i++){
if(tnt[i].time==-2){
tnt[i]={y,x,10,3};
break;
}
}
}
if(KEY_DOWN('|')){
for(int i=0;i<20;i++){
if(tnt[i].time==-2){
tnt[i]={y,x,10,4};
break;
}
}
}
if(KEY_DOWN('O')){
for(int i=0;i<20;i++){
if(tnt[i].time==-2){
tnt[i]={y,x,10,5};
break;
}
}
}
//挖掘
if(KEY_DOWN('W')){
bag[setboard[y-2][x]]++;
setboard[y-2][x]=0;
}
if(KEY_DOWN('A')){
bag[setboard[y][x-1]]++;
setboard[y][x-1]=0;
}
if(KEY_DOWN('S')){
bag[setboard[y+1][x]]++;
setboard[y+1][x]=0;
}
if(KEY_DOWN('D')){
bag[setboard[y][x+1]]++;
setboard[y][x+1]=0;
}
if(KEY_DOWN('E')){
bag[setboard[y-1][x+1]]++;
setboard[y-1][x+1]=0;
}
if(KEY_DOWN('Q')){
bag[setboard[y-1][x-1]]++;
setboard[y-1][x-1]=0;
}
//挖掘结束
if(KEY_DOWN('X')){
setboard[y][x]=24;
}
if(KEY_DOWN('Y')){
if(face==1){
for(int i=0;i<100;i++){
if(arrow[i].shap==""){
arrow[i]={"→",y,x,-0.7,2};
break;
}
}
} else {
for(int i=0;i<100;i++){
if(arrow[i].shap==""){
arrow[i]={"←",y,x,-0.7,-2};
break;
}
}
}
}
if(KEY_DOWN('T')){
clear_buffer();
system("cls");
cout<<"请输入指令:"<<endl;
string a;
cin>>a;
if(a=="kill"){
die="失败了。";
hurt=true;
health=0;
}
if(a=="full_health"){
health=1000;
}
if(a=="creativemode"){
mode=!mode;
}
if(a=="move"){
cin>>y>>x;
y=1000-y;
}
if(a=="summom"){
int a;
cin>>a;
for(int i=0;i<100;i++){
if(mob[i].shap==""){
mob[i]=mobs[a];
mob[i].x=x;
mob[i].y=y;
break;
}
}
}
}
if(KEY_DOWN('O')){
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
setboard[i][j]=0;
}
}
}
if(KEY_DOWN('`')){
breath+=100;
}
if(KEY_DOWN('P')){
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
setboard[i][j]=2;
}
}
}
if(y > 1000){
die="掉出了这个世界!";
hurt=true;
health-=200;
}
if(breath<=0){
breath=0;
hurt=true;
health-=10;
}
if(!KEY_DOWN(VK_DOWN)&& block[board[y-1][x]].type=="block"){
die="在墙里窒息死亡!";
hurt=true;
health-=50;
}
if(board[y+1][x]==5){
hurt=true;
die="发现了地板是熔岩做的。";
health-=30;
}
clear_buffer();
}
return 0;
}
4085行代码还原2D我的世界
最新推荐文章于 2024-08-21 09:35:09 发布