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.解决回归.分类问题 最重要的特性:能明确指出, ...
随机推荐
- Win7下如何设置护眼的电脑豆沙绿界面?保护眼睛的颜色设置教程
关爱心灵的窗户——眼睛! 随着科技发展,使用电脑的人越来越多,由于使用电脑时间过长,我们的眼睛也越发容易疲劳,干燥.如何才能使电脑对人眼的伤害减小到最 小. 小编建议大家可以把窗口背景色设置成护眼色. ...
- JSP导入EXCEL样式
http://demo.gcpowertools.com.cn/spreadjs/exceliosample/exceliosample/ Java实现导入Excel: 1.做一个jsp页面,页面包括 ...
- Java多线程与并发库高级应用-同步集合
ArrayBlockingQueue LinkedBlockingQueue 数组是连续的一片内存 链表是不连续的一片内存 传统方式下用Collections工具类提供的synchronizedCo ...
- 【faster-rcnn】训练自己的数据集时的坑
既然faster-rcnn原版发表时候是matlab版代码,那就用matlab版代码吧!不过遇到的坑挺多的,不知道python版会不会好一点. ======= update ========= 总体上 ...
- 【poj2774】 Long Long Message
http://poj.org/problem?id=2774 (题目链接) 题意 给出两个只包含小写字母的字符串,求出最长连续公共子串. solution 第一次用后缀数组,感觉有点神...才发现原来 ...
- 深入了解asp.net框架。生命周期以及事件处理机制
刚接触asp.net框架觉得很好奇.他的快速开发是怎么实现的.控件的状态又是怎么保持的.我们都知道http是无状态的.而且网上很多人都说使用asp.net框架使用服务器框架是非常慢的. 带着这些疑问我 ...
- BZOJ2432 [Noi2011]兔农
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- Centos提示-bash: make: command not found的解决办法
一般出现这个-bash: make: command not found提示,是因为安装系统的时候使用的是最小化mini安装,系统没有安装make.vim等常用命令,直接yum安装下即可: yum - ...
- CF 363B One Bomb(枚举)
题目链接: 传送门 One Bomb time limit per test:1 second memory limit per test:256 megabytes Description ...
- 关于win7上内存占用较大的说明
1 Win7系统较XP系统内存占用高: 由于xp系统属于轻量化的系统,而win7系统是一个重量型的系统,在两者的内存管理机制上有很大的区别,根据业界和微软对外的发布公告中可以看到,win7系 ...