C語言實現(xiàn)拼圖游戲
本文實例為大家分享了C語言實現(xiàn)拼圖游戲的具體代碼,供大家參考,具體內容如下
一、完成拼圖所要實現(xiàn)的功能
1.實現(xiàn)圖形界面
一維數(shù)組,二維數(shù)組,圖形庫里面的貼圖
2.繪制一個開始界面的菜單
圖形庫(畫矩形,填充顏色),文字輸出,鼠標操作
3.加載資源
切割技術,用到隨機函數(shù),隨機產(chǎn)生一維數(shù)組下標,然后賦值給二維數(shù)組進行初始化。
4.貼圖
我這里3行3列的。遍歷二維數(shù)組進行 貼圖。
5.游戲過程
主要是鼠標操作,遇到空白的一塊,左右上下都可以交換。
二、效果展示


三、代碼實現(xiàn)
/************************************************************************
* 項目名稱:拼圖游戲
* 項目描述:圖片切割,隨機函數(shù),一維二維間的賦值,樹邊操作
* 項目環(huán)境:VS2013
* 生成日期:2019-3-13
* 作者所屬:追夢
*************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<easyx.h>
#include<time.h>
#include<conio.h>
int array2D[3][3] = { 0 };
int array1D[9] = { 0 };
IMAGE img, block;
struct blankPos
{
int i, j;
}myPos{ 0, 0 };
struct blankPos searchPos(int array2D[][3], int l, int h)
{
for (int i = 0; i < l;i++)
{
for (int j = 0; j < h;j++)
{
if (array2D[i][j] == 8)
{
myPos.j = j;
myPos.i = i;
return myPos;
}
}
}
return myPos;
}
void drawMenu()//菜單
{
initgraph(300, 300);
setbkcolor(WHITE);
cleardevice();
setfillcolor(BLUE);
settextstyle(10, 0, L"宋體");
setbkmode(TRANSPARENT);
fillrectangle(120, 60, 180, 80);
fillrectangle(120, 85, 180, 105);
outtextxy(130, 65, L"開始游戲");
outtextxy(130, 90, L"退出游戲");
settextcolor(RED);
outtextxy(95, 140, L"追夢拼圖游戲V1.1.0版本");
MOUSEMSG m;
while (1)
{
m = GetMouseMsg();
if (m.x >= 120 && m.x <= 180 && m.y >= 60 && m.y <= 80)
{
setlinecolor(BLACK);
rectangle(120 - 2, 60 - 2, 180 + 2, 80 + 2);
if (m.uMsg==WM_LBUTTONDOWN)
{
break;
}
}
else if (m.x >= 120 && m.x <= 180 && m.y >=85 && m.y <= 105)
{
setlinecolor(BLACK);
rectangle(120 - 2, 85 - 2, 180 + 2, 105 + 2);
if (m.uMsg == WM_LBUTTONDOWN)
{
exit(0);
}
}
else
{
setlinecolor(WHITE);
rectangle(120 - 2, 60 - 2, 180 + 2, 80 + 2);
rectangle(120 - 2, 85 - 2, 180 + 2, 105 + 2);
}
}
closegraph();
}
void loadResource()//加載資源
{
srand((unsigned int)time(NULL));
int length=8;
int pos = 0;
int i, j;
for (i = 0; i < 8; i++)
{
array1D[i] = i;
}
for (i = 0; i < 3; i++)
{
for (j = 0; j < 3; j++)
{
if (i == 2 && j == 2)
{
array2D[i][j] = 8;
break;
}
pos = rand() % length;
array2D[i][j] = array1D[pos];
for (int k = pos; k < length; k++)
{
array1D[k] = array1D[k + 1];
}
length--;
}
if (i == 2 && j == 2)
{
array2D[i][j] = 8;
break;
}
}
loadimage(&img, L"圖1.jpg", 300, 300);
loadimage(&block, L"空目的地.jpg", 100, 100);
}
void drawMap() //貼圖
{
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
int x = 100 * j;
int y = 100 * i;
switch (array2D[i][j])
{
case 0:
case 1:
case 2:
putimage(x, y, 100, 100, &img, array2D[i][j] * 100, 0);
break;
case 3:
case 4:
case 5:
putimage(x, y, 100, 100, &img, (array2D[i][j] - 3) * 100, 100);
break;
case 6:
case 7:
putimage(x, y, 100, 100, &img, (array2D[i][j] - 6) * 100, 200);
break;
case 8:
putimage(x, y, &block);
break;
}
}
}
}
void playGame() //游戲過程
{
MOUSEMSG m;
int i, j;
int i_MOUSE, j_MOUSE;
while (1)
{
drawMap();
searchPos(array2D, 3, 3);
i = myPos.i;
j = myPos.j;
m = GetMouseMsg();
switch (m.uMsg)
{
case WM_LBUTTONDOWN:
i_MOUSE = m.y / 100;
j_MOUSE = m.x / 100;
if (i_MOUSE == i + 1 && j_MOUSE == j)
{
array2D[i][j] = array2D[i_MOUSE][j_MOUSE];
array2D[i_MOUSE][j_MOUSE] = 8;
}
if (i_MOUSE == i - 1 && j_MOUSE == j)
{
array2D[i][j] = array2D[i_MOUSE][j_MOUSE];
array2D[i_MOUSE][j_MOUSE] = 8;
}
if (i_MOUSE == i && j_MOUSE == j+1)
{
array2D[i][j] = array2D[i_MOUSE][j_MOUSE];
array2D[i_MOUSE][j_MOUSE] = 8;
}
if (i_MOUSE == i && j_MOUSE == j-1)
{
array2D[i][j] = array2D[i_MOUSE][j_MOUSE];
array2D[i_MOUSE][j_MOUSE] = 8;
}
break;
}
}
}
int main()
{
drawMenu();
initgraph(300, 300);
loadResource();
drawMap();
playGame();
system("pause");
return 0;
}
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
C++算法實現(xiàn)leetcode 1252奇數(shù)值單元格數(shù)目
這篇文章為大家主要介紹了C++實現(xiàn)leetcode 1252奇數(shù)值單元格的數(shù)目題解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
visual studio2019的安裝以及使用圖文步驟詳解
這篇文章主要介紹了visual studio2019的安裝以及使用圖文步驟詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03

