完整版本的推箱子小游戏,最简单的纯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("\n");
    }

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

原文地址:https://www.cnblogs.com/VisiousDragon/p/9281178.html

时间: 2024-11-08 16:25:44

完整版本的推箱子小游戏,最简单的纯C语言打造的相关文章

Qt实现推箱子小游戏

学习Qt有一个月了,想要实现一个推箱子的游戏来检验一下自己.今天先设计一下将要完成的具体表现,因为是第一次做,所以设计的稍微简单点,以后逐渐修改.首先要创建菜单栏,分为三个主菜单: ①游戏 ②选择关卡 ③关于 (1)游戏主菜单下分为: ①开始游戏 ②重新开始 ③结束游戏 (2)选择关卡分为 ①前一关卡 ②后一关卡 ③选择关卡, (3)关于则弹出游戏的信息 主要使用以下几个类: 1.QPainter绘制地图 2.QMenu.QAction制作菜单栏 3.QKeyEvent接收键盘事件 控制人物行走

推箱子小游戏《格鲁的实验室》13关 - bfs最短路径

下载了一款推箱子小游戏,第13关的时候怎么也破不了最佳纪录(最少步数是9而我们最好的方案是10步),因为数据比较小(6*8的方阵),所以写了个BFS来找最短路. 游戏的目标是把小黄人推到黄色球,小绿人推到绿色球,有个限制是,小黄/绿人运动时会沿某一个方向一直走直到遇到边界或者障碍物,如果途中遇到传送带还会改变运动方向. -----------------------------------------------------------------------------------------

来点福利,看二维数组如何打造推箱子小游戏

C语言学好,通杀C++.这就是方向之一. 前面看过的读者,是不是觉得很鸡肋的知识,全是基本的运用,可是呢?还是看不出能干吗. 那么下面就用二维数组打造,推箱子小游戏.首先,得问问,有何思路? 光写没有用,没到一部分内容觉得可以了,最好先打印下看看效果,要不然写到都不知道自己有没有写错! 效果如图: 打印这部成功后,可以继续了,没有成功者,仔细检查,错误超出一百以上那肯定是头文件的问题. 这步很关键,没有定位,很难移动,几乎全是报错 这步也能首先打印初始化的坐标. 既然定位坐标的情况已经做好,是不

c语言实现的推箱子小游戏-1

本次游戏是个推箱子第一关最简单的小游戏 有详细注释,下面是做出来的游戏界面 游戏操作说明和功能说明: 按wasd控制小人的上下左右移动. 按 r 重新开始游戏 游戏开始有操作介绍 游戏结束有胜利提示 游戏原理分析 游戏开始时的星星个数 = 箱子在星星上的个数时 , 游戏胜利. 按 r 键重新开始游戏, 我们需要定义一个量 map_1[8][8] 来保存游戏初始时的界面, 操作时我们将其赋值给 map[8][8] 来进行操作,以便重新归位, 这里就用到了memcpy()函数. wasd 代表上下左

用C#制作推箱子小游戏

思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图  (12行×13列) 地图可以看做是行和列组成的,即可以看做是由二维数组组成的 2.实体化:将0转换为空格,1转换为黑色方块 3.设置箱子.人.目标点 4.先让小人动起来,实现小人向上移动,因为坐标的交换,所以箱子向下移动了,同理,改变坐标可以实现向左.向下.向右移动 向下移动:y+1;向左移动:x-1;向右移动:x+1; 5.实现推箱子,以向上移动为例,其

Java实现推箱子小游戏

package Test1; //用于调用Test2包 import Test2.*; import java.awt.*; import javax.swing.*; public class APP extends JFrame{ public static void main(String[] args) { // TODO Auto-generated method stub APP a = new APP(); } public APP() { new Members(); } } p

推箱子小游戏

//K.h #pragma once class K { //抽象化机器人K //地图大小 #define cx 10 #define cy 10 #define wall1 0xA8 //▓占2个字节 WINDOWS下 #define wall2 0x88 // //为K定义方向,方向符号请无视. public: enum FX { y = '>', //朝右Y z = '<', //左 -Y s = '^', //上 -X x = 'V' //下 X }; protected: int m

15-07-09 二维数组-- 推箱子小游戏

1 int a = 2, b = 1;//人的初始坐标 2 #region 造地图 3 int[,] map = new int[10,10]{ 4 {8,8,8,8,8,8,8,8,8,8}, 5 {8,0,0,0,0,0,8,8,0,8}, 6 {8,1,2,0,0,8,8,8,0,8}, 7 {8,0,0,0,0,8,8,8,0,8}, 8 {8,0,0,0,0,0,8,8,0,8}, 9 {8,0,8,0,0,0,8,8,0,8}, 10 {8,0,8,8,0,0,8,8,0,8}, 1

js+Jquery 制作推箱子小游戏

<!DOCTYPE html> <html> <head> <title>Sokaban</title> <meta charset="utf-8"> <style type="text/css"> .roads { width: 50px; height: 50px; background: url(img/roods.png); background-size: 100% 100