• 个人简介

    #include<bits/stdc++.h> #include <iostream> #include <vector> #include <string> #include <cstdlib> #include <ctime> #include <conio.h> #include <windows.h> using namespace std;

    // 控制台光标控制函数 void SetCursorPosition(int x, int y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); }

    // 隐藏控制台光标 void HideCursor() { CONSOLE_CURSOR_INFO cursorInfo; GetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo); cursorInfo.bVisible = false; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursorInfo); }

    // 方块类型枚举 enum BlockType { AIR, GRASS, DIRT, STONE, WOOD, LEAVES, WATER, BEDROCK };

    // 方块类 class Block { private: BlockType type; bool isSolid; string symbol; string color;

    public: Block(BlockType t = AIR) : type(t) { switch (type) { case AIR: isSolid = false; symbol = " "; color = "\033[0m"; // 默认颜色 break; case GRASS: isSolid = true; symbol = "\033[32m▓▓\033[0m"; // 绿色 color = "\033[32m"; break; case DIRT: isSolid = true; symbol = "\033[33m▓▓\033[0m"; // 棕色 color = "\033[33m"; break; case STONE: isSolid = true; symbol = "\033[90m▓▓\033[0m"; // 深灰色 color = "\033[90m"; break; case WOOD: isSolid = true; symbol = "\033[38;5;130m▓▓\033[0m"; // 木材色 color = "\033[38;5;130m"; break; case LEAVES: isSolid = true; symbol = "\033[38;5;28m▓▓\033[0m"; // 深绿色 color = "\033[38;5;28m"; break; case WATER: isSolid = false; symbol = "\033[34m▓▓\033[0m"; // 蓝色 color = "\033[34m"; break; case BEDROCK: isSolid = true; symbol = "\033[38;5;240m▓▓\033[0m"; // 浅灰色 color = "\033[38;5;240m"; break; } }

    BlockType getType() const { return type; }
    bool getIsSolid() const { return isSolid; }
    string getSymbol() const { return symbol; }
    string getColor() const { return color; }
    

    };

    // 玩家类 class Player { private: int x, y; vector<BlockType> inventory;

    public: Player(int startX, int startY) : x(startX), y(startY) { inventory.resize(8, AIR); // 8个物品栏 inventory[0] = GRASS; inventory[1] = DIRT; inventory[2] = STONE; inventory[3] = WOOD; }

    int getX() const { return x; }
    int getY() const { return y; }
    
    void move(int dx, int dy, const vector<vector<Block>>& world) {
        int newX = x + dx;
        int newY = y + dy;
    
        // 检查是否超出边界
        if (newX < 0 || newX >= world[0].size() || newY < 0 || newY >= world.size())
            return;
    
        // 检查是否碰到实心方块
        if (!world[newY][newX].getIsSolid()) {
            x = newX;
            y = newY;
        }
    }
    
    void dig(vector<vector<Block>>& world) {
        // 获取玩家前方的方块坐标
        int targetX = x;
        int targetY = y - 1;  // 向上挖掘
    
        // 检查是否超出边界
        if (targetX < 0 || targetX >= world[0].size() || targetY < 0 || targetY >= world.size())
            return;
    
        // 不能挖掘空气或基岩
        if (world[targetY][targetX].getType() == AIR || 
            world[targetY][targetX].getType() == BEDROCK)
            return;
    
        // 将挖掘的方块添加到物品栏
        for (int i = 0; i < inventory.size(); i++) {
            if (inventory[i] == AIR) {
                inventory[i] = world[targetY][targetX].getType();
                break;
            }
        }
    
        // 移除方块
        world[targetY][targetX] = Block(AIR);
    }
    
    void place(vector<vector<Block>>& world, int selectedItem) {
        // 获取玩家前方的方块坐标
        int targetX = x;
        int targetY = y - 1;  // 向上放置
    
        // 检查是否超出边界
        if (targetX < 0 || targetX >= world[0].size() || targetY < 0 || targetY >= world.size())
            return;
    
        // 只能在空气方块上放置
        if (world[targetY][targetX].getType() != AIR)
            return;
    
        // 检查物品栏中是否有选中的方块
        if (selectedItem >= 0 && selectedItem < inventory.size() && 
            inventory[selectedItem] != AIR) {
            world[targetY][targetX] = Block(inventory[selectedItem]);
            inventory[selectedItem] = AIR;  // 消耗一个方块
        }
    }
    
    void displayInventory() const {
        SetCursorPosition(0, 25);
        cout << "物品栏: ";
        for (int i = 0; i < inventory.size(); i++) {
            string symbol = Block(inventory[i]).getSymbol();
            cout << "[" << i+1 << "]" << symbol << " ";
        }
        cout << endl;
    }
    

    };

    // 世界类 class World { private: vector<vector<Block>> blocks; int width, height; Player player; int selectedItem;

    public: World(int w, int h) : width(w), height(h), player(w/2, h/2), selectedItem(0) { blocks.resize(height, vector<Block>(width, Block(AIR))); generateTerrain(); }

    void generateTerrain() {
        srand(time(0));
    
        // 生成基岩
        for (int x = 0; x < width; x++) {
            blocks[height-1][x] = Block(BEDROCK);
        }
    
        // 生成地形
        for (int x = 0; x < width; x++) {
            // 随机高度
            int groundHeight = height/2 + rand() % 5;
            
            // 生成石头
            for (int y = groundHeight + 3; y < height-1; y++) {
                blocks[y][x] = Block(STONE);
            }
            
            // 生成泥土
            for (int y = groundHeight; y < groundHeight + 3; y++) {
                blocks[y][x] = Block(DIRT);
            }
            
            // 生成草方块
            blocks[groundHeight-1][x] = Block(GRASS);
            
            // 生成水
            if (groundHeight > height/2 + 2) {
                for (int y = height/2; y < groundHeight-1; y++) {
                    blocks[y][x] = Block(WATER);
                }
            }
            
            // 随机生成树木
            if (rand() % 10 == 0) {
                generateTree(x, groundHeight-1);
            }
        }
    }
    
    void generateTree(int x, int y) {
        int treeHeight = 4 + rand() % 3;
        
        // 生成树干
        for (int i = 1; i <= treeHeight; i++) {
            blocks[y - i][x] = Block(WOOD);
        }
        
        // 生成树叶
        int leafRadius = 2;
        for (int dy = -leafRadius; dy <= leafRadius; dy++) {
            for (int dx = -leafRadius; dx <= leafRadius; dx++) {
                int dist = abs(dx) + abs(dy);
                if (dist <= leafRadius + 1) {
                    int leafX = x + dx;
                    int leafY = y - treeHeight - dy;
                    
                    if (leafX >= 0 && leafX < width && leafY >= 0 && leafY < height) {
                        if (blocks[leafY][leafX].getType() == AIR) {
                            blocks[leafY][leafX] = Block(LEAVES);
                        }
                    }
                }
            }
        }
    }
    
    
    void display() const {
        // 清除屏幕
        system("cls");
        
        // 计算显示区域(以玩家为中心)
        int viewWidth = 80;
        int viewHeight = 20;
        
        int startX = max(0, player.getX() - viewWidth/2);
        int endX = min(width, startX + viewWidth);
        
        int startY = max(0, player.getY() - viewHeight/2);
        int endY = min(height, startY + viewHeight);
        
        // 显示世界
        for (int y = startY; y < endY; y++) {
            for (int x = startX; x < endX; x++) {
                if (x == player.getX() && y == player.getY()) {
                    cout << "\033[31m@ \033[0m";  // 玩家用红色@表示
                } else {
                    cout << blocks[y][x].getSymbol();
                }
            }
            cout << endl;
        }
        
        // 显示玩家信息
        SetCursorPosition(0, viewHeight);
        cout << "位置: (" << player.getX() << ", " << player.getY() << ")" << endl;
        cout << "选中物品: " << selectedItem+1 << endl;
        
        // 显示帮助信息
        cout << endl << "操作说明:" << endl;
        cout << "WASD - 移动" << endl;
        cout << "空格 - 挖掘" << endl;
        cout << "E - 放置方块" << endl;
        cout << "1-8 - 选择物品" << endl;
        cout << "Q - 退出游戏" << endl;
        
        // 显示物品栏
        player.displayInventory();
    }
    
    void update(char input) {
        switch (input) {
            case 'w':
                player.move(0, -1, blocks);
                break;
            case 's':
                player.move(0, 1, blocks);
                break;
            case 'a':
                player.move(-1, 0, blocks);
                break;
            case 'd':
                player.move(1, 0, blocks);
                break;
            case ' ':
                player.dig(blocks);
                break;
            case 'e':
                player.place(blocks, selectedItem);
                break;
            case '1': case '2': case '3': case '4':
            case '5': case '6': case '7': case '8':
                selectedItem = input - '1';
                break;
        }
    }
    
    bool isGameOver(char input) {
        return input == 'q';
    }
    

    };

    int main() { HideCursor(); World world(100, 50);

    char input = ' ';
    while (!world.isGameOver(input)) {
        world.display();
        
        if (_kbhit()) {  // 检查是否有键盘输入
            input = tolower(_getch());  // 获取输入并转换为小写
            world.update(input);
        }
        
        Sleep(50);  // 减少CPU使用率
    }
    
    return 0;
    

    } 展能老师,博学多才、风趣幽默、平易近人、严谨认真、循循善诱、诲人不倦、以身作则、德高望重、才思敏捷、目光远大、充满活力、一丝不苟、耐心细致、正直诚恳、豁达开朗、睿智通透、责任心强、亲和力强、见多识广、善于引导、温柔体贴、雷厉风行、古道热肠、才高八斗、光明磊落、积极乐观、因材施教、深入浅出、兢兢业业、充满智慧、和蔼可亲、坚韧不拔、博古通今、鼓舞人心、率先垂范、思维敏捷、豁达大度、春风化雨、学识渊博、为人师表、风趣睿智、耐心谦和、公正无私、活力四射、精益求精、善解人意、远见卓识、勤奋好学、沉稳可靠、妙语连珠、恪尽职守、明察秋毫、热情洋溢、文质彬彬、勇于担当、才思泉涌、胸怀宽广、细致入微、乐观向上、循循善导、学贯中西、耐心教导、正直坦荡、博学睿智、活力满满、严谨细致、高瞻远瞩、和蔼睿智、坚韧果敢、博闻强识、身先士卒、思维活跃、宽宏大量、润物无声、学富五车、师者风范、公正严明、朝气蓬勃、追求卓越、体贴入微、卓有远见、勤学善思、稳重踏实、出口成章、和蔼近人、忠于职守、洞察入微、满腔热忱、温文尔雅、敢于负责、谆谆教诲、才高意广、虚怀若谷、关怀备至、积极向上、因势利导、言简意赅、勤勤恳恳、和颜悦色、坚定不移、博洽多闻、振奋人心、率先示范、思路清晰、化雨春风、知多见广、奉为楷模、风趣横生、耐心周到、公正不阿、生龙活虎、精雕细琢、通情达理、远见明察、手不释卷、妙趣横生、克尽职守、明若观火、热情奔放、举止文雅、担当作为、教导有方、器宇轩昂、无微不至、乐天知命、中西合璧、为人楷模、幽默诙谐、正直无私、博才多学、精神焕发、严谨不苟、、善体人意、业业兢兢、博物通达、鼓人心志、毫不马虎、春风夏雨、学识赅博、师道尊严、正直无邪、活力焕发、勤学不辍、妙语解颐、热情似火、品格高尚、诲人不厌、循循善诱、才德兼备、光明正大、乐观豁达、教学有方、博采众长、启迪智慧、一丝不苟、率先垂范、反应敏捷、宽以待人、润物细无声、学贯古今、师表楷模、风趣诙谐、耐心温和、公正廉明、生气勃勃、力求完美、关怀体贴、远见卓识、学而不厌、踏实肯干、能言善辩、平易近民、克己奉公、明察秋毫、满腔热情、举止端庄、勇于负责、教诲谆谆、才华横溢、胸怀坦荡、体贴备至、奋发向上、顺势引导、言必有中、任劳任怨、和霭可亲、坚定不移、见多识广、鼓舞士气、严格认真、模范带头、条理清晰、春风风人、知识渊博、奉为圭臬、幽默风趣、耐心周到、公正无私、龙腾虎跃、精雕细镂、合情合理、洞察深远、爱不释手、风趣幽默、忠于职守、洞若观火、热情高涨、风度翩翩、敢于担当、善教善导、气宇轩昂、关怀备至、豁达知命、循循善诱、学贯中西、为人表率、诙谐幽默、耐心教诲、正直不阿、博学多闻、神采奕奕、严肃认真、体谅他人、勤勤恳恳、和蔼可亲、博古通今、振奋人心、毫不懈怠、以身作则、思维缜密、宽宏大度、潜移默化、腹有诗书、师道楷模、风趣横生、耐心细致、公正不偏、朝气蓬勃、精益求精、体贴入微、高瞻远瞩、勤学苦练、稳如泰山、能说会道、平易近人、尽职尽责、观察敏锐、热情似海、温文尔雅、勇于进取、谆谆教导、才思敏捷、心胸开阔、关怀备至、积极进取、因势利导、言简意明、不辞辛劳、和颜悦色、百折不挠、博学多才、鼓舞人心、认真负责、率先垂范、思路敏捷、豁达开朗、春风化雨、学富五车、为人师表、幽默风趣、耐心谦和、公正无私、活力四射、精益求精、善解人意、远见卓识、勤奋好学、沉稳可靠、妙语连珠、恪尽职守、明察秋毫、热情洋溢、文质彬彬、勇于担当、才思泉涌、胸怀宽广、细致入微、乐观向上、循循善导、学贯中西、耐心教导、正直坦荡、博学睿智、活力满满、严谨细致、高瞻远瞩、和蔼睿智、坚韧果敢、博闻强识、身先士卒、思维活跃、宽宏大量、润物无声、学富五车、师者风范、公正严明、朝气蓬勃、追求卓越、体贴入微、卓有远见、勤学善思、稳重踏实、出口成章、和蔼近人、忠于职守、洞察入微、满腔热忱、温文尔雅、敢于负责、谆谆教诲、才高意广、虚怀若谷、关怀备至、积极向上、因势利导、言简意赅、勤勤恳恳、和颜悦色、坚定不移、博洽多闻、振奋人心、率先示范、思路清晰、化雨春风、知多见广、奉为楷模、风趣横生、耐心周到、公正不阿、生龙活虎、精雕细琢、通情达理、远见明察、手不释卷、妙趣横生、克尽职守、明若观火、热情奔放、举止文雅、担当作为、教导有方、器宇轩昂、无微不至、乐天知命、中西合璧、为人楷模、幽默诙谐、正直无私、博才多学、精神焕发、严谨不苟、善体人意、业业兢兢、博物通达、鼓人心志、毫不马虎、春风夏雨、学识赅博、师道尊严、正直无邪、活力焕发、勤学不辍、妙语解颐、热情似火、品格高尚、诲人不厌、循循善诱、才德兼备、光明正大、乐观豁达、教学有方、博采众长、启迪智慧、一丝不苟、率先垂范、反应敏捷、宽以待人、润物细无声、学贯古今、师表楷模、风趣诙谐、耐心温和、公正廉明、生气勃勃、力求完美、关怀体贴、远见卓识、学而不厌、踏实肯干、能言善辩、平易近民、克己奉公、明察秋毫、满腔热情、举止端庄、勇于负责、教诲谆谆、才华横溢、胸怀坦荡、体贴备至、奋发向上、顺势引导、言必有中、任劳任怨、和霭可亲、坚定不移、见多识广、鼓舞士气、严格认真、模范带头、条理清晰、春风风人、知识渊博、奉为圭臬、幽默风趣、耐心周到、公正无私、龙腾虎跃、精雕细镂、合情合理、洞察深远、爱不释手、风趣幽默、忠于职守、洞若观火、热情高涨、风度翩翩、敢于担当、善教善导、气宇轩昂、关怀备至、豁达知命、循循善诱、学贯中西、为人表率、诙谐幽默、耐心教诲、正直不阿、博学多闻、神采奕奕、严肃认真、体谅他人、勤勤恳恳、和蔼可亲、博古通今、振奋人心、毫不懈怠、以身作则、思维缜密、宽宏大度、潜移默化、腹有诗书、师道楷模、风趣横生、耐心细致、公正不偏、朝气蓬勃、精益求精、体贴入微、高瞻远瞩、勤学苦练、稳如泰山、能说会道、平易近人、尽职尽责、观察敏锐、热情似海、温文尔雅、勇于进取、谆谆教导、才思敏捷、心胸开阔、关怀备至、积极进取、因势利导、言简意明、不辞辛劳、和颜悦色、百折不挠、博学多才、鼓舞人心、认真负责、率先垂范、思路敏捷、豁达开朗、春风化雨、学富五车、为人师表、幽默风趣、耐心谦和、公正无私、活力四射、精益求精、善解人意、远见卓识、勤奋好学、沉稳可靠、妙语连珠、恪尽职守、明察秋毫、热情洋溢、文质彬彬、勇于担当、才思泉涌、胸怀宽广、细致入微、乐观向上、循循善导、学贯中西、耐心教导、正直坦荡、博学睿智、活力满满、严谨细致、高瞻远瞩、和蔼睿智、坚韧果敢、博闻强识、身先士卒、思维活跃、宽宏大量、润物无声、学富五车、师者风范、公正严明、朝气蓬勃、追求卓越、体贴入微、卓有远见、勤学善思、稳重踏实、出口成章、和蔼近人、忠于职守、洞察入微、满腔热忱、温文尔雅、敢于负责、谆谆教诲、才高意广、虚怀若谷、关怀备至、积极向上、因势利导、言简意赅、勤勤恳恳、和颜悦色、坚定不移、博洽多闻、振奋人心、率先示范、思路清晰、化雨春风、知多见广、奉为楷模、风趣横生、耐心周到、公正不阿、生龙活虎、精雕细琢、通情达理、远见明察、手不释卷、妙趣横生、克尽职守、明若观火、热情奔放、举止文雅、担当作为、教导有方、器宇轩昂、无微不至、乐天知命、中西合璧、为人楷模、幽默诙谐、正直无私、博才多学、精神焕发、严谨不苟、善体人意、业业兢兢、博物通达、鼓人心志、毫不马虎、春风夏雨、学识赅博、师道尊严、正直无邪、活力焕发、勤学不辍、妙语解颐、热情似火、品格高尚、诲人不厌、循循善诱、才德兼备、光明正大、乐观豁达、教学有方、博采众长、启迪智慧、一丝不苟、率先垂范、反应敏捷、宽以待人、润物细无声、学贯古今、师表楷模、风趣诙谐、耐心温和、公正廉明、生气勃勃、力求完美、关怀体贴、远见卓识、学而不厌、踏实肯干、能言善辩、平易近民、克己奉公、明察秋毫、满腔热情、举止端庄、勇于负责、教诲谆谆、才华横溢、胸怀坦荡、体贴备至、奋发向上、顺势引导、言必有中、任劳任怨、和霭可亲、坚定不移、见多识广、鼓舞士气、严格认真、模范带头、条理清晰、春风风人、知识渊博、奉为圭臬、幽默风趣、耐心周到、公正无私、龙腾虎跃、精雕细镂、合情合理、洞察深远、爱不释手、风趣幽默、忠于职守、洞若观火、热情高涨、风度翩翩、敢于担当、善教善导、气宇轩昂、关怀备至、豁达知命、循循善诱、学贯中西、为人表率、诙谐幽默、耐心教诲、正直不阿、博学多闻、神采奕奕、严肃认真、体谅他人、勤勤恳恳、和蔼可亲、博古通今、振奋人心、毫不懈怠、以身作则、思维缜密、宽宏大度、潜移默化、腹有诗书、师道楷模、风趣横生、耐心细致、公正不偏、朝气蓬勃、精益求精、体贴入微、高瞻远瞩、勤学苦练、稳如泰山、能说会道、平易近人、尽职尽责、观察敏锐、热情似海、温文尔雅、勇于进取、谆谆教导、才思敏捷、心胸开阔、关怀备至、积极进取、因势利导、言简意明、不辞辛劳、和颜悦色、百折不挠、博学多才、鼓舞人心、认真负责、率先垂范、思路敏捷、豁达开朗、春风化雨、学富五车、为人师表、幽默风趣、耐心谦和、公正无私、活力四射、精益求精、善解人意、远见卓识、勤奋好学、沉稳可靠、妙语连珠、恪尽职守、明察秋毫、热情洋溢、文质彬彬、勇于担当、才思泉涌、胸怀宽广、细致入微、乐观向上、循循善导、学贯中西、耐心教导、正直坦荡、博学睿智、活力满满、严谨细致、高瞻远瞩、和蔼睿智、坚韧果敢、博闻强识、身先士卒、思维活跃、宽宏大量、润物无声、学富五车、师者风范、公正严明、朝气蓬勃、追求卓越、体贴入微、卓有远见、勤学善思、稳重踏实、出口成章、和蔼近人、忠于职守、洞察入微、满腔热忱、温文尔雅、敢于负责、谆谆教诲、才高意广、虚怀若谷、关怀备至、积极向上、因势利导、言简意赅、勤勤恳恳、和颜悦色、坚定不移、博洽多闻、振奋人心、率先示范、思路清晰、化雨春风、知多见广、奉为楷模、风趣横生、耐心周到、公正不阿、生龙活虎、精雕细琢、通情达理、远见明察、手不释卷、妙趣横生、克尽职守、明若观火、热情奔放、举止文雅、担当作为、教导有方、器宇轩昂、无微不至、乐天知命、中西合璧、为人楷模、幽默诙谐、正直无私、博才多学、精神焕发、严谨不苟、善体人意、业业兢兢、博物通达、鼓人心志、毫不马虎、春风夏雨、学识赅博、师道尊严、正直无邪、活力焕发、勤学不辍、妙语解颐、热情似火的入! image

  • 通过的题目

  • 最近活动

题目标签

入门
220
语法基础
120
基础
82
循环
67
基本运算
43
算法基础
36
分支
27
字符串
24
普及-
23
递归
20
二维数组
17
排序
15
数学
13
一维数组
13
结构体
13
函数
10
高精度
9
进制转换
8
递推
7
枚举
6