#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. Get it,你离几何达人不远了!

    对于爱学几何的人,是否存在这样的困扰:没有标准的尺规工具,图形画的不标准,理解上总是出错......整天在纸上画图,浪费大把大把的时间......几何图形画的不美观,在别人面前都拿不出手,公开课上都没 ...

  2. Java非静态内部类中为什么不能有静态变量却可以有常量?

    如:public class InnerClassDemo{ int x; class A{ static int a = 0;//这样写是不合法的. static final int b=0;//这 ...

  3. for循环 打印菱形 空 和 实

    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><?ph ...

  4. 关于使用 pushViewController: animated: 方法在下一个控制器中拿不到值的解决方法

    如下代码: // 加载一个tabbar控制器 houseMessageTabbarController *houseTabbar = [[houseMessageTabbarController al ...

  5. linux命令语法格式

    一.命令的一般格式 command [option]... [argument]... command [options] [arguments] 具体说明: 1.command: 表示命令的名称,如 ...

  6. Leetcode H-index

    Given an array of citations (each citation is a non-negative integer) of a researcher, write a funct ...

  7. 判断IE和Edge

    //判断是否是IE浏览器,包括Edge浏览器function IEVersion() { var userAgent = navigator.userAgent; if (!!window.Activ ...

  8. iOS 解决一个因三方静态库冲突产生的duplicate symbol的问题

    最近在开发项目时编译三方.a时出现了冲突,原因是存在duplicate symbol. <1>模拟器编译时,应用的即时通讯模块采用的三方库(容联云),和视频监控模块采用的三方库(海康威视) ...

  9. 【翻译自nikic大神】PHP中原生类型的方法

    引言 第一次,翻译别人的文章,用四级英语的水平来翻译~~囧,可能有很多不太恰当的地方,尽管拍砖(有些地方实在想不到恰当的翻译,我同时贴出了原文和自己很low的翻译). 翻译这篇文章用了我3个晚上一个中 ...

  10. String、StringBuffer、StringBuilder源码分析

    利用反编译具体看看"+"的过程 1 public class Test 2 { 3 public static void main(String[] args) 4 { 5 int ...