這篇文章主要為大家詳細介紹了C語言實現——《拼圖游戲項目》,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下!
游戲介紹:
對剛開始接觸拼圖的玩家而言,所謂入門級的拼圖主要是取決于圖案的一些特征。那些圖案內容比較豐富的,也就是說,在整幅畫面的各個角落里也有內容相對完整的子畫面的,且色彩和輪廓反差較大的,這樣的拼圖玩起來就相對容易一些。因為在拼組的局部,想要尋找合適的零片,可選的零片總能被限制在比較小的范圍內
項目技術:
1.二維數組
2.可視化編程
2.1 動態制作
3.切割技術
3.1 實現圖片的自動切割
4.鼠標操作
4.1 玩游戲的內容
對邏輯也是有一定的要求,但是這些在我們項目源碼里面都會有注釋,大家到時候學習的時候千萬不要忽略注釋,注釋可以更好地幫你理解代碼,尤其是C語言初學者。
本項目編譯環境:VS2019/VS2013;
插件:圖形庫插件easyX,涉及圖片素材可以自行百度找也可以關注文末領取;
配套講解教程:游戲教程——嗶哩嗶哩
源代碼示例:
/******************************************/
// 全局變量的定義
IMAGE img, blank; //美女和空的
int array2D[4][4];
int array1D[15] = { 0 };
struct pos
{
int i;
int j;
}mypos = {0,0};
struct pos searchPos(int array2D[][4], int i,int j)
{
for (i = 0; i <= 3; i++)
{
for (j = 0; j <= 3; j++)
{
if (array2D[i][j] == 15)
{
mypos.i = i;
mypos.j = j;
return mypos;
}
}
}
return mypos;
}
/******************************************/
// 繪制開始菜單
void drawMenu()
{
initgraph(640, 450);
setbkcolor(WHITE); //設置窗口顏色為白色
cleardevice(); //刷新顯示
setfillcolor(LIGHTBLUE); //設置填充顏色為淡藍色
settextstyle(30, 0, "字魂24號-鎮魂手書");
setbkmode(TRANSPARENT); //透明方式去掉文字背景
//畫矩形
fillrectangle(240, 100, 380, 150);
fillrectangle(240, 100+60, 380, 150 + 60);
//文字輸出
outtextxy(240 + 20, 100 + 13, "開始游戲");
outtextxy(240 + 20, 100 + 13 + 60, "退出游戲");
settextcolor(RED); //設置文字顏色為紅色
outtextxy(130, 280, "頓開教育莫影拼圖游戲 v1.0版本");
MOUSEMSG m;
//鼠標操作
while (1)
{
m = GetMouseMsg();
//當鼠標放到矩形區域,畫一個矩形
if (m.x >= 240 && m.x <= 380 && m.y >= 100 && m.y <= 150)
{
setlinecolor(RED);
rectangle(240 - 5, 100 - 5, 380 + 5, 150 + 5);
if (m.uMsg == WM_LBUTTONDOWN)
{
break;
}
}
else if (m.x >= 240 && m.x <= 380 && m.y >= 160 && m.y <= 210)
{
setlinecolor(RED);
rectangle(240 - 5, 160 - 5, 380 + 5, 210 + 5);
if (m.uMsg == WM_LBUTTONDOWN)
{
exit(0);
}
}
else
{
setlinecolor(WHITE);
rectangle(240 - 5, 100 - 5, 380 + 5, 150 + 5);
rectangle(240 - 5, 160 - 5, 380 + 5, 210 + 5);
}
}
closegraph();
}
/******************************************/
// 加載資源
void loadResource()
{
srand((unsigned int)time(NULL));
int length = 15;
int pos = 0;
int i, j;
//1.給一維數組初始化0-15
for (i = 0; i < 15; i++)
{
//0-14
array1D[i] = i;
}
//2.隨機出來一個下表
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
//單獨處理最后一個位置
if (i == 3 && j == 3)
{
array2D[3][3] = 15;
break;
}
pos = rand() % length;
array2D[i][j] = array1D[pos];
for (int k = pos; k < length; k++)
{
array1D[k] = array1D[k + 1];
}
length--;
}
if (i == 3 && j == 3)
{
array2D[3][3] = 15;
break;
}
}
//縮放加載
loadimage(&img, "Love.jpg", 800, 800);
loadimage(&blank, "blank.jpg", 200, 200);
}
/******************************************/
// 繪圖過程
void drawMap()
{
//根據打亂順序的二維數組中的值去拿照片中相應的位置
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
int x = j * 200;
int y = i * 200;
switch (array2D[i][j])
{
case 0:
case 1:
case 2:
case 3:
putimage(x, y, 200, 200, &img, array2D[i][j] * 200, 0);
break;
case 4:
case 5:
case 6:
case 7:
putimage(x, y, 200, 200, &img, (array2D[i][j]-4) * 200, 200);
break;
case 8:
case 9:
case 10:
case 11:
putimage(x, y, 200, 200, &img, (array2D[i][j] - 8) * 200, 400);
break;
case 12:
case 13:
case 14:
putimage(x, y, 200, 200, &img, (array2D[i][j] - 12) * 200, 600);
break;
case 15:
putimage(x, y, &blank);
break;
}
}
}
}
/******************************************/
// 游戲過程
void playGame()
{
MOUSEMSG m;
//白塊在數組那個位置
int j_Mouse, i_Mouse; //鼠標點在數組那個位置
while (1)
{
drawMap(); //第一次顯示
//換之前定位 白塊在哪里
int i=0, j=0;
searchPos(array2D, 3, 3);
i = mypos.i;
j = mypos.j;
m = GetMouseMsg();
switch (m.uMsg)
{
case WM_LBUTTONDOWN:
j_Mouse = m.x / 200;
i_Mouse = m.y / 200;
if (i >= 0 && j < 4&&i<4&&j>=0)
{
if (i_Mouse == i + 1&&i+1<=3 && j_Mouse == j)
{
array2D[i][j] = array2D[i_Mouse][j_Mouse];
array2D[i_Mouse][j_Mouse] = 15;
break;
}
if (i_Mouse == i - 1 && i - 1 >=0 && j_Mouse == j)
{
array2D[i][j] = array2D[i_Mouse][j_Mouse];
array2D[i_Mouse][j_Mouse] = 15;
break;
}
if (i_Mouse == i && j_Mouse == j - 1&&j-1>=0)
{
array2D[i][j] = array2D[i_Mouse][j_Mouse];
array2D[i_Mouse][j_Mouse] = 15;
break;
}
if (i_Mouse == i && j_Mouse == j + 1&&j+1<=3)
{
array2D[i][j] = array2D[i_Mouse][j_Mouse];
array2D[i_Mouse][j_Mouse] = 15;
break;
}
}
break;
}
}
}
/******************************************/
// 游戲過程
void GameOve()
{
int flag = 1;
}
int main()
{
drawMenu();
loadResource();
initgraph(800, 800);
playGame();
closegraph();
return 0;
}
寫在最后:對于準備學習C/C++編程的小伙伴,如果你想更好的提升你的編程核心能力(內功)不妨從現在開始!
責任編輯:haq
-
C語言
+關注
關注
180文章
7598瀏覽量
136211 -
源代碼
+關注
關注
96文章
2944瀏覽量
66670
原文標題:C語言項目實戰:《拼圖游戲》零基礎項目!250 行源碼注釋示例
文章出處:【微信號:cyuyanxuexi,微信公眾號:C語言編程學習基地】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論