Linux环境下连连看游戏代码,C++实现连连看游戏核心代码
这两天研究了一下连连看游戏的源代码,感觉它挺简单的,主要就是判断选中的两张图片能否消去。我参考了网上的源代码(抱歉的是,不记得当时下载的网址了,在此对原作者表示深深的歉意!),然后自己把核心代码整理如下,与大家共享。需要说明的是,这只是核心算法的代码,界面设计和操作的代码均已略去。
#include
#include
//图片类
class picture
{
public:
int type;//图片的编号,共有n种,从0到n-1
bool visible;//图片是否可见
int x;//图片位置的横坐标
int y;//图片位置的综坐标
};
//整个图由8行10列组成,每个单元格是一张小图片
const int pNum = 10;
const int pType = 8;
static picture p[pType][pNum];
//进入新一关
void newStage()
{
srand(time(0));
int i,j;
for(i = 0;i < pType;++i)
for(j = 0;j < pNum;j++)
p[i][j].visible = false;
int x,y;
for (i = 0;i < pType - 1;++i)
for(j = 0;j < pNum;++j)
{
bool re = true;
while (re)
{
x = rand() % pType;
y = rand() % pNum;
if (p[x][y].visible == false)
{
p[x][y].type = i;
p[x][y].visible = true;
p[x][y].x = x;
p[x][y].y = y;
re = false;
}
}
}
//处理剩余的最后一种图片
for (i = 0;i < pType;++i)
for(j = 0;j < pNum;++j)
{
if (p[i][j].visible == false)
{
p[i][j].type = pType - 1;
p[i][j].visible = true;
p[i][j].x = i;
p[i][j].y = j;
}
}
}
//在a、b两点之间画线
void drawLine(picture a,picture b)
{
}
//判断图片a和b之间能否通过一条直线相连(a和b之间有0个转角)
bool matchDirect(picture a,picture b)
{
if(!(a.x == b.x || a.y == b.y))
return false;
//a、b的横坐标相同时
bool yMatch = true;
if(a.x == b.x)
{
if(a.y > b.y)
{
for(int i = b.y + 1;i < a.y;++i)
{
if(p[a.x][i].visible == true)
yMatch = false;
}
}
if(b.y > a.y)
{
for(int i = a.y + 1;i < b.y;++i)
{
if(p[a.x][i].visible == true)
yMatch = false;
}
}
}
//a、b的纵坐标相同时
bool xMatch = true;
if(a.y == b.y)
{
if(a.x > b.x)
{
for(int i = b.x + 1;i < a.x;++i)
{
if(p[i][a.y].visible == true)
xMatch = false;
}
}
if(b.x > a.x)
{
for(int i = a.x + 1;i < b.x;++i)
{
if(p[i][a.y].visible == true)
xMatch = false;
}
}
}
return (xMatch && yMatch);
}
//判断图片a和b之间是否可以通过一个转角的折线相连
bool matchOneCorner(picture a,picture b)
{
if (p[a.x][b.y].visible == false && matchDirect(a,p[a.x][b.y]) && matchDirect(p[a.x][b.y],b))
{
drawLine(a,p[a.x][b.y]);
drawLine(p[a.x][b.y],b);
return true;
}
if (p[b.x][a.y].visible == false && matchDirect(a,p[b.x][a.y]) && matchDirect(p[b.x][a.y],b))
{
drawLine(a,p[b.x][a.y]);
drawLine(p[b.x][a.y],b);
return true;
}
return false;
}
//判断图片a和b之间是否可以通过两个转角的折线相连
bool matchTwoCorner(picture a,picture b)
{
int i,j;
for(i = a.x - 1,j = a.y;i >= 0;--i)
{
if(p[i][j].visible == true)
break;
else if(matchOneCorner(b,p[i][j]))
{
drawLine(a,p[i][j]);
return true;
}
}
for (i = a.x + 1,j = a.y;i < pNum;++i)
{
if(p[i][j].visible == true)
break;
else if(matchOneCorner(b,p[i][j]))
{
drawLine(a,p[i][j]);
return true;
}
}
for(i = a.x,j = a.y - 1;j >= 0;--j)
{
if(p[i][j].visible == true)
break;
else if(matchOneCorner(b,p[i][j]))
{
drawLine(a,p[i][j]);
return true;
}
}
for(i = b.x,j = b.y + 1;j < pType;++j)
{
if(p[i][j].visible == true)
break;
else if(matchOneCorner(b,p[i][j]))
{
drawLine(a,p[i][j]);
return true;
}
}
return false;
}
//判断a和b能否相连,条件是a和b的类型相同,且a和b之间的连线拐角数<=2个
bool match(picture a,picture b)
{
if(a.type != b.type)
return false;
if(matchDirect(a,b))
{
drawLine(a,b);
return true;
}
else if(matchOneCorner(a,b))
return true;
else if(matchTwoCorner(a,b))
return true;
return false;
}
关于C++小游戏的更多精彩内容请点击专题: 《C++经典小游戏》 学习了解
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
Linux环境下连连看游戏代码,C++实现连连看游戏核心代码相关推荐
- C#编写运行在Linux环境下的采用Mediainfo来获取多媒体文件信息的代码
C#编写运行在Linux环境下的采用Mediainfo来获取多媒体文件信息的代码 原文:C#编写运行在Linux环境下的采用Mediainfo来获取多媒体文件信息的代码 项目开始设计的是运行在wind ...
- linux下怎么编译贪吃蛇,Linux 环境下C语言编译实现贪吃蛇游戏(转载)
本文转载 http://www.linuxidc.com/Linux/2011-08/41375.htm本文可以改进的就是它的链表实现的方式,可以考虑内核的链表实现 #include #include ...
- linux环境下Ncurses实现贪吃蛇游戏
游戏说明: linux环境下基于Ncurses图形库的C语言小游戏. Ncurses介绍: Ncurses(new curses)是一套编程库,它提供了一系列的函数以便使用者调用它们去生成基于文本的用 ...
- Linux创建线程读取双口数据,linux环境下读写一次双口ram尽然要十几个毫秒。(附驱动代码)...
linux环境下读写一次双口ram尽然要十几个毫秒.(附驱动代码) 我用的双口ram是IDT70V28,手册上说的读写时间应该是几个纳秒,我写了个linux驱动,然后做测试,发现读写一次的时间尽然是十 ...
- linux贪吃蛇c程序,Linux环境下C语言实现贪吃蛇游戏
Linux环境下C语言实现贪吃蛇游戏 [liul@test snake]$ more snake.c #include #include #include #include #include #def ...
- c语言Linux用线程创建文件,Linux环境下C语言线程创建---简单代码
在Linux环境下用C语言编写线程创建. //file name: pthreadtext.c #include #include //线程头文件 //pthread不是linux下的默认的库,也就是 ...
- 操作系统课程设计--在Linux环境下模拟实现简单命令解释器(C++代码)
操作系统课程设计要求 一.设计目的 熟悉Linux编程环境,加强对Linux命令的理解及函数的运用 二.设计内容 1. 在Linux环境下模拟实现简单命令解释器. (1)要求实现的基本命令包括: pw ...
- 怎么判断linux22端口是否通,在Linux环境下使用SSH判断端口是否通(示例代码)
在Linux环境下使用SSH判断端口是否通 在windows/linux环境下,可以使用telnet判断端口状态,但有时候在Linux环境下没有telnet,所以可以使用ssh判断端口状态. 一.ss ...
- 【Linux、进程隐藏】在Linux环境下添加系统调用实现进程隐藏
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 [进程隐藏]在Linux环境下添加系统调用实现进程隐藏 前言 一.环境设置: 二.实现方法步骤: 1.思路图 2.利用strace命令 ...
- linux svn更换数据仓库,Linux环境下SVN数据仓库迁移
上一篇文章介绍了Windows环境下SVN数据的备份与还原,这篇文章介绍下Linux环境下数据迁移. 一准备工作 1安装环境 1 centOS7 2可上网 2软件需求 1 winSCP 2 PuTTy ...
最新文章
- 编译安装appach遇到的那些事
- AR与大数据 珠联璧合带来的无限想象空间
- 监视器java_Java监视器绑定的超人
- Pytorch中BN层入门思想及实现
- 2017.10.5 高速公路 思考记录
- 文字不间断滚动(转)
- POJThe Doors AND NYIST 有趣的问题
- Windows socket测试工具
- java 租房系统源码,JAVA房屋出租管理系统
- HDR中HLG与PQ曲线的互转
- Centos7.5软硬件、IP地址及主机名称配置详细教程
- 怎样让公司全员贡献结构化内容?
- 更改计算机睡眠时间无法打开,win7怎么设置电脑睡眠时间 win7电脑睡眠后黑屏打不开...
- 关于蚂蚁花呗无法使用的问题
- 90后电子工程师暴力拆解“华强北版AirPods”
- 一个老外眼中的创新和“微创新”
- mysql 谓语提前_表语 谓语 提前 是什么倒装
- 个推 php ios,消息推送API
- [ITIL]-ITIL4的七大指导原则
- STM32-custom usb
热门文章
- 26、威胁软件、文件、网址在线检测平台
- 学习平面设计很难?平面设计排版技巧让你学习没有压力——黎乙丙
- 关于芯片中电源纹波抑制比PSRR参数的理解
- 图论(4)邻接矩阵,关联矩阵
- 【转载】Ubuntu顶部的任务栏-标题栏-菜单栏-启动器消失不见7个解决办法
- 如何将一节课转成文字文稿
- 计算机与日常办公的应用,计算机在日常办公中的综合应用
- 粗粒度并行遗传算法 c语言,粗粒度并行遗传算法的计算性能及应用的研究.pdf
- py的session实现宁稳网验证码登录,csrf_token破解,自动跳转
- 使用animate.css动画库出现窗口抖动