游戏思路:

  1. 每张图片都有一个数字对应 空用0表示
  2. 使用二维数组 保存每个图片对应的数据
  3. 鼠标点击图片 向周围空地移动
  4. 判断游戏 是否游戏胜利

需要的素材:

游戏效果如下所示:


代码如下所示:

#include <graphics.h>      //图形界面库
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <mmsystem.h>     //音乐头文件
#pragma comment (lib,"winmm")     //库文件class JigsawPuzzle     //拼图的类
{private:const int Size = 640;      //游戏界面大小IMAGE img[9];int arr[3][3] = { 0 };        //存储地图元素的意思int arr_fz[9] = { 0 };      //9 个数字 随机不重复public:void InitRun();         //初始化游戏开始界面void InitLinePic();          //开始游戏之后的画面void RunGame();              //开始游戏bool JudgeGame();         //判断游戏
};int main()
{srand((unsigned)time(nullptr));JigsawPuzzle jigsawpuzzle;jigsawpuzzle.InitRun();jigsawpuzzle.RunGame();return 0;
}void JigsawPuzzle::InitRun()
{initgraph(Size, Size, SHOWCONSOLE);mciSendString("play bj.mp3 repeat", 0, 0, 0);loadimage(nullptr, "start.jpg", 640, 640);//rectangle(Size / 2 - 80, Size / 2 + 30, Size / 2 + 80, Size / 2 + 90);settextstyle(40, 15, "楷体");settextcolor(RED);setbkmode(TRANSPARENT);outtextxy(Size / 2 - 60, Size / 2 + 40, "开始拼图");MOUSEMSG msg;while (1)           //改变颜色{msg = GetMouseMsg();        //获取鼠标消息if (msg.x - (Size / 2 - 80) < 160 && msg.x - (Size / 2 - 80) > 0 && msg.y - (Size / 2 + 30) < 60 && msg.y - (Size / 2 + 30) > 0){settextcolor(RGB(0, 255, 255));if (msg.mkLButton)break;}elsesettextcolor(RED);outtextxy(Size / 2 - 60, Size / 2 + 40, "开始拼图");}InitLinePic();     // 开始拼图后的画面}void JigsawPuzzle::InitLinePic()
{setbkcolor(RGB(0, 255, 255));cleardevice();setlinecolor(GREEN);for (int i = 1; i < 3; i++){line(0, i * 213, Size, i * 213);line(i * 213, 0, i * 213, Size);}for (int i = 0; i < 9; i++)            //九个数字不重复       //只用一次   赋值给二维数组arr{arr_fz[i] = rand() % 9 + 1;for (int j = i - 1; j >= 0; j--){if (arr_fz[i] == arr_fz[j]){i--;break;}}}for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++)arr[i][j] = arr_fz[i * 3 + j];}//加载图片        存放的图片不是按顺序来的 跟arr_fz里面的数据一样char buf[16];for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){memset(buf, 0, sizeof(buf));sprintf(buf, "pic\\%d.jpg", arr[i][j]);loadimage(&img[i], buf, 180, 180);putimage(j * 213 + 20, i * 213 + 20, &img[i]);}}
}void JigsawPuzzle::RunGame()
{MOUSEMSG msg;      //BeginBatchDraw();while (1){msg = GetMouseMsg();if (msg.mkLButton){if (JudgeGame() == true){MessageBox(nullptr, "            游戏胜利", "     拼图游戏", MB_OK);exit(0);}for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){//鼠标点击到了一块拼图if (msg.x - (j * 213 + 20) < 180 && msg.y - (i * 213 + 20) < 180 &&msg.x - (j * 213 + 20) > 0 && msg.y - (i * 213 + 20) > 0){if (i - 1 >= 0 && arr[i - 1][j] == 3)// || arr[i / 3 + 1][i % 3] == 3 || arr[i / 3][i % 3 - 1] == 3 || arr[i / 3][i % 3 + 1] == 3){int t = arr[i - 1][j];arr[i - 1][j] = arr[i][j];arr[i][j] = t;break;}else if (i + 1 <= 2 && arr[i + 1][j] == 3){int t = arr[i + 1][j];arr[i + 1][j] = arr[i][j];arr[i][j] = t;break;}else if (j - 1 >= 0 && arr[i][j - 1] == 3){int t = arr[i][j - 1];arr[i][j - 1] = arr[i][j];arr[i][j] = t;break;}else if (j + 1 <= 2 && arr[i][j + 1] == 3){int t = arr[i][j + 1];arr[i][j + 1] = arr[i][j];arr[i][j] = t;break;}}}}char buf[16];for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){memset(buf, 0, sizeof(buf));sprintf(buf, "pic\\%d.jpg", arr[i][j]);loadimage(&img[i], buf, 180, 180);putimage(j * 213 + 20, i * 213 + 20, &img[i]);}}std::cout << std::endl;for (int i = 0; i < 3; i++){for (int j = 0; j < 3; j++){std::cout << arr[i][j];}std::cout << std::endl;}}EndBatchDraw();}}bool JigsawPuzzle::JudgeGame()
{if (arr[0][0] == 1 && arr[0][1] == 2 && arr[0][2] == 3 &&arr[1][0] == 4 && arr[1][1] == 5 && arr[1][2] == 6 &&arr[2][0] == 7 && arr[2][1] == 8 && arr[2][2] == 9){return true;}elsefalse;
}

200行代码让你找回童年的记忆,C + EasyX实现《拼图》小游戏!相关推荐

  1. 神级程序员288行代码用C语言打造炫酷的推箱子小游戏!

    根据J2ME版推箱子游戏改编,现改版为VC++版,功能上一模一样,不过现在可以在Windows上运行了,而非限制于手机.游戏界面看上去还不错. 源码结构截图: 代码截图: 原来测试效果: 这个推箱子是 ...

  2. 宁愿“大小周”、每天只写 200 行代码、月薪 8k-17k 人群再涨!揭晓中国开发者真实现状...

    作者 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 程序员,一个圈外人羡慕.圈内人喊苦的"神奇"职业--高薪.福利好是旁人羡慕的理由,高压.加班多却也是他们最常见的写照 ...

  3. js websocket同步等待_WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器...

    本文原题"Node.js - 200 多行代码实现 Websocket 协议",为了提升内容品质,有较大修订. 1.引言 最近正在研究 WebSocket 相关的知识,想着如何能自 ...

  4. 爬虫python代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  5. blockchain 区块链200行代码:在JavaScript实现的一个简单的例子

    blockchain 区块链200行代码:在JavaScript实现的一个简单的例子 了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上 ...

  6. JavaScript开发区块链只需200行代码

    JavaScript开发区块链只需200行代码 用JavaScript开发实现一个简单区块链.通过这一开发过程,你将理解区块链技术是什么:区块链就是一个分布式数据库,存储结构是一个不断增长的链表,链表 ...

  7. 不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN)

     不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN) 生成对抗网络(Generative Adversarial Networks,GAN)最早由 Ian Goodfello ...

  8. 蒋金楠:200行代码7个对象《ASP.NET Core框架揭密》苏州.NET俱乐部课程分享

    [课程名称] <ASP.NET Core框架揭密> [老师介绍] 蒋金楠,同程艺龙机票事业部技术专家,微软最有价值专家(MVP,连续12),多本.NET专著作者.博客园Artech,公众号 ...

  9. 前端 验证码隐藏怎么实现_Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  10. SpringBoot,用200行代码完成一个一二级分布式缓存

    缓存系统的用来代替直接访问数据库,用来提升系统性能,减小数据库复杂.早期缓存跟系统在一个虚拟机里,这样内存访问,速度最快. 后来应用系统水平扩展,缓存作为一个独立系统存在,如redis,但是每次从缓存 ...

最新文章

  1. 离线轻量级大数据平台Spark之MLib机器学习库聚类算法KMeans实例
  2. shell--变量的替换
  3. Python中list(列表)
  4. 数据结构C++版-图
  5. Zend Studio小技巧:自动生成版本信息
  6. python模拟浏览器教程_Python使用win32com实现的模拟浏览器功能示例
  7. mall商城 -小程序,h5和pc vue前后端分离
  8. lg g3 android 5.0,LG G3 4.4和5.0系统root教程
  9. h.265/HEVC 和 h.264/AVC 比较,在技术上的改进和优势
  10. oracle 加载dbf文件路径,Oracle 导入DBF故障存储文件
  11. 如何调试ajax 和php
  12. Golang实现验证码图片OCR
  13. 科大讯飞2020脑PET图像分析和疾病预测---单模型进决赛前五
  14. 幸福人生心得体会之如何得到好婚姻好事业
  15. django 类视图装饰器_灵活视图处理的模式,第2部分–使用装饰器
  16. A Survey of Symbolic Execution Techniques 符号执行综述
  17. Android开发——集成友盟社会化分享遇到的坑(一)
  18. SonicWALL防火墙配置NAT Policy
  19. python代码:VOC to cityscapes标注文件转换
  20. 2022泰晤士世界大学排名公布,中国147所高校上榜!

热门文章

  1. Python 智能银行卡识别系统的实现 (2)—系统的实现
  2. canvas压缩图片方法
  3. 架构系列---QR二维码和扫描二维码登陆原理
  4. 谷歌浏览器如何截取整个网页保存为图片截取整个网页长图
  5. 特殊符号大全复制_特殊符号大全爱好者工具讲解
  6. [LOJ2339][虚树][边分治][树形DP]WC2018:通道
  7. python常用模块介绍
  8. FPGA LVDS液晶屏
  9. 计算机网络-路由器和交换机的区别
  10. android 古诗,古诗词朗诵安卓