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

需求

图形库:easyX

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

miss:背景音乐

思路

首先需要导入图片

定义图片

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

  • #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更改为使用多字节字符集。

  • #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;
  • }
展开
  • #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;
  • }
展开

间隔

const int INTERVAL = 48;

  • #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.下面槽中美誉图片

  • #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;
  • }
展开
本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
<<上一篇
下一篇>>