200行代码让你找回童年的记忆,C + EasyX实现《拼图》小游戏!
游戏思路:
- 每张图片都有一个数字对应 空用0表示
- 使用二维数组 保存每个图片对应的数据
- 鼠标点击图片 向周围空地移动
- 判断游戏 是否游戏胜利
需要的素材:
游戏效果如下所示:
代码如下所示:
#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实现《拼图》小游戏!相关推荐
- 神级程序员288行代码用C语言打造炫酷的推箱子小游戏!
根据J2ME版推箱子游戏改编,现改版为VC++版,功能上一模一样,不过现在可以在Windows上运行了,而非限制于手机.游戏界面看上去还不错. 源码结构截图: 代码截图: 原来测试效果: 这个推箱子是 ...
- 宁愿“大小周”、每天只写 200 行代码、月薪 8k-17k 人群再涨!揭晓中国开发者真实现状...
作者 | 郑丽媛 出品 | CSDN(ID:CSDNnews) 程序员,一个圈外人羡慕.圈内人喊苦的"神奇"职业--高薪.福利好是旁人羡慕的理由,高压.加班多却也是他们最常见的写照 ...
- js websocket同步等待_WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器...
本文原题"Node.js - 200 多行代码实现 Websocket 协议",为了提升内容品质,有较大修订. 1.引言 最近正在研究 WebSocket 相关的知识,想着如何能自 ...
- 爬虫python代码-Python爬虫教程:200行代码实现一个滑动验证码
Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...
- blockchain 区块链200行代码:在JavaScript实现的一个简单的例子
blockchain 区块链200行代码:在JavaScript实现的一个简单的例子 了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上 ...
- JavaScript开发区块链只需200行代码
JavaScript开发区块链只需200行代码 用JavaScript开发实现一个简单区块链.通过这一开发过程,你将理解区块链技术是什么:区块链就是一个分布式数据库,存储结构是一个不断增长的链表,链表 ...
- 不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN)
不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN) 生成对抗网络(Generative Adversarial Networks,GAN)最早由 Ian Goodfello ...
- 蒋金楠:200行代码7个对象《ASP.NET Core框架揭密》苏州.NET俱乐部课程分享
[课程名称] <ASP.NET Core框架揭密> [老师介绍] 蒋金楠,同程艺龙机票事业部技术专家,微软最有价值专家(MVP,连续12),多本.NET专著作者.博客园Artech,公众号 ...
- 前端 验证码隐藏怎么实现_Python爬虫教程:200行代码实现一个滑动验证码
Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...
- SpringBoot,用200行代码完成一个一二级分布式缓存
缓存系统的用来代替直接访问数据库,用来提升系统性能,减小数据库复杂.早期缓存跟系统在一个虚拟机里,这样内存访问,速度最快. 后来应用系统水平扩展,缓存作为一个独立系统存在,如redis,但是每次从缓存 ...
最新文章
- 离线轻量级大数据平台Spark之MLib机器学习库聚类算法KMeans实例
- shell--变量的替换
- Python中list(列表)
- 数据结构C++版-图
- Zend Studio小技巧:自动生成版本信息
- python模拟浏览器教程_Python使用win32com实现的模拟浏览器功能示例
- mall商城 -小程序,h5和pc vue前后端分离
- lg g3 android 5.0,LG G3 4.4和5.0系统root教程
- h.265/HEVC 和 h.264/AVC 比较,在技术上的改进和优势
- oracle 加载dbf文件路径,Oracle 导入DBF故障存储文件
- 如何调试ajax 和php
- Golang实现验证码图片OCR
- 科大讯飞2020脑PET图像分析和疾病预测---单模型进决赛前五
- 幸福人生心得体会之如何得到好婚姻好事业
- django 类视图装饰器_灵活视图处理的模式,第2部分–使用装饰器
- A Survey of Symbolic Execution Techniques 符号执行综述
- Android开发——集成友盟社会化分享遇到的坑(一)
- SonicWALL防火墙配置NAT Policy
- python代码:VOC to cityscapes标注文件转换
- 2022泰晤士世界大学排名公布,中国147所高校上榜!