zoukankan      html  css  js  c++  java
  • 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.
    ****************************************

    这里写图片描述

    这里写图片描述

     
  • 相关阅读:
    iot 表索引dump《2》
    heap表和iot表排序规则不同
    Cannot complete the install because one or more required items could not be found.
    iot表输出按主键列排序,heap表不是
    iot 表主键存放所有数据,且按数据插入顺序排序
    iot表和heap表排序规则不同
    org.eclipse.graphiti.ui.editor.DiagramEditorInput.
    Oracle 排序规则
    perl 异步超时 打印错误
    14.6.3 Grouping DML Operations with Transactions 组DML操作
  • 原文地址:https://www.cnblogs.com/chengxuyuanaa/p/11963005.html
Copyright © 2011-2022 走看看