#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. 动画: ThemeTransition(过渡效果)

    介绍背水一战 Windows 10 之 动画 ThemeTransition 的概述 EntranceThemeTransition - 页面间跳转时的过渡效果 ContentThemeTransit ...

  2. VS 远程发布IIS

    <?xml version="1.0" encoding="utf-8"?><!--您 Web 项目的发布/打包进程将使用此文件.您可以通过编 ...

  3. Python 编程小备忘

    1. 获取当前日期,或者间隔当前任意天的日期. >>> import datetime>>> print (datetime.date.today()-dateti ...

  4. golang学习之旅:官方文档汇总

    The Go Programming Language Specification:http://localhost:8080/ref/spec学习Constants.Variables.Types. ...

  5. 说说markdown和latex的简单比较

    latex是纯学术风格,写paper写书用 markdown是程序员风格,写笔记贴代码片段用 简单说,latex适合长篇.精致,比如数学公式.图片位置调整.表格样式调整.而markdown就是粗线条, ...

  6. NuGet包引用依赖问题

    如A包需要引用B包,然后在项目中安装A包时,自动把B包也装上. 在nuget命令行打包的时候,如果是指定项目的csproj文件进行打包的,都只能打包当前项目的dll,那么如果使用了第三方的dll而没有 ...

  7. Bzoj4066 简单题

    Time Limit: 50 Sec  Memory Limit: 20 MBSubmit: 2185  Solved: 581 Description 你有一个N*N的棋盘,每个格子内有一个整数,初 ...

  8. Sender

    多个对象用同一个方法的时候,想对多个对象分别操作的话就用Sender.  BackGroundWorker worker1 = sender as BackGroundWork.  分别去取当前的对象 ...

  9. Linux 下的常用工具

    Useful Linux Utilities (This article is under constant construction) ssh 相关文章 How To Change OpenSSH ...

  10. Beta Daily Scrum 第七天

    [目录] 1.任务进度 2.困难及解决 3.燃尽图 4.代码check-in 5.总结 1. 任务进度 学号 今日完成 明日完成 612 app已完成 将APP交给客户使用 615 app已完成 将A ...