c++沙盒小游戏1.8

 于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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值