79.QT解决迷宫问题(面向过程与面向对象)
面向过程:
创建一个类继承dialog,mydialog,添加两个变量
#ifndef MYDIALOG_H
#define MYDIALOG_H #include <QDialog>> class mydialog : public QDialog
{
public:
mydialog();
int id;//代表白色可以走,1代表人物,红色,2代表障碍,黑色
int AI; public:
void setcolor();
}; #endif // MYDIALOG_H
main.cpp中初始化
#include "dialog.h"
#include <QApplication>
#include "mydialog.h" //矩阵数组
mydialog *p[][];
int i=;
int j = ; int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
w.move(,); //设置颜色(背景为红色)
QPalette colorit(w.palette());
colorit.setColor(QPalette::Background,Qt::red);
w.setPalette(colorit); //绘制窗口
for(int i=;i<;i++)
{
for(int j = ;j<;j++)
{
p[i][j] = new mydialog;
p[i][j]->resize(,);
p[i][j]->move(j*,i*);
p[i][j]->show();
p[i][j]->id = ;
p[i][j]->AI=;
QPalette colorit(p[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::white);
p[i][j]->setPalette(colorit);
}
}
//设置当前位置
{
p[i][j]->id = ;
QPalette colorit(p[][]->palette());
colorit.setColor(QPalette::Background,Qt::red);
p[i][j]->setPalette(colorit);
}
//设置障碍
{
p[][]->id = ;
QPalette colorit(p[][]->palette());
colorit.setColor(QPalette::Background,Qt::black);
p[][]->setPalette(colorit);
}
{
p[][]->id = ;
QPalette colorit(p[][]->palette());
colorit.setColor(QPalette::Background,Qt::black);
p[][]->setPalette(colorit);
} return a.exec();
}
dialog.cpp中实现按钮的操作
#include "dialog.h"
#include "ui_dialog.h"
#include "mydialog.h" //引用外部变量
extern int i;
extern int j;
extern mydialog *p[][]; Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
} Dialog::~Dialog()
{
delete ui;
} void Dialog::on_pushButton_clicked()
{
//up
if(i->= && p[i-][j]->id<)
{
QPalette colorit(p[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::white);
p[i][j]->setPalette(colorit);
p[i][j]->id = ;
i-=;
{
QPalette colorit(p[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::red);
p[i][j]->setPalette(colorit);
p[i][j]->id = ;
}
}
} void Dialog::on_pushButton_4_clicked()
{
//down
if(i+< && p[i+][j]->id<)
{
QPalette colorit(p[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::white);
p[i][j]->setPalette(colorit);
p[i][j]->id = ;
i+=;
{
QPalette colorit(p[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::red);
p[i][j]->setPalette(colorit);
p[i][j]->id = ;
}
}
} void Dialog::on_pushButton_2_clicked()
{
//left
if(j->= && p[i][j-]->id<)
{
QPalette colorit(p[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::white);
p[i][j]->setPalette(colorit);
p[i][j]->id = ;
j-=;
{
QPalette colorit(p[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::red);
p[i][j]->setPalette(colorit);
p[i][j]->id = ;
}
}
} void Dialog::on_pushButton_3_clicked()
{
//right
if(j+< && p[i][j+]->id<)
{
QPalette colorit(p[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::white);
p[i][j]->setPalette(colorit);
p[i][j]->id = ;
j+=;
{
QPalette colorit(p[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::red);
p[i][j]->setPalette(colorit);
p[i][j]->id = ;
}
}
}
面向对象:
- mg.h
#ifndef MG_H
#define MG_H
#include "mydialog.h" class mg
{
private:
//位置
int i;
int j;
//宽度,深度
int width;
int depth;
mydialog ***ppp;
public:
mg(int w,int d);
~mg();
void up();
void down();
void left();
void right();
void setnotrun(int x,int y); }; #endif // MG_H - mg.cpp
#include "mg.h" mg::mg(int w,int d)
{
//设置长度和宽度
this->width = w;
this->depth = d;
this->ppp = new mydialog **[this->depth];//开辟二级指针数组
for(int i=;i<this->depth;i++)
{
this->ppp[i] = new mydialog *[this->width];
//j代表的是每一行的第几个
for(int j=;j<this->width;j++)
{
this->ppp[i][j] = new mydialog;
this->ppp[i][j]->resize(,);
// 前面乘的是列 后面乘的是行
this->ppp[i][j]->move(i*,j*);
this->ppp[i][j]->show(); QPalette colorit(this->ppp[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::white);
this->ppp[i][j]->setPalette(colorit);
this->ppp[i][j]->id = ;
}
} //初始化初始位置
QPalette colorit(this->ppp[][]->palette());
colorit.setColor(QPalette::Background,Qt::red);
this->ppp[][]->setPalette(colorit);
this->ppp[][]->id = ;
//标识位置
this->i = ;
this->j = ;
} mg::~mg()
{
for(int i=;i<this->depth;i++)
{
for(int j=;j<this->width;j++)
{
delete this->ppp[i][j];
}
delete [] this->ppp[i];
}
delete[] this->ppp;
} void mg::up()
{
if(j->= && ppp[i][j-]->id<)
{
QPalette colorit(ppp[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::white);
ppp[i][j]->setPalette(colorit);
ppp[i][j]->id = ;
j-=;
{
QPalette colorit(ppp[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::red);
ppp[i][j]->setPalette(colorit);
ppp[i][j]->id = ;
}
} } void mg::down()
{
if(j+<this->width && ppp[i][j+]->id<)
{
QPalette colorit(ppp[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::white);
ppp[i][j]->setPalette(colorit);
ppp[i][j]->id = ;
j+=;
{
QPalette colorit(ppp[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::red);
ppp[i][j]->setPalette(colorit);
ppp[i][j]->id = ;
}
}
} void mg::left()
{
if(i->= && ppp[i-][j]->id<)
{
QPalette colorit(ppp[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::white);
ppp[i][j]->setPalette(colorit);
ppp[i][j]->id = ;
i-=;
{
QPalette colorit(ppp[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::red);
ppp[i][j]->setPalette(colorit);
ppp[i][j]->id = ;
}
}
} void mg::right()
{ if(i+<this->depth && ppp[i+][j]->id<)
{
QPalette colorit(ppp[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::white);
ppp[i][j]->setPalette(colorit);
ppp[i][j]->id = ;
i+=;
{
QPalette colorit(ppp[i][j]->palette());
colorit.setColor(QPalette::Background,Qt::red);
ppp[i][j]->setPalette(colorit);
ppp[i][j]->id = ;
}
}
} //设置障碍
void mg::setnotrun(int x, int y)
{
if((x>= && x<this->width) && (y>= && y<this->depth))
{
QPalette colorit(ppp[x][y]->palette());
colorit.setColor(QPalette::Background,Qt::black);
ppp[y][x]->setPalette(colorit);
ppp[y][x]->id = ;
}
} - mydialog.h
#ifndef MYDIALOG_H
#define MYDIALOG_H #include <QDialog>> class mydialog : public QDialog
{
public:
mydialog();
int id;//代表白色可以走,1代表人物,红色,2代表障碍,黑色
int AI; public:
void setcolor();
}; #endif // MYDIALOG_H - mydialog.cpp
#include "mydialog.h" mydialog::mydialog()
{ } - dialog.h
#ifndef DIALOG_H
#define DIALOG_H #include <QDialog>
#include"mg.h" namespace Ui {
class Dialog;
} class Dialog : public QDialog
{
Q_OBJECT public:
explicit Dialog(QWidget *parent = );
~Dialog(); private slots:
void on_pushButton_clicked(); void on_pushButton_4_clicked(); void on_pushButton_2_clicked(); void on_pushButton_3_clicked(); private:
Ui::Dialog *ui;
mg *pm;
}; #endif // DIALOG_H - dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
#include "mydialog.h"
#include "mg.h" //引用外部变量
extern mg *m; Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
pm = new mg(,);
pm->setnotrun(,);
pm->setnotrun(,);
ui->setupUi(this);
} Dialog::~Dialog()
{
delete ui;
} void Dialog::on_pushButton_clicked()
{
//up
//m->up();
pm->up();
} void Dialog::on_pushButton_4_clicked()
{
//down
//m->down();
pm->down();
} void Dialog::on_pushButton_2_clicked()
{
//left
// m->left();
pm->left();
} void Dialog::on_pushButton_3_clicked()
{
//right
// m->right();
pm->right();
} - main.cpp
#include "dialog.h"
#include <QApplication>
#include "mydialog.h"
#include "mg.h" mg *m; int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
w.move(,); //设置颜色(背景为红色)
QPalette colorit(w.palette());
colorit.setColor(QPalette::Background,Qt::red);
w.setPalette(colorit); //矩阵数组
//mg *m = new mg(6,8); return a.exec();
}
79.QT解决迷宫问题(面向过程与面向对象)的更多相关文章
- 面向过程 vs 面向对象
从网上摘录了一些面向过程vs.面向对象的分析,先简单记录如下,稍后会继续整理. 为什么会出现面向对象分析方法? 因为现实世界太复杂多变,面向过程的分析方法无法实现. 面向过程 采用面向过程必须了解整个 ...
- python 面向过程和面向对象比较
面向过程 VS 面向对象 面向过程的程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是:复杂度 ...
- python基础(23):面向过程与面向对象的优劣、初识面向对象
1. 面向过程与面向对象的优劣 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程 ...
- C语言学习系列(二)面向过程和面向对象
一.基本定义 (一).面向过程(procedure oriented programming POP) 面向过程是分析解决问题的步骤,然后用函数把这些步骤一步一步的实现,然后在使用的时候一一调用则可. ...
- JS是面向过程、面向对象还是基于对象?面向对象的代码体现
一.问题 javascript是面向对象的,还是面向过程的?基于对象是什么意思? 对象: 指的是对某一类事物进行抽象,抽象出这一类事物共同的特征以及行为(也就是属性和方法),那些拥有这一共同属性和方法 ...
- C++笔记005:用面向过程和面向对象方法求解圆形面积
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 结束了第一个hello world程序后,我们来用面向过程和面向对象两个方法来求解圆的面积这个问题,以能够更清晰的体会面向对象和面向过程. ...
- PHP面向过程和面向对象
php程序编写分为面向过程和面向对象.两者在功能实现上没有区别,但是在代码编写上区别很大,面向过程的代码很乱,不易管理,而面向对象把常用的功能封装为一个类,这样代码清楚多了. 下面举个小例子说明一下: ...
- essential C++中关于面向过程和面向对象的说明
昨天在阅读essential C++中看到了一个关于面向过程和面向对象的区别的例子,感觉挺好的.记录下来.... 这个例子是关于照相机的.照相机有三个性质,一个是控制位置:通常使用3个浮点数据来表示其 ...
- PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理
相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析 PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理 介绍 mysqli是PHP程序与mysql数据库进行数据交互的桥梁, ...
随机推荐
- 关键字super
1.super,相较于关键字this,可以修饰属性.方法.构造器 2.super修饰属性.方法:在子类的方法.构造器中,通过super.属性或者super.方法的形式,显式的调用父类的指定 属性或方法 ...
- PostgreSQL Replication之第七章 理解Linux高可用(2)
7.2 衡量可用性 可用性是提供商试图保证一定的可用性级别和客户可以期望的可用性或更多.在某些情况下(取决于服务合同) 收取罚款或减少申购费用是意外停机的原因. 可用性的质量使用百分数来衡量:例如,9 ...
- TPC-C测试
TPC发布的测试标准之一,是专门针对联机事务处理系统(OLTP)的测试标准.1992年发布1.0版本.最新版本5.11,2010年发布. 测试规范中模拟了一个比较复杂并具有代表意义的OLTP应用环境, ...
- WLAN 基础架构功能
WLAN 基础架构功能 Android WLAN 框架可帮助用户连接到优质 WLAN 网络(在有可用 WLAN 网络且需要连接到这类网络的情况下).Android 可通过多种方式来实现这一点: 打开网 ...
- 学习Go语言之单例模式
单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建.这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象 // 单例模式 package main ...
- SQL Server存储ntext截断问题
SQL Server存储ntext截断问题 最近遇到一个问题:将大文本存储到数据库的时候,查询出来的文本却被截断了. 最后百度发现,作者提出 sql server management studi ...
- [POI2012]HUR-Warehouse Store(贪心,堆)
题意 n天.第i天上午会进货Ai件商品,中午的时候会有顾客需要购买Bi件商品,可以选择满足顾客的要求,或是无视掉他. 如果要满足顾客的需求,就必须要有足够的库存.问最多能够满足多少个顾客的需求. (n ...
- WebService通讯技术的CXF框架问题
WebService通讯技术的CXF框架问题 严重: Servlet /cxf_rs_spring threw load() exception java.lang.ClassCastExceptio ...
- [Recompose] Make Reusable React Props Streams with Lenses
If you hard-code a stream of props to target a specific prop, it becomes impossible to reuse that st ...
- 使用Java8提供的Duration类制作字幕时间轴调整工具
网上下载的字幕有时和片源的时间轴不一致.我们能够自己写一个工具来调整,也就是总体向前移动几秒,或者向后移动几秒.Java8中提供的Duration类使得这样的时间计算极其方便.以下就以最简单的srt字 ...