推箱子小游戏代码html,C++初学推箱子小游戏(代码有详细介绍,通俗易懂)

#include

#include// getch头文件

#include //图形库头文件

#include

#pragma comment(lib,"winmm.lib")//多媒体库

/*

音乐播放 mciSendString MP3 wav 格式音乐   需要加这个头文件及库

#include

#pragma comment(lib,"winmm.lib")//多媒体库

*/

/*

鼠标操作

MouseHit()   判断是否存在鼠标消息

MOUSEMSG          类型   存放鼠标消息

GetMouseMsg() 获取鼠标信息的函数

*/

//人2 箱子3 目的地4 空地0 墙1

//人+目的地 2+4  6

int map[8][8] = {

0,0,1,1,1,0,0,0,

0,0,1,4,1,0,0,0,

0,0,1,0,1,1,1,1,

1,1,1,3,0,3,4,1,

1,4,0,3,2,1,1,1,

1,1,1,1,3,1,0,0,

0,0,0,1,4,1,0,0,

0,0,0,1,1,1,0,0

};

//8*8地图  总大小640*640

IMAGE img[6];//六张素材

void init()//加载素材

{

//加载图片

loadimage(&img[0], "素材/背景.jpg",640,640);

loadimage(&img[1], "素材/目的地.jpg",80,80);//箱子推到目的地上

loadimage(&img[2], "素材/墙.jpg", 80, 80);

loadimage(&img[3], "素材/人物.jpg", 80, 80);

loadimage(&img[4], "素材/箱子.jpg", 80, 80);

loadimage(&img[5], "素材/源氏.jpg", 80, 80);//空的目的地

}

void drawMap()        //画地图

{

putimage(0, 0, &img[0]);

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

{

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

{

switch (map[i][j])        //遍历数组

{

case 0:

break;

case 1:

putimage(j * 80, i * 80, &img[2]);//贴图 墙

break;

case 2:

putimage(j * 80, i * 80, &img[3]);//贴图 人物

break;

case 3:

putimage(j * 80, i * 80, &img[4]);//贴图 箱子

break;

case 4:

putimage(j * 80, i * 80, &img[5]);//贴图 空目的地

break;

case 6:

putimage(j * 80, i * 80, &img[3]);//贴图 人物

break;

case 7:

putimage(j * 80, i * 80, &img[1]);//贴图 目的地

break;

}

}

}

}

void play()//操作部分

{

int x, y;        //找到人物的位置

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

{

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

{

if (map[i][j] == 2 || map[i][j] == 6)        //循环找到人的位置

{

x = i;

y = j;        //保存人的位置

}

}

}

/*//然后判断用户输入

getch获取一个字符来操作*/

switch (getch())

{

case 'W':

case 'w'://往上

if (map[x - 1][y] == 0 || map[x - 1][y] == 4)//上方是空地或者是空的目的地

{

map[x][y] -= 2; //map[x][y]=map[x][y]-2

map[x - 1][y] += 2;//人往上走

}

else if (map[x - 1][y] == 3 || map[x - 1][y] == 7)//人的上方是箱子或箱子+目的地

{

if (map[x - 2][y] == 0 || map[x - 2][y] == 4)//箱子上方是空地 推动

{

map[x][y] -= 2;        //人往上走

map[x - 1][y] -= 1;//人来了+2 箱子上去了-3

map[x - 2][y] += 3;//箱子往上推

}

}

break;

case 'A':

case'a':        //往左

if (map[x][y - 1] == 0 || map[x][y - 1] == 4)//

{

map[x][y] -= 2; //map[x][y]=map[x][y]-2

map[x][y - 1] += 2;//

}

else if (map[x][y - 1] == 3 || map[x][y - 1] == 7)//

{

if (map[x][y - 2] == 0 || map[x][y - 2] == 4)//

{

map[x][y] -= 2;        //人

map[x][y - 1] -= 1;//

map[x][y - 2] += 3;//

}

}

break;

case 'D':

case 'd':        //往右

if (map[x][y + 1] == 0 || map[x][y + 1] == 4)//

{

map[x][y] -= 2; //map[x][y]=map[x][y]-2

map[x][y + 1] += 2;//

}

else if (map[x][y + 1] == 3 || map[x][y + 1] == 7)//

{

if (map[x][y + 2] == 0 || map[x][y + 2] == 4)//

{

map[x][y] -= 2;        //人

map[x][y + 1] -= 1;//

map[x][y + 2] += 3;//

}

}

break;

case 'S':

case 's':        //往下

if (map[x + 1][y] == 0 || map[x + 1][y] == 4)//

{

map[x][y] -= 2; //map[x][y]=map[x][y]-2

map[x + 1][y] += 2;//

}

else if (map[x + 1][y] == 3 || map[x + 1][y] == 7)//

{

if (map[x + 2][y] == 0 || map[x + 2][y] == 4)//

{

map[x][y] -= 2;        //人

map[x + 1][y] -= 1;//

map[x + 2][y] += 3;//

}

}

break;

}

}

void gameOver()            //通关提示

{

int flag=0;

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

{

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

{

if (map[i][j] == 3)//找到箱子

{

++flag;

if (map[i - 1][j] == 1 || map[i + 1][j] == 1)        //判断 输

{

if (map[i][j - 1] == 1 || map[i][j - 1] == 1)

{

MessageBox(GetHWnd(), "输", "sad", MB_OK);

closegraph();

exit(0);

}

}

}

}

}

if(flag==0)

{

MessageBox(GetHWnd(), "赢", "GOOD", MB_OK);

//第一个参数:句柄   作用:让窗口置前,也可以写NULL

//第四个是按钮

closegraph();//关闭窗口

exit(0);

}

}

int main()

{

#if 0        //音乐播放

//mciSendString("open 素材/bgm.mp3",0,0,0);//打开音乐

//mciSendString("play 素材/bgm.mp3",0,0,0);//播放音乐 只播放一次

//mciSendString("play 素材/bgm.mp3 repeat",0,0,0);//repeat循环播放音乐

mciSendString("open 素材/bgm.mp3 alias bgm", 0, 0, 0);//打开音乐 alias bgm给这个取个别名bgm

mciSendString("play bgm",0,0,0);//播放音乐 只播放一次

/*

关闭音乐 stop

暂停 pause

*/

#endif

initgraph(640, 640);//创建640*640窗口

init();

//开始界面++++++++++=======================

putimage(0, 0, &img[0]);//背景图

settextstyle(40, 0, "宋体");

settextcolor(BLACK);

//setbkmode(TRANSPARENT); //字体背景透明

setbkmode(1);//字体背景透明

rectangle(200, 200, 400, 400);//画矩形

outtextxy(200, 200, "开始游戏");

MOUSEMSG msg ;

int flag = 1;

while (flag)

{

msg = GetMouseMsg();//获取鼠标消息

switch (msg.uMsg)

{

case WM_LBUTTONDOWN://左键按下

if (msg.x > 200 && msg.x<400 && msg.y>200 && msg.y < 400)

{

//点击的区域在方框之内,可以退出循环

flag = 0;

}

break;

default:

break;

}

}

drawMap();

while (1)

{

play();

drawMap();

gameOver();

}

getchar();

closegraph();//关闭窗口

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值