andy大宝 发表于 2020-3-14 13:30:23

C语言推箱子(更新完毕)

本帖最后由 andy大宝 于 2026-7-1 09:04 编辑

可能有点乱,如果运行不了及时告诉我……
注:提出建议者,或提供关卡的鱼油有赏~
第一关:#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
      char a={"   ###",
                        "   #*#",
                        "   # #",
                        "####O######",
                        "#*OS O *#",
                        "#####O#####",
                        "    # #",
                        "    #*#",
                        "    ###",};
   
    int i,x,y;
    char ch;
    x=4;
    y=5;
         for (i=0;i<=8;i++)
    {
                puts(a);
    }
    while (a!='@' || a!='@'|| a!='@' || a!='@')//是否过关
    {
      ch=getch();
                if (ch=='s')//按下s键
      {
            while (1)
            {
               if (a!='#' && a!='O' && a!='@')//从此开始判断
                {
                  a=' ';
                  x++;
                  a='S';
                  break;
                }
                if (a=='O' && a==' ')
                {
                  a=' ';
                  a='S';
                  a='O';
                  x++;
                  break;
                }
                if (a=='O' && a=='*')
                {
                  a=' ';
                  a='S';
                  a='@';
                  x++;
                  break;
                }
                if (a=='@' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        x++;
                  break;
                                }
                                if (a=='@' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        x++;
                  break;
                }
                break;
            }
      }
                if (ch=='w')//按下w键
                {
                        while (1)
                        {
                                if (a!='#' && a!='O' && a!='@')//从此开始判断
                                {
                                        a=' ';
                                        x--;
                                        a='S';
                  break;
                                }
                                if (a=='O' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        x--;
                  break;
                                }       
                                if (a=='O' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        x--;
                  break;
                }
                                if (a=='@' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        x--;
                  break;
                                }
                                if (a=='@' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        x--;
                  break;
                                }
                break;
            }
      }
      if (ch=='a')//按下a键
                {
                        while (1)
                        {
                                if (a!='#' && a!='O' && a!='@')//从此开始判断
                                {
                                        a=' ';
                                        y--;
                                        a='S';
                  break;
                                }
                                if (a=='O' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        y--;
                  break;
                                }       
                                if (a=='O' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        y--;
                  break;
                }
                                if (a=='@' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        y--;
                  break;
                                }
                                if (a=='@' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        y--;
                  break;
                                }
                break;
            }
      }
      if (ch=='d')//按下d键
                {
                        while (1)
                        {
                                if (a!='#' && a!='O' && a!='@')//从此开始判断
                                {
                                        a=' ';
                                        y++;
                                        a='S';
                                        break;
                                }
                                if (a=='O' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        y++;
                                        break;
                                }       
                                if (a=='O' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        y++;
                                        break;
                }
                                if (a=='@' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        y++;
                                        break;
                                }
                                if (a=='@' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        y++;
                                        break;
                                }
                break;
            }
      }
      system("cls");
      for (i=0;i<=8;i++)//刷新
      {
                puts(a);
      }
    }
    system("cls");
    printf("挑战成功!");
    system("pause");
    return 0;
}

第二关:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main()
{
      char a={"##########",
                        "##   ###",
                        "##O###   #",
                        "# S OO #",
                        "# **# O#",
                        "##**#    #",
                        "##########",};   
    int i,x,y;
    char ch;
    x=3;
    y=2;
         for (i=0;i<=7;i++)
    {
                puts(a);
    }
    while (a!='@' || a!='@'|| a!='@' || a!='@')//是否过关
    {
      ch=getch();
                if (ch=='s')//按下s键
      {
            while (1)
            {
               if (a!='#' && a!='O' && a!='@')//从此开始判断
                {
                  a=' ';
                  x++;
                  a='S';
                  break;
                }
                if (a=='O' && a==' ')
                {
                  a=' ';
                  a='S';
                  a='O';
                  x++;
                  break;
                }
                if (a=='O' && a=='*')
                {
                  a=' ';
                  a='S';
                  a='@';
                  x++;
                  break;
                }
                if (a=='@' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        x++;
                  break;
                                }
                                if (a=='@' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        x++;
                  break;
                }
                break;
            }
      }
                if (ch=='w')//按下w键
                {
                        while (1)
                        {
                                if (a!='#' && a!='O' && a!='@')//从此开始判断
                                {
                                        a=' ';
                                        x--;
                                        a='S';
                  break;
                                }
                                if (a=='O' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        x--;
                  break;
                                }       
                                if (a=='O' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        x--;
                  break;
                }
                                if (a=='@' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        x--;
                  break;
                                }
                                if (a=='@' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        x--;
                  break;
                                }
                break;
            }
      }
      if (ch=='a')//按下a键
                {
                        while (1)
                        {
                                if (a!='#' && a!='O' && a!='@')//从此开始判断
                                {
                                        a=' ';
                                        y--;
                                        a='S';
                  break;
                                }
                                if (a=='O' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        y--;
                  break;
                                }       
                                if (a=='O' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        y--;
                  break;
                }
                                if (a=='@' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        y--;
                  break;
                                }
                                if (a=='@' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        y--;
                  break;
                                }
                break;
            }
      }
      if (ch=='d')//按下d键
                {
                        while (1)
                        {
                                if (a!='#' && a!='O' && a!='@')//从此开始判断
                                {
                                        a=' ';
                                        y++;
                                        a='S';
                                        break;
                                }
                                if (a=='O' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        y++;
                                        break;
                                }       
                                if (a=='O' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        y++;
                                        break;
                }
                                if (a=='@' && a==' ')
                                {
                                        a=' ';
                                        a='S';
                                        a='O';
                                        y++;
                                        break;
                                }
                                if (a=='@' && a=='*')
                                {
                                        a=' ';
                                        a='S';
                                        a='@';
                                        y++;
                                        break;
                                }
                break;
            }
      }
      system("cls");
      if(a!= '@')
                        if (a!= 'S')
                                a='*';
      if(a!= '@')
                        if (a!= 'S')
                                a='*';
      if(a!= '@')
                        if (a!= 'S')
                                a='*';
      if(a!= '@')
                        if (a!= 'S')
                                a='*';
      for (i=0;i<=8;i++)//刷新
      {
                puts(a);
      }
    }
    system("cls");
    printf("挑战成功!");
    system("pause");
    return 0;
}
如果此贴对您有帮助,别忘了评分{:7_139:}

乘号 发表于 2020-3-14 17:29:51

看看

wuqramy 发表于 2020-3-15 13:24:03

哈哈,评个分{:7_139:}

andy大宝 发表于 2020-3-15 16:00:24

wuqramy 发表于 2020-3-15 13:24
哈哈,评个分

谢谢{:7_139:}你们的鼓励是我最大的动力~

lixiangyv 发表于 2020-3-15 16:16:31

看一看

V流年V 发表于 2020-3-16 23:08:46

看一看

11111lqd 发表于 2020-3-17 14:43:09

555

407102617 发表于 2020-3-17 14:57:21

Mike_python小 发表于 2020-3-17 16:12:41

看看

王富帅 发表于 2020-3-17 16:31:28

看看

未有名 发表于 2020-3-17 17:00:04

看看

王富帅 发表于 2020-3-19 10:24:08

看看

铃屋什造 发表于 2020-3-19 14:42:15

好难啊

majian890324 发表于 2020-5-2 16:19:06

试一下,顶楼主

易烊千玺女友 发表于 2020-5-5 08:39:01

第26行代码没有声明

liuzhengyuan 发表于 2020-5-5 15:35:43

过来围观一下{:10_334:}

andy大宝 发表于 2020-5-10 18:56:04

易烊千玺女友 发表于 2020-5-5 08:39
第26行代码没有声明

捕捉键盘字符的意思

java2python 发表于 2020-5-22 18:39:16

本帖最后由 java2python 于 2020-5-23 03:05 编辑

无需回复可见的楼主

java2python 发表于 2020-5-23 03:07:19

本帖最后由 java2python 于 2020-5-23 20:12 编辑

重复代码不少(楼主别生气):
控制台光标位置可以设定的(没有闪烁),
另外a)写法,改成行优先a,比如printf,实际打印的a,x只是一个行中的列位置
取得游戏数据放到了get_new_game函数中,
由于修改贴不了代码格式,只能再回一贴:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>

static int dxy={{1,0},{-1,0},{0,-1},{0,1}};
static char tans_table = {{'O',' ','O'},{'O','*','@'},{'@',' ','O'},{'@','*','@'}};

HANDLE init_con(){
    SMALL_RECT winPon={0,0,25,10};
    HANDLE con=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD buf={26,11};

    SetConsoleWindowInfo(con,1,&winPon);
    SetConsoleScreenBufferSize(con,buf);
        SetConsoleTextAttribute(con, 6 | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
        CONSOLE_CURSOR_INFO cinfo;
        cinfo.dwSize = 1;
        cinfo.bVisible = false;
        SetConsoleCursorInfo(con,&cinfo);
        return con;
}
void print_char(HANDLE con,int y,int x,char c){
        if(c=='\0') return;
        COORD coord;
        coord.X = x;
        coord.Y = y;
        SetConsoleCursorPosition(con, coord);
        int fore_color=7;
        if(c == 'O') fore_color = 6;
        else if(c == 'S') fore_color = 7;
        else if(c == '#') fore_color = 12;
        else if(c == '*') fore_color = 3;
        else if(c == '@') fore_color = 2;
        SetConsoleTextAttribute(con, fore_color | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
        putchar(c);
}

void get_new_game(char a,int no,COORD *s_pos,COORD star[],int *pStar_cnt){
        if(no == 1){
                char aa={"   ###",
                                                "   #*#",
                                                "   # #",
                                                "####O######",
                                                "#*OS O *#",
                                                "#####O#####",
                                                "    # #",
                                                "    #*#",
                                                "    ###",};
                for(int y=0;y<20;y++) for(int x=0;x<20;x++) a = aa;
        }else if(no == 2){
                char aa={"##########",
                                "##   ###",
                                "##O###   #",
                                "# S OO #",
                                "#** # O#",
                                "##**#    #",
                                "##########",};
                for(int y=0;y<20;y++) for(int x=0;x<20;x++) a = aa;
        }
        int star_cnt = 0;
        for(int y=0;y<20;y++) for(int x=0;x<20;x++) {
                //a = aa;
                if(a == 'S'){
                        s_pos->X = x;
                        s_pos->Y = y;
                }
                if(a == '*'){
                        star.X = x;
                        star.Y = y;
                        star_cnt++;
                }
        }
        *pStar_cnt = star_cnt;
}

int play(HANDLE con,int no)
{
        char a;
        COORD s_pos,next_pos,next2_pos;
        COORD star;
        int star_cnt = 0;
        get_new_game(a,no,&s_pos,star,&star_cnt);

        int direct=0;
        int cur_a,next_a,next2_a,loc_change,star_in_pos=0;
        char ch;
        for (int y=0;y<=7;y++) for(int x=0;x<20;x++) print_char(con,y,x,a);

        while (star_in_pos != star_cnt)//是否过关
        {
                ch=getch();
                if (ch=='s') direct = 0;//按下s键
                else if (ch=='w') direct = 1;//按下w键
                else if (ch=='a') direct = 2;//按下a键
                else if (ch=='d') direct = 3;//按下d键
                else direct = -1;

                if(0<=direct && direct <=3)
                {
                        loc_change = 0;
                        next_pos.Y = s_pos.Y+dxy;
                        next_pos.X = s_pos.X+dxy;
                        next2_pos.Y = next_pos.Y+dxy;
                        next2_pos.X = next_pos.X+dxy;
                        next_a = a;
                        next2_a = a;
                        if (next_a !='#' && next_a !='O' && next_a!='@')//从此开始判断
                        {
                                loc_change = 1;
                        }else {
                                for(int i=0;i<4;i++){
                                        if (next_a == tans_table && next2_a == tans_table)
                                        {
                                                a=tans_table;
                                                print_char(con,next2_pos.Y,next2_pos.X,tans_table);
                                                loc_change = 1;
                                                break;
                                        }
                                }
                        }
                        if(loc_change == 1){
                                a=' ';
                                a='S';
                                print_char(con,s_pos.Y,s_pos.X,' ');
                                print_char(con,next_pos.Y,next_pos.X,'S');
                                for(int i=0;i<star_cnt;i++){
                                        if(s_pos.X == star.X && s_pos.Y== star.Y){
                                                cur_a = a;
                                                if(cur_a != 'S' && cur_a != '@') {
                                                        a='*';
                                                        print_char(con,s_pos.Y,s_pos.X,'*');
                                                }
                                        }
                                }
                                s_pos.Y = next_pos.Y;s_pos.X = next_pos.X;
                                star_in_pos = 0;
                                for(int i=0;i<star_cnt;i++){
                                        if(a.Y].X] == '@') star_in_pos++;
                                }
                        }
                }
        }
        system("cls");
        printf("挑战成功!");
        system("pause");
        system("cls");
        return 0;
}

int main(){
        HANDLE con = init_con();
        play(con,1);
        play(con,2);
}

aaron.yang 发表于 2020-5-23 13:09:42

看看
页: [1] 2 3 4 5
查看完整版本: C语言推箱子(更新完毕)