栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

初识c语言(四)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初识c语言(四)

1、在windows种把getch.h放入共享文件夹

2、在Ubuntu终端输入cd /media/sf_Share/ 进入共享文件夹

3、复制getch.h到c标准库中

    sudo cp getch.h /usr/include/

4、加读权限

    sudo chmod +r /usr/include/getch.h

5、导入getch.h头文件,使用getch()函数获取键值

    Ubuntu下的键值:

    上: 183  下: 184  左: 186  右: 185

走迷宫:

    数据分析:

        1、定义二维字符数组作为迷宫地图

        2、定义变量记录角色的位置 x y

        3、时间: time(NULL) 获取1970-1-1到运行时过了总秒数

    逻辑分析:

        进入死循环:

            1、打印地图

            2、等待获取方向键并处理

                判断前方是不是路' '

                    如果是路:

                        1、把旧位置变成' '

                        2、把新位置变成'@'

                        3、更新角色位置坐标 x y

            3、判断是否到达出口

                如果是:程序结束

#include 
#include 
#include 
#include 

int main(int argc,const char* argv[])
{
    char maze[10][10]={
        {'#','#','#','#','#','#','#','#','#','#'},
        {'#',' ','#',' ',' ',' ',' ',' ','#','#'},
        {'#','@',' ',' ','#',' ','#',' ',' ','#'},
        {'#','#','#','#','#',' ','#','#',' ','#'},
        {'#',' ','#',' ',' ',' ',' ','#',' ','#'},
        {'#',' ',' ',' ','#','#','#','#',' ','#'},
        {'#',' ','#','#','#',' ',' ','#',' ','#'},
        {'#',' ','#',' ','#','#',' ','#',' ','#'},
        {'#',' ',' ',' ',' ',' ',' ','#',' ',' '},
        {'#','#','#','#','#','#',' ','#','#','#'}
        };
    time_t s1,s2;
    s1 = time(NULL);
    // 记录角色位置
    char man_x = 2,man_y = 1,flag = 0;
    for(;;)
    {
        //  清理屏幕
        system("clear");
        printf("走迷宫小游戏,按上下左右键移动角色!nn");

        //  显示地图
        for(int i=0; i<10; i++)
        {
            for(int j=0;j<10;j++)
            {
                printf("%c ",maze[i][j]);
            }
            printf("n");
        }
        if(1 == flag)
        {
            printf("游戏胜利,总共用时%ld秒!n",s2-s1);
            return 0;
        }

        //  获取方向键处理

        switch(getch())
        {
            case 183:    //向上
                if(' ' == (maze[man_x-1][man_y]))
                {
                    maze[man_x][man_y] = ' ';
                    maze[--man_x][man_y] = '@';
                }
                break;
            case 184:    //向下
                if(' ' == (maze[man_x+1][man_y]))
                {
                    maze[man_x][man_y] = ' ';
                    maze[++man_x][man_y] = '@';
                }
                break;
            case 186:    //向左
                if(' ' == (maze[man_x][man_y-1]))
                {
                    maze[man_x][man_y] = ' ';
                    maze[man_x][--man_y] = '@';
                }
                break;
            case 185:    //向右
                if(' ' == (maze[man_x][man_y+1]))
                {
                    maze[man_x][man_y] = ' ';
                    maze[man_x][++man_y] = '@';
                }
                break;
        }
        if(1 == man_x && 1 == man_y && 0 == flag)
        {
            flag = 1;
            s2 = time(NULL);
        }
    }
}

推箱子:

    数据分析:

        1、确定数值与字符的对应关系、

            0     ' '    路

            1     '@'    人

            2     '#'    墙

            3     '$'    箱子

            4     'O'    目标

            5     '@'    人在目标上

            7     '$'    箱子在目标上

        2、定义8*8的二维数组作为地图

        3、定义记录角色位置的变量 x y

        4、定义记录步数的变量

    逻辑分析:

        进入死循环:

            1、清理屏幕、显示地图

                if(0 == map[i][j])  printf(" ");

            2、判断是否游戏胜利

            3、获取方向键并处理

                前方是路/目标点,参考走迷宫

                    前方       +1

                    原位置     -1

                    更新坐标

                前方是箱子

                    箱子的前方是路/目标点,参考走迷宫

                        人前方的前方    +3

                        人前方         -3+1

                        人原位置       -1

                        更新左边

#include 
#include 
#include 

int main(int argc,const char* argv[])
{
    int cnt=0;
    char Sokoban[8][8]={
        {0,0,2,2,2,2,0,0},
        {0,0,2,4,4,2,0,0},
        {0,2,2,0,4,2,2,0},
        {0,2,0,0,3,4,2,0},
        {2,2,0,3,0,0,2,2},
        {2,0,0,2,3,3,0,2},
        {2,0,0,1,0,0,0,2},
        {2,2,2,2,2,2,2,2}
        };
    // 记录角色位置
    char man_x = 6,man_y = 3,flag = 0;
    for(;;)
    {   
        //  清理屏幕
        system("clear");
        cnt++;
        printf("推箱子小游戏,按上下左右键移动角色!nn");
    
        //  显示地图
        for(int i=0; i<8; i++)
        {
            for(int j=0;j<8;j++)
            {
                switch(Sokoban[i][j])
                {
                    case 0:
                        printf("  ");
                        break;
                    case 1:
                        printf("@ ");
                        break;
                    case 2:
                        printf("# ");
                        break;
                    case 3:
                        printf("$ ");
                        break;
                    case 4:
                        printf("O ");
                        break;
                    case 5:
                        printf("@ ");
                        break;
                    case 7:
                        printf("$ ");
                        break;
                }
            }
            printf("n");
        }
        if(1 == flag)
        {
            printf("游戏胜利,共走了%d步!n",cnt-1);
            return 0;
        }

        //  获取方向键处理

        switch(getch())
        {
            case 183:    //向上
                if(0  == (Sokoban[man_x-1][man_y]) || 4 == (Sokoban[man_x-1][man_y]))
                {
                    Sokoban[man_x][man_y] -= 1;
                    Sokoban[--man_x][man_y] += 1;
                }
                else if(3  == (Sokoban[man_x-1][man_y]) || 7  == (Sokoban[man_x-1][man_y]))
                {
                    if(0  == (Sokoban[man_x-2][man_y]) || 4  == (Sokoban[man_x-2][man_y]))
                    {
                        Sokoban[man_x][man_y] -= 1;
                        Sokoban[--man_x][man_y] -= 2;
                        Sokoban[man_x-1][man_y] += 3;
                    }
                }
                break;
            case 184:    //向下
                if(0 == (Sokoban[man_x+1][man_y]) || 4 == (Sokoban[man_x+1][man_y]))
                {
                    Sokoban[man_x][man_y] -= 1;
                    Sokoban[++man_x][man_y] += 1;
                }
                else if(3  == (Sokoban[man_x+1][man_y]) || 7  == (Sokoban[man_x+1][man_y]))
                {
                    if(0  == (Sokoban[man_x-2][man_y]) || 4  == (Sokoban[man_x-2][man_y]))
                    {
                        Sokoban[man_x][man_y] -= 1;
                        Sokoban[++man_x][man_y] -= 2;
                        Sokoban[man_x+1][man_y] += 3;
                    }
                }
                break;
            case 186:    //向左
                if(0 == (Sokoban[man_x][man_y-1]) || 4 == (Sokoban[man_x][man_y-1]))
                {
                    Sokoban[man_x][man_y] -= 1;
                    Sokoban[man_x][--man_y] += 1;
                }
                else if(3  == (Sokoban[man_x][man_y-1]) || 7  == (Sokoban[man_x][man_y-1]))
                {
                    if(0  == (Sokoban[man_x][man_y-2]) || 4  == (Sokoban[man_x][man_y-2]))
                    {
                        Sokoban[man_x][man_y] -= 1;
                        Sokoban[man_x][--man_y] -= 2;
                        Sokoban[man_x][man_y-1] += 3;
                    }
                }
                break;
            case 185:    //向右
                if(0 == (Sokoban[man_x][man_y+1]) || 4 == (Sokoban[man_x][man_y+1]))
                {
                    Sokoban[man_x][man_y] -= 1;
                    Sokoban[man_x][++man_y] += 1;
                }
                else if(3  == (Sokoban[man_x][man_y+1]) || 7  == (Sokoban[man_x][man_y+1]))
                {
                    if(0  == (Sokoban[man_x][man_y+2]) || 4  == (Sokoban[man_x][man_y+2]))
                    {
                        Sokoban[man_x][man_y] -= 1;
                        Sokoban[man_x][++man_y] -= 2;
                        Sokoban[man_x][man_y+1] += 3;
                    }
                }
            }
            if(7 == Sokoban[1][3] && 7 == Sokoban[1][4] && 7 == Sokoban[2][4] && 7 == Sokoban[3][5])
            {
                flag = 1;
            }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012478.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号