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;
- }