IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> C语言沈梦溪推箱子小游戏 -> 正文阅读

[游戏开发]C语言沈梦溪推箱子小游戏

效果图

在这里插入图片描述

项目链接

https://download.csdn.net/download/weixin_45525272/21106512

代码

#include<stdio.h>
#include<conio.h>
#include<graphics.h>				//图形库头文件
#pragma comment(lib,"winmm.lib")  //多媒体库
 

IMAGE img[8];//图片数组
int x1, y1;  //定义主角坐标
int loop=0;//重置开关


//函数申明
void Find(int map[9][9]);
void Print(int map[9][9]);
void Princes(int x, int y);
void Boom(int x, int y);
void Wolf(int x, int y);
void Bomb(int x, int y);
void Man(int x, int y);
void Blank(int x, int y);
int Victory(int map[9][9]);
void Move(int map[9][9], int x, int y);
void GameMap();
int PlayGame(int map[9][9]);
void Loading();
void GiniGame();


void GiniGame()//窗体初始化
{
	//创建窗口
	initgraph(540, 540);

	loadimage(NULL, "./游戏素材/图片素材/317760.jpg");//   ./ 表示当前路径
	Sleep(3000);

	cleardevice();//刷新界面
}

void Loading()
{
	loadimage(&img[0], "./游戏素材/图片素材/0.jpg");
	loadimage(&img[1], "./游戏素材/图片素材/1.jpg");
	loadimage(&img[2], "./游戏素材/图片素材/2.jpg");
	loadimage(&img[3], "./游戏素材/图片素材/3.jpg");
	loadimage(&img[4], "./游戏素材/图片素材/4.jpg");
	loadimage(&img[5], "./游戏素材/图片素材/5.jpg");
	loadimage(&img[6], "./游戏素材/图片素材/6.jpg");
	loadimage(&img[7], "./游戏素材/图片素材/7.jpg");

	//mciSendString("open ./游戏素材/音乐素材/别看我只是一只羊.mp3 alias BGM",0,0,0);
	//mciSendString("play BGM", 0, 0, 0);
}

//3.游戏关卡
void GameMap()
{
	//3.1导入所有地图
	int gamemap[5][9][9] =
	{
		{{4, 4, 6, 6, 6, 4, 4, 4, 4 },
		{4, 4, 6, 3, 6, 4, 4, 4, 4 },
		{4, 4, 6, 0, 6, 6, 6, 6, 4 },
		{6, 6, 6, 2, 0, 2, 3, 6, 4 },
		{6, 3, 0, 2, 1, 6, 6, 6, 4 },
		{6, 6, 6, 6, 2, 6, 4, 4, 4 },
		{4, 4, 4, 6, 3, 6, 4, 4, 4 },
		{4, 4, 4, 6, 6, 6, 4, 4, 4 },
		{4, 4, 4, 4, 4, 4, 4, 4, 4 }, },

	{ {6, 6, 6, 6, 6, 4, 4, 4, 4 },
		{6, 1, 0, 0, 6, 4, 4, 4, 4 },
		{6, 0, 2, 2, 6, 4, 6, 6, 6 },
		{6, 0, 2, 0, 6, 4, 6, 3, 6 },
		{6, 6, 6, 0, 6, 6, 6, 3, 6 },
		{4, 6, 6, 0, 0, 0, 0, 3, 6 },
		{4, 6, 0, 0, 0, 6, 0, 0, 6 },
		{4, 6, 0, 0, 0, 6, 6, 6, 6 },
		{4, 6, 6, 6, 6, 6, 4, 4, 4 } },

	{ {4, 6, 6, 6, 6, 4, 4, 4, 4 },
		{4, 6, 1, 0, 6, 6, 6, 4, 4 },
		{4, 6, 0, 2, 0, 0, 6, 4, 4 },
		{6, 6, 6, 0, 6, 0, 6, 6, 4 },
		{6, 3, 6, 0, 6, 0, 0, 6, 4 },
		{6, 3, 2, 0, 0, 6, 0, 6, 4 },
		{6, 3, 0, 0, 0, 2, 0, 6, 4 },
		{6, 6, 6, 6, 6, 6, 6, 6, 4 },
		{4, 4, 4, 4, 4, 4, 4, 4, 4 }, },

	{ {4, 6, 6, 6, 6, 6, 6, 6, 4 },
		{4, 6, 0, 1, 3, 3, 3, 6, 4 },
		{4, 6, 0, 0, 0, 6, 6, 6, 6 },
		{6, 6, 6, 2, 0, 0, 0, 0, 6 },
		{6, 0, 0, 0, 6, 2, 6, 0, 6 },
		{6, 0, 2, 0, 6, 0, 0, 0, 6 },
		{6, 0, 0, 0, 6, 6, 6, 6, 6 },
		{6, 6, 6, 6, 6, 4, 4, 4, 4 },
		{4, 4, 4, 4, 4, 4, 4, 4, 4 }, },

	{ {4, 6, 6, 6, 6, 6, 4, 4, 4 },
		{4, 6, 0, 1, 0, 6, 6, 6, 4 },
		{6, 6, 0, 6, 2, 0, 0, 6, 4 },
		{6, 0, 5 ,3, 0, 3, 0, 6, 4 },
		{6, 0, 0, 2, 2, 0, 6, 6, 4 },
		{6, 6, 6, 0, 6, 3, 6, 4, 4 },
		{4, 4, 6, 0, 0, 0, 6, 4, 4 },
		{4, 4, 6, 6, 6, 6, 6, 4, 4 },
		{4, 4, 4, 4, 4, 4, 4, 4, 4 },}
	};


	int map[9][9];	//加载当前地图


	for (int i = 0; i < 5; i++)
	{
		
		do
		{
			loop = 0;
			for (int j = 0; j < 9; j++)
			{
				for (int k = 0; k < 9; k++)
				{
					//3.2获取当前地图
					map[j][k] = gamemap[i][j][k];
				}
			}
			//3.3玩游戏的逻辑
			PlayGame(map);

		} while (loop);
	}

}

//3.3玩游戏的逻辑
int PlayGame(int map[9][9])
{
	Print(map);	//3.3.1游戏界面贴图调用
	Find(map);	//3.3.2游戏角色定位调用

	//角色操作
	do
	{
		switch (_getch())
		{
		case 72:    Move(map, -1, 0);  break;  //向上
		case 75:    Move(map, 0, -1);  break;  //向左
		case 77:    Move(map, 0, 1);   break;  //向右
		case 80:    Move(map, 1, 0);   break;  //向下
		case 27:   exit(0);			   break;  //退出
		case 32:    loop = 1;  return 0;  //空格恢复原状态
		}
	} while (Victory(map));  //

	Princes(60 * x1, 60 * y1);//胜利后贴美羊羊庆祝通关

	MessageBox(NULL,"成功击败狗子们" , "恭喜通关", MB_SYSTEMMODAL);//MB_SYSTEMMODAL使得弹框最前置

	return 0;
}

void Move(int map[9][9], int x, int y)
{
	//喜洋洋前面的位置是否是空地或者是狗子
	if (map[x1+x][y1+y]==0|| map[x1 + x][y1 + y] == 3)
	{
		map[x1][y1]--;//使得数字数组里的喜洋洋变为空白
		map[x1 + x][y1 + y]++;//使得数字数组里的空白变为喜洋洋对应数值
		for (int i = 0; i < 60; i++)
		{
			Blank(60*x1+i*x,60*y1+i*y);//在移动前喜洋洋位置重绘空白
			Man(60 * x1 + (i + 1)*x, 60 * y1 + (i + 1)*y);//在移动后喜洋洋位置重绘空
		}

		if (map[x1][y1]==3)//c重绘狗子
		{
			Wolf(60 * x1, 60 * y1);
		}
		//数值数组位置移动
		x1 += x;
		y1 += y;
	}

	else if ((map[x1 + x][y1 + y]==2|| map[x1 + x][y1 + y]==5)
			&&( map[x1 + x*2][y1 + y*2]==0|| map[x1 + x*2][y1 + y*2]==3))
	{
		map[x1][y1]--;//喜洋洋原来位置变成空白
		map[x1 + x][y1 + y]--;//炸弹原来位置变成喜洋洋
		map[x1 + 2 * x][y1 + 2 * y] += 2;//灰太狼的地方触发爆炸效果
		for (int i = 0; i < 60; i++)
		{
			Blank(60 * (x1 + x) + i * x, 60 * (y1 + y) + i * y);//将炸弹的位置换为空白以便后期贴图
			Boom(60 * (x1 + x) + (i+1) * x, 60 * (y1 + y) + (i+1) * y);//在炸弹被推倒后位置重绘炸弹
			Blank(60 * x1  + i * x, 60 *y1+ i * y);//在原来喜洋洋位置重绘空白
			Man(60 * x1  + (i+1) * x, 60 *y1  + (i+1) * y);//在原来炸弹位置重绘喜洋洋
		}
		if (map[x1][y1]==3)
		{
			Wolf(60 * x1, 60 * y1);
		}

		//喜洋洋坐标移动
		x1 += x;
		y1 += y;

		if (map[x1+x][y1+y]==5)
		{
			Bomb(60 * (x1 + x), 60 * (y1 + y));//绘制爆炸效果
		}
	}
}

int Victory(int map[9][9])//游戏通关判定
{
	for (int i = 0; i < 9; i++)
	{
		for (int j = 0; j < 9; j++)
		{
			if (map[i][j]==2)
			{
				return 1;
			}
		}
	}
	return 0;//没有炸弹   进去下一关
}


//贴单个图
void Blank(int x, int y)//白块
{
	putimage(y, x, &img[0]);
}
void Man(int x, int y)//养羊
{
	putimage(y, x, &img[1]);
}
void Bomb(int x, int y)
{
	putimage(y, x, &img[5]);
}
void Wolf(int x, int y)
{
	putimage(y, x, &img[3]);
}
void Boom(int x, int y)
{
	putimage(y, x, &img[2]);
}
void Princes(int x, int y)
{
	putimage(y, x, &img[7]);
}

//3.3.1游戏界面贴图
void Print(int map[9][9])
{
	for (int x = 0; x < 9; x++)
	{
		for (int y = 0; y < 9; y++)
		{
			putimage(60 * y, 60 * x, &img[map[x][y]]);
		}
	}
}

//3.3.2游戏角色定位
void Find(int map[9][9])
{
	for (x1 = 0; x1 < 9; x1++)
	{
		for (y1 = 0; y1 < 9; y1++)
		{
			if (map[x1][y1]==1)
			{
				return;
			}
		}
	}
}

int main() 
{
	//1.游戏界面初始化
	GiniGame();
	//2.游戏素材加载
	Loading();
	//3.游戏关卡
	GameMap();


	getchar();
	return 0;
}
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-21 15:47:34  更:2021-08-21 15:47:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/4 1:33:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码