zoukankan      html  css  js  c++  java
  • 完整版本的推箱子小游戏,最简单的纯C语言打造

    /*
        推箱子小游戏
            1.定义绘制样式
                用二维数组的方式
            2.绘制图像
            3.找出当前位置
            4.逻辑判断,制造动作
                根据数学xy轴的规律,这里使用ij
                上移,行轴上升,行数减少
                下移,行数下降,函数增加
                左移,列数向左,列数减少
                右移,列数向右,列数增加
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #define ROWS    8            //行数
    #define COLS    9            //列数
    
    int i = 0;                    //行轴
    int    j = 0;                    //列轴
    
    
    //定义绘制样式
    /*
        0    代表    空地
        1    代表    墙壁
        3    代表    目的地
        4    代表    箱子
        5    代表    推箱子的人
        7    代表    目的地上的箱子
        8    代表    目的地上的人
    */
    int cMap[ROWS][COLS] = {
        { 0, 1, 1, 1, 1, 1, 1, 1, 0 },
        { 0, 1, 0, 0, 3, 3, 3, 1, 0 },
        { 0, 1, 5, 0, 0, 1, 1, 1, 1 },
        { 1, 0, 0, 4, 0, 0, 0, 0, 1 },
        { 1, 0, 0, 0, 1, 4, 1, 0, 1 },
        { 1, 0, 4, 0, 1, 0, 0, 0, 1 },
        { 1, 0, 0, 0, 1, 1, 1, 1, 1 },
        { 1, 1, 1, 1, 1, 0, 0, 0, 0 }
    };
    
    //绘制图像
    int GreatMap()
    {
    
        for (int i = 0; i < ROWS;i++)
        {
            for (int j = 0; j < COLS; j++)
            {
                switch (cMap[i][j])
                {
                case 0:
                    printf("  ");
                    break;
                case 1:
                    printf("");
                    break;
                case 3:
                    printf("");
                    break;
                case 4:
                    printf("");
                    break;
                case 5:
                    printf("");
                    break;
                case 7:
                    printf("");
                    break;
                case 8:
                    printf("");
                    break;
                default:
                    break;
                }
            }
            printf("
    ");
        }
        
    
    
    
        return 0;
    }
    
    //找出人的当前位置
    int FindManIndex()
    {
        for (i = 0; i < ROWS;i++)
        {
            for (j = 0; j < COLS;j++)
            {
                if (cMap[i][j] == 5 || cMap[i][j] == 8)
                    break;
            }
            if (cMap[i][j] == 5 || cMap[i][j] == 8)
                break;
        }
        printf("人的坐标:[%d,%d]",j,i);
    
        return 0;
    }
    
    //制造动作
    int CreateActions()
    {
        char cAction = _getch();                    //输入字符不用回车
        switch (cAction)
        {
        case 'W':
        case 'w':
            //----------------------------------上移
            //如果上方是空地或者目的地
            if (cMap[i - 1][j] == 0 || cMap[i - 1][j] == 3)
            {
                cMap[i - 1][j]    += 5;                
                cMap[i][j]        -= 5;
            }
            //如果上方是箱子或者目的地上的箱子,同时更上方是空地或者目的地
            if ((cMap[i - 1][j] == 4 || cMap[i - 1][j] == 7) && 
                (cMap[i - 2][j] == 0 || cMap[i - 2][j] == 3))
            {
                cMap[i - 2][j] += 4;
                
                cMap[i - 1][j] += 1;
                cMap[i][j] -= 5;
            }
            
            break;
        case 'A':
        case 'a':
            //----------------------------------左移
            //如果左方是空地或者目的地
            if (cMap[i][j-1] == 0 || cMap[i][j-1] == 3)
            {
                cMap[i][j-1] += 5;
                cMap[i][j] -= 5;
            }
            //如果左方是箱子或者目的地上的箱子,同时更左方是空地或者目的地
            if ((cMap[i][j-1] == 4 || cMap[i ][j-1] == 7) &&
                (cMap[i][j-2] == 0 || cMap[i ][j-2] == 3))
            {
                cMap[i][j-2] += 4;
                cMap[i][j-1] += 1;
                cMap[i][j] -= 5;
            }
            break;
        case 'S':
        case 's':
            //----------------------------------下移
            //如果下方是空地或者目的地
            if (cMap[i + 1][j] == 0 || cMap[i + 1][j] == 3)
            {
                cMap[i + 1][j] += 5;
                cMap[i][j] -= 5;
            }
            //如果下方是箱子或者目的地上的箱子,同时更下方是空地或者目的地
            if ((cMap[i + 1][j] == 4 || cMap[i + 1][j] == 7) &&
                (cMap[i + 2][j] == 0 || cMap[i + 2][j] == 3))
            {
                cMap[i + 2][j] += 4;
                cMap[i + 1][j] += 1;
                cMap[i][j] -= 5;
            }
            break;
        case 'D':
        case 'd':
            //----------------------------------右移
            //如果右方是空地或者目的地
            if (cMap[i][j + 1] == 0 || cMap[i][j + 1] == 3)
            {
                cMap[i][j + 1] += 5;
                cMap[i][j] -= 5;
            }
            //如果右方是箱子或者目的地上的箱子,同时更右方是空地或者目的地
            if ((cMap[i][j + 1] == 4 || cMap[i][j + 1] == 7) &&
                (cMap[i][j + 2] == 0 || cMap[i][j + 2] == 3))
            {
                cMap[i][j + 2] += 4;
                cMap[i][j + 1] += 1;
                cMap[i][j] -=5;
            }
            break;
        }
        return 0;
    }
    
    int main()
    {
    
        while (1)
        {
            GreatMap();
            FindManIndex();
    
            CreateActions();
            system("cls");
        }
        
    
        system("pause");
        return 0;
    }
    条条英符铸平凡,行行代码显乾坤;
  • 相关阅读:
    函数获取常用路径 SHGetSpecialFolderLocation、SHGetPathFromIDList
    [转载]Delphi线程池(Delphi2009以上版本适用)
    给 System.Zip 增长了个(多文件解压时的)解压进度事务
    sql操蛋的孤独账号。
    不错的几个jq控件
    jquery的跨域访问
    MVC3中输出Html标签的方法
    MVC_HtmlHelper用法大全
    execute sp_executesql 用变量获取返回值
    Asp.Net MVC中的RenderPartial 和 RenderAction
  • 原文地址:https://www.cnblogs.com/VisiousDragon/p/9281178.html
Copyright © 2011-2022 走看看