前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言项目 微信小游戏《羊了个羊》

C语言项目 微信小游戏《羊了个羊》

作者头像
CtrlX
发布2022-10-04 17:13:51
1.4K0
发布2022-10-04 17:13:51
举报
文章被收录于专栏:C++核心编程C++核心编程

需求

图形库:easyX

image:背景图bk.jpg,卡片图lingdang.png,shu.png,cao.png

miss:背景音乐

思路

首先需要导入图片

定义图片

三板斧:1.定义 2.加载 3.渲染

代码语言:javascript
复制
#include<stdio.h>
#include<easyx.h>
#include<windows.h>//导入音乐和图片时用到
#pragma comment(lib,"Winmm.lib")

//导入图片前先定义图片
IMAGE img_bk;//背景图片
IMAGE img_item[3];//三维数组

//定义宽高
const int WIDTH  = 400;
const int HEIGHT = 760;


void loadImag(){
	//加载
	loadimage(&img_bk,"images/bk.jpg", WIDTH, HEIGHT);
	loadimage(img_item + 0,"images/cao.png", 48, 48);//48是图片的大小 
	loadimage(img_item + 1,"images/lingdang.png", 48, 48);
	loadimage(img_item + 2,"images/shu.png", 48, 48);
}


int main(){
	


	return 0;
}

PS:

若在使用VS编写代码时使用loadimage()函数报错则可以在项目->项目属性 ->常规->字符集 中将Unicode更改为使用多字节字符集。

image
image
代码语言:javascript
复制
#include<stdio.h>
#include<easyx.h>
#include<windows.h>//播放音乐 的头文件
#pragma comment(lib,"Winmm.lib")//播放音乐 的库文件

//导入图片前先定义图片
IMAGE img_bk;//背景图片
IMAGE img_item[3];//三维数组

//定义宽高
const int WIDTH  = 400;
const int HEIGHT = 760;


void loadImg(){
	//加载
	loadimage(&img_bk,"images/bk.jpg", WIDTH, HEIGHT);
	loadimage(img_item + 0,"images/cao.png", 48, 48);//48是图片的大小 
	loadimage(img_item + 1,"images/lingdang.png", 48, 48);
	loadimage(img_item + 2,"images/shu.png", 48, 48);
}


int main(){
	
	//创建窗口
	initgraph(WIDTH,HEIGHT);
	//加载图片函数
	loadImg();

	//播放音乐
	mciSendString(_T("open micc/yang.mp3"), 0, 0, 0);
	mciSendString(_T("play micc/yang.mp3"), 0, 0, 0);

	return 0;
}
代码语言:javascript
复制
#include<stdio.h>
#include<easyx.h>
#include<windows.h>//播放音乐 的头文件
#pragma comment(lib,"Winmm.lib")//播放音乐 的库文件

//导入图片前先定义图片
IMAGE img_bk;//背景图片
IMAGE img_item[3];//三维数组

//定义宽高
const int WIDTH  = 400;
const int HEIGHT = 760;


void loadImg(){
	//加载
	loadimage(&img_bk,"images/bk.jpg", WIDTH, HEIGHT);
	loadimage(img_item + 0,"images/cao.png", 48, 48);//48是图片的大小 
	loadimage(img_item + 1,"images/lingdang.png", 48, 48);
	loadimage(img_item + 2,"images/shu.png", 48, 48);
}


int main(){
	
	//创建窗口
	initgraph(WIDTH,HEIGHT);
	//加载图片函数
	loadImg();

	//播放音乐
	mciSendString(_T("open micc/yang.mp3"), 0, 0, 0);
	mciSendString(_T("play micc/yang.mp3"), 0, 0, 0);
	
	//创建头数组
	// 初始化
	int map = [3][3] = { 0 };
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			map[i][j] = i + 1;
		}
	}
	//创建尾数组

	return 0;
}
image
image

间隔

const int INTERVAL = 48;

image
image
代码语言:javascript
复制
#include<stdio.h>
#include<easyx.h>
#include<windows.h>//播放音乐 的头文件
#pragma comment(lib,"Winmm.lib")//播放音乐 的库文件

//导入图片前先定义图片
IMAGE img_bk;//背景图片
IMAGE img_item[3];//三维数组

//定义宽高
const int WIDTH  = 400;
const int HEIGHT = 760;
const int INTERVAL = 48;


void loadImg(){
	//加载
	loadimage(&img_bk,"images/bk.jpg", WIDTH, HEIGHT);
	loadimage(img_item + 0,"images/cao.png", 48, 48);//48是图片的大小 
	loadimage(img_item + 1,"images/lingdang.png", 48, 48);
	loadimage(img_item + 2,"images/shu.png", 48, 48);
}


int main(){
	
	//创建窗口
	initgraph(WIDTH,HEIGHT);
	//加载图片函数
	loadImg();

	//播放音乐
	mciSendString(_T("open micc/yang.mp3"), 0, 0, 0);
	mciSendString(_T("play micc/yang.mp3"), 0, 0, 0);
	
	//创建头数组
	// 初始化
	int map [3][3] = { 0 };
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			map[i][j] = i + 1;
		}
	}

	//打乱数组,创造随机的图片分布
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			//数组当中的行和列随机打乱
			int i1 = rand() % 3;
			int j2 = rand() % 3;
			//打乱行和列 交换打乱
			int temp = map[i1][j2];
			map[i1][j2] = map[i][j];
			map[i][j] = temp;
		}
	}
	//算一下数组的位置在哪里
	//找到图片x
	int offsetX = (WIDTH - (2 * INTERVAL + 3 * 48)) / 2;
	//找到y的位置
	int offsetY = (HEIGHT - (2 * INTERVAL + 3 * 48)) / 2;

	//定义逻辑部分的下面的数组:7个卡槽
	int store[7] = { 0 };

	//绘制地图 定义,加载,绘制
	while (1)
	{
		//绘制背景地图
		putimage(0,0,&img_bk);
		//渲染 绘制
		for (int i = 0; i < 3; i++)
		{
			for (int j = 0; j < 3; j++)
			{
				//开始渲染
				if (map[i][j])//判断一下,如果map里有值就开始渲染
					//渲染需要萨格参数x,y,图片
					putimage(offsetX + j * (48 + INTERVAL), offsetY + i * (48 + INTERVAL),img_item + (map[i][j]));

			}
		}
		//点击了创建下面的数组,图片往下掉,进入卡槽
		ExMessage msg = {0};//鼠标点击的消息
		//点击鼠标后是否有消息,消息是WM_LBUTTONDOWN 左键
		if (peekmessage(&msg)&&msg.message == WM_LBUTTONDOWN){
			for (int i = 0; i < 3; i++){
				for (int j = 0; j < 3; j++){
					//鼠标坐标得X
					int x = offsetX + j * (48 + INTERVAL);
					//鼠标坐标Y
					int y = offsetY + i * (48 + INTERVAL);
					//判断鼠标是否点击了图片
					if (msg.x > x && msg.x< x + 48 && msg.y > y && msg.y < y + 48)
					{
						//求出图片对应的数组的位置
						int col = (msg.x - offsetX) / (48 + INTERVAL);
						int row = (msg.x - offsetX) / (48 + INTERVAL);

						//点击到图片渲染得到下面的数组
						for (int  i = 0; i < 7; i++)
						{
							//下面的数组没有
							if (store[i] == 0)
							{
								//上面的数组给下面的数组图片
								store[i] = map[row][col];
								break;
							}

						}
						//记录一下给的次数
						int cnt = 0;
						for (int i = 0; i < 7; i++)
						{
							if (store[i] == map[row][col]) {
								cnt++;
							}

						}
						if (cnt == 3) {
							//消除操作
							for (int i = 0; i < 7; i++)
							{
								
								if (store[i] == map[row][col]) {
									store[i] = 0;
								}
							}
						}
						map[row][col] = 0;
					}

				}
			}
		}

	}



	//创建尾数组

	return 0;
}

产生了两个问题:

1.图片闪烁

2.下面槽中美誉图片

代码语言:javascript
复制
#include<stdio.h>
#include<easyx.h>
#include<windows.h>//播放音乐 的头文件
#pragma comment(lib,"Winmm.lib")//播放音乐 的库文件

//导入图片前先定义图片
IMAGE img_bk;//背景图片
IMAGE img_item[3];//三维数组

//定义宽高
const int WIDTH  = 400;
const int HEIGHT = 760;
const int INTERVAL = 48;


void loadImg(){
	//加载
	loadimage(&img_bk,"images/bk.jpg", WIDTH, HEIGHT);
	loadimage(img_item + 0,"images/cao.png", 48, 48);//48是图片的大小 
	loadimage(img_item + 1,"images/lingdang.png", 48, 48);
	loadimage(img_item + 2,"images/shu.png", 48, 48);
}


int main(){
	
	//创建窗口
	initgraph(WIDTH,HEIGHT);
	//加载图片函数
	loadImg();

	//播放音乐
	mciSendString(_T("open micc/yang.mp3"), 0, 0, 0);
	mciSendString(_T("play micc/yang.mp3"), 0, 0, 0);
	
	//创建头数组
	// 初始化
	int map [3][3] = { 0 };
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			map[i][j] = i + 1;
		}
	}

	//打乱数组,创造随机的图片分布
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			//数组当中的行和列随机打乱
			int i1 = rand() % 3;
			int j2 = rand() % 3;
			//打乱行和列 交换打乱
			int temp = map[i1][j2];
			map[i1][j2] = map[i][j];
			map[i][j] = temp;
		}
	}
	//算一下数组的位置在哪里
	//找到图片x
	int offsetX = (WIDTH - (2 * INTERVAL + 3 * 48)) / 2;
	//找到y的位置
	int offsetY = (HEIGHT - (2 * INTERVAL + 3 * 48)) / 2;

	//定义逻辑部分的下面的数组:7个卡槽
	int store[7] = { 0 };

	//绘制地图 定义,加载,绘制
	while (1)
	{
		//缓存机制
		BeginBatchDraw();
		//绘制背景地图
		putimage(0,0,&img_bk);
		//渲染 绘制
		for (int i = 0; i < 3; i++)
		{
			for (int j = 0; j < 3; j++)
			{
				//开始渲染
				if (map[i][j])//判断一下,如果map里有值就开始渲染
					//渲染需要萨格参数x,y,图片
					putimage(offsetX + j * (48 + INTERVAL), offsetY + i * (48 + INTERVAL),img_item + (map[i][j]));

			}
		}


		//绘制下面的图片
		for (int i = 0; i < 7; i++)
		{
			if (store[i])
			{
				putimage((i * 50) + 26, 620, img_item + (store[i] - 1));
			}
		}


		EndBatchDraw();
		//点击了创建下面的数组,图片往下掉,进入卡槽
		ExMessage msg = {0};//鼠标点击的消息
		//点击鼠标后是否有消息,消息是WM_LBUTTONDOWN 左键
		if (peekmessage(&msg)&&msg.message == WM_LBUTTONDOWN){
			for (int i = 0; i < 3; i++){
				for (int j = 0; j < 3; j++){
					//鼠标坐标得X
					int x = offsetX + j * (48 + INTERVAL);
					//鼠标坐标Y
					int y = offsetY + i * (48 + INTERVAL);
					//判断鼠标是否点击了图片
					if (msg.x > x && msg.x< x + 48 && msg.y > y && msg.y < y + 48)
					{
						//求出图片对应的数组的位置
						int col = (msg.x - offsetX) / (48 + INTERVAL);
						int row = (msg.y - offsetX) / (48 + INTERVAL);

						//点击到图片渲染得到下面的数组
						for (int  i = 0; i < 7; i++)
						{
							//下面的数组没有
							if (store[i] == 0)
							{
								//上面的数组给下面的数组图片
								store[i] = map[row][col];
								break;
							}

						}
						//记录一下给的次数
						int cnt = 0;
						for (int i = 0; i < 7; i++)
						{
							if (store[i] == map[row][col]) {
								cnt++;
							}

						}
						if (cnt == 3) {
							//消除操作
							for (int i = 0; i < 7; i++)
							{
								
								if (store[i] == map[row][col]) {
									store[i] = 0;
								}
							}
						}
						map[row][col] = 0;
					}

				}
			}
		}

	}



	//创建尾数组

	return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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