C语言程序设计新手入门基础编程学习打造——小表情连连看

C语言程序设计新手入门基础编程学习打造——小表情连连看_第1张图片

今天带来一个小游戏——连连看,用C语言打造,里面涉及的知识点也并不是很多的。涉及到了,数组、函数、分支结构、循环结构。自然配上音乐就会有感觉了,不要忘了安装好图形库。

这个的话代码也有点多的,我就只先把一部分的代码发出来吧

/********************************************************************************

*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~总结~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*

*通过一维数组来给二维数组赋值*

*利用随机数通过switch语句进行随机打印图片*

*处理鼠标消息设置条件来消除(逐行扫描画实心矩形来覆盖图片消除)*

********************************************************************************/

#include //图形库

#include //标准输入输出

#include //标准库

#include //随机

#include

#include //多媒体设备接口头文件和库文件

#pragma comment(lib,"winmm.lib")

void tupian();

void shubiao();

int a[120] = {1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,

6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,

11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,

14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15};//图片个数

int xia, chang=120;//下标 长度

int er[10][12];// 二维

IMAGE tu[15];//类

int main()

{

initgraph(500,600);//初始化图形窗口

setbkcolor(WHITE);//背景颜色

cleardevice();//刷新

srand((unsigned int)time(NULL));//随机数种子

PlaySound(L"群星 - 老司机带带我(云南山歌).wav",NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);

loadimage(&tu[0], L"1.jpg"); //存图片

loadimage(&tu[1], L"2.jpg");

loadimage(&tu[2], L"3.jpg");

loadimage(&tu[3], L"4.jpg");

loadimage(&tu[4], L"5.jpg");

loadimage(&tu[5], L"6.jpg");

loadimage(&tu[6], L"7.jpg");

loadimage(&tu[7], L"8.jpg");

loadimage(&tu[8], L"9.jpg");

loadimage(&tu[9], L"10.jpg");

loadimage(&tu[10], L"11.jpg");

loadimage(&tu[11], L"12.jpg");

loadimage(&tu[12], L"13.jpg");

loadimage(&tu[13], L"14.jpg");

loadimage(&tu[14], L"15.jpg");

tupian();

shubiao();

system("pause");//系统 暂停

closegraph();//关闭画布

getchar();

return 0;

}

void tupian()// 随机产生图片

{

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

{

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

{

xia = rand() % chang; //通过一维数组给二维数组赋值

er[i][j] = a[xia];

for (int k = xia; k < chang; k++)// 将取走的元素后面的元素向前移位

{

a[k] = a[k + 1];

}

chang--;

}

}

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

{

for (int j = 0; j < 12; j++)//遍历二维数组进行选择 随机产生图片

{

switch (er[i][j])

{

case 1:

putimage(i * 50, j * 50, &tu[0]); break;

case 2:

putimage(i * 50, j * 50, &tu[1]); break;

case 3:

putimage(i * 50, j * 50, &tu[2]); break;

case 4:

putimage(i * 50, j * 50, &tu[3]); break;

case 5:

putimage(i * 50, j * 50, &tu[4]); break;

case 6:

putimage(i * 50, j * 50, &tu[5]); break;

case 7:

putimage(i * 50, j * 50, &tu[6]); break;

case 8:

putimage(i * 50, j * 50, &tu[7]); break;

case 9:

putimage(i * 50, j * 50, &tu[8]); break;

case 10:

putimage(i * 50, j * 50, &tu[9]); break;

case 11:

putimage(i * 50, j * 50, &tu[10]); break;

case 12:

putimage(i * 50, j * 50, &tu[11]); break;

case 13:

putimage(i * 50, j * 50, &tu[12]); break;

case 14:

putimage(i * 50, j * 50, &tu[13]); break;

case 15:

putimage(i * 50, j * 50, &tu[14]); break;

}

}

}

}

void shubiao()//处理鼠标消息 消除图片

{

MOUSEMSG m;//定义鼠标变量

int r, c, r1 = 12, c1 = 12, temp = 0;

while (1)

{

m = GetMouseMsg();//得到鼠标消息

switch (m.uMsg)//处理鼠标消息

{

/*case WM_RBUTTONDOWN://右键按下重新开始

//fillcircle(m.x, m.y, 25);

//cleardevice();

break;*/

case WM_LBUTTONDOWN:

if (temp % 2 == 0)

{

r = m.x / 50;

c = m.y / 50;

}

else//if (temp % 2 != 0)

{

r1 = m.x / 50;

c1 = m.y / 50;

}

temp++;

//消除

if (temp % 2 == 0)

{

if ((er[r][c] == er[r1][c1]) && (r == r1 || c == c1))//(r == r1 || c == c1)不加这个相同就消除

{

if (r == r1 && c == c1)//r == r1 && c == c1不加这个条件 点两下一个图片会消除 小bug

{

break;

}

if (r == 0)//逐行扫描

{

switch (c)

{

case 0:fillrectangle(0, 0, 50, 50); break;

case 1:fillrectangle(0, 50, 50, 100); break;

case 2:fillrectangle(0, 100, 50, 150); break;

case 3:fillrectangle(0, 150, 50, 200); break;

case 4:fillrectangle(0, 200, 50, 250); break;

case 5:fillrectangle(0, 250, 50, 300); break;

case 6:fillrectangle(0, 300, 50, 350); break;

case 7:fillrectangle(0, 350, 50, 400); break;

case 8:fillrectangle(0, 400, 50, 450); break;

case 9:fillrectangle(0, 450, 50, 500); break;

case 10:fillrectangle(0, 500, 50, 550); break;

case 11:fillrectangle(0, 550, 50, 600); break;

}

}

if (r == 1)

{

switch (c)

{

case 0:fillrectangle(50, 0, 100, 50); break;

case 1:fillrectangle(50, 50, 100, 100); break;

case 2:fillrectangle(50, 100, 100, 150); break;

case 3:fillrectangle(50, 150, 100, 200); break;

case 4:fillrectangle(50, 200, 100, 250); break;

case 5:fillrectangle(50, 250, 100, 300); break;

case 6:fillrectangle(50, 300, 100, 350); break;

case 7:fillrectangle(50, 350, 100, 400); break;

case 8:fillrectangle(50, 400, 100, 450); break;

case 9:fillrectangle(50, 450, 100, 500); break;

case 10:fillrectangle(50, 500, 100, 550); break;

case 11:fillrectangle(50, 550, 100, 600); break;

}

}

后面的话还是一样的代码,是分支语句,行数,所以不发了,代码太多了,最终的效果图,在这就发下吧(加QQ群:{{315732400:0}},群内有大量学习资源可供学习)

C语言程序设计新手入门基础编程学习打造——小表情连连看_第2张图片
C语言程序设计新手入门基础编程学习打造——小表情连连看_第3张图片

重要的事情,说三遍!!!不要忘了装图形库,图形库,图形库。我就说到这就结束吧,各位晚安哈,打手不易,也希望各位大佬们,多多提下意见哈,~~在这里希望每一位爱好编程的伙伴们,在这条道路上越走越远。

C语言程序设计新手入门基础编程学习打造——小表情连连看_第4张图片
C语言程序设计新手入门基础编程学习打造——小表情连连看_第5张图片

你可能感兴趣的:(C语言程序设计新手入门基础编程学习打造——小表情连连看)