前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用C语言编写“推箱子”游戏

用C语言编写“推箱子”游戏

作者头像
用户10191012
发布2022-11-18 14:15:43
3K0
发布2022-11-18 14:15:43
举报
文章被收录于专栏:硬件分享

编辑环境:VC++6.0

采用语言:C语言

1.最后运行的效果图如下:

2.游戏通关后的效果图如下:

5.部分代码(完整源码在最后面):

用于在控制台显示地图

void drawMap(){

int i, j;

for(i = 0; i < WIDTH; i++){

for(j = 0; j < HEIGHT; j++){

switch(map[i][j]){

case 0:

printf(" ");

break;

case 1:

printf("■");

break;

case 2:

printf("♀");

break;

case 3:

printf("◆");

break;

case 4:

printf("●");

break;

case 5:

printf("★");

break;

}

}

printf("\n");

}

}

/**

* 人物向上移动

*/

void moveUp(){

//定义变量存放人物上方的坐标

int ux, uy;

//当上方没有元素时,直接return

if(y == 0){

return;

}

//记录上方坐标

ux = x;

uy = y - 1;

//上方为已完成方块

if(map[uy][ux] == 5){

return;

}

//假设上方为墙,直接return

if(map[uy][ux] == 1){

return;

}

//假设上方为箱子

if(map[uy][ux] == 3){

//判断箱子上方是否为墙

if(map[uy - 1][ux] == 1){

return;

}

//判断箱子上方是否为球

if(map[uy - 1][ux] == 4){

//将箱子上面内容赋值为5★

map[uy - 1][ux] = 5;

map[uy][ux] = 0;

//箱子的数目减1

boxs--;

}else{

//移动箱子

map[uy - 1][ux] = 3;

}

}

map[y][x] = 0;

map[uy][ux] = 2;

y = uy;

}

/**

* 向左移动

*/

void moveLeft(){

//定义变量存放人物左边的坐标

int lx, ly;

//当左边没有元素时,直接return

if(x == 0){

return;

}

//记录左边坐标

lx = x - 1;

ly = y;

//左边为已完成方块

if(map[ly][lx] == 5){

return;

}

//假设左边为墙,直接return

if(map[ly][lx] == 1){

return;

}

//假设左边为箱子

if(map[ly][lx] == 3){

//判断箱子左边是否为墙

if(map[ly][lx - 1] == 1){

return;

}

//判断箱子左边是否为球

if(map[ly][lx - 1] == 4){

//将箱子左边内容赋值为5★

map[ly][lx - 1] = 5;

map[ly][lx] = 0;

//箱子的数目减1

boxs--;

}else{

//移动箱子

map[ly][lx - 1] = 3;

}

}

map[y][x] = 0;

map[ly][lx] = 2;

x = lx;

}

/**

* 向下移动

*/

void moveDown(){

//定义变量存放人物下方的坐标

int dx, dy;

//当下方没有元素时,直接return

if(y == HEIGHT - 1){

return;

}

//记录下方坐标

dx = x;

dy = y + 1;

//下方为已完成方块

if(map[dy][dx] == 5){

return;

}

//假设下方为墙,直接return

if(map[dy][dx] == 1){

return;

}

//假设下方为箱子

if(map[dy][dx] == 3){

//判断箱子下方是否为墙

if(map[dy + 1][dx] == 1){

return;

}

//判断箱子下方是否为球

if(map[dy + 1][dx] == 4){

//将箱子下面内容赋值为5★

map[dy + 1][dx] = 5;

map[dy][dx] = 0;

//箱子的数目减1

boxs--;

}else{

//移动箱子

map[dy + 1][dx] = 3;

}

}

map[y][x] = 0;

map[dy][dx] = 2;

y = dy;

}

/**

* 向右移动

*/

void moveRight(){

//定义变量存放人物右边的坐标

int rx, ry;

//当右边没有元素时,直接return

if(x == WIDTH - 1){

return;

}

//记录右边坐标

rx = x + 1;

ry = y;

//右边为已完成方块

if(map[ry][rx] == 5){

return;

}

//假设右边为墙,直接return

if(map[ry][rx] == 1){

return;

}

//假设右边为箱子

if(map[ry][rx] == 3){

//判断箱子右边是否为墙

if(map[ry][rx + 1] == 1){

return;

}

//判断箱子左边是否为球

if(map[ry][rx + 1] == 4){

//将箱子右边内容赋值为5★

map[ry][rx + 1] = 5;

map[ry][rx] = 0;

//箱子的数目减1

boxs--;

}else{

//移动箱子

map[ry][rx + 1] = 3;

}

}

map[y][x] = 0;

map[ry][rx] = 2;

x = rx;

}

4.源码获取方式:

链接: https://pan.baidu.com/s/14N53Ps1J1YA4XUjk2wfVWA

提取码: rfyi

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 硬件分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档