C语言之推箱子游戏代码

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Yan_Less/article/details/73254783

每天学习一点点,每天容易一点点。一个简单的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("\n");
    }
}


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;
}

//通过按键来实现游戏  ---> 通过按键来改变二维数组的排列顺序.
//思考一个问题? 地图是二维数组来决定的. 人在哪里  二维数组来决定?

/************************************************
//人推箱子  
可以动.    怎么办.  改变元素
        1.人的前面是空地
        2.人的前面是目的地
        3.人的前面是箱子
            3.1 箱子的前面是空地
            3.2 箱子的前面是目的地


            //盘断二维数组中有几个7
            //没有目的地  不对..  人站在目的地
            //有没有4.
****************************************/

这里写图片描述

这里写图片描述

展开阅读全文

没有更多推荐了,返回首页