#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部分核心算法的更多相关文章

  1. SQL关键字转换大写核心算法实现

    1 不跟你多废话 上代码! /// <summary> /// SQL关键字转换器 /// </summary> public class SqlConverter : IKe ...

  2. 用Java实现MVPtree——MVPtree核心算法代码的搭建

    项目需要,需要把MVPtree这种冷门的数据结构写入Java,然网上没有成形的Java实现,虽说C++看惯了不过对C++实现复杂结构也是看得蒙蔽,幸好客户给了个github上job什么的人用Java写 ...

  3. x264代码剖析(十三):核心算法之帧间预測函数x264_mb_analyse_inter_*()

    x264代码剖析(十三):核心算法之帧间预測函数x264_mb_analyse_inter_*() 帧间预測是指利用视频时间域相关性,使用临近已编码图像像素预測当前图像的像素,以达到有效去除视频时域冗 ...

  4. x264代码剖析(十五):核心算法之宏块编码中的变换编码

    x264代码剖析(十五):核心算法之宏块编码中的变换编码 为了进一步节省图像的传输码率.须要对图像进行压缩,通常採用变换编码及量化来消除图像中的相关性以降低图像编码的动态范围.本文主要介绍变换编码的相 ...

  5. Unity3D_(游戏)甜品消消乐02_游戏核心算法

    甜品消消乐01_游戏基础界面 传送门 甜品消消乐02_游戏核心算法 传送门 甜品消消乐03_游戏UI设计    传送门 GameManager脚本上修改Fill Time可以改变消消乐移动速度 实现过 ...

  6. [转帖]RSYNC 的核心算法

    RSYNC 的核心算法 https://coolshell.cn/articles/7425.html rsync是unix/linux下同步文件的一个高效算法,它能同步更新两处计算机的文件与目录,并 ...

  7. Python机器学习——预测分析核心算法PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7qi1 在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知所措.本书从算法和Python语言实现的角度,帮助读者认识机器学习. 本书专注于两类核心的" ...

  8. 游戏2048的核心算法c#版本的实现

    接触游戏有一段时间了,也写了一些东西,效果还不错,今天没事,我就把2048 c# 版本的实现贴出来,代码已经测试过,可以正常.完美运行.当然了,在网上有很多有关2048的实现方法,但是没有提出到类里面 ...

  9. 《python机器学习—预测分析核心算法》笔记1

    参见原书 1.1-1.4节 一.惩罚线性回归模型 基本特性: 1.训练时间快,使用训练好的模型进行预测的时间也快2.应用于高速交易.互联网广告的植入等3.解决回归.分类问题 最重要的特性:能明确指出, ...

随机推荐

  1. HTTP协议学习---(二)基本认证

    什么是HTTP基本认证 桌面应用程序也通过HTTP协议跟Web服务器交互, 桌面应用程序一般不会使用cookie, 而是把 "用户名+冒号+密码"用BASE64编码的字符串放在ht ...

  2. 本篇文章: HTML DOM 对象

    HTML DOM 对象 本篇主要介绍HTML DOM 对象:Document.Element.Attr.Event等4个对象. 目录 1. Document 对象:表示文档树的根节点,大部分属性和方法 ...

  3. linux定时器(crontab)实例

    linux实验示例----实现每2分钟将“/etc”下面的文件打包存储到“/usr/lobal”目录下 ·Step1:编辑当前用户的crontab并保存终端输入:>crontab -u root ...

  4. Python 素数判断;以及默尼森数

    1. 素数/质数 只能被2或者本身整除的正整数. 2. 默尼森数 P是素数且M也是素数,并且满足等式M=2^P-1,则称M为默尼森数. 编程小要求: 输出前5个默尼森数 1)最外层循环找素数 中间层循 ...

  5. 3.Android 优化布局(解决TextView布局)

    转载:http://www.jianshu.com/p/d3027acf475a 今天分享一个Layout布局中的一个小技巧,希望看过之后你也可以写出性能更好的布局,我个人的目的是用最少的view写出 ...

  6. 一个千万量级的APP使用的一些第三方库

    转载:http://www.jianshu.com/p/dc8c05cf693d .背景 前段时间在调研第三方推送服务的时候,反编译了一部分市面上比较流行的APP.其中一个无论是在设计还是功能上都堪称 ...

  7. js-JavaScript高级程序设计学习笔记18

    第21章 AJAX 4.跨域源资源共享 CORS跨域源资源共享,其背后思想,是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是否应该成功. 1.IE对CORS的实现 在IE8中引 ...

  8. [NOIP2012] 提高组 洛谷P1083 借教室

    题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...

  9. HDU #5733 tetrahedron

    tetrahedron 传送门 Time Limit: 2000/1000 MS (Java/Others)   Memory Limit: 65536/65536 K (Java/Others) P ...

  10. C# List根据某一字段排序 将字段相同的排序到一起

    List<JZJLXQ_Prescription_Item> ciList = new List<JZJLXQ_Prescription_Item>(); List<JZ ...