#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. Yii2命名规则

    module id /controller id/action id的规则PostManagerController=>post-manageractionAddValue =>add-v ...

  2. Linux下eclipse提示快捷键失效解决办法

    在window->Preferences->general->keys中, 找到 content asist 修改下边值 Binding 改成 Alt+/ When 改为 Editi ...

  3. for 循环 正方形

    <?php//================================正方形//for($q = 1; $q <= 5; $q ++ ){//    for($z =1; $z & ...

  4. 【bzoj2104】 K-th Number

    http://poj.org/problem?id=2104 (题目链接) 题意 求区间第k大数. Solution1 主席树裸题. 主席树当时我学是学的要死,那个时候不晓得百度出什么bug了,搜个主 ...

  5. BZOJ1070 [SCOI2007]修车

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  6. Cacti /graphs_new.php SQL Injection Vulnerability

    catalogue . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 other SQL injection vulnerability ...

  7. AngularJs $rootScope.Scope 作用域操作

    这里讲的是一些scope的操作,如创建/注销/各种监听及scope间的通信等等. $rootScope.Scope 可以使用$injector通过$rootScope关键字检索的一个根作用域. 可以通 ...

  8. IPsec 学习笔记

    工作中需要,参考网上的资料对IPSecVPN进行学习,并通过博客记录下一些知识点作为学习记录和后续复习的材料. Transport Layer (TLS) 其中主要参考了以下文档: http://ww ...

  9. [转发]dsdt解决睡眠唤醒死机

    登录 注册 首页 热门话题 最新发布   简单模式 详细模式 dsdt解决睡眠唤醒死机 Leave a reply 首先,感谢x5115x提供了一个相对比较完整的THINKPAD T410在MAC下的 ...

  10. js011-DOM扩展

    js011-DOM扩展 本章内容 理解Selecters API 使用HTML5 DOM扩展 了解转悠的DOM扩展 11.1选择符API JS中最常用的一项功能,就是根据css选择符选择与某个模式匹配 ...