这两天研究了一下连连看游戏的源代码,感觉它挺简单的,主要就是判断选中的两张图片能否消去。我参考了网上的源代码(抱歉的是,不记得当时下载的网址了,在此对原作者表示深深的歉意!),然后自己把核心代码整理如下,与大家共享。需要说明的是,这只是核心算法的代码,界面设计和操作的代码均已略去。

#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++实现连连看游戏核心代码相关推荐

  1. C#编写运行在Linux环境下的采用Mediainfo来获取多媒体文件信息的代码

    C#编写运行在Linux环境下的采用Mediainfo来获取多媒体文件信息的代码 原文:C#编写运行在Linux环境下的采用Mediainfo来获取多媒体文件信息的代码 项目开始设计的是运行在wind ...

  2. linux下怎么编译贪吃蛇,Linux 环境下C语言编译实现贪吃蛇游戏(转载)

    本文转载 http://www.linuxidc.com/Linux/2011-08/41375.htm本文可以改进的就是它的链表实现的方式,可以考虑内核的链表实现 #include #include ...

  3. linux环境下Ncurses实现贪吃蛇游戏

    游戏说明: linux环境下基于Ncurses图形库的C语言小游戏. Ncurses介绍: Ncurses(new curses)是一套编程库,它提供了一系列的函数以便使用者调用它们去生成基于文本的用 ...

  4. Linux创建线程读取双口数据,linux环境下读写一次双口ram尽然要十几个毫秒。(附驱动代码)...

    linux环境下读写一次双口ram尽然要十几个毫秒.(附驱动代码) 我用的双口ram是IDT70V28,手册上说的读写时间应该是几个纳秒,我写了个linux驱动,然后做测试,发现读写一次的时间尽然是十 ...

  5. linux贪吃蛇c程序,Linux环境下C语言实现贪吃蛇游戏

    Linux环境下C语言实现贪吃蛇游戏 [liul@test snake]$ more snake.c #include #include #include #include #include #def ...

  6. c语言Linux用线程创建文件,Linux环境下C语言线程创建---简单代码

    在Linux环境下用C语言编写线程创建. //file name: pthreadtext.c #include #include //线程头文件 //pthread不是linux下的默认的库,也就是 ...

  7. 操作系统课程设计--在Linux环境下模拟实现简单命令解释器(C++代码)

    操作系统课程设计要求 一.设计目的 熟悉Linux编程环境,加强对Linux命令的理解及函数的运用 二.设计内容 1. 在Linux环境下模拟实现简单命令解释器. (1)要求实现的基本命令包括: pw ...

  8. 怎么判断linux22端口是否通,在Linux环境下使用SSH判断端口是否通(示例代码)

    在Linux环境下使用SSH判断端口是否通 在windows/linux环境下,可以使用telnet判断端口状态,但有时候在Linux环境下没有telnet,所以可以使用ssh判断端口状态. 一.ss ...

  9. 【Linux、进程隐藏】在Linux环境下添加系统调用实现进程隐藏

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 [进程隐藏]在Linux环境下添加系统调用实现进程隐藏 前言 一.环境设置: 二.实现方法步骤: 1.思路图 2.利用strace命令 ...

  10. linux svn更换数据仓库,Linux环境下SVN数据仓库迁移

    上一篇文章介绍了Windows环境下SVN数据的备份与还原,这篇文章介绍下Linux环境下数据迁移. 一准备工作 1安装环境 1 centOS7 2可上网 2软件需求 1 winSCP 2 PuTTy ...

最新文章

  1. 编译安装appach遇到的那些事
  2. AR与大数据 珠联璧合带来的无限想象空间
  3. 监视器java_Java监视器绑定的超人
  4. Pytorch中BN层入门思想及实现
  5. 2017.10.5 高速公路 思考记录
  6. 文字不间断滚动(转)
  7. POJThe Doors AND NYIST 有趣的问题
  8. Windows socket测试工具
  9. java 租房系统源码,JAVA房屋出租管理系统
  10. HDR中HLG与PQ曲线的互转
  11. Centos7.5软硬件、IP地址及主机名称配置详细教程
  12. 怎样让公司全员贡献结构化内容?
  13. 更改计算机睡眠时间无法打开,win7怎么设置电脑睡眠时间 win7电脑睡眠后黑屏打不开...
  14. 关于蚂蚁花呗无法使用的问题
  15. 90后电子工程师暴力拆解“华强北版AirPods”
  16. 一个老外眼中的创新和“微创新”
  17. mysql 谓语提前_表语 谓语 提前 是什么倒装
  18. 个推 php ios,消息推送API
  19. [ITIL]-ITIL4的七大指导原则
  20. STM32-custom usb

热门文章

  1. 26、威胁软件、文件、网址在线检测平台
  2. 学习平面设计很难?平面设计排版技巧让你学习没有压力——黎乙丙
  3. 关于芯片中电源纹波抑制比PSRR参数的理解
  4. 图论(4)邻接矩阵,关联矩阵
  5. 【转载】Ubuntu顶部的任务栏-标题栏-菜单栏-启动器消失不见7个解决办法
  6. 如何将一节课转成文字文稿
  7. 计算机与日常办公的应用,计算机在日常办公中的综合应用
  8. 粗粒度并行遗传算法 c语言,粗粒度并行遗传算法的计算性能及应用的研究.pdf
  9. py的session实现宁稳网验证码登录,csrf_token破解,自动跳转
  10. 使用animate.css动画库出现窗口抖动