服务器之家

服务器之家 > 正文

C语言实现拼图游戏

时间:2021-08-25 11:55     来源/作者:导航者-追梦

本文实例为大家分享了C语言实现拼图游戏的具体代码,供大家参考,具体内容如下

一、完成拼图所要实现的功能

1.实现图形界面

一维数组,二维数组,图形库里面的贴图

2.绘制一个开始界面的菜单

图形库(画矩形,填充颜色),文字输出,鼠标操作

3.加载资源

切割技术,用到随机函数,随机产生一维数组下标,然后赋值给二维数组进行初始化。

4.贴图

我这里3行3列的。遍历二维数组进行 贴图。

5.游戏过程

主要是鼠标操作,遇到空白的一块,左右上下都可以交换。

二、效果展示

C语言实现拼图游戏

C语言实现拼图游戏

三、代码实现

  1. /************************************************************************
  2. * 项目名称:拼图游戏
  3. * 项目描述:图片切割,随机函数,一维二维间的赋值,树边操作
  4. * 项目环境:VS2013
  5. * 生成日期:2019-3-13
  6. * 作者所属:追梦
  7. *************************************************************************/
  8. #include<stdio.h>
  9. #include<stdlib.h>
  10. #include<easyx.h>
  11. #include<time.h>
  12. #include<conio.h>
  13. int array2D[3][3] = { 0 };
  14. int array1D[9] = { 0 };
  15. IMAGE img, block;
  16. struct blankPos
  17. {
  18. int i, j;
  19. }myPos{ 0, 0 };
  20. struct blankPos searchPos(int array2D[][3], int l, int h)
  21. {
  22. for (int i = 0; i < l;i++)
  23. {
  24. for (int j = 0; j < h;j++)
  25. {
  26. if (array2D[i][j] == 8)
  27. {
  28. myPos.j = j;
  29. myPos.i = i;
  30. return myPos;
  31. }
  32. }
  33. }
  34. return myPos;
  35. }
  36. void drawMenu()//菜单
  37. {
  38. initgraph(300, 300);
  39. setbkcolor(WHITE);
  40. cleardevice();
  41. setfillcolor(BLUE);
  42. settextstyle(10, 0, L"宋体");
  43. setbkmode(TRANSPARENT);
  44. fillrectangle(120, 60, 180, 80);
  45. fillrectangle(120, 85, 180, 105);
  46. outtextxy(130, 65, L"开始游戏");
  47. outtextxy(130, 90, L"退出游戏");
  48. settextcolor(RED);
  49. outtextxy(95, 140, L"追梦拼图游戏V1.1.0版本");
  50. MOUSEMSG m;
  51. while (1)
  52. {
  53. m = GetMouseMsg();
  54. if (m.x >= 120 && m.x <= 180 && m.y >= 60 && m.y <= 80)
  55. {
  56. setlinecolor(BLACK);
  57. rectangle(120 - 2, 60 - 2, 180 + 2, 80 + 2);
  58. if (m.uMsg==WM_LBUTTONDOWN)
  59. {
  60. break;
  61. }
  62. }
  63. else if (m.x >= 120 && m.x <= 180 && m.y >=85 && m.y <= 105)
  64. {
  65. setlinecolor(BLACK);
  66. rectangle(120 - 2, 85 - 2, 180 + 2, 105 + 2);
  67. if (m.uMsg == WM_LBUTTONDOWN)
  68. {
  69. exit(0);
  70. }
  71. }
  72. else
  73. {
  74. setlinecolor(WHITE);
  75. rectangle(120 - 2, 60 - 2, 180 + 2, 80 + 2);
  76. rectangle(120 - 2, 85 - 2, 180 + 2, 105 + 2);
  77. }
  78. }
  79. closegraph();
  80. }
  81. void loadResource()//加载资源
  82. {
  83. srand((unsigned int)time(NULL));
  84. int length=8;
  85. int pos = 0;
  86. int i, j;
  87. for (i = 0; i < 8; i++)
  88. {
  89. array1D[i] = i;
  90. }
  91. for (i = 0; i < 3; i++)
  92. {
  93. for (j = 0; j < 3; j++)
  94. {
  95. if (i == 2 && j == 2)
  96. {
  97. array2D[i][j] = 8;
  98. break;
  99. }
  100. pos = rand() % length;
  101. array2D[i][j] = array1D[pos];
  102. for (int k = pos; k < length; k++)
  103. {
  104. array1D[k] = array1D[k + 1];
  105. }
  106. length--;
  107. }
  108. if (i == 2 && j == 2)
  109. {
  110. array2D[i][j] = 8;
  111. break;
  112. }
  113. }
  114. loadimage(&img, L"图1.jpg", 300, 300);
  115. loadimage(&block, L"空目的地.jpg", 100, 100);
  116. }
  117. void drawMap() //贴图
  118. {
  119. for (int i = 0; i < 3; i++)
  120. {
  121. for (int j = 0; j < 3; j++)
  122. {
  123. int x = 100 * j;
  124. int y = 100 * i;
  125. switch (array2D[i][j])
  126. {
  127. case 0:
  128. case 1:
  129. case 2:
  130. putimage(x, y, 100, 100, &img, array2D[i][j] * 100, 0);
  131. break;
  132. case 3:
  133. case 4:
  134. case 5:
  135. putimage(x, y, 100, 100, &img, (array2D[i][j] - 3) * 100, 100);
  136. break;
  137. case 6:
  138. case 7:
  139. putimage(x, y, 100, 100, &img, (array2D[i][j] - 6) * 100, 200);
  140. break;
  141. case 8:
  142. putimage(x, y, &block);
  143. break;
  144. }
  145. }
  146. }
  147. }
  148. void playGame() //游戏过程
  149. {
  150. MOUSEMSG m;
  151. int i, j;
  152. int i_MOUSE, j_MOUSE;
  153. while (1)
  154. {
  155. drawMap();
  156. searchPos(array2D, 3, 3);
  157. i = myPos.i;
  158. j = myPos.j;
  159. m = GetMouseMsg();
  160. switch (m.uMsg)
  161. {
  162. case WM_LBUTTONDOWN:
  163. i_MOUSE = m.y / 100;
  164. j_MOUSE = m.x / 100;
  165. if (i_MOUSE == i + 1 && j_MOUSE == j)
  166. {
  167. array2D[i][j] = array2D[i_MOUSE][j_MOUSE];
  168. array2D[i_MOUSE][j_MOUSE] = 8;
  169. }
  170. if (i_MOUSE == i - 1 && j_MOUSE == j)
  171. {
  172. array2D[i][j] = array2D[i_MOUSE][j_MOUSE];
  173. array2D[i_MOUSE][j_MOUSE] = 8;
  174. }
  175. if (i_MOUSE == i && j_MOUSE == j+1)
  176. {
  177. array2D[i][j] = array2D[i_MOUSE][j_MOUSE];
  178. array2D[i_MOUSE][j_MOUSE] = 8;
  179. }
  180. if (i_MOUSE == i && j_MOUSE == j-1)
  181. {
  182. array2D[i][j] = array2D[i_MOUSE][j_MOUSE];
  183. array2D[i_MOUSE][j_MOUSE] = 8;
  184. }
  185. break;
  186. }
  187. }
  188. }
  189. int main()
  190. {
  191. drawMenu();
  192. initgraph(300, 300);
  193. loadResource();
  194. drawMap();
  195. playGame();
  196. system("pause");
  197. return 0;
  198. }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

原文链接:https://blog.csdn.net/qq_45893999/article/details/104848231

标签:

相关文章

热门资讯

yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
2021年耽改剧名单 2021要播出的59部耽改剧列表
2021年耽改剧名单 2021要播出的59部耽改剧列表 2021-03-05
返回顶部