C语言实现拼图小游戏

时间:2021-05-20

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

效果图如下:

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

void get_arr(){ int book[10] = { 0 }; srand((unsigned int)time(NULL)); //设置时间种子 for(int i=0; i<3; i++) //随机arr数组,打乱图片顺序 for (int j = 0; j < 3; j++) { if (i == 2 && j == 2) break; while (1) { int s = rand() % 8; if (book[s] == 0) { book[s] = 1; arr[i][j] = s; break; } } } arr[2][2] = 9;}

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

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

部分截图:

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

部分游戏截图:

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

下面是代码:

#include <stdio.h>#include <stdlib.h>#include <graphics.h>#include <windows.h>#include <conio.h>#include<time.h> #include <iostream>#include <algorithm>#define N 600 //图片长和宽,为便于计算取600#define M N/3 //分为9块,每块有using namespace std;IMAGE t, over;int arr[5][5]; void get_arr(){ int book[10] = { 0 }; srand((unsigned int)time(NULL)); //设置时间种子 for(int i=0; i<3; i++) //随机arr数组,打乱图片顺序 for (int j = 0; j < 3; j++) { if (i == 2 && j == 2) break; while (1) { int s = rand() % 8; if (book[s] == 0) { book[s] = 1; arr[i][j] = s; break; } } } arr[2][2] = 9;}void choosephoto(){ int choose; srand((unsigned int)time(NULL)); //设置时间种子 choose = rand() % 5; //选择图片 if(choose==0) loadimage(&t, "少司命.jpeg", N, N); //加载图片 if (choose == 1) loadimage(&t, "柯南.jpg", N, N); if (choose == 2) loadimage(&t, "马里奥.jpeg", N, N); if (choose == 3) loadimage(&t, "火影.jpeg", N, N); if (choose == 4) loadimage(&t, "数字.png", N, N);}void Game() //显示拼图{ initgraph(N, N); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { putimage(j * M, i * M, M, M, &t, arr[i][j]%3*M, arr[i][j]/3*M); //切割图片 } }}int GameOver(){ int temp = 1; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (arr[i][j] != 3 * i + j) { temp = 0; break; } } if (temp == 0) break; } if (temp == 1) { loadimage(&over, "游戏结束.png", 400, 400); putimage(100, 100, &over); return 1; }}void Gamestart(){ char ch; int tx, ty; while (1) { if (_kbhit()) { //检测键盘输入 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) if (arr[i][j] == 9) { tx = i; ty = j; break; } } ch = _getch(); if (ch == 72 || ch=='w') //按键为w或者上 { if (tx >= 1) { //swap(arr[tx][ty], arr[tx - 1][ty]); int x = arr[tx][ty]; arr[tx][ty] = arr[tx - 1][ty]; arr[tx - 1][ty] = x; } } else if (ch == 75 || ch=='a') //按键为a或者左 { if (ty >= 1) { int x = arr[tx][ty]; arr[tx][ty] = arr[tx][ty - 1]; arr[tx][ty - 1] = x; } } else if (ch == 80 || ch=='s') //按键为s或者下 { if (tx < 2) { int x = arr[tx][ty]; arr[tx][ty] = arr[tx + 1][ty]; arr[tx + 1][ty] = x; } } else if (ch == 77 || ch=='d') //按键为d或者右 { if (ty < 2) { int x = arr[tx][ty]; arr[tx][ty] = arr[tx][ty + 1]; arr[tx][ty + 1] = x; } } Game(); //输出拼图界面 if (GameOver()) break; } } while (ch=getchar()) if (ch == '\n') break; } int main(){ get_arr(); //获取初始数组 choosephoto(); //选择图片 Game(); //输出起始拼图 Gamestart(); //游戏开始 system("pause"); closegraph(); //关闭画布 return 0;}

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章