PuzzleGame部分核心算法
#include
"mainwindow.h"
#include
<QGridLayout>
#include
<QPushButton>
#include
<QSizePolicy>
#include
<QButtonGroup>
#include
<QDebug>
#include
<QString>
#include
<qdir.h>
MainWindow
::
MainWindow
(
QWidget
*
parent
)
:
QWidget
(
parent
)
{
init
();
this
->
setFixedSize
(
500
,
500
);
}
void
MainWindow
::
init
(){
gridLayout
=
new
QGridLayout
(
this
);
buttonGroup
=
new
QButtonGroup
(
this
);
int
index
=
0
;
for
(
int
j
=
0
;
j
<
MAX_Y
;
j
++){
//4
for
(
int
i
=
0
;
i
<
MAX_X
;
i
++){
//3
//
qDebug()
<<
i
<<
j;
index
++;
button
=
new
QPushButton
(
QString
::
number
(
index
),
this
);
//
button
=
new
QPushButton(QString::number(i),
this);
//
qDebug()
<<
i
<<
j;
//
button->setText(QString::number(index));
button
->
setSizePolicy
(
QSizePolicy
::
Expanding
,
QSizePolicy
::
Expanding
);
button
->
setStyleSheet
(
"border-image:url(':/test/1.png')"
);
qDebug
()
<<
QDir
::
currentPath
();
//
button->setText("empty");
gridLayout
->
addWidget
(
button
,
j
,
i
);
buttonGroup
->
addButton
(
button
,
index
);
//
buttons[j][i]
=
new
QPushButton(this);
//
buttons[j][i]
=
button;
}
}
buttonGroup
->
button
(
MAX_X
*
MAX_Y
)->
hide
();
buttonGroup
->
button
(
MAX_X
*
MAX_Y
)->
setText
(
"empty"
);
connect
(
buttonGroup
,
SIGNAL
(
buttonClicked
(
int
)),
this
,
SLOT
(
slotClick
(
int
)));
this
->
setLayout
(
gridLayout
);
}
void
MainWindow
::
slotClick
(
int
id
){
QPushButton
*
button
=
(
QPushButton
*)
buttonGroup
->
button
(
id
);
//
qDebug()
<<
button->text();
if
(
id
%
MAX_X
!=
0
){
x
=
id
/
MAX_X
;
y
=
id
-
(
x
*
MAX_X
)
-
1
;
}
else
{
x
=
id
/
MAX_X
-
1
;
y
=
id
-
(
x
*
MAX_X
)
-
1
;
}
qDebug
()
<<
"id:"
<<
id
;
qDebug
()
<<
MAX_X
<<
MAX_Y
;
qDebug
()
<<
"x:"
<<
x
<<
"y:"
<<
y
;
if
(
x
==
0
){
//第一行
if
(
y
==
0
){
//第一列.即左上角。
右移、下移
qDebug
()
<<
"第一列.即左上角。
右移、下移"
;
if
(
right
(
x
,
y
)){
moveRight
();
}
else
if
(
down
(
x
,
y
)){
moveDown
();
}
}
else
if
(
y
==
MAX_X
-
1
){
//第一行最后一列,右上角。左移’下移
qDebug
()
<<
"最后一列,右上角。左移’下移"
;
if
(
left
(
x
,
y
)){
moveLeft
();
}
else
if
(
down
(
x
,
y
)){
moveDown
();
}
}
else
{
//第一行,除了头和尾的两个。左移’右移‘下移
qDebug
()
<<
"第一行,除了头和尾的两个。左移’右移‘下移"
;
if
(
left
(
x
,
y
)){
moveLeft
();
}
else
if
(
right
(
x
,
y
)){
moveRight
();
}
else
if
(
down
(
x
,
y
)){
moveDown
();
}
}
}
else
if
(
x
==
MAX_Y
-
1
){
//最后一行
if
(
y
==
0
){
//第一列。左下角。上移‘右移
qDebug
()
<<
"第一列。左下角。上移‘右移"
;
if
(
up
(
x
,
y
)){
qDebug
()
<<
"可以上移"
;
moveUp
();
}
else
if
(
right
(
x
,
y
)){
moveRight
();
}
}
else
if
(
y
==
MAX_X
-
1
){
//最后一列,即右下角。左移’上移
qDebug
()
<<
"最后一列,即右下角。左移’上移"
;
if
(
left
(
x
,
y
)){
moveLeft
();
}
else
if
(
up
(
x
,
y
)){
moveUp
();
}
}
else
{
//最后一行,除了头和尾的两个。上移‘左移’右移
qDebug
()
<<
"最后一行,除了头和尾的两个。上移‘左移’右移"
;
if
(
up
(
x
,
y
)){
moveUp
();
}
else
if
(
left
(
x
,
y
)){
moveLeft
();
}
else
if
(
right
(
x
,
y
)){
moveRight
();
}
}
}
else
{
if
(
y
==
0
){
//第一列。除了头和尾的两个。上移‘下移’右移
qDebug
()
<<
"第一列。除了头和尾的两个。上移‘下移’右移"
;
if
(
up
(
x
,
y
)){
moveUp
();
}
else
if
(
down
(
x
,
y
)){
moveDown
();
}
else
if
(
right
(
x
,
y
)){
moveRight
();
}
}
else
if
(
y
==
MAX_X
-
1
){
//最后一列,除了头和尾的两个。上移‘下移’左移。
qDebug
()
<<
"最后一列,除了头和尾的两个。上移‘下移’左移。"
;
if
(
down
(
x
,
y
)){
qDebug
()
<<
"可以下移"
;
moveDown
();
}
else
if
(
up
(
x
,
y
)){
moveUp
();
}
else
if
(
left
(
x
,
y
)){
moveLeft
();
}
}
else
{
//中间的,可以上下左右移动的按钮。
qDebug
()
<<
"中间的,可以上下左右移动的按钮。"
;
if
(
up
(
x
,
y
)){
moveUp
();
}
else
if
(
left
(
x
,
y
)){
moveLeft
();
}
else
if
(
right
(
x
,
y
)){
moveRight
();
}
else
if
(
down
(
x
,
y
)){
moveDown
();
}
}
}
}
bool
MainWindow
::
up
(
int
x
,
int
y
){
//if(buttonGroup->button(x-1,
y))
qDebug
()
<<
"text:"
<<
buttonGroup
->
button
(
MAX_X
*
(
x
-
1
)
+
y
+
1
)->
text
();
if
(
buttonGroup
->
button
(
MAX_X
*
(
x
-
1
)
+
y
+
1
)->
text
()
==
"empty"
){
return
true
;
}
return
false
;
}
bool
MainWindow
::
down
(
int
x
,
int
y
){
if
(
buttonGroup
->
button
(
MAX_X
*
(
x
+
1
)
+
y
+
1
)->
text
()
==
"empty"
){
return
true
;
}
return
false
;
}
bool
MainWindow
::
left
(
int
x
,
int
y
){
if
(
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
-
1
)->
text
()
==
"empty"
){
return
true
;
}
return
false
;
}
bool
MainWindow
::
right
(
int
x
,
int
y
){
if
(
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
+
1
)->
text
()
==
"empty"
){
return
true
;
}
return
false
;
}
void
MainWindow
::
moveUp
(){
buttonGroup
->
button
(
MAX_X
*
(
x
-
1
)
+
y
+
1
)->
setText
(
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
text
());
buttonGroup
->
button
(
MAX_X
*
(
x
-
1
)
+
y
+
1
)->
show
();
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
setText
(
"empty"
);
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
hide
();
}
void
MainWindow
::
moveDown
(){
buttonGroup
->
button
(
MAX_X
*
(
x
+
1
)
+
y
+
1
)->
setText
(
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
text
());
buttonGroup
->
button
(
MAX_X
*
(
x
+
1
)
+
y
+
1
)->
show
();
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
setText
(
"empty"
);
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
hide
();
}
void
MainWindow
::
moveLeft
(){
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
-
1
)->
setText
(
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
text
());
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
-
1
)->
show
();
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
setText
(
"empty"
);
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
hide
();
}
void
MainWindow
::
moveRight
(){
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
+
1
)->
setText
(
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
text
());
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
+
1
)->
show
();
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
setText
(
"empty"
);
buttonGroup
->
button
(
MAX_X
*
(
x
)
+
y
+
1
)->
hide
();
}
650) this.width=650;" title="QQ截图20140610180652.png" src="http://s3.51cto.com/wyfs02/M00/2D/65/wKiom1OW2SaAZ9SzAALK-rjef_g562.jpg" alt="wKiom1OW2SaAZ9SzAALK-rjef_g562.jpg" />
本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/1424700
PuzzleGame部分核心算法的更多相关文章
- SQL关键字转换大写核心算法实现
1 不跟你多废话 上代码! /// <summary> /// SQL关键字转换器 /// </summary> public class SqlConverter : IKe ...
- 用Java实现MVPtree——MVPtree核心算法代码的搭建
项目需要,需要把MVPtree这种冷门的数据结构写入Java,然网上没有成形的Java实现,虽说C++看惯了不过对C++实现复杂结构也是看得蒙蔽,幸好客户给了个github上job什么的人用Java写 ...
- x264代码剖析(十三):核心算法之帧间预測函数x264_mb_analyse_inter_*()
x264代码剖析(十三):核心算法之帧间预測函数x264_mb_analyse_inter_*() 帧间预測是指利用视频时间域相关性,使用临近已编码图像像素预測当前图像的像素,以达到有效去除视频时域冗 ...
- x264代码剖析(十五):核心算法之宏块编码中的变换编码
x264代码剖析(十五):核心算法之宏块编码中的变换编码 为了进一步节省图像的传输码率.须要对图像进行压缩,通常採用变换编码及量化来消除图像中的相关性以降低图像编码的动态范围.本文主要介绍变换编码的相 ...
- Unity3D_(游戏)甜品消消乐02_游戏核心算法
甜品消消乐01_游戏基础界面 传送门 甜品消消乐02_游戏核心算法 传送门 甜品消消乐03_游戏UI设计 传送门 GameManager脚本上修改Fill Time可以改变消消乐移动速度 实现过 ...
- [转帖]RSYNC 的核心算法
RSYNC 的核心算法 https://coolshell.cn/articles/7425.html rsync是unix/linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并 ...
- Python机器学习——预测分析核心算法PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:7qi1 在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知所措.本书从算法和Python语言实现的角度,帮助读者认识机器学习. 本书专注于两类核心的" ...
- 游戏2048的核心算法c#版本的实现
接触游戏有一段时间了,也写了一些东西,效果还不错,今天没事,我就把2048 c# 版本的实现贴出来,代码已经测试过,可以正常.完美运行.当然了,在网上有很多有关2048的实现方法,但是没有提出到类里面 ...
- 《python机器学习—预测分析核心算法》笔记1
参见原书 1.1-1.4节 一.惩罚线性回归模型 基本特性: 1.训练时间快,使用训练好的模型进行预测的时间也快2.应用于高速交易.互联网广告的植入等3.解决回归.分类问题 最重要的特性:能明确指出, ...
随机推荐
- 如何破解Excel文档的编辑密码
对于Excel文档我们不仅可以设置打开密码,还可以设置几天几种密码,比如编辑密码.编辑密码又称写保护密码,是一种可以限制编辑权限的密码.如果我们在日常工作中发现自己忘记了excel编辑密码的话,那就需 ...
- javac 编译与 JIT 编译
编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现.很容易看出,上图中 ...
- Mysql 5.7.12解压版的安装及配置系统编码
这篇博文是由于上篇EF+MySql博文引发的,上篇博文中在Seed方法中插入中文数据到Mysql数据库中乱码,后来网上找了N种方法也没解决.重装了MySql并在安装过程中配置了系统编码,此篇记录一下. ...
- 【bzoj1086】 scoi2005—王室联邦
http://www.lydsy.com/JudgeOnline/problem.php?id=1086 (题目链接) 题意 求将树分为几个联通块,每个联通块大小大于B小于3B,是否可行. Solut ...
- 前端打包/自动化构建工具:fis3
据说这个可以进行打包,并且可以实现类似/script/test-adsf123.js或者/script/test.js?v=asdf123 先做个记号 参考:http://fis.baidu.com/
- SVN分支研究
在结合之前总结的定制开发的产品版本开发问题解决的方法:http://www.cnblogs.com/EasonJim/p/5971906.html,今天来研究以下用SVN处理这类的问题. 研究SVN分 ...
- PHP解释器引擎执行流程 - [ PHP内核学习 ]
catalogue . SAPI接口 . PHP CLI模式解释执行脚本流程 . PHP Zend Complile/Execute函数接口化(Hook Call架构基础) 1. SAPI接口 PHP ...
- Objective-C 谈谈深浅拷贝,copy和mutable copy都不是完全拷贝
(一)字符串中的指针赋值,copy和mutablecopy NSString和NSString (1)指针赋值 肯定指向同一个字符串地址. (2)copy(和直接指向一样) NSString *str ...
- jQuery焦点不在输入框内判断不能为空
我能说JS和jquery有时候都有病吗?同样的代码,重敲一遍可以了,再过一会不行了.再试一下重敲,一模一样的代码,也不报错.就是不行.反复折腾.... 我帖上来的是经过了1个小时同等功能的测试OK的, ...
- JS-用js的for循环实现九九乘法表以及其他算数题等
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>f ...