理想下载站 手游攻略 新游动态 使用C语言与图形库开发连珠表白游戏教程

使用C语言与图形库开发连珠表白游戏教程

时间:2024-10-24 15:04:31 来源: 浏览:27

今天给各位分享使用C语言与图形库开发连珠表白游戏教程的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

#include//随机数

//#include图形库与windows.h有冲突

#include//放音乐

#pragma comment(lib,"WINMM.LIB")//需要的库

/*

1.连连看部分

加载图片

数组部分 ---1.随机 2.成对出现

图片贴进去-----用数组 二维数组 xy图片贴的位置 元素的值 表示贴什么图片

获取用户点击

判断能否消除

2.表白部分

有背景图片

写出需要说的话

弹窗部分

*/

//窗口大小 640*480

IMAGE img[9];

int map[8][6];//数组大小 8*6 1.窗口大小 2.图片大小 80*80

int win;//全局变量

void putimg();//加载图片

void init();//数组赋值

void draw();//画图部分

int playgame();//获取鼠标点击

void play();//处理两次点击

void lo();

//void

//=====================================

//函数定义部分

void putimg()

{//图形库里面的函数

initgraph(640, 480);//创建窗口

loadimage(&img[0], "1.jpg", 80, 80);//加载图片

loadimage(&img[1], "2.jpg", 80, 80); //L多字节字符集

loadimage(&img[2], "3.jpg", 80, 80);

loadimage(&img[3], "4.jpg", 80, 80);

loadimage(&img[4], "5.jpg", 80, 80);

loadimage(&img[5], "6.jpg", 80, 80);

loadimage(&img[6], "7.jpg", 80, 80);

loadimage(&img[7], "8.jpg", 80, 80);

loadimage(&img[8], "背景.jpg", 640, 480);//窗口大小一样大

}

void init()

{

//1.map 赋值 每张图片放哪里 放哪张图片

//map随机赋值 成对出现 保证每个都有

//用arr数组先处理下地图

int arr[8 * 6] = { 0,0,0,0,0,0,

1,1,1,1,1,1,

2,2,2,2,2,2,

3,3,3,3,3,3,

4,4,4,4,4,4,

5,5,5,5,5,5,

6,6,6,6,6,6,

7,7,7,7,7,7 };//初始地图

//把arr打乱之后放到这个map数组里面

//随机数

srand((unsigned)time(NULL));//生成随机数 随机数。。 time.h

int lenth = 48;//arr长度

int temp;

//给map赋值

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

{

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

{

//随机取出arr中的一个 赋给map[i][j]

temp = rand() % lenth;

map[i][j] = arr[temp];//取出的数字的话不能再用

//取出的数字放到后面

for (int k = temp; k< lenth - 1; k++)

{

arr[k] = arr[k + 1];//k+1

}

lenth--;//数组有效长度减一

}

}

win = 48;//记录当前的图片个数

//map被打乱了 按照map 贴图

}

void draw()

{

BeginBatchDraw();

//背景 --贴背景

putimage(0, 0, &img[8]);

//再贴别的图片

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

{

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

{

//遍历数组

switch (map[i][j])

{

case 0://贴第一张图

putimage(80 * i, 80 * j, &img[0]); break;

case 1:putimage(80 * i, 80 * j, &img[1]); break;

case 2:putimage(80 * i, 80 * j, &img[2]); break;

case 3:putimage(80 * i, 80 * j, &img[3]); break;

case 4:putimage(80 * i, 80 * j, &img[4]); break;

case 5:putimage(80 * i, 80 * j, &img[5]); break;

case 6:putimage(80 * i, 80 * j, &img[6]); break;

case 7:putimage(80 * i, 80 * j, &img[7]); break;

}

}

}

}

int playgame()

{

//图形库的函数

//1.鼠标信息

MOUSEMSG msg;//存储鼠标信息

msg = GetMouseMsg();//获取鼠标信息

//根据鼠标位置 鼠标信息

switch (msg.uMsg)

{

case WM_LBUTTONDOWN:

//msg.x msg.y 第一张图片 0< msg.x<80 0

//返回坐标值 map[msg.x / 80][msg.y / 80] ;

//86-->map[8][6]

return msg.x / 80 * 10 + msg.y / 80;

//return msg.x/8+msg.y/80;

//int 除法不保留小数 3/4 0 3/4*4=0

break;

}

return -1;//没有获取到值

}

void play()

{

//获取两次鼠标点击 1.两次鼠标点击都要有效

int point1, point2;//获取到两次鼠标点击

while ((point1 = playgame()) == -1 || map[point1 / 10][point1 % 10] == -1);//获取到一个坐标

//outtextxy(point1 / 10 * 80, point1 % 10 * 80, "get");

setlinecolor(RED);

rectangle(point1 / 10 * 80, point1 % 10 * 80, point1 / 10 * 80 + 80, point1 % 10 * 80 + 80);

//根据坐标判断

//1.是不是获取到了内容point1 = playgame() != -1

//2.是不是已经赋值的内容 map[point1 / 10][point1 % 10] != -1

//消掉的部分 =-1

while ((point2 = playgame()) == -1 || map[point2 / 10][point2 % 10] == -1);

//加一条就可以

//可以消除或不可以消除

//可以消除 1.坐标不一样 2.图片一样

if (point1 != point2 && map[point1 / 10][point1 % 10] == map[point2 / 10][point2 % 10])

{

//连线部分

line(point1 / 10*80+30,point1 % 10*80+30,point2 / 10*80+30,point2 % 10*80+30);//连线 两个坐标

Sleep(500);//500毫秒

map[point1 / 10][point1 % 10] = -1;//图片和数组挂钩 -1没有对应的图片 draw

map[point2 / 10][point2 % 10] = -1;

win -= 2;//消除部分

}

else

{

//没有消掉

}

}

void lo()

{

//alias song

mciSendString("open 1.mp3 ", 0, 0, 0);

mciSendString("play 1.mp3", 0, 0, 0);

setbkmode(TRANSPARENT);//设置文字背景透明

settextcolor(LIGHTGRAY);//设置文字颜色

settextstyle(30, 0, "黑体");

char poem[2][9] = { "默然相爱","寂静欢喜" };

//一个中文占两字节 8个字节 考虑字符串 \0

//两只黄鹂鸣翠柳 你还没有男朋友

/*outtextxy(0, 0, poem[0]);

outtextxy(0, 30, poem[1]);*/

//文字一个个出现 循环做 每次输出一个中文

//1.中文占两个字节 不能char存储 字符串\0 三个字节

char word[3];//保存一个中文字

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

{

for (int j = 0; j< 9; j+=2)

{

word[0] = poem[i][j];

word[1] = poem[i][j + 1];

word[2] = '\0';

outtextxy(15* j+100,30*i,word);

Sleep(200);

if (poem[i][j + 2] == '\0') break;

}

}

//弹窗内容

HWND hwnd = GetHWnd();//获取当前窗口句柄

MessageBox(hwnd, "I Love You", "NAME", MB_OK);

MessageBox(hwnd, "夏七", "制作人", MB_OK);

}

//=======================

int main()

{

putimg();

init();

draw();

while (win!=0)//循环部分

{

play();

draw();// 贴图

}

//表白部分

//一首诗 写的句子 一个喜欢的人

//一段话

/*initgraph(640, 480);

loadimage(NULL, "背景.jpg", 640, 480);*/

lo();

getchar();

return 0;

}

但是DEV C /GCC /CODEBLOCK 不可以,之所以vs2017不行,因为图形库还不支持。

额外需要的东西有1.图形库 easyx graphics.h 需要安装 2.素材9张图片

涉及到的知识点:

图形库的一些函数(注释)

1.数组

2.if for 分支循环

3.函数

用户评论

野兽之美

这太厉害了!我一直想自己做个连连看游戏,但学编程还比较困难。现在看到用C语言和图形库做的,心里突然充满了期待啊!感觉学习一下编程也不错呢~

    有15位网友表示赞同!

打个酱油卖个萌

哇塞,看着这个画面感觉真不错啊!表白连连看,太有创意了!我记得小时候玩连连看的那些欢乐时光,这游戏一定能再回味一遍青春的甜蜜回忆呀。

    有17位网友表示赞同!

冷眼旁观i

C语言确实是一门实用性非常强的语言,结合图形库可以做出如此炫酷的游戏,真是佩服作者的技术实力啊!希望下次可以把语音和音乐加入进来,体验会更丰富!

    有17位网友表示赞同!

鹿先森,教魔方

这个游戏的主题很棒,对于想要表达心意的年轻人来说,肯定有很大吸引力。不过感觉游戏难度有点高,能不能提供更多难度调节选项?

    有19位网友表示赞同!

凉月流沐@

做游戏真的需要很多的时间和精力啊!作者真是太用心了!这个表白连连看游戏一定能够深受喜爱,祝你顺利发布!

    有7位网友表示赞同!

别伤我i

我也想玩这款游戏呀!C语言+图形库这个组合确实很强大,希望以后可以多了解一些相关的技术,说不定自己也能创造出精彩的游戏呢。

    有13位网友表示赞同!

人心叵测i

表白的含义很多也挺深层的,这个游戏能通过简单的玩法表达复杂的情感让人感到意外。但是我觉得如果画面设计更精细一点,会更加吸引人!

    有18位网友表示赞同!

幸好是你

虽然游戏很有创意,但C语言的代码我不敢看啊!太难了,还是玩手机手游简单直接 。

    有11位网友表示赞同!

凉笙墨染

这个游戏的设计理念很独特,结合社交属性能让游戏的趣味性更高。希望未来会有更多创新类型的连连看游戏出现!

    有5位网友表示赞同!

枫无痕

这套源码看起来非常清晰简洁,不愧是C语言的魅力!学习一下可以提高自己的编程水平呢!

    有16位网友表示赞同!

笑叹尘世美

我有点担心这款游戏能不能吸引到年轻人。现在流行各种各样的移动游戏,这个表白连连看会不会显得比较落后?

    有12位网友表示赞同!

罪歌

我觉得游戏的难度设定还可以再调整一下,让我玩了一个小时都感觉没太进步 但是整体的画面和玩法还是挺不错的!

    有19位网友表示赞同!

呆萌

这款游戏能唤起我童年的回忆。以前玩连连看经常都是跟伙伴一起玩的,充满快乐的感觉。希望这个表白连连看也能成为很多情侣之间甜蜜互动的方式!

    有8位网友表示赞同!

放血

作为一个码农,看到C语言+图形库打造出的优秀作品真是感到自豪!希望所有学习编程的人都能像作者一样做出有创意的作品。

    有7位网友表示赞同!

艺菲

这款游戏的玩法虽然简单,但它背后的文化内涵却非常有趣。表白这种行为也是一种文化的传承,这个游戏将传统与现代完美结合!

    有11位网友表示赞同!

矜暮

喜欢这种结合情趣和游戏性的创意!希望这款连连看成为一款网络爆款,让更多人了解到C语言的强大魅力!

    有6位网友表示赞同!

执妄

虽然很酷炫,但我还是更爱简洁操作的手机小游戏。如果能移植到手机平台,肯定会有更多人玩!

    有14位网友表示赞同!

玻璃渣子

表白这个话题永远不会过时!这款游戏很好地利用了连连看这一经典玩法,我相信一定能引起很多玩家共鸣!

    有17位网友表示赞同!

空巷

C语言确实不是一门简单的编程语言,看到作者能够应用它开发出如此优秀的项目,感觉非常厉害!学习一下他们的代码可以让我对C语言有更深刻的理解。

    有12位网友表示赞同!

标题:使用C语言与图形库开发连珠表白游戏教程
链接:https://www.ltthb.com/news/xydt/132239.html
版权:文章转载自网络,如有侵权,请联系删除!
资讯推荐
更多
ToonMe怎么取消自动续费?自动续费关闭方法

ToonMe怎么取消自动续费?自动续费关闭方法[多图],ToonMe中的迪士尼滤镜很火爆,有不少小伙伴都喜欢,不过在使用

2024-10-24
航海王热血航线藏宝图位置在哪?全部藏宝图位置坐标大全

航海王热血航线藏宝图位置在哪?全部藏宝图位置坐标大全[多图],航海王热血航线藏宝图在哪里?怎么样才能找到藏

2024-10-24
cf手游云悠悠角色怎么获得?云悠悠什么时候上线

cf手游云悠悠角色怎么获得?云悠悠什么时候上线[多图],cf手游云悠悠角色什么时候出?云悠悠角色获得的方法是什

2024-10-24
英雄联盟联动优衣库活动详情一览:LOL联动优衣库T恤购买地址入口

英雄联盟联动优衣库活动详情一览:LOL联动优衣库T恤购买地址入口[多图],英雄联盟联动优衣库T恤衫什么时候发售

2024-10-24