头像

我是好人

$\href{https://www.luogu.com.cn/user/457666}{洛谷}$ QQ 3376987510 微信 Sity_Hugh 原神UID 239941333 欢迎交友




离线:11小时前


最近来访(680)
用户头像
不高兴的兽奶
用户头像
dldl
用户头像
LAG_流雲
用户头像
种花家的兔兔
用户头像
垫底抽風
用户头像
redsea
用户头像
Black_Panda
用户头像
Expelliarmus2011
用户头像
薛定谔的猫qwq
用户头像
xzx_qwq
用户头像
john02017
用户头像
whale77
用户头像
hncsxzx
用户头像
冰之韵
用户头像
凌乱之风
用户头像
徐清
用户头像
ssyyg11
用户头像
ffffffffffffffffffffffffffffff
用户头像
花木
用户头像
gocomputer

新鲜事 原文

我是好人
12小时前
慈溪有个比赛,是在10月24日. 这tm让我怎么狂欢?


新鲜事 原文

嘎了嘎了,怎么感觉要AFO了az 明年再考吧 (这tm该死的疫情裁员裁掉一半)


新鲜事 原文

浙江CSP-J 78.5分,我(根据民间答案测出来)79分,怎么感觉要噶了?


新鲜事 原文

明天CSP初赛,祝大家rp++



题目传送门

思考

啊这
这题简直水到极致,我还以为内存只够用一个数组,没想到。。。

没什么好说了的,直接两个数组开打.

代码(C++)

class Solution {
public:
    void reOrderArray(vector<int> &array) {
        vector<int> res;res.clear();
        int len=array.size();
        for (int i=0;i<len;i++){
            if (array[i]&1) res.push_back(array[i]);
        }
        for (int i=0;i<len;i++){
            if (!(array[i]&1)) res.push_back(array[i]);
        }
        array=res;
    }
};



/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* findKthToTail(ListNode* pListHead, int k) {
        int cnt=0,len=0;
        for (ListNode *i=pListHead;i;i=i->next) len++;
        for (ListNode *i=pListHead;i;i=i->next){
            if (++cnt==len-k+1) return i;
        }
        return NULL;
    }
};



class MyQueue {
public:
    /** Initialize your data structure here. */
    stack<int> x,y;
    MyQueue() {

    }

    /** Push element x to the back of queue. */
    void push(int xx) {
        x.push(xx);
    }

    /** Removes the element from in front of queue and returns that element. */
    int pop() {
        while (!x.empty()) y.push(x.top()),x.pop();
        int res=y.top();y.pop();
        while (!y.empty()) x.push(y.top()),y.pop();
        return res;
    }

    /** Get the front element. */
    int peek() {
        while (!x.empty()) y.push(x.top()),x.pop();
        int res=y.top();
        while (!y.empty()) x.push(y.top()),y.pop();
        return res;
    }

    /** Returns whether the queue is empty. */
    bool empty() {
        return x.empty()&&y.empty();
    }
};

/**
 * Your MyQueue object will be instantiated and called as such:
 * MyQueue obj = MyQueue();
 * obj.push(x);
 * int param_2 = obj.pop();
 * int param_3 = obj.peek();
 * bool param_4 = obj.empty();
 */



$\Huge\color{blue}{\text{迷宫4.0}}$

前言

这个游戏是我从zhq那里搞来灵感的(不要问我为什么他的名字就是七夕祭里的那只鸡!),希望他不会介意(额).
这也就短短366行代码,不多的,也就肝了亿会儿~
这个游戏还是有很多问题的,望大家多多发现$Bug$,评论区见~

代码(C++)

#include<bits/stdc++.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>
#define random(a,b) (rand()%(b-a)+a)
using namespace std;
char mp[105][105],xs[105][105];
int bs;
double ms[105];
bool yzmp[105][105];
int k,x,y,n;
clock_t start_time;
char ch;
const int tag[5][2]={{0,1},{1,0},{-1,0},{0,-1}};
void Boom(int,int);
void print(string);
void color(int);
void HideCursor(bool);
void head();
void show();
void Game();
bool Map();
bool Maph();
void p(int);
void hseanshu();
void Save_Data();
void Save_Data(){
    freopen("data.txt","w",stdout);
    for (int i=1;i<=100;i++) printf("%.2lf\n",ms[i]);
    fclose(stdout);
}
void hseanshu(){
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO CursorInfo;
    GetConsoleCursorInfo(handle, &CursorInfo);
    CursorInfo.bVisible = false;
    SetConsoleCursorInfo(handle, &CursorInfo);
}
void head(){
    system("cls");
    printf("\t\t\t迷宫\n");
    printf("--------------------------------------------------\n");
}
void HideCursor(bool Visible){
    CONSOLE_CURSOR_INFO Cursor;
    Cursor.bVisible = !Visible;
    Cursor.dwSize = sizeof(Cursor);
    HANDLE Hand = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorInfo(Hand, &Cursor);
}
void color(int a){
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void print(string s){
    for (int i=0;s[i]!='\0';i++){
        printf("%c",s[i]);
        Sleep(30);
    }
}
void show(){
    system("mode con lines=17 cols=51");
    head();
    print("本游戏由 我是好人&zhq 制作\n");
    Sleep(1000);
    print("用WASD移动哦!\n");
    Sleep(500);
    print("迷宫内永远笼罩着雾,只有在以你为中心的5*5的范围内才能勉强看得清...\n");
    print("你会被传送到第2行第2列...\n");
    print("迷宫内有各种道具,有不同的用处...\n");
    print("在迷宫的右下角,是生的希望...\n");
    print("旅行者,好好去探索吧!\n");
    Sleep(500);
    print("游戏内的字符意义:\n");Sleep(500);
    print("# : 墙,不可进入不可穿越\n");Sleep(500);
    print("o : 你自己\n");Sleep(500);
    print("* : 终点\n");Sleep(500);
    print("T : 炸弹,可以摧毁以'o'为中心的5*5的范围内所有'#'\n"); Sleep(500);
    print("\n记得一定要用退出游戏退出,不然分数会保存不了哦!\n");
    system("pause");
}
void menu(){
    start:
    system("mode con lines=9 cols=51");
    head();
    print(">>游戏说明\n");
    print("  开始游戏\n");
    print("  作者的个人主页\n");
    print("  退出游戏\n");
    printf("--------------------------------------------------\n");
    print("k选择,s确定");
    ch=_getch();k=1;
    while (ch!='s'){
        k++;
        if (k>4) k=1;
        system("cls");
        head();
        if (k==1) printf(">>游戏说明\n");
        else printf("  游戏说明\n");
        if (k==2) printf(">>开始游戏\n");
        else printf("  开始游戏\n");
        if (k==3) printf(">>作者的个人主页\n");
        else printf("  作者的个人主页\n");
        if (k==4) printf(">>退出游戏\n");
        else printf("  退出游戏\n");
        printf("--------------------------------------------------\n");
        printf("k选择,s确定");
        ch=_getch();
    }
    if (k==1){
        show();
        goto start;
    }
    else if (k==2){
        Game();
        goto start;
    }
    else if (k==3){
        system("start https://www.acwing.com/user/myspace/index/130081/");
        system("start https://www.luogu.com.cn/user/457666");
        system("start https://blog.csdn.net/yer_cas?type=blog");
        system("start https://iwo.im/?q=zhq");
        goto start;
    }
}
bool Maph(){
    int zijix=2,zijiy=2,zhondx=n-1,zhondy=n-1,sj;
    mp[2][2]='o';
    mp[n-1][n-1]='*';
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(mp[i][j]!='o'&&mp[i][j]!='*'){
                sj=random(0,10);
                if(sj==1||sj==2||sj==4||sj==8) mp[i][j]='#';
            }
        }
    }
}
bool Map(){
    Maph();
    int qdx,qdy,zdx,zdy,xx,yy;
    queue<pair<int,int> > q;
    memset(yzmp,0,sizeof yzmp);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(mp[i][j]=='o') qdx=i,qdy=j,yzmp[i][j]=1;
            if(mp[i][j]=='*') zdx=i,zdy=j;
            if(mp[i][j]=='#') yzmp[i][j]=1;
            if(mp[i][j]==' ') yzmp[i][j]=0;
        }
    }
    q.push(make_pair(qdx,qdy));
    while(!q.empty()){
        int x=q.front().first;
        int y=q.front().second;
        if(x==zdx&&y==zdy) return true;
        q.pop();
        for(int i=0;i<4;i++){
            xx=x+tag[i][0],yy=y+tag[i][1];
            if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&yzmp[xx][yy]==0) yzmp[xx][yy]=1,q.push(make_pair(xx,yy));
        }
    }
    return false;
}
void p(int step){
    int xx=x-3,yy=y-3,xxx=x+3,yyy=y+3;
    for (int i=1;i<=n;i++){
        for (int j=1;j<=n;j++){
            if (mp[i][j]=='*') printf(" *");
            else if (i<xx||j<yy||i>xxx||j>yyy) printf(" ?");
            else if (mp[i][j]=='T') color(180),printf(" T"),color(191);
            else if (mp[i][j]=='o') color(177),printf(" o"),color(191);
            else if (mp[i][j]=='#') color(655),printf(" #"),color(191);
            else printf(" %c",mp[i][j]);
        }
        printf("\n");
    }
    clock_t now=clock();
    printf("你已经走了%.2lf秒\n",(double)(1.*now-start_time)/CLOCKS_PER_SEC);
    printf("退出游戏按E\n");
}
void Boom(int x,int y){
    for (int i=x-2;i<=x+2;i++){
        for (int j=y-2;j<=y+2;j++){
            if (i<1||j<1||i>n||j>n) continue;
            if (mp[i][j]=='#') mp[i][j]=' ';
        }
    }
    mp[x][y]=' ';
}
void Game(){
    system("mode con lines=26 cols=51");
    srand(time(NULL));
    head();
    print("旅行者(不要骂我抄袭原神!),您所要闯荡的迷宫面积要多大呢?\n");
    Sleep(500);
    print("行列(大于9小于51,否则游戏将强制关闭):");
    char ch1=_getch();
    cout<<ch1;
    char ch2=_getch();
    cout<<ch2;
    if ((ch1-'0')*10+(ch2-'0')>50||(ch1-'0')*10+(ch2-'0')<10) exit(0);
    n=n=(ch1-'0')*10+(ch2-'0');
    head();
    print("正在加载地图......");
    printf("\n--------------------------------------------------\n");
    for (int i=0;i<=n+1;i++){
        for (int j=0;j<=n+1;j++) mp[i][j]=' ';
    }
    while (!Map()){
        for (int i=0;i<=n+1;i++){
            for (int j=0;j<=n+1;j++) mp[i][j]=' ';
        }
    }
    mp[n-1][n-1]='*';
    for (int i=1;i<=n;i++){
        for (int j=1;j<=n;j++){
            if (mp[i][j]=='o'||mp[i][j]=='*') continue;
            int r=rand()%40;
            if (r==0) mp[i][j]='T';
        }
    }
    Sleep(1024);
    head();
    print("正在解压中......\n");
    for (int i=1;i<=6;i++){
        head();
        printf("正在解压中......\n");
        switch (i){
            case 1: printf("▁");break;
            case 2: printf("▁▂");break;
            case 3: printf("▁▂▃");break;
            case 4: printf("▁▂▃▅");break;
            case 5: printf("▁▂▃▅▆");break;
            case 6: printf("▁▂▃▅▆▇");break;
        }
        printf("\n--------------------------------------------------\n");
        Sleep(random(100,1000));
    }
    x=2;y=2;
    char ch;
    int xx,yy,step=0;
    if (n==10) system("mode con lines=26 cols=52");
    else if (n==11) system("mode con lines=27 cols=54");
    else if (n==12) system("mode con lines=28 cols=56");
    else if (n==13) system("mode con lines=29 cols=58");
    else if (n==14) system("mode con lines=30 cols=60");
    else if (n==15) system("mode con lines=31 cols=62");
    else if (n==16) system("mode con lines=32 cols=64");
    else if (n==17) system("mode con lines=33 cols=66");
    else if (n==18) system("mode con lines=34 cols=68");
    else if (n==19) system("mode con lines=35 cols=70");
    else if (n==20) system("mode con lines=36 cols=72");
    else if (n==21) system("mode con lines=37 cols=74");
    else if (n==22) system("mode con lines=38 cols=76");
    else if (n==23) system("mode con lines=39 cols=78");
    else if (n==24) system("mode con lines=40 cols=80");
    else if (n==25) system("mode con lines=41 cols=82");
    else if (n==26) system("mode con lines=42 cols=84");
    else if (n==27) system("mode con lines=43 cols=86");
    else if (n==28) system("mode con lines=44 cols=88");
    else if (n==29) system("mode con lines=45 cols=90");
    else if (n==30) system("mode con lines=46 cols=92");
    else if (n==31) system("mode con lines=47 cols=94");
    else if (n==32) system("mode con lines=48 cols=96");
    else if (n==33) system("mode con lines=49 cols=98");
    else if (n==34) system("mode con lines=50 cols=100");
    else if (n==35) system("mode con lines=51 cols=102");
    else if (n==36) system("mode con lines=52 cols=104");
    else if (n==37) system("mode con lines=53 cols=106");
    else if (n==38) system("mode con lines=54 cols=108");
    else if (n==39) system("mode con lines=55 cols=110");
    else if (n==40) system("mode con lines=56 cols=112");
    else if (n==41) system("mode con lines=57 cols=114");
    else if (n==42) system("mode con lines=58 cols=116");
    else if (n==43) system("mode con lines=59 cols=118");
    else if (n==44) system("mode con lines=60 cols=120");
    else if (n==45) system("mode con lines=61 cols=122");
    else if (n==46) system("mode con lines=62 cols=124");
    else if (n==47) system("mode con lines=63 cols=126");
    else if (n==48) system("mode con lines=64 cols=128");
    else if (n==49) system("mode con lines=65 cols=130");
    else if (n==50) system("mode con lines=66 cols=132");
    start_time=clock();
    while (!(x==n-1&&y==n-1)){
        ask:
        head();
        p(step);
        printf("--------------------------------------------------\n");
        ch=_getch();
        if (ch=='w'||ch=='W'){
            xx=x-1;yy=y;
            if (xx<1||yy<1||xx>n||yy>n||mp[xx][yy]=='#') goto ask;
            else{
                if (mp[xx][yy]=='T') Boom(xx,yy);
                mp[xx][yy]=mp[x][y],mp[x][y]=' ',x=xx,y=yy;
            }
            step++;
        }
        else if (ch=='a'||ch=='A'){
            xx=x;yy=y-1;
            if (xx<1||yy<1||xx>n||yy>n||mp[xx][yy]=='#') goto ask;
            else{
                if (mp[xx][yy]=='T') Boom(xx,yy);
                mp[xx][yy]=mp[x][y],mp[x][y]=' ',x=xx,y=yy;
            }
            step++;
        }
        else if (ch=='s'||ch=='S'){
            xx=x+1;yy=y;
            if (xx<1||yy<1||xx>n||yy>n||mp[xx][yy]=='#') goto ask;
            else{
                if (mp[xx][yy]=='T') Boom(xx,yy);
                mp[xx][yy]=mp[x][y],mp[x][y]=' ',x=xx,y=yy;
            }
            step++;
        }
        else if (ch=='d'||ch=='D'){
            xx=x;yy=y+1;
            if (xx<1||yy<1||xx>n||yy>n||mp[xx][yy]=='#') goto ask;
            else{
                if (mp[xx][yy]=='T') Boom(xx,yy);
                mp[xx][yy]=mp[x][y],mp[x][y]=' ',x=xx,y=yy;
            }
            step++;
        }
        else if (ch=='e'||ch=='E'){
            head();
            print("正在退出ing...");
            step++;
            return ;
        }
    }
    clock_t end_time=clock();
    if (ms[n]==0) ms[n]=(double)((1.*end_time-start_time)/CLOCKS_PER_SEC);
    else ms[n]=min(ms[n],(double)((1.*end_time-start_time)/CLOCKS_PER_SEC));
    head();
    printf("\n\n\n                         ");
    print("你一共走了");Sleep(500);
    printf("%.2lf",(double)((1.*end_time-start_time)/CLOCKS_PER_SEC));Sleep(500);
    print("秒");
    printf("\n                         ");
    print("真棒!(额)");
    Sleep(1000);
}
int main(){
    system("title 迷宫");
    srand(time(NULL));
    HideCursor(true);
    HWND hwnd=GetConsoleWindow();
    HMENU hmenu=GetSystemMenu(hwnd,false);
    RemoveMenu(hmenu,SC_CLOSE,MF_BYCOMMAND);
    LONG style=GetWindowLong(hwnd,GWL_STYLE);
    style &=~(WS_MINIMIZEBOX);
    SetWindowLong(hwnd,GWL_STYLE,style);
    SetWindowPos(hwnd,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
    ShowWindow(hwnd,SW_SHOWNORMAL);
    DestroyMenu(hmenu);
    ReleaseDC(hwnd,NULL);
    freopen("data.txt","r",stdin);
    for (int i=1;i<=100;i++) cin>>ms[i];
    fclose(stdin);
    hseanshu();
    menu();
    Save_Data();
    return 0;
}

待优化功能

1.实现炸弹功能 √
2.颜色 √
3.输出时控制尺寸 √
4.把cout都换成printf
5.实现怪物功能
6.自定义地图大小 √
7.使用freopenfclose实现永久保存游戏数据 √
8.在游戏时输入无效字符不加入个数 √
9.在游戏时可以任意时间退出游戏 √
10.将步数改为秒数 √
11.显示退出动画 √

更新日志

1.0版本
2.0版本
3.0版本

该版本主要更新内容:

  1. 修复已知Bug:游戏只可以加载一次,由于数组没有清空.
  2. 成功将步数改为秒数,且与永久保存游戏数据不冲突.



题目传送门

思考

这题可以用DP做,也可以用贪心做.
DP不是很好,所以我打的是贪心.
贪心主要是贪nums数组的最大值.显而易见
我们可以从num[0]开始累加,累加到$\le0$为止,然后从下一个累加.
很显然,这是一个最优解.
那么,我们就要考虑细节问题了.

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int res=0,sum=0,len=nums.size();
        for (int i=0;i<len;i++){
            if (sum+nums[i]>0) sum+=nums[i];
            else sum=0;
            res=max(res,sum);
        }
        return res;
    }
};

这是我第一次打的,WA了.
题目中有这么一句话:

数组中一个或连续的多个整数组成一个子数组。
我没有考虑空数组,WA了.
那么,答案可能的最小值是多少呢?
通过分析,答案可能的最小值只可能为nums数组的最大值.
而且,当sum0时,答案是不能与其比较大小的.
所以,我们可以打出以下代码:

代码(C++)

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int res=-2e9,sum=0,len=nums.size();
        for (int i=0;i<len;i++) res=max(res,nums[i]);  //预处理res的值.
        for (int i=0;i<len;i++){
            if (sum+nums[i]>0) sum+=nums[i],res=max(res,sum);  //求最大值.
            else sum=0;  //若sum<=0,那么再从0开始计数.此处res不能求最大.
        }
        return res;  //返回答案.
    }
};



$\Huge\color{blue}{\text{迷宫3.0}}$

下一版本传送门

前言

这个游戏是我从zhq那里搞来灵感的(不要问我为什么他的名字就是七夕祭里的那只鸡!),希望他不会介意(额).
这也就短短360行代码,不多的,也就肝了亿会儿~
这个游戏还是有很多问题的,望大家多多发现$Bug$,评论区见~

代码(C++)

#include<bits/stdc++.h>
#include<windows.h>
#include<stdlib.h>
#include<conio.h>
#define random(a,b) (rand()%(b-a)+a)
using namespace std;
char mp[105][105],xs[105][105];
int bs,ms[105];
bool yzmp[105][105];
int k,x,y,n,m;
char ch;
const int tag[5][2]={{0,1},{1,0},{-1,0},{0,-1}};
void Boom(int,int);
void print(string);
void color(int);
void HideCursor(bool);
void head();
void show();
void Game();
bool Map();
bool Maph();
void p(int);
void hseanshu();
void Save_Data();
void Save_Data(){
    freopen("data.txt","w",stdout);
    for (int i=1;i<=100;i++) cout<<ms[i]<<"\n";
    fclose(stdout);
}
void hseanshu(){
    HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
    CONSOLE_CURSOR_INFO CursorInfo;
    GetConsoleCursorInfo(handle, &CursorInfo);
    CursorInfo.bVisible = false;
    SetConsoleCursorInfo(handle, &CursorInfo);
}
void head(){
    system("cls");
    printf("\t\t\t迷宫\n");
    printf("--------------------------------------------------\n");
}
void HideCursor(bool Visible){
    CONSOLE_CURSOR_INFO Cursor;
    Cursor.bVisible = !Visible;
    Cursor.dwSize = sizeof(Cursor);
    HANDLE Hand = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleCursorInfo(Hand, &Cursor);
}
void color(int a){
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void print(string s){
    for (int i=0;s[i]!='\0';i++){
        printf("%c",s[i]);
        Sleep(30);
    }
}
void show(){
    system("mode con lines=17 cols=51");
    head();
    print("本游戏由 我是好人&zhq 制作\n");
    Sleep(1000);
    print("用WASD移动哦!\n");
    Sleep(500);
    print("迷宫内永远笼罩着雾,只有在以你为中心的7*7的范围内才能勉强看得清...\n");
    print("你会被传送到第2行第2列...\n");
    print("迷宫内有各种道具,有不同的用处...\n");
    print("在迷宫的右下角,是生的希望...\n");
    print("旅行者,好好去探索吧!\n");
    Sleep(500);
    print("游戏内的字符意义:\n");Sleep(500);
    print("# : 墙,不可进入不可穿越\n");Sleep(500);
    print("o : 你自己\n");Sleep(500);
    print("* : 终点\n");Sleep(500);
    print("T : 炸弹,可以摧毁以'o'为中心的5*5的范围内所有'#'\n"); Sleep(500);
    print("\n记得一定要用退出游戏退出,不然分数会保存不了哦!\n");
    system("pause");
}
void menu(){
    start:
    system("mode con lines=9 cols=51");
    head();
    print(">>游戏说明\n");
    print("  开始游戏\n");
    print("  作者的个人主页\n");
    print("  退出游戏\n");
    printf("--------------------------------------------------\n");
    print("k选择,s确定");
    ch=_getch();k=1;
    while (ch!='s'){
        k++;
        if (k>4) k=1;
        system("cls");
        head();
        if (k==1) printf(">>游戏说明\n");
        else printf("  游戏说明\n");
        if (k==2) printf(">>开始游戏\n");
        else printf("  开始游戏\n");
        if (k==3) printf(">>作者的个人主页\n");
        else printf("  作者的个人主页\n");
        if (k==4) printf(">>退出游戏\n");
        else printf("  退出游戏\n");
        printf("--------------------------------------------------\n");
        printf("k选择,s确定");
        ch=_getch();
    }
    if (k==1){
        show();
        goto start;
    }
    else if (k==2){
        Game();
        goto start;
    }
    else if (k==3){
        system("start https://www.acwing.com/user/myspace/index/130081/");
        system("start https://www.luogu.com.cn/user/457666");
        system("start https://blog.csdn.net/yer_cas?type=blog");
        system("start https://iwo.im/?q=zhq");
        goto start;
    }
}
bool Maph(){
    int zijix=2,zijiy=2,zhondx=n-1,zhondy=m-1,sj;
    mp[2][2]='o';
    mp[n-1][m-1]='*';
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(mp[i][j]!='o'&&mp[i][j]!='*'){
                sj=random(0,10);
                if(sj==1||sj==2||sj==4||sj==8) mp[i][j]='#';
            }
        }
    }
}
bool Map(){
    Maph();
    int qdx,qdy,zdx,zdy,xx,yy;
    queue<pair<int,int> > q;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(mp[i][j]=='o') qdx=i,qdy=j,yzmp[i][j]=1;
            if(mp[i][j]=='*') zdx=i,zdy=j;
            if(mp[i][j]=='#') yzmp[i][j]=1;
            if(mp[i][j]==' ') yzmp[i][j]=0;
        }
    }
    q.push(make_pair(qdx,qdy));
    while(!q.empty()){
        int x=q.front().first;
        int y=q.front().second;
        if(x==zdx&&y==zdy) return true;
        q.pop();
        for(int i=0;i<4;i++){
            xx=x+tag[i][0],yy=y+tag[i][1];
            if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&yzmp[xx][yy]==0) yzmp[xx][yy]=1,q.push(make_pair(xx,yy));
        }
    }
    return false;
}
void p(int step){
    int xx=x-3,yy=y-3,xxx=x+3,yyy=y+3;
    for (int i=1;i<=n;i++){
        for (int j=1;j<=m;j++){
            if (mp[i][j]=='*') printf(" *");
            else if (i<xx||j<yy||i>xxx||j>yyy) printf(" ?");
            else if (mp[i][j]=='T') color(180),printf(" T"),color(191);
            else if (mp[i][j]=='o') color(177),printf(" o"),color(191);
            else if (mp[i][j]=='#') color(655),printf(" #"),color(191);
            else printf(" %c",mp[i][j]);
        }
        printf("\n");
    }
    printf("你已经走了%d步\n",step);
    printf("退出游戏按E\n");
}
void Boom(int x,int y){
    for (int i=x-2;i<=x+2;i++){
        for (int j=y-2;j<=y+2;j++){
            if (i<1||j<1||i>n||j>m) continue;
            if (mp[i][j]=='#') mp[i][j]=' ';
        }
    }
    mp[x][y]=' ';
}
void Game(){
    system("mode con lines=26 cols=51");
    srand(time(NULL));
    head();
    print("旅行者(不要骂我抄袭原神!),您所要闯荡的迷宫面积要多大呢?\n");
    Sleep(500);
    print("行列(大于9小于51,否则游戏将强制关闭):");
    char ch1=_getch();
    cout<<ch1;
    char ch2=_getch();
    cout<<ch2;
    if ((ch1-'0')*10+(ch2-'0')>50||(ch1-'0')*10+(ch2-'0')<10) exit(0);
    n=m=(ch1-'0')*10+(ch2-'0');
    head();
    print("正在加载地图......");
    printf("\n--------------------------------------------------\n");
    for (int i=0;i<=n+1;i++){
        for (int j=0;j<=m+1;j++) mp[i][j]=' ';
    }
    while (!Map()){
        for (int i=0;i<=n+1;i++){
            for (int j=0;j<=m+1;j++) mp[i][j]=' ';
        }
    }
    mp[n-1][m-1]='*';
    for (int i=1;i<=n;i++){
        for (int j=1;j<=m;j++){
            if (mp[i][j]=='o'||mp[i][j]=='*') continue;
            int r=rand()%40;
            if (r==0) mp[i][j]='T';
        }
    }
    Sleep(1024);
    head();
    print("正在解压中......\n");
    for (int i=1;i<=6;i++){
        head();
        printf("正在解压中......\n");
        switch (i){
            case 1: printf("▁");break;
            case 2: printf("▁▂");break;
            case 3: printf("▁▂▃");break;
            case 4: printf("▁▂▃▅");break;
            case 5: printf("▁▂▃▅▆");break;
            case 6: printf("▁▂▃▅▆▇");break;
        }
        printf("\n--------------------------------------------------\n");
        Sleep(random(100,1000));
    }
    x=2;y=2;
    char ch;
    int xx,yy,step=0;
    if (n==10) system("mode con lines=26 cols=52");
    else if (n==11) system("mode con lines=27 cols=54");
    else if (n==12) system("mode con lines=28 cols=56");
    else if (n==13) system("mode con lines=29 cols=58");
    else if (n==14) system("mode con lines=30 cols=60");
    else if (n==15) system("mode con lines=31 cols=62");
    else if (n==16) system("mode con lines=32 cols=64");
    else if (n==17) system("mode con lines=33 cols=66");
    else if (n==18) system("mode con lines=34 cols=68");
    else if (n==19) system("mode con lines=35 cols=70");
    else if (n==20) system("mode con lines=36 cols=72");
    else if (n==21) system("mode con lines=37 cols=74");
    else if (n==22) system("mode con lines=38 cols=76");
    else if (n==23) system("mode con lines=39 cols=78");
    else if (n==24) system("mode con lines=40 cols=80");
    else if (n==25) system("mode con lines=41 cols=82");
    else if (n==26) system("mode con lines=42 cols=84");
    else if (n==27) system("mode con lines=43 cols=86");
    else if (n==28) system("mode con lines=44 cols=88");
    else if (n==29) system("mode con lines=45 cols=90");
    else if (n==30) system("mode con lines=46 cols=92");
    else if (n==31) system("mode con lines=47 cols=94");
    else if (n==32) system("mode con lines=48 cols=96");
    else if (n==33) system("mode con lines=49 cols=98");
    else if (n==34) system("mode con lines=50 cols=100");
    else if (n==35) system("mode con lines=51 cols=102");
    else if (n==36) system("mode con lines=52 cols=104");
    else if (n==37) system("mode con lines=53 cols=106");
    else if (n==38) system("mode con lines=54 cols=108");
    else if (n==39) system("mode con lines=55 cols=110");
    else if (n==40) system("mode con lines=56 cols=112");
    else if (n==41) system("mode con lines=57 cols=114");
    else if (n==42) system("mode con lines=58 cols=116");
    else if (n==43) system("mode con lines=59 cols=118");
    else if (n==44) system("mode con lines=60 cols=120");
    else if (n==45) system("mode con lines=61 cols=122");
    else if (n==46) system("mode con lines=62 cols=124");
    else if (n==47) system("mode con lines=63 cols=126");
    else if (n==48) system("mode con lines=64 cols=128");
    else if (n==49) system("mode con lines=65 cols=130");
    else if (n==50) system("mode con lines=66 cols=132");
    while (!(x==n-1&&y==m-1)){
        ask:
        head();
        p(step);
        printf("--------------------------------------------------\n");
        ch=_getch();
        if (ch=='w'||ch=='W'){
            xx=x-1;yy=y;
            if (xx<1||yy<1||xx>n||yy>m||mp[xx][yy]=='#') goto ask;
            else{
                if (mp[xx][yy]=='T') Boom(xx,yy);
                mp[xx][yy]=mp[x][y],mp[x][y]=' ',x=xx,y=yy;
            }
            step++;
        }
        else if (ch=='a'||ch=='A'){
            xx=x;yy=y-1;
            if (xx<1||yy<1||xx>n||yy>m||mp[xx][yy]=='#') goto ask;
            else{
                if (mp[xx][yy]=='T') Boom(xx,yy);
                mp[xx][yy]=mp[x][y],mp[x][y]=' ',x=xx,y=yy;
            }
            step++;
        }
        else if (ch=='s'||ch=='S'){
            xx=x+1;yy=y;
            if (xx<1||yy<1||xx>n||yy>m||mp[xx][yy]=='#') goto ask;
            else{
                if (mp[xx][yy]=='T') Boom(xx,yy);
                mp[xx][yy]=mp[x][y],mp[x][y]=' ',x=xx,y=yy;
            }
            step++;
        }
        else if (ch=='d'||ch=='D'){
            xx=x;yy=y+1;
            if (xx<1||yy<1||xx>n||yy>m||mp[xx][yy]=='#') goto ask;
            else{
                if (mp[xx][yy]=='T') Boom(xx,yy);
                mp[xx][yy]=mp[x][y],mp[x][y]=' ',x=xx,y=yy;
            }
            step++;
        }
        else if (ch=='e'||ch=='E'){
            head();
            print("正在退出ing...");
            step++;
            return ;
        }
    }
    if (ms[n]==0) ms[n]=step;
    else ms[n]=min(ms[n],step);
    head();
    printf("\n\n\n                         ");
    print("你一共走了");Sleep(500);
    printf("%d",step);Sleep(500);
    print("步");
    printf("\n                         ");
    print("真棒!(额)");
    Sleep(1000);
}
int main(){
    system("title 迷宫");
    srand(time(NULL));
    HideCursor(true);
    HWND hwnd=GetConsoleWindow();
    HMENU hmenu=GetSystemMenu(hwnd,false);
    RemoveMenu(hmenu,SC_CLOSE,MF_BYCOMMAND);
    LONG style=GetWindowLong(hwnd,GWL_STYLE);
    style &=~(WS_MINIMIZEBOX);
    SetWindowLong(hwnd,GWL_STYLE,style);
    SetWindowPos(hwnd,HWND_TOP,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);
    ShowWindow(hwnd,SW_SHOWNORMAL);
    DestroyMenu(hmenu);
    ReleaseDC(hwnd,NULL);
    freopen("data.txt","r",stdin);
    for (int i=1;i<=100;i++) cin>>ms[i];
    fclose(stdin);
    hseanshu();
    menu();
    Save_Data();
    return 0;
}

待优化功能

1.实现炸弹功能 √
2.颜色 √
3.输出时控制尺寸 √
4.把cout都换成printf
5.实现怪物功能
6.自定义地图大小 √
7.使用freopenfclose实现永久保存游戏数据 √
8.在游戏时输入无效字符不加入个数 √
9.在游戏时可以任意时间退出游戏 √
10 .将步数改为秒数

更新日志

1.0版本
2.0版本