更新内容:优化
A,D移动;W跳跃;上,下,右+上,右+下,左+上,左+下
#include<bits/stdc++.h>
#include<windows.h>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
void Generate_terrain();//生成地形
int random(int l,int r);//生成l到r的随机数
void Color(int a,int b);//切换字体颜色
void mapcolor(string a);//切换当前字符颜色
void mapdisplay(string a);//输出当前字符对应的形态
void hidden(bool a);//0隐藏光标,1显示光标
string MC_map[2000][2000];//[5];
struct theInventory
{
string name;
int number;
};
int main()
{
theInventory Inventory[4][9];
hidden(0);
srand((unsigned)10);
Generate_terrain();//生成地形
double sx=0,sy=0;
int px=100,py=1000;
for(long long start=0;;start++)
{
system("cls");//清屏
if(KEY_DOWN('W')&&MC_map[py+2][px]!=" ") sy=-1;//跳跃
if(KEY_DOWN('D')) sx+=1;//右移动
if(KEY_DOWN('A')) sx-=1;//左移动
if(KEY_DOWN(39)&&KEY_DOWN(38)) MC_map[py][px+1]=" ";//右,上
else if(KEY_DOWN(39)&&KEY_DOWN(40)) MC_map[py+1][px+1]=" ";//右,下
else if(KEY_DOWN(37)&&KEY_DOWN(38)) MC_map[py][px-1]=" ";//左,上
else if(KEY_DOWN(37)&&KEY_DOWN(40)) MC_map[py+1][px-1]=" ";//左,下
else if(KEY_DOWN(38)) MC_map[py-1][px]=" ";//上
else if(KEY_DOWN(40)) MC_map[py+2][px]=" ";//下
if(KEY_DOWN('M'))//展示地形图
{
system("cls");
for(int x=py-100;x<py+100;x++)
{
for(int y=px-100;y<px+100;y++)
{
if(x==py&&y==px){Color(0,14);cout<<"''";}
else if(x==py+1&&y==px){Color(9,9);cout<<" ";}
else if(x>=0&&x<2000&&y>=0&&y<2000) mapcolor(MC_map[x][y]),mapdisplay(MC_map[x][y]);
}
Color(0,0);
cout<<'/'<<endl;
}
while(!KEY_DOWN('M'));//直到按下M关闭地图
}
for(int s=0;s<abs(int(sx));s++)//x移动
{
if(px>=0&&px<=1999) px+=int(sx)/abs(int(sx));
if(px<0) px=0;
if(px>=2000) px=1999;
if(MC_map[py][px]!=" "||MC_map[py+1][px]!=" "){px-=int(sx)/abs(int(sx)),sx=0;break;}
}
for(int s=0;s<abs(int(sy));s++)//y移动
{
if(py>=0&&py<2000) py+=int(sy)/abs(int(sy));
if(py<0) py=0;
if(py>=2000) py=1999;
if(MC_map[py][px]!=" "||MC_map[py+1][px]!=" "){py-=int(sy)/abs(int(sy)),sy=0;break;}
}
sx*=0.5;//摩擦力
sy+=1;//重力
for(int x=py-7;x<py+8;x++)
{
for(int y=px-7;y<px+8;y++)
{
if(x==py&&y==px){Color(0,14);cout<<"''";}//输出头
else if(x==py+1&&y==px){Color(9,9);cout<<" ";}//输出身体
else if(x>=0&&x<2000&&y>=0&&y<2000) mapcolor(MC_map[x][y]),mapdisplay(MC_map[x][y]);
}
Color(0,0);
cout<<'/'<<endl;
}
Color(7,0);
cout<<px<<" "<<py;
Sleep(70);//每0.07秒执行一帧
}
return 0;
}
void Game_begins()
{
}
void Generate_terrain()//生成地形
{
int altitude=700;
for(int x=0;x<2000;x++) for(int y=0;y<2000;y++) MC_map[y][x]=" ";
for(int x=0;x<2000;x++)
{
int a=int(2000-double(altitude)/50*49+random(-1,1));
MC_map[1999][x]="基";
for(int y=1998;y>a;y--) MC_map[y][x]="石";
for(int y=a;y>2000-altitude;y--) MC_map[y][x]="土";
MC_map[2000-altitude][x]="草";
if(rand()%50==5)
{
MC_map[2000-altitude-1][x]="木";
MC_map[2000-altitude-2][x]="木";
MC_map[2000-altitude-3][x]="木";
MC_map[2000-altitude-4][x]="木";
MC_map[2000-altitude-4][x-1]="叶";
MC_map[2000-altitude-4][x-2]="叶";
MC_map[2000-altitude-4][x+1]="叶";
MC_map[2000-altitude-4][x+2]="叶";
MC_map[2000-altitude-5][x]="叶";
MC_map[2000-altitude-5][x-1]="叶";
MC_map[2000-altitude-5][x-2]="叶";
MC_map[2000-altitude-5][x+1]="叶";
MC_map[2000-altitude-5][x+2]="叶";
MC_map[2000-altitude-6][x]="叶";
MC_map[2000-altitude-6][x+1]="叶";
MC_map[2000-altitude-6][x-1]="叶";
}
if(altitude<800) altitude+=random(0,1);
if(altitude>600) altitude+=random(-1,0);
}
}
int random(int l,int r)//生成l到r的随机数
{
return (rand()%(r-l+1))+l;
}
void Color(int a,int b)//切换字体颜色
{
int c;
if(b>=1)c=a+b*16;
else c=a;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),c);
}
void mapcolor(string a)//颜色转化
{
if(a==" ") Color(11,11);
if(a=="草") Color(10,6);
if(a=="土") Color(6,6);
if(a=="石") Color(8,8);
if(a=="木") Color(8,6);
if(a=="叶") Color(10,2);
}
void mapdisplay(string a)//输出
{
if(a==" ") cout<<" ";
if(a=="草") cout<<"▔ ";
if(a=="土") cout<<"■";
if(a=="石") cout<<"■";
if(a=="木") cout<<"||";
if(a=="叶") cout<<"▓▓";
}
void hidden(bool a)//隐藏光标
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO cci;
GetConsoleCursorInfo(hOut,&cci);
cci.bVisible=a;//赋1为显示,赋0为隐藏
SetConsoleCursorInfo(hOut,&cci);
}