今天帶來一個(gè)小游戲——連連看,用C語(yǔ)言打造乍赫,里面涉及的知識(shí)點(diǎn)也并不是很多的瓣蛀。涉及到了,數(shù)組雷厂、函數(shù)惋增、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)改鲫。自然配上音樂就會(huì)有感覺了诈皿,不要忘了安裝好圖形庫(kù)。
這個(gè)的話代碼也有點(diǎn)多的像棘,我就只先把一部分的代碼發(fā)出來吧
/********************************************************************************
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~總結(jié)~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*
*通過一維數(shù)組來給二維數(shù)組賦值*
*利用隨機(jī)數(shù)通過switch語(yǔ)句進(jìn)行隨機(jī)打印圖片*
*處理鼠標(biāo)消息設(shè)置條件來消除(逐行掃描畫實(shí)心矩形來覆蓋圖片消除)*
********************************************************************************/
#include //圖形庫(kù)
#include //標(biāo)準(zhǔn)輸入輸出
#include //標(biāo)準(zhǔn)庫(kù)
#include //隨機(jī)
#include
#include //多媒體設(shè)備接口頭文件和庫(kù)文件
#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};//圖片個(gè)數(shù)
int xia, chang=120;//下標(biāo) 長(zhǎng)度
int er[10][12];// 二維
IMAGE tu[15];//類
int main()
{
initgraph(500,600);//初始化圖形窗口
setbkcolor(WHITE);//背景顏色
cleardevice();//刷新
srand((unsigned int)time(NULL));//隨機(jī)數(shù)種子
PlaySound(L"群星 - 老司機(jī)帶帶我(云南山歌).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");//系統(tǒng) 暫停
closegraph();//關(guān)閉畫布
getchar();
return 0;
}
void tupian()// 隨機(jī)產(chǎn)生圖片
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 12; j++)
{
xia = rand() % chang; //通過一維數(shù)組給二維數(shù)組賦值
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++)//遍歷二維數(shù)組進(jìn)行選擇 隨機(jī)產(chǎn)生圖片
{
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()//處理鼠標(biāo)消息 消除圖片
{
MOUSEMSG m;//定義鼠標(biāo)變量
int r, c, r1 = 12, c1 = 12, temp = 0;
while (1)
{
m = GetMouseMsg();//得到鼠標(biāo)消息
switch (m.uMsg)//處理鼠標(biāo)消息
{
/*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)不加這個(gè)相同就消除
{
if (r == r1 && c == c1)//r == r1 && c == c1不加這個(gè)條件 點(diǎn)兩下一個(gè)圖片會(huì)消除 小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;
}
}
后面的話還是一樣的代碼稽亏,是分支語(yǔ)句,行數(shù)缕题,所以不發(fā)了截歉,代碼太多了,最終的效果圖避除,在這就發(fā)下吧(加QQ群:{{315732400:0}}怎披,群內(nèi)有大量學(xué)習(xí)資源可供學(xué)習(xí))
重要的事情胸嘁,說三遍!!凉逛!不要忘了裝圖形庫(kù)性宏,圖形庫(kù),圖形庫(kù)状飞。我就說到這就結(jié)束吧毫胜,各位晚安哈,打手不易诬辈,也希望各位大佬們酵使,多多提下意見哈,~~在這里希望每一位愛好編程的伙伴們焙糟,在這條道路上越走越遠(yuǎn)口渔。