当前位置:首页 > 通信资讯 > 正文

c语言拼图小游戏论文(C语言拼图游戏)

最近闲着无聊,写了一个拼图游戏,正好学习一下图片的处理。

效果图如下:

c语言拼图小游戏论文(C语言拼图游戏)

程序中用到了图形库操作,把一张图片分割,用一个二维数组代表各个碎片,初始打乱数组就可以得到打乱的图片。

  1. void get_arr()
  2. {
  3. int book[10] = { 0 };
  4. srand((unsigned int)time(NULL)); //设置时间种子
  5. for(int i=0; i<3; i++) //随机arr数组,打乱图片顺序
  6. for (int j = 0; j < 3; j++)
  7. {
  8. if (i == 2 && j == 2)
  9. break;
  10. while (1)
  11. {
  12. int s = rand() % 8;
  13. if (book[s] == 0)
  14. {
  15. book[s] = 1;
  16. arr[i][j] = s;
  17. break;
  18. }
  19. }
  20. }
  21. arr[2][2] = 9;
  22. }

因为这里数字并不大,所以我就暴力写了一下。

总共有5张图片,为了简化难度,我加了一张纯数字的。

c语言拼图小游戏论文(C语言拼图游戏)

部分截图:

c语言拼图小游戏论文(C语言拼图游戏)

拼图成功后,会出现拼图成功的提示,因为素材限制,只能弄成下面的样。

c语言拼图小游戏论文(C语言拼图游戏)

部分游戏截图:

c语言拼图小游戏论文(C语言拼图游戏)

全部的代码和素材:C语言拼图游戏

下面是代码:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <graphics.h>
  4. #include <windows.h>
  5. #include <conio.h>
  6. #include<time.h>
  7. #include <iostream>
  8. #include <algorithm>
  9. #define N 600 //图片长和宽,为便于计算取600
  10. #define M N/3 //分为9块,每块有
  11. using namespace std;
  12. IMAGE t, over;
  13. int arr[5][5];
  14. void get_arr()
  15. {
  16. int book[10] = { 0 };
  17. srand((unsigned int)time(NULL)); //设置时间种子
  18. for(int i=0; i<3; i++) //随机arr数组,打乱图片顺序
  19. for (int j = 0; j < 3; j++)
  20. {
  21. if (i == 2 && j == 2)
  22. break;
  23. while (1)
  24. {
  25. int s = rand() % 8;
  26. if (book[s] == 0)
  27. {
  28. book[s] = 1;
  29. arr[i][j] = s;
  30. break;
  31. }
  32. }
  33. }
  34. arr[2][2] = 9;
  35. }
  36. void choosephoto()
  37. {
  38. int choose;
  39. srand((unsigned int)time(NULL)); //设置时间种子
  40. choose = rand() % 5; //选择图片
  41. if(choose==0)
  42. loadimage(&t, "少司命.jpeg", N, N); //加载图片
  43. if (choose == 1)
  44. loadimage(&t, "柯南.jpg", N, N);
  45. if (choose == 2)
  46. loadimage(&t, "马里奥.jpeg", N, N);
  47. if (choose == 3)
  48. loadimage(&t, "火影.jpeg", N, N);
  49. if (choose == 4)
  50. loadimage(&t, "数字.png", N, N);
  51. }
  52. void Game() //显示拼图
  53. {
  54. initgraph(N, N);
  55. for (int i = 0; i < 3; i++)
  56. {
  57. for (int j = 0; j < 3; j++)
  58. {
  59. putimage(j * M, i * M, M, M, &t, arr[i][j]%3*M, arr[i][j]/3*M); //切割图片
  60. }
  61. }
  62. }
  63. int GameOver()
  64. {
  65. int temp = 1;
  66. for (int i = 0; i < 3; i++)
  67. {
  68. for (int j = 0; j < 3; j++)
  69. {
  70. if (arr[i][j] != 3 * i + j)
  71. {
  72. temp = 0;
  73. break;
  74. }
  75. }
  76. if (temp == 0)
  77. break;
  78. }
  79. if (temp == 1)
  80. {
  81. loadimage(&over, "游戏结束.png", 400, 400);
  82. putimage(100, 100, &over);
  83. return 1;
  84. }
  85. }
  86. void Gamestart()
  87. {
  88. char ch;
  89. int tx, ty;
  90. while (1)
  91. {
  92. if (_kbhit()) { //检测键盘输入
  93. for (int i = 0; i < 3; i++)
  94. {
  95. for (int j = 0; j < 3; j++)
  96. if (arr[i][j] == 9)
  97. {
  98. tx = i;
  99. ty = j;
  100. break;
  101. }
  102. }
  103. ch = _getch();
  104. if (ch == 72 || ch=='w') //按键为w或者上
  105. {
  106. if (tx >= 1)
  107. {
  108. //swap(arr[tx][ty], arr[tx - 1][ty]);
  109. int x = arr[tx][ty];
  110. arr[tx][ty] = arr[tx - 1][ty];
  111. arr[tx - 1][ty] = x;
  112. }
  113. }
  114. else if (ch == 75 || ch=='a') //按键为a或者左
  115. {
  116. if (ty >= 1)
  117. {
  118. int x = arr[tx][ty];
  119. arr[tx][ty] = arr[tx][ty - 1];
  120. arr[tx][ty - 1] = x;
  121. }
  122. }
  123. else if (ch == 80 || ch=='s') //按键为s或者下
  124. {
  125. if (tx < 2)
  126. {
  127. int x = arr[tx][ty];
  128. arr[tx][ty] = arr[tx + 1][ty];
  129. arr[tx + 1][ty] = x;
  130. }
  131. }
  132. else if (ch == 77 || ch=='d') //按键为d或者右
  133. {
  134. if (ty < 2)
  135. {
  136. int x = arr[tx][ty];
  137. arr[tx][ty] = arr[tx][ty + 1];
  138. arr[tx][ty + 1] = x;
  139. }
  140. }
  141. Game(); //输出拼图界面
  142. if (GameOver())
  143. break;
  144. }
  145. }
  146. while (ch=getchar())
  147. if (ch == '\n')
  148. break;
  149. }
  150. int main()
  151. {
  152. get_arr(); //获取初始数组
  153. choosephoto(); //选择图片
  154. Game(); //输出起始拼图
  155. Gamestart(); //游戏开始
  156. system("pause");
  157. closegraph(); //关闭画布
  158. return 0;
  159. }

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

原文链接:https://blog.csdn.net/qq_41505957/article/details/97647776

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。