c语言多关卡游戏程序,【图片】C语言打造随机多关卡推箱子游戏【c语言吧】_百度贴吧...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

代码如下所示:

#pragma once

#include

#include

#include

#include

#include

#include

#pragma comment(lib,"winmm.lib")

#define N 10

IMAGE Box1, Box2;

IMAGE Per1, Per2;

IMAGE Wall;

IMAGE BackGround;

IMAGE Tag1, Tag2;

IMAGE Boom1, Boom2;

IMAGE End;

//int Map[N][N] = {0};

int Game_InitMap(int);

void Game_Paint();

void Game_Play();

int Game_Judgement();

struct Map

{

int x;

int y;

int num;

}map;

struct Map pos[10][10];

#include"std.h"

int main()

{

initgraph(700, 620);

//PlaySound("./res/music.wav", NULL, SND_FILENAME | SND_LOOP | SND_ASYNC);

Game_Play();

return 0;

}

int Game_InitMap(int level)

{

loadimage(&BackGround, "./res/背景.jpg", 700, 650);

loadimage(&Wall, "./res/wall.jpg", 69, 69);

loadimage(&Box1, "./res/mb.jpg", 69, 69);

loadimage(&Box2, "./res/mb - 副本.jpg", 69, 69);

loadimage(&Per1, "./res/ren.jpg", 69, 69);

loadimage(&Per2, "./res/ren - 副本.jpg", 69, 69);

loadimage(&Tag1, "./res/zd.jpg", 69, 69);

loadimage(&Tag2, "./res/zd - 副本.jpg", 69, 69);

loadimage(&Boom1, "./res/boom.jpg", 69, 69);

loadimage(&Boom2, "./res/boom - 副本.jpg", 69, 69);

loadimage(&End, "./res/meizi.jpg", 700, 650);

FILE*fp = fopen("Map1.txt", "r");

if (fp == NULL)

{

MessageBox(NULL, "地图加载失败", NULL, NULL);

exit(0);

}

int FileOffset;

FileOffset = 102 * (level - 1);

fseek(fp, FileOffset, SEEK_SET);

int i, j;

char c;

for (i = 0; i < 10; i++)

{

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

{

c = fgetc(fp);

pos[i][j].num = c - '0';

}

}

fclose(fp);

return 0;

}

void Game_Paint()

{

int i, j;

for (i = 0; i < 10; i++)

{

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

{

switch (pos[i][j].num)

{

case 0:

break;

case 1:

putimage(j * 69, i * 69, &Wall);

break;

case 3:

putimage(j * 69, i * 69, &Tag2, SRCPAINT);

putimage(j * 69, i * 69, &Tag1, SRCAND);

break;

case 4:

putimage(j * 69, i * 69, &Box2, SRCPAINT);

putimage(j * 69, i * 69, &Box1, SRCAND);

break;

case 5:

putimage(j * 69, i * 69, &Per2, SRCPAINT);

putimage(j * 69, i * 69, &Per1, SRCAND);

break;

case 7:

putimage(j * 69, i * 69, &Boom2, SRCPAINT);

putimage(j * 69, i * 69, &Boom1, SRCAND);

break;

case 8:

putimage(j * 69, i * 69, &Per2, SRCPAINT);

putimage(j * 69, i * 69, &Per1, SRCAND);

break;

}

}

}

}

void Game_Play()

{

srand((unsigned)time(NULL));

int n = rand() % 5 + 1;

int m = 1;

int flag = 0;

int currentpos1, currentpos2, currentpos3;

int temp1, temp2, temp3, temp4, temp5, temp6;

Game_InitMap(n);

int x, y;

char ch;

while (true)

{

BeginBatchDraw();

cleardevice();

putimage(0, 0, &BackGround);

if (!Game_Judgement())

{

if (m == 5)

{

Game_Paint();

FlushBatchDraw();

MessageBox(GetHWnd(), "Game Over", "提示", MB_OK);

putimage(0, 0, &End);

FlushBatchDraw();

Sleep(4000);

closegraph();

exit(0);

}

m++;

n = rand() % 5 + 1;

Game_InitMap(n);

}

EndBatchDraw();

Game_Paint();

for (x = 0; x < 10; x++)

{

for (y = 0; y < 10; y++)

{

if (pos[x][y].num == 5 || pos[x][y].num == 8)

break;

}

if (pos[x][y].num == 5 || pos[x][y].num == 8)

break;

}

ch = getch();

switch (ch)

{

case 72://向上

pos[x][y].x = x;

pos[x][y].y = y;

temp1 = pos[x][y].x;

temp2 = pos[x][y].y;

temp3 = pos[x][y].x - 1;

temp4 = pos[x][y].y;

temp5 = pos[x][y].x - 2;

temp6 = pos[x][y].y;

currentpos1 = pos[x][y].num;

currentpos2 = pos[x - 1][y].num;

currentpos3 = pos[x - 2][y].num;

if (pos[x - 1][y].num == 0 || pos[x - 1][y].num == 3)

{

pos[x][y].num -= 5;

pos[x - 1][y].num += 5;

flag++;

}

else if (pos[x - 1][y].num == 4 || pos[x - 1][y].num == 7)

{

if (pos[x - 2][y].num == 0 || pos[x - 2][y].num == 3)

{

pos[x - 2][y].num += 4;

pos[x - 1][y].num += 1;

pos[x][y].num -= 5;

flag++;

}

}

break;

case 75://向左

pos[x][y].x = x;

pos[x][y].y = y;

temp1 = pos[x][y].x;

temp2 = pos[x][y].y;

temp3 = pos[x][y].x;

temp4 = pos[x][y].y - 1;

temp5 = pos[x][y].x;

temp6 = pos[x][y].y - 2;

currentpos1 = pos[x][y].num;

currentpos2 = pos[x][y - 1].num;

currentpos3 = pos[x][y - 2].num;

if (pos[x][y - 1].num == 0 || pos[x][y - 1].num == 3)

{

pos[x][y].num -= 5;

pos[x][y - 1].num += 5;

flag++;

}

else if (pos[x][y - 1].num == 4 || pos[x][y - 1].num == 7)

{

if (pos[x][y - 2].num == 0 || pos[x][y - 2].num == 3)

{

pos[x][y - 2].num += 4;

pos[x][y - 1].num += 1;

pos[x][y].num -= 5;

flag++;

}

}

break;

case 80://向下

pos[x][y].x = x;

pos[x][y].y = y;

temp1 = pos[x][y].x;

temp2 = pos[x][y].y;

temp3 = pos[x][y].x + 1;

temp4 = pos[x][y].y;

temp5 = pos[x][y].x + 2;

temp6 = pos[x][y].y;

currentpos1 = pos[x][y].num;

currentpos2 = pos[x + 1][y].num;

currentpos3 = pos[x + 2][y].num;

if (pos[x + 1][y].num == 0 || pos[x + 1][y].num == 3)

{

pos[x][y].num -= 5;

pos[x + 1][y].num += 5;

flag++;

}

else if (pos[x + 1][y].num == 4 || pos[x + 1][y].num == 7)

{

if (pos[x + 2][y].num == 0 || pos[x + 2][y].num == 3)

{

pos[x + 2][y].num += 4;

pos[x + 1][y].num += 1;

pos[x][y].num -= 5;

flag++;

}

}

break;

case 77://向右

pos[x][y].x = x;

pos[x][y].y = y;

temp1 = pos[x][y].x;

temp2 = pos[x][y].y;

temp3 = pos[x][y].x;

temp4 = pos[x][y].y + 1;

temp5 = pos[x][y].x;

temp6 = pos[x][y].y + 2;

currentpos1 = pos[x][y].num;

currentpos2 = pos[x][y + 1].num;

currentpos3 = pos[x][y + 2].num;

if (pos[x][y + 1].num == 0 || pos[x][y + 1].num == 3)

{

pos[x][y].num -= 5;

pos[x][y + 1].num += 5;

flag++;

}

else if (pos[x][y + 1].num == 4 || pos[x][y + 1].num == 7)

{

if (pos[x][y + 2].num == 0 || pos[x][y + 2].num == 3)

{

pos[x][y + 2].num += 4;

pos[x][y + 1].num += 1;

pos[x][y].num -= 5;

flag++;

}

}

break;

case 27:

Game_InitMap(n);

flag = 0;

break;

case 8:

if (flag != 0)

{

pos[temp1][temp2].num = currentpos1;

pos[temp3][temp4].num = currentpos2;

pos[temp5][temp6].num = currentpos3;

}

break;

}

}

}

int Game_Judgement()

{

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

{

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

{

if (pos[i][j].num == 4)

{

return 1;

}

}

}

return 0;

}

效果图如下所示:

82fef605a499c6d6b952a7ed43a1417a.png

46e3254233f50df88981ab93fdad7569.png

e726667d958a9b32e30f346b247b327b.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值