怎么用C语言编写推箱子的简单小游戏

2025-11-19 10:26:11

1、 地图.

平面的地图,

人    : 符号-->图片   

箱子  : 符号-->图片

目的地: 符号-->图片

空地  : 符号-->图片

墙壁  : 符号-->图片

利用二维数组元素对应不同的地图元素。

2、 控制.

字符变量:char input;

      intput=getch();

通过改变二维数组的元素,重新绘制地图,得到改变后的地图。

3、 游戏的规则.(逻辑代码)

确定人的下标(注意map[i][j]==8的情况)。

能动的情况:1.人前是空地。

map[row-1][col]==0;

2.人前是目的地。

map[row-1][col]==3;

3.人前是箱子,箱子前是空地。

map[row-1][col]==4|| map[row-1][col]==7;

map[row-2][col]==0;

4人前是箱子,箱子前是目的地。

map[row-1][col]==4|| map[row-1][col]==7;

map[row-2][col]==3;

4、下面是源码

/***********************************************

第一个小工程:推箱子

编译工具: VS VC

最后修改:

<2016年11月16日> <创建工程> <九夏老师>

************************************************/

#include <stdio.h>

#include <conio.h>

/*************************************************************

程序:处理什么? 事件----->本质是什么?  值.百度搜索 图片数据存放的.

程序的本质是什么:处理数据 整型 实行的

*************************************************************/

int map[7][10] = {

{ 0, 0, 0, 1, 1, 1, 1, 1, 1, 0 },

{ 0, 1, 1, 1, 0, 0, 0, 0, 1, 0 },

{ 1, 1, 3, 0, 4, 1, 1, 0, 1, 1 },

{ 1, 3, 3, 4, 0, 4, 0, 0, 0, 1 },

{ 1, 3, 3, 0, 4, 0, 4, 0, 1, 1 },

{ 1, 1, 1, 1, 1, 1, 0, 5, 1, 0 },

{ 0, 0, 0, 0, 0, 1, 1, 1, 1, 0 } };//墙为1 空地为0 箱子为4 人为5 目的地为3

void DrawMap()

{

//用for循环遍历数组

for (int i = 0; i < 7; i++)

{

for (int j = 0; j < 10; j++)

{

switch (map[i][j])

{

case 0:

printf("  ");

break;

case 1:

printf("■");

break;

case 3:

printf("☆");

break;

case 4:

printf("□");

break;

case 5:

printf("▲");

break;

case 7: //4+3 箱子+目的地

printf("★");

break;

case 8: //5+3 人+目的地

printf("▲");

break;

}

}

printf("\n");

}

}

void PlayGame()

{

//获取到当前人的下标 时刻都能够确定人的下标

int row, col; //人的行 和 列

for (int i = 0; i < 7; i++) //控制变量 0-6

{

for (int j = 0; j < 10; j++) //控制变量 0-9

{

if (map[i][j] == 5||map[i][j] == 8)

{

row = i; //i 0-6

col = j; //j 0-9

}

}

}

printf("(%d,%d)\n", row, col);

//键盘来控制图形对应的数据.

//wasd 字符  char

char input; //定义一个字符变量

input = getch(); //变量接受键盘的输入

//getchar()显示回文 按下enter键接收完成 getch()不现实回文,按下马上接收

switch (input)

{

/*************************************

人能走的情况:

1.人的前面是空地.

2.人的前面是目的地.

3.人的前面是箱子,箱子的前面是空地.

4.人的前面是箱子,箱子的前面是目的地.

***************************************/

case 'w': //上

if (map[row - 1][col] == 0||map[row-1][col]==3) //如果人的前面是空地或者目的地

{

map[row][col] -= 5; //人的ID有可能是5 也有可能是8

map[row - 1][col] += 5;

}

else if (map[row - 1][col] == 4 || map[row - 1][col] == 7)//人的前面是箱子

{

if (map[row - 2][col] == 0 || map[row - 2][col] == 3)//箱子的前面是空地

{

map[row - 2][col] += 4;

map[row - 1][col] += 1;

map[row][col] -= 5;

}

}

break;

case 's': //下

if (map[row + 1][col] == 0 || map[row + 1][col] == 3) //如果人的前面是空地或者目的地

{

map[row][col] -= 5; //人的ID有可能是5 也有可能是8

map[row + 1][col] += 5;

}

else if (map[row + 1][col] == 4 || map[row + 1][col] == 7)//人的前面是箱子

{

if (map[row + 2][col] == 0 || map[row + 2][col] == 3)//箱子的前面是空地

{

map[row + 2][col] += 4;

map[row + 1][col] += 1;

map[row][col] -= 5;

}

}

break;

case 'a': //左

if (map[row][col - 1] == 0 || map[row][col - 1] == 3) //如果人的前面是空地或者目的地

{

map[row][col] -= 5; //人的ID有可能是5 也有可能是8

map[row][col - 1] += 5;

}

else if (map[row][col - 1] == 4 || map[row][col - 1] == 7)//人的前面是箱子

{

if (map[row][col - 2] == 0 || map[row][col - 2] == 3)//箱子的前面是空地

{

map[row][col - 2] += 4;

map[row][col - 1] += 1;

map[row][col] -= 5;

}

}

break;

case 'd': //右

if (map[row][col + 1] == 0 || map[row][col + 1] == 3) //如果人的前面是空地或者目的地

{

map[row][col] -= 5; //人的ID有可能是5 也有可能是8

map[row][col + 1] += 5;

}

else if (map[row][col + 1] == 4 || map[row][col + 1] == 7)//人的前面是箱子

{

if (map[row][col + 2] == 0 || map[row][col + 2] == 3)//箱子的前面是空地

{

map[row][col + 2] += 4;

map[row][col + 1] += 1;

map[row][col] -= 5;

}

}

break;

break;

}

}

int main()

{

while (1)

{

system("cls");

DrawMap();

PlayGame();

}

return 0;

}

/********************************

1.完成控制台推箱子.

2.尝试去使用图形库来写推箱子.

定义保存图片的变量: IMAGE box;

加载图片: loadimage(&box,L"E:\images/box.jpg",width,height);

输出图片到界面: putimage(x,y,&box);

连连看  拼图  按照套路.

*********************************/

5、按ctrl+F5运行试试,自己玩一下

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢