这篇文章主要为大家详细介绍了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-15for (i = 0; i < 15; i++){//0-14array1D[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
全部0条评论
快来发表一下你的评论吧 !