于2024/10/01编写,删除了保存系统与怪物元素,更新了地图,将在1.9版本继续更新地图元素。
#include <bits/stdc++.h>//dev专属 VC不用
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <unistd.h>
#include <tchar.h>
#include <iomanip>
#include <cstdlib>
#include <wchar.h>
#include <stdlib.h>
#include <mmsystem.h>
using namespace std;
struct hl{long long h,l;};
bool axj(long long key);//侦测按键(按下键)
hl sbwz(bool x, bool n);//鼠标位置
void ydgb(long long h, long long l);//移动光标到指定位置
void yanse(long long n);//颜色
const long long ESC = 27,
Enter = 13,
Tab = 9,//tab
Shang = 38,Xia = 40,Zuo = 37,You = 39,
Kong = ' ',//空格
z_sb = VK_LBUTTON,//鼠标左键
y_sb = VK_RBUTTON,//鼠标右键
Shift = VK_SHIFT,z_Shift = VK_LSHIFT,y_Shift = VK_RSHIFT,//SHIFT
Ctrl = VK_CONTROL,z_Ctrl = VK_LCONTROL,y_Ctrl = VK_RCONTROL,//Ctrl
Alt = VK_MENU,z_Alt = VK_LMENU,y_Alt = VK_RMENU,//alt
A = 'A',B = 'B',C = 'C',D = 'D',E = 'E',F = 'F',G = 'G',H = 'H',I = 'I',J = 'J',K = 'K',L = 'L',M = 'M',N = 'N',O = 'O',P = 'P',Q = 'Q',R = 'R',S = 'S',T = 'T',U = 'U',V = 'V',W = 'W',X = 'X',Y = 'Y',Z = 'Z';
bool axj(long long key){
return (GetKeyState(key) < 0);}
void yanse(long long n)//颜色
{SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), n);return;}
string name;//名字
long long bag[100];//背包
long long sdf1 = 8,sdf2 = 8,fx;//角色方位标记
long long sj;
long long die;//死亡标记
long long hp = 10;//玩家血量
long long dt[2000][256];//地图数据
long long pai = 400,ban = 200,ting = 128;//音乐节拍
long long szt = 0,gzt = 0;//状态
long long slsh = 0;//摔落伤害统计
bool f = 1;//布尔变量
long long bjx,bjy;//方位标记
long long R_hand = 0;//右手持物品
void color(long long a){//颜色函数2.0
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);}
struct MOB{
string u1,u2,d1,d2;
long long hp,u1c,u2c,d1c,d2c;
};
MOB mob[] ={
{"僵","尸","■","■",1,39,39,204,204},//僵尸0
};
struct BLOCK{
string u1,u2,d1,d2;
long long ph,u1c,u2c,d1c,d2c;
string name;};
BLOCK block[] ={//方块数据{第一像素,第二像素,第三像素,第四像素,碰撞箱,颜色号}
{" "," "," "," ",0,0,0,0,0," 空 "},//空气0
{"■","■","■","■",1,120,120,120,120," 石头 "},//石头1
{"▓","▓","▓","▓",0,25,25,25,25," 水方块 "},//水2
{"■","■","■","■",1,15,15,15,15," 圆石 "},//圆石3
{"■","■","■","■",1,162,162,102,102," 草块 "},//草4
{"■","■","■","■",1,102,102,102,102," 土块 "},//土5
{"■","■","■","■",0,68,68,68,68,"岩浆方块"},//岩浆6
{"|#","#|","|#","#|",1,110,110,110,110," 原木 "},//木头7
{"▓","▓","▓","▓",0,147,147,147,147," 树叶 "},//树叶8
{"■","■","■","■",1,248,143,143,248," 深板岩 "},//深板岩9
{"▓","▓","▓","▓",0,15,15,15,15," 细雪块 "},//雪10
{"▓","▓","▓","▓",1,120,120,120,120,"基岩方块"},//基岩11
};
void muzic_die(){ //死亡画面
cout << " 你死了\n" << " " << name << "死于:";
if(die == 1){cout << "岩浆\n";
}else if(die == 4){cout << name<<"从高空一跃而下\n";
}else{cout << "死了\n";}
hp = 10;system("cls");}
void sc() //输出
{
for(long long i = sdf1 - 7; i < sdf1 + 7; i++){
for(long long j = sdf2 - 15; j < sdf2 + 15; j++){
if(i == sdf1&&j == sdf2){
color(15);
if(fx == 'w'){cout << "上玩";
}else if(fx == 's'){cout << "下玩";
}else if(fx == 'a'){cout << "左玩";
}else if(fx == 'd'){cout << "右玩";}
if(hp == 0){
sdf1 = 8;
sdf2 = 8;
}
}else{
color(block[dt[i][j]].u1c);
cout << block[dt[i][j]].u1;
color(block[dt[i][j]].u2c);
cout << block[dt[i][j]].u2;
}}cout << endl;
for(long long j = sdf2 - 15; j < sdf2 + 15; j++){
if(i == sdf1 && j == sdf2){color(15);
if(fx == 'w'){cout << "↑家";
}else if(fx == 's'){cout << "↓家";
}else if(fx == 'a'){cout << "←家";
}else if(fx == 'd'){cout << "→家";}
}else{
color(block[dt[i][j]].d1c);
cout << block[dt[i][j]].d1;
color(block[dt[i][j]].d2c);
cout<< block[dt[i][j]].d2;
}}cout << endl;}
color(15);cout<< "按鼠标左键挖掘,按wasd上下左右行走,按鼠标右键放方块,\n玩家名称:" << name << "\n";
cout<< "X:" << sdf2 << " Y:" << sdf1 << "\n";
if(hp < 1){muzic_die();}
for(long long i = 1; i <= hp; i++){color(4);cout << "▓";}
for(long long i = hp; i < 10; i++){color(8);cout << "▓";}
color(15);cout << endl;
for(long long bag_i = 0; bag_i < 100; bag_i++){
if(bag[bag_i] > 0){
cout << block[bag_i].name << 'x' << bag[bag_i];
}
}
}
void dz(){
if(axj(W)){
if(block[dt[sdf1 - 1][sdf2]].ph == 0 && sdf1 != 0){
sdf1--;system("cls");
fx = 'w';slsh = 0;sc();
}else if(fx != 'w'){
fx = 'w';
system("cls");
sc();}
}else if(axj(S)){
if(block[dt[sdf1 + 1][sdf2]].ph == 0 && sdf1 != 29){
sdf1++;system("cls");sc();}
if(fx != 's'){
fx = 's';system("cls");sc();}
}else if(axj(A)){
if(block[dt[sdf1][sdf2 - 1]].ph == 0 && sdf2 != 0){
sdf2--;
system("cls");
fx = 'a';
sc();
}else if(fx != 'a'){
fx = 'a';
system("cls");
sc();}
}else if(axj(D)){
if(block[dt[sdf1][sdf2 + 1]].ph == 0 && sdf2 != 30){
sdf2++;
system("cls");
fx = 'd';
sc();
}else if(fx != 'd'){
fx = 'd';system("cls");sc();}
}else if(axj(z_sb)){
if(fx == 'w'){
bjx = sdf1 - 1;
bjy = sdf2;
}else if(fx == 's'){
bjx = sdf1 + 1;
bjy = sdf2;
}else if(fx == 'a'){
bjx = sdf1;
bjy = sdf2 - 1;
}else if(fx == 'd'){
bjx = sdf1;
bjy = sdf2 + 1;
}
if(dt[bjx][bjy] != 0&&dt[bjx][bjy] != 2&&dt[bjx][bjy]!=6&&bjx!=14&&bjx!=-1&&bjy!=-1&&bjy!=31&&dt[bjx][bjy]!=11){
if(fx=='s'){
bag[dt[bjx][bjy]]++;
dt[bjx][bjy]=0;
system("cls");sc();
}else if(fx=='w'){
bag[dt[bjx][bjy]]++;
dt[bjx][bjy]=0;
system("cls");
sc();
}else if(fx=='a'){
bag[dt[bjx][bjy]]++;
dt[bjx][bjy]=0;
system("cls");sc();
}else if(fx=='d'){
bag[dt[bjx][bjy]]++;
dt[bjx][bjy]=0;
system("cls");sc();
}
}else{
for(long long i=1; i<=4; i++){
if(fx=='w'){
bjx--;
}else if(fx=='s'){
bjx++;
}else if(fx=='a'){
bjy--;
}else if(fx=='d'){
bjy++;
}
if(dt[bjx][bjy]!=0&&dt[bjx][bjy]!=2&&dt[bjx][bjy]!=6){
bag[dt[bjx][bjy]]++;
dt[bjx][bjy]=0;
system("cls");sc();break;
}}}
}else if(axj(y_sb)){
if(fx=='w'){
dt[sdf1-1][sdf2]=3;
}else if(fx=='s'){
dt[sdf1+1][sdf2]=3;
}else if(fx=='a'){
dt[sdf1][sdf2-1]=3;
}else if(fx=='d'){
dt[sdf1][sdf2+1]=3;
}
system("cls");sc();}}
int suiji(){int o;return o;}
void csh(){
system("mode con cols=120 lines=46");
system("title YUTU制作——沙盒游戏");
system("cls");
long long flag = 100,flag2;
for(long long i = 0;i < 2000;i++){
for(long long j = 0;j < flag;j++){dt[j][i] = 0;}
dt[flag][i] = 4;
if(i == 1000){sdf1 = flag + 30;sdf2 = 1000;}
flag2 = suiji() % 5 + rand() % 3;
for(long long j = 1;j < flag2;j++){dt[flag + j][i] = 5;}
for(long long j = flag2;j < 256;j++){
if(rand() % 100 == 0){dt[flag + j][i] = 6;
}else if(rand() % 100 == 0){dt[flag + j][i] = 2;
}else{dt[flag + j][i] = 1;}}
flag += rand() % 5 - 2;
if(flag > 150){
flag -= 3;}
if(flag < 50){
flag += 3;}
}
}
int main(){
CONSOLE_CURSOR_INFO cursor;
cursor.bVisible = FALSE;
cursor.dwSize = sizeof(cursor);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle, &cursor);
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin, &mode);
mode &= ~ENABLE_QUICK_EDIT_MODE;
SetConsoleMode(hStdin, mode);
long long gwyd=0;system("cls");
yanse(15);cout<<"你的名字叫什么?\n";
cin>>name;system("cls");csh();sc();
while(1){
if(hp==0)muzic_die();
dz();
if(gzt==125-1){
if(dt[sdf1][sdf2] == 6){
hp-=0.1;
if(hp == hp / 1 * 1){
system("cls");
sc();
}
}
if(block[dt[sdf1 + 1][sdf2]].ph == 0&&dt[sdf1 + 1][sdf2] != 8 && dt[sdf1 + 1][sdf2] != 6 && dt[sdf1 + 1][sdf2] != 2){
sdf1++;
slsh++;
if(dt[sdf1 + 1][sdf2] == 2||dt[sdf1 + 1][sdf2] == 6){
slsh = 0;
}
system("cls");sc();
}else{
if(slsh > 2){
hp -= slsh - 2;
slsh = 0;
die = 4;
if(hp == hp / 1 * 1){
system("cls");sc();}
}else{
slsh = 0;
}}}
sj++;sj %= 240;gzt++;gzt %= 125;
}
}