• C语言之推箱子游戏代码


     

     

    每天学习一点点,每天容易一点点。一个简单的C语言程序,用来复习c语言,代码通俗易懂。有什么问题望各位不吝赐教。

    /*******************************************
    用最简单的C语言语句写个推箱子的程序。
    ********************************************/
    #include <stdio.h>  
    #include <conio.h>
    #include<stdlib.h> 
    
    int map[9][11] = {
        {0,1,1,1,1,1,1,1,1,1,0},  //0代表空地
        {0,1,0,0,0,1,0,0,0,1,0},  //1代表墙
        {0,1,0,4,4,4,4,4,0,1,0},  //3代表目的地
        {0,1,0,4,0,4,0,4,0,1,1},  //4代表箱子
        {0,1,0,0,0,0,0,0,4,0,1},  //5代表人 
        {1,1,0,1,1,1,1,0,4,0,1},
        {1,0,8,3,3,3,3,1,0,0,1},  //2 3 4 5 6 7 8 9 1 0
        {1,0,3,3,3,3,3,0,0,1,1},
        {1,1,1,1,1,1,1,1,1,1,0} };
    
    //绘制地图  //二维数组+switch()
    void DrawMap()
    {
        //遍历二维数组  //0 打印空格  //1 墙   //3 目的地  //什么结构?
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 11; j++)
            {
                //if  else  switch
                switch (map[i][j])
                {
                case 0:
                    printf("  ");
                    break;
                case 1:
                    printf("■");
                    break;
                case 3:
                    printf("☆");
                    break;
                case 4:
                    printf("□");
                    break;
                case 5:
                    printf("♀");  //5人
                    break;
                case 7:     //4 + 3  箱子在目的地中
                    printf("★");
                    break;
                case 8:     // 5 + 3  人在目的地当中   人?
                    printf("♀");
                    break;
                }
            }
            printf("
    ");
        }
    }
    
    
    void PlayGame()
    {
        int r, c;  //人的下标  //
        for (int i = 0; i < 9; i++)
        {
            for (int j = 0; j < 11; j++)
            {
                if (map[i][j] == 5||map[i][j]==8)   //i j 人的下标?
                {
                    r = i;
                    c = j;
                }
            }
        }
    
        char ch;  //字符变量
        ch = getch();  //键盘的输入保存到字符中
        // getch()     getchar()  接收键盘字符
        // getch()直接接收 不显示回文   getchar()显示回文可以修改 enter键结束
    
        //根据不同的按键  改变不同的值. 分支.
        switch (ch)
        {
        case 'W':  //W A S D方向   72  80  75  77 虚拟键值 ascii  windowVK_UP VK_TAB VK_RETUNE
        case 'w':
        case 72:
            if (map[r - 1][c] == 0|| map[r - 1][c] == 3) 
            {
                map[r - 1][c] += 5;
                map[r][c] -= 5;
            }
            else if (map[r - 1][c] == 4 || map[r - 1][c] == 7)
            {
                if (map[r - 2][c] == 0 || map[r - 2][c] == 3)
                {
                    map[r - 2][c] += 4;
                    map[r - 1][c] += 1;
                    map[r][c] -= 5;
                }
            }
    
    
    
            break;
    
        case 'S':  //enter按键的作用  确认 返回
        case 's':
        case 80:
            if (map[r + 1][c] == 0 || map[r + 1][c] == 3)
            {
                map[r + 1][c] += 5;
                map[r][c] -= 5;
            }
            else if (map[r + 1][c] == 4 || map[r+ 1][c] == 7)
            {
                if (map[r + 2][c] == 0 || map[r + 2][c] == 3)
                {
                    map[r + 2][c] += 4;
                    map[r + 1][c] += 1;
                    map[r][c] -= 5;
                }
            }
            break;
    
        case 'A':
        case 'a':
        case 75:
            if (map[r ][c - 1] == 0 || map[r ][c - 1] == 3)
            {
                map[r ][c - 1] += 5;
                map[r][c] -= 5;
            }
            else if (map[r][c - 1] == 4 || map[r][c - 1] == 7)
            {
                if (map[r ][c - 2] == 0 || map[r ][c - 2] == 3)
                {
                    map[r ][c - 2] += 4;
                    map[r ][c - 1] += 1;
                    map[r][c] -= 5;
                }
            }
            break;
    
        case 'D':
        case 'd':
        case 77:
            if (map[r][c + 1] == 0 || map[r][c + 1] == 3)
            {
                map[r][c + 1] += 5;
                map[r][c] -= 5;
            }
            else if (map[r][c + 1] == 4 || map[r][c + 1] == 7)
            {
                if (map[r][c + 2] == 0 || map[r][c + 2] == 3)
                {
                    map[r][c + 2] += 4;
                    map[r][c + 1] += 1;
                    map[r][c] -= 5;
                }
            }
            break;
        }
    }
    
    //
    int main()  //主函数
    {
        while (1)
        {
            system("cls");
            DrawMap();
            PlayGame();
        }
    
        return 0;
    }
    
    //通过按键来实现游戏  ---> 通过按键来改变二维数组的排列顺序.
    //思考一个问题? 地图是二维数组来决定的. 人在哪里  二维数组来决定?
    新手注意:如果你学习遇到问题找不到人解答,可以点我进裙里面大佬解答及最新C语言教.程!
    /************************************************
    //人推箱子  
    可以动.    怎么办.  改变元素
            1.人的前面是空地
            2.人的前面是目的地
            3.人的前面是箱子
                3.1 箱子的前面是空地
                3.2 箱子的前面是目的地
    
    
                //盘断二维数组中有几个7
                //没有目的地  不对..  人站在目的地
                //有没有4.
    ****************************************

    这里写图片描述

    这里写图片描述

     
  • 相关阅读:
    Tips/Tricks#4:不同页面之间传递值
    NHibernate之旅(2):第一个NHibernate程序
    Silverlight 2 (beta1)数据操作(7)——调用FlickR REST APIs来查询图片
    NHibernate之旅(5):探索Insert, Update, Delete操作
    Tips/Tricks#3:利用JavaScript选择GridView行
    PyCharm 设置菜单字体大小
    Python 多重继承
    Python 全局变量 global
    调整微信(浏览器)的音量
    PyQt5实现从主窗口打开子窗口的方法
  • 原文地址:https://www.cnblogs.com/chengxuyuanaa/p/11963005.html
Copyright © 2020-2023  润新知