目录

  • 1 学习情境一、媒体播放器
    • 1.1 项目背景和工作目标
    • 1.2 工作任务
    • 1.3 工作任务一:需求分析
    • 1.4 工作任务二:系统设计
    • 1.5 工作任务三:编码实现
    • 1.6 工作任务四:系统集成与测试
    • 1.7 工作任务五:项目总结
  • 2 学习情境二、Qt连连看游戏
    • 2.1 项目背景和工作目标
    • 2.2 工作任务
    • 2.3 工作任务一:需求分析
    • 2.4 工作任务二:系统设计
    • 2.5 工作任务三:编码实现
    • 2.6 工作任务四:系统集成与测试
    • 2.7 工作任务五:项目总结
  • 3 学习情境三、毕业电子相册
    • 3.1 项目背景和工作目标
    • 3.2 工作任务
    • 3.3 工作任务一:需求分析
    • 3.4 工作任务二:系统设计
    • 3.5 工作任务三:编码实现
    • 3.6 工作任务四:系统集成与测试
    • 3.7 工作任务五:项目总结
  • 4 第一章 单片机概述
    • 4.1 单片机简介
    • 4.2 单片机特点
    • 4.3 单片机应用领域
    • 4.4 单片机发展趋势
    • 4.5 MCS-51系列与AT89S5x系列单片机
    • 4.6 其他嵌入式处理器简介
  • 5 AT89S51单片机的片内硬件结构
    • 5.1 AT89S51单片机的硬件组成
    • 5.2 AT89S51单片机的引脚
    • 5.3 AT89S51的CPU
    • 5.4 AT89S51单片机存储器的结构
    • 5.5 AT89S51单片机的并行I/O端口
    • 5.6 时钟电路和时序
    • 5.7 复位操作和复位电路
    • 5.8 看门狗定时器的使用
  • 6 C51语言编程基础与KEIL uVision3开发平台
    • 6.1 C51编程语言概述
    • 6.2 C51语言程序设计基础
    • 6.3 C51语言的函数
    • 6.4 Keil uVision3环境下的C51语言程序开发
  • 7 虚拟仿真平台Porteus的使用(自学)
  • 8 单片机开关检测、键盘输入与显示接口设计
    • 8.1 单片机控制LED显示
    • 8.2 开关状态检测
    • 8.3 单片机控制LED数码管显示
  • 9 中断系统
    • 9.1 中断技术概述
    • 9.2 中断系统结构
    • 9.3 中断允许中断优先级的控制
    • 9.4 响应中断请求的条件
    • 9.5 外部中断响应时间
    • 9.6 外部中断触发方式选择
    • 9.7 中断请求的撤消
    • 9.8 中断函数
    • 9.9 中断系统应用举例
  • 10 定时/计数器
    • 10.1 定时/计数器结构
    • 10.2 定时计数器的4种工作方式
    • 10.3 对外部输入的计数信号的要求
    • 10.4 定时/计数器的编程和应用
  • 11 串行口的工作原理及应用
    • 11.1 串行口结构
    • 11.2 串行口的4种工作方式
    • 11.3 多机通信
    • 11.4 波特率的制定方法
    • 11.5 串行口应用设计实例
  • 12 单片机系统的扩展
    • 12.1 系统并行扩展技术
    • 12.2 外部数据存储器的并行扩展
    • 12.3 EEPROM存储器的并行扩展
  • 13 AT89S52单片机与DAC、ADC的接口
    • 13.1 单片机扩展DAC 概述
    • 13.2 单片机扩展并行8位DAC0832芯片的设计
    • 13.3 单片机扩展ADC概述
    • 13.4 单片机并行扩展8位A/D转换器ADC0809
  • 14 课程导学
    • 14.1 课程介绍
    • 14.2 课程对接职业技能证书标准
    • 14.3 实训过程演示
  • 15 基础性实验
    • 15.1 实验1 实验平台搭建
    • 15.2 实验2 设备状态指示灯的控制——LED灯的控制
    • 15.3 实验3 八路病房呼叫系统——数码管应用
    • 15.4 实验4 三相交流电故障检测系统——外部中断的应用
    • 15.5 实验5 模拟报警声控制——定时器的应用
    • 15.6 实验6 单片机双机通信——串口通信的应用
  • 16 综合性实验
    • 16.1 实验1 倒车警示器
    • 16.2 实验2 心形多路花样彩灯
    • 16.3 实验3 简易计算器
    • 16.4 实验4 多功能电子时钟
    • 16.5 实验5 自动化生产线产品计数打包系统
    • 16.6 实验6 简易数字电压表
    • 16.7 实验7 光控小夜灯
  • 17 创新性实验
    • 17.1 实验1 带倒计时功能的交通信号灯
    • 17.2 实验2 基于串口通信的LED点阵广告屏
    • 17.3 实验3 带温度显示的电子万年历
  • 18 考试题库
    • 18.1 电信5-8班 电信12班考试题库
    • 18.2 电信3、4班考试题库
工作任务五:项目总结


2.7工作任务五:项目总结

2.7.1任务描述

    本任务是对“媒体播放器”的项目进行总结和测评,小组总结各自项目的长处与不足,小组成员总结自己在项目完成过程期间的成败得失,教师对项目进行最后点评与总结。测评的方式采用小组内自评、组间互评、教师总评相结合。

2.7.2任务目的

本任务的目的完成项目的总结和测评,通过完成本次任务,可以帮组学生掌握项目总结与测评的方法,提高学生文档书写能力,积累学习经验,为以后学习做准备,加强学生团队协作和与人沟通的能力。养成自我评价与学习他人的良好风气。

2.7.3任务实现

游戏设计与实践是一项复杂而庞大的工作,在选题之后,意识到过程的艰难,因为以前从来都没有接触过游戏设计,刚开始有点迷茫和彷徨。后来通过翻阅书籍和在网上查阅资料,逐渐找到了一些感觉,在老师的指导下,自己也手动编写了几个简单的游戏,打地鼠游戏和网络N子棋双人对战游戏,本文以连连看游戏为例予以说明。

本次设计初步懂得了电子游戏涉及到的有关技术、方法,包括电子游戏选题、构思、设计步骤等。并实现一些可演示的游戏软件,其中有很多应用了学习的相关技术,并且做到了界面、声音都能实际演示。此次设计过程中印象最深的收获有:1学到了很多新知识,并且对老知识进行了回顾。经过长时间的学习,更进一步熟悉了Qt编程、通过不断上机实验,调试程序,总结经验,从对课题的不理解到能够开始动手去做,提出新问题并自己想办法去解决问题,自己多实践,所以增强了动手能力。2提高了中、英文资料的检索能力。这次毕业设计过程中查阅了多资料,包括一些期刊、杂志,还有网络中的电子文档、电子书籍、网页及下载的视频教学课程;不但有中文资料还有英文资料。这些资料,眼界更开阔,对课题的认识更加深刻,编写程序的时候思路更加清楚,少走了很多弯路。

回顾此次设计过程,学到了许多书本上没有学到的知识。通过这次自己制作的软件,丰富了自己的实践技能,扩张了本专业的知识面,同时也体验到了搞软件开发的难度。在这次设计的同时,由于对这样的软件开发还只是一个开始,了解的不多,这其中或许还有很多的不足,有些模块做得不是很好,有些功能还不能够完全的实现,如播放背景音乐时,只能播放一遍,因为游戏Qt类库中封装的东西太多,有些函数它底层的具体实现可能还没有真正的理解,所以,这也许就是本次游戏设计的不足之处。

项目二相关代码:

Mainwindow.cpp

#include <resolv.h>

#include <stdlib.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#include <QScrollBar>

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include"udp.h"

#include<QImage>

#include <Qtime>

#include "llk.h"

#include<iostream>

 

using namespace std;

 

MainWindow::MainWindow(QWidget *parent) :

    QMainWindow(parent),

    ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    connect(this,SIGNAL(recvMessage(QString,QString)), this,SLOT(onRecvMessage(QString,QString)));

 

   //this->setCentralWidget(link);

   //link->setMaximumSize(300,300);

   ui->editChatRec->setReadOnly(true);

 

   // link = new llk();

    size=6;

    isLinkE = false;

 

    sendMessage("192.168.3.255",8838,"o192.168.3.117",true);

 

}

 

MainWindow::~MainWindow()

{

    delete ui;

}

 

void MainWindow::changeEvent(QEvent *e)

{

    QMainWindow::changeEvent(e);

    switch (e->type()) {

    case QEvent::LanguageChange:

        ui->retranslateUi(this);

        break;

    default:

        break;

    }

}

 

 

 

void MainWindow::on_btnSend_clicked()

{

    QString string =ui->lineEdit->text();

   if(ui->radiosingle->isChecked()==true)

    {

 

        sendMessage(string,8838,'c'+ ui->editChat->text(),true);

    }

   else

    {

        string ="192.168.3.255";

       sendMessage("192.168.3.255",8838,'c' +ui->editChat->text(),true);

    }

    QString str =trUtf8("自己对")+ string +trUtf8("发送:") + "\n"+ ui->editChat->text();

   ui->editChatRec->setPlainText(ui->editChatRec->toPlainText()+" \n" +str);

    ui->editChat->clear();

 

    QScrollBar *bar =ui->editChatRec->verticalScrollBar();

   bar->setSliderPosition(bar->maximum());

}

 

Ui::MainWindow* MainWindow::getUi()

{

    return ui;

}

void MainWindow::onRecvMessage(QString msg, QString ipAdd)

{

    //

    QString time = Qtime::currentTime().toString();

 

    QString string =time +"\n" +QString(trUtf8("收到来自")) + ipAdd +trUtf8(":的消息:") + "\n" + msg.right(msg.length()-1);

 

 

    switch(msg.at(0).toAscii())

    {

    case 'o':   //如果接受的是上线消息

       ui->listWidget->addItem(msg.right(msg.length()-1));

        break;

    default:   //如果接受的是普通消息

       ui->editChatRec->setPlainText(ui->editChatRec->toPlainText()+"\n" + string);

        break;

    }

 

    QScrollBar *bar =ui->editChatRec->verticalScrollBar();

   bar->setSliderPosition(bar->maximum());

 

}

 

 

 

void MainWindow::on_action_begin_triggered()

{

 

   /* link=new llk();

    link->setsize(6);

    link->arrayInit(6);

    link->Create(6);

    link->show();

    isLinkE = true;*/

   // size=4;

    if(isLinkE)

    {

        //link=new llk();

        //link->setsize(8);

       // link->arrayInit(8);

        //link->Create(8);

        link->close();

        isLinkE = false;

 

    }

    else

    {

        link=new llk();

        link->setsize(size);

        link->arrayInit(size);

        link->Create(size);

        link->show();

        isLinkE = true;

 

    }

    if(isLinkE==false)

    {

        link=new llk();

        link->setsize(size);

        link->arrayInit(size);

        link->Create(size);

        link->show();

        isLinkE = true;

    }

 

 

}

 

void MainWindow::on_action_close_triggered()

{

    this->close();

    link->close();

}

 

 

void MainWindow::on_action_pause_triggered()

{

    if(isLinkE)

    link->setEnabled(false);

}

 

void MainWindow::on_action_return_triggered()

{

    link->setEnabled(true);

}

 

 

void MainWindow::on_action_easy_triggered()

{

    size=6;

    if(isLinkE)

    {

        //link=new llk();

        //link->setsize(8);

       // link->arrayInit(8);

        //link->Create(8);

        link->close();

        isLinkE = false;

 

    }

    else

    {

        link=new llk();

        link->setsize(6);

        link->arrayInit(6);

        link->Create(6);

        link->show();

        isLinkE = true;

 

    }

    if(isLinkE==false)

    {

        link=new llk();

        link->setsize(6);

        link->arrayInit(6);

        link->Create(6);

        link->show();

        isLinkE = true;

    }

 

}

 

 

void MainWindow::on_action_soso_triggered()

{

    size=8;

    /*llk *lin;

   lin = new llk();

   //this->setCentralWidget(lin);

   //lin->setGeometry(30,30,500,500);

    lin->setsize(8);

    lin->arrayInit(8);

 

 

    lin->Create(8);

    lin->setVisible(true);

    lin->close();*/

    if(isLinkE)

    {

        //link=new llk();

        //link->setsize(8);

       // link->arrayInit(8);

        //link->Create(8);

        link->close();

        isLinkE = false;

 

    }

    else

    {

        link=new llk();

        link->setsize(8);

        link->arrayInit(8);

        link->Create(8);

        link->show();

        isLinkE = true;

 

    }

    if(isLinkE==false)

    {

        link=new llk();

        link->setsize(8);

        link->arrayInit(8);

        link->Create(8);

        link->show();

        isLinkE = true;

    }

 

 

 

 

}

 

void MainWindow::on_action_diffcult_triggered()

{

    size=10;

    /*llk *lin;

    lin = new llk();

   //this->setCentralWidget(lin);

   //lin->setGeometry(30,30,500,500);

    lin->setsize(8);

    lin->arrayInit(8);

 

 

    lin->Create(8);

    lin->setVisible(true);

    lin->close();*/

    if(isLinkE)

    {

        //link=new llk();

        //link->setsize(8);

       // link->arrayInit(8);

        //link->Create(8);

        link->close();

        isLinkE = false;

 

    }

    else

    {

        link=new llk();

        link->setsize(10);

        link->arrayInit(10);

        link->Create(10);

        link->show();

        isLinkE = true;

 

    }

    if(isLinkE==false)

    {

        link=new llk();

        link->setsize(10);

        link->arrayInit(10);

        link->Cre

 

mybutton.cpp

#include "mybutton.h"

 

MyButton::MyButton(int value, QWidget *parent)

{

    this->value = value;

    this->setParent(parent);

   QObject::connect(this,SIGNAL(clicked()),this,SLOT(mySlot()));

}

 

 

void MyButton::mySlot()

{

    emit myClicked(this->value);

}

Main.cpp

#include <QtGui/QApplication>

#include "mainwindow.h"

#include <QtGui/QApplication>

#include <errno.h>

#include <sys/socket.h>

#include <resolv.h>

#include <stdlib.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#include <iostream>

#include <string>

 

using namespace std;

 

 

 

const unsigned int MAXBUF = 1024;

 

void* thd_handler(void* window)

{

    MainWindow*w=(MainWindow*)window;

 

    int sockfd;

    struct sockaddr_in my_addr;

    socklen_t addrlen;

    char buffer[MAXBUF];

    unsigned int myport = 8838;

 

    printf("serverstarted!\n");

 

    //create a socket for udp

    if((sockfd =socket(AF_INET,SOCK_DGRAM,0)) < 0)     //attention

    {

        perror("socket creationfailure");

        exit(errno);

    }

 

    //initialize sockaddr_in

   bzero(&my_addr,sizeof(my_addr));

    my_addr.sin_family = AF_INET;

    my_addr.sin_port =htons(myport);

    my_addr.sin_addr.s_addr =INADDR_ANY;

 

    //bind

    if(bind(sockfd,(structsockaddr*)&my_addr

             ,sizeof(structsockaddr)) == -1)

    {

        perror("bindfailure");

        exit(errno);

    }

 

    printf("bindsuccess\n");

 

    addrlen = sizeof(structsockaddr);

    while(true)

    {

        bzero(buffer,MAXBUF);

        int len = recvfrom(sockfd,buffer, MAXBUF, 0

                          ,(sockaddr*)&my_addr, &addrlen);

        if (len < 0) {

           perror("recvfrom");

            exit(errno);

        }

 

        emitw->recvMessage(QObject::trUtf8(buffer),inet_ntoa(my_addr.sin_addr));

 

    }

 

    //close connection

    close(sockfd);

 

 

}

 

int main(int argc, char *argv[])

{

    pthread_t ntid;

    QApplication a(argc, argv);

    MainWindow w;

   pthread_create(&ntid,NULL,thd_handler,&w);

    w.show();

    return a.exec();

}


udp.cpp

#include"udp.h"

#include<QString>

 

#include <errno.h>

#include <sys/socket.h>

#include <resolv.h>

#include <stdlib.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

void sendMessage(QStringipAddress,unsigned int port,QString msg,bool isBroad)

{           

  // const unsigned int MAXBUF = 1024;

   int sockfd;

   int addr_len;

   int len;

   struct sockaddr_in dest;

   //char buffer[MAXBUF];

 

   char addr[16] ;

   strcpy(addr,ipAddress.toAscii());

 

   //create a socket for udp

   if((sockfd = socket(AF_INET,SOCK_DGRAM,0)) < 0)     //attention

   {

        perror("socket creationfailure");

        exit(errno);

   }

   if(isBroad)

   {

        int broad=1;

       setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&broad,sizeof(broad));

        strcpy(addr,"192.168.3.255");

 

   }

 

   //initialize sockaddr_in

   bzero(&dest,sizeof(dest));

   dest.sin_family = AF_INET;

   dest.sin_port = htons( port);

    if(inet_aton(addr,(struct in_addr*)&dest.sin_addr)==0)

   {

        perror("ip address format iserror");

        exit(errno);

   }

 

   //send msg to server

   addr_len = sizeof(dest);

  // bzero(buffer,MAXBUF);

 

   len = sendto(sockfd, msg.toLocal8Bit(), msg.toLocal8Bit().length(), 0

                 ,(sockaddr*)&dest,addr_len);

   if (len < 0)

   {

        printf("\n\rsend error.\n\r");

        exit(errno);

   }

 

   //close connection

   ::close(sockfd);

 

}

 

 

llk.cpp

#include "llk.h"

#include<iostream>

#include"judge.h"

 

llk::llk()

{

   isFirstClick = true;

   llk::createBtnRerank();

 

   size=6;llk::createCurrentProgressBar(size);

 

   timer = new Qtimer();

   currentTime=0;

   QObject::connect(timer,SIGNAL(timeout()),this,SLOT(timeProcess()));

 

}

 

 

 

void llk::xxx(int x)

{

 

     clear(x);

  // std::cout<<x<<std::endl;

  // mybutton[x]->setVisible(false);

 //  Widget::arrayInit(6);

  // progressBar[1]->setValue(20);

}

void llk::addPic(QString path,inti)

{

   labelPic[i] = new QLabel(this);

   labelPic[i]->setGeometry(i*100+5,30,100,120);

   QPixmap pixmap(path);

   labelPic[i]->setPixmap(path);

   labelPic[i]->setVisible(false);

   progressBar[i] = new QProgressBar();

   progressBar[i]->setGeometry(i*100+10,120,100,20);

   progressBar[i]->setParent(this);

   progressBar[i]->setValue(10);

}

 

void  llk::Create(int size)

{

     createTimeProcessBar(size*size);

     timer->start(1000);

 

 

   charss[26][20]={"begin","./icon/icon1.png","./icon/icon2.png","./icon/icon3.png","./icon/icon4.png","./icon/icon5.png",

                   "./icon/icon6.png",

              "./icon/icon7.png","./icon/icon8.png","./icon/icon9.png","./icon/icon10.png",

          "./icon/icon11.gif","./icon/icon12.gif","./icon/icon13.gif","./icon/icon14.gif",

          "./icon/icon15.gif","./icon/icon16.gif","./icon/icon17.gif","./icon/icon18.gif"

       ,"./icon/icon19.gif","./icon/icon20.gif","./icon/icon21.gif","./icon/icon22.gif","./icon/icon23.gif"

       ,"./icon/icon24.gif","./icon/icon25.gif"};

 

 

 

 

     createCurrentProgressBar(size);

 

     currentIndex=size*size;

     progressBarCurrent->setValue(0);

   for(unsigned int i=0;i<size*size;i++)

   {

        mybutton[i] = new MyButton(i,this);

       mybutton[i]->setGeometry(20+i%size*60,150+i/size*60,60,60);

 

        int x,y;

        x=i/size+1;

 

        if((i+1)%size)

        {

            y=(i+1)%size;

        }

        else

            y=size;

        int m=array[x][y];

       //std::cout<<x<<","<<y<<std::endl;

        mybutton[i]->setIcon(QIcon(ss[m]));

       mybutton[i]->setIconSize(QSize(50,50));

       QObject::connect(mybutton[i],SIGNAL(myClicked(int)),this,SLOT(xxx(int)));

        //mybutton[i]->setIcon(QIcon(s));

 

   }

}

void llk::arrayInit(int size)

{

   array[size+1][0]=0;

   array[size+1][size+1]=0;

   array[0][size+1]=0;

   array[0][0]=0;

   for(int i=1;i<=size;i++)

   {

        array[0][i]=0;

        array[size+1][i]=0;

        array[i][0]=0;

        array[i][size+1]=0;

 

        for(int j=1;j<=size;j++)

        {

            array[i][j]=((i-1)*size+j-1)/4+1;

 

 

         }

 

   }

  for(int i=1;i<=size;i++)

   {

        for(int j=1;j<=size;j++)

        {

            int x1,x2,y1,y2,tmp1;

           // srand(unsigned(time(NULL)));

            x1=rand()%size+1;

            x2=rand()%size+1;

            y1=rand()%size+1;

            y2=rand()%size+1;

            tmp1=array[x1][y1];

            array[x1][y1]=array[x2][y2];

            array[x2][y2]=tmp1;

 

 

 

 

        }

   }

   for(int i=0;i<=size+1;i++)

   {

        for(int j=0;j<=size+1;j++)

        {

           std::cout<<array[i][j]<<"   ";

        }

        std::cout<<std::endl;

   }

 

}

void llk::clear(int index)

{

   if(isFirstClick)

   {

        firstIndex=index;

        isFirstClick=false;

       std::cout<<firstIndex<<",";

 

   }

   else

   {

 

       std::cout<<index<<std::endl;

       int x1,y1,x2,y2;

         x1=firstIndex/size+1;

         x2=index/size+1;

 

        if((firstIndex+1)%size)

        {

          y1=(firstIndex+1)%size;

        }

        else

         y1=size;

        if((index+1)%size)

        {

            y2=(index+1)%size;

        }

        else

            y2=size;

       std::cout<<x1<<","<<y1<<std::endl;

        std::cout<<x2<<","<<y2<<std::endl;

        std::cout<<"**************"<<std::endl;

 

        if(judge(x1,y1,x2,y2,array,size))

        {

           mybutton[firstIndex]->setVisible(false);

           // free(mybutton[firstIndex]);

            //mybutton[firstIndex]=NULL;

           mybutton[index]->setVisible(false);

            array[x1][y1]=0;

            array[x2][y2]=0;

            currentIndex-=2;

           progressBarCurrent->setValue(size*size-currentIndex);

 

 

 

        }

        isFirstClick=true;

 

 

 

 

 

   }

}

void llk::setsize(int size1)

{

   if(size1==8||size1==6||size1==10||size1==4)

   {

        size=size1;

   }

}

void llk::mybuttonDelt()

{

   for(int i=0;i<size*size;i++)

   {

        free(mybutton[i]);

   }

}

void llk::createBtnRerank()

 {

     btnReRank = new QPushButton();

     btnReRank->setParent(this);

     btnReRank->setText("reRank");

    QObject::connect(btnReRank,SIGNAL(clicked()),this,SLOT(Rerank( )));

 

 }

void llk::Rerank()

{

   charss[26][20]={"begin","./icon/icon1.png","./icon/icon2.png","./icon/icon3.png","./icon/icon4.png","./icon/icon5.png",

                   "./icon/icon6.png",

              "./icon/icon7.png","./icon/icon8.png","./icon/icon9.png","./icon/icon10.png",

          "./icon/icon11.gif","./icon/icon12.gif","./icon/icon13.gif","./icon/icon14.gif",

          "./icon/icon15.gif","./icon/icon16.gif","./icon/icon17.gif","./icon/icon18.gif"

      ,"./icon/icon19.gif","./icon/icon20.gif","./icon/icon21.gif","./icon/icon22.gif","./icon/icon23.gif"

  ,"./icon/icon24.gif","./icon/icon25.gif"};

   int tmpx,tmpy,tmp;

   std::cout<<"rerank"<<std::endl;

   for(int i=1;i<=size;i++)

   {

        for(int j=1;j<=size;j++)

        {

            if(array[i][j]!=0)

           {

 

                tmpx=rand()%size+1;

                tmpy=rand()%size+1;

 

                tmp =array[i][j];

                array[i][j]=array[tmpx][tmpy];

                array[tmpx][tmpy]=tmp;

               mybutton[(i-1)*size+j-1]->setIcon(QIcon(ss[array[i][j]]));

               mybutton[(tmpx-1)*size+tmpy-1]->setIcon(QIcon(ss[array[tmpx][tmpy]]));

                if(array[i][j])

                {

                    mybutton[(i-1)*size+j-1]->setVisible(true);

 

                }

                else

                {

                   mybutton[(i-1)*size+j-1]->setVisible(false);

                }

               mybutton[(tmpx-1)*size+tmpy-1]->setVisible(true);

 

 

 

 

 

            }

 }

}

}

voidllk::createCurrentProgressBar(int size)

{

   progressBarCurrent = newQProgressBar();

   progressBarCurrent->setGeometry(20,40,60*size,30);

   progressBarCurrent->setMaximum(size*size);

   progressBarCurrent->setValue(255);

   progressBarCurrent->setParent(this);

}

void llk::createTimeProcessBar(intsumtime)

{

   progressBarTime = new QProgressBar();

   progressBarTime->setGeometry(20,80,60*size,30);

   progressBarTime->setParent(this);

   progressBarTime->setMaximum(sumtime);

 

 

 

}

void llk::timeProcess()

{

   if(currentTime>=size*size)

       this->close();

   currentTime++;

   progressBarTime->setValue(currentTime);

}

 

Judge.cpp

#include"judge.h"

#include<iostream>

 

int judge(int x1,int y1,int x2,inty2,int array[16][16],int size)

{

        if(x1==x2&&y1==y2)

      {

            return 0;

      }

        if((array[x1][y1]==array[x2][y2]))

        {

               if(judge1(x1,y1,x2,y2,array,size)||judge2(x1,y1,x2,y2,array,size)||judge3(x1,y1,x2,y2,array,size))

                {

                        array[x1][y1]=0;

                        array[x2][y2]=0;

                        return 1;

                }

        }

        return 0;

 

 

}

int judge1(int x1,int y1,intx2,int y2,int array[16][16],int size)

{

        //if(array[x1][y1]==array[x2][y2])

        //{

        int tmp;

        if(x1!=x2&&y1!=y2)

                return 0;

        if(y1>y2)

        {

                tmp=y1;

                y1=y2;

                y2=tmp;

        }

        if(x1==x2)

        {

                if(y1>y2)

                {

                        tmp=y1;

                        y1=y2;

                        y2=tmp;

                }

                for(int i=y1+1;i<y2;i++)

                {

                        if(array[x1][i])

                        {

                                return 0;

                        }

                }

        }

        if(x1>x2)

        {

                tmp=x1;

                x1=x2;

                x2=tmp;

        }

        if(y1==y2)

        {

                if(x1>x2)

                {

                        tmp=x1;

                        x1=x2;

                        x2=tmp;

                }

                for(int j=x1+1;j<x2;j++)

                {

                        if(array[j][y1])

                        {

                                return 0;

                        }

                }

        }

 

        //return 1;

        //}

        return 1;

}

int judge2(int x1,int y1,intx2,int y2,int array[16][16],int size)

{

        int flag=0;

 

               if(judge1(x1,y2,x1,y1,array,size)&&judge1(x1,y2,x2,y2,array,size)&&array[x1][y2]==0)

                {

                        //flag++;

                       //std::cout<<x1<<","<<i<<std::endl;

                        return 1;

                }

 

 

               if(judge1(x2,y1,x1,y1,array,size)&&judge1(x2,y1,x2,y2,array,size)&&array[x2][y1]==0)

                {

                        //flag++;

                       //std::cout<<j<<","<<y1<<std::endl;

                        return 1;

                }

 

 

        return 0;

}

int judge3(int x1,int y1,intx2,int y2,int array[16][16],int size)

{

 

        for(int i=0;i<=size+1;i++)

        {

               if(judge2(x1,i,x2,y2,array,size)&&judge1(x1,i,x1,y1,array,size)&&array[x1][i]==0)

                {     //std::cout<<x1<<","<<i<<std::endl;

                        return 1;

                }

        }

        for(int j=0;j<=size+1;j++)

        {

               if(judge2(j,y1,x2,y2,array,size)&&judge1(j,y1,x1,y1,array,size)&&array[j][y1]==0)

                {

                      //  std::cout<<j<<","<<y1<<std::endl;

                        return 1;

                }

 

        }

        return 0;

}

 

 

 

头文件源代码

Judge.h

#ifndef JUDGE_H

#define JUDGE_H

int judge(intx1,int y1,int x2,int y2,int array[16][16],int size);

int judge1(intx1,int y1,int x2,int y2,int array[16][16],int size);

int judge2(intx1,int y1,int x2,int y2,int array[16][16],int size);

int judge3(int x1,int y1,intx2,int y2,int array[16][16],int size);

 

#endif // JUDGE_H

 

Llk.h

#ifndef LLK_H

#define LLK_H

#include<mybutton.h>

#include <QWidget>

#include<QPicture>

 

#include <QWidget>

#include<QObject>

#include<QProgressBar>

#include<QLabel>

#include<Qtimer>

 

class llk : public QWidget

{

   Q_OBJECT

public:

   llk();

 

 

   void setsize(int size1);

   void addPic(QString path,int i);

   void Create(int size);

   void clear(int index);

   void mybuttonDelt();

   void createBtnRerank();

   void newGame();

   void createCurrentProgressBar(int size);

   void createTimeProcessBar(int sumtime);

   int currentTime;

 

 

 

private:

   MyButton * mybutton[150];

   QLabel * labelPic[4];

   QProgressBar  * progressBar[4];

   int array[16][16];

   bool isFirstClick;

   int firstIndex;

   QPushButton * btnReRank;

   QProgressBar *progressBarCurrent;

   QProgressBar *progressBarTime;

   int currentIndex;

 

   Qtimer *timer;

 

 

     int size;

 

public slots:

   void xxx(int x);

   void arrayInit(int size);

   void Rerank();

   void timeProcess();

 

};

 

#endif // LLK_H

 

 

Mainwindow.h

#ifndef JUDGE_H

#define JUDGE_H

int judge(int x1,int y1,int x2,inty2,int array[16][16],int size);

int judge1(int x1,int y1,intx2,int y2,int array[16][16],int size);

int judge2(int x1,int y1,intx2,int y2,int array[16][16],int size);

int judge3(int x1,int y1,intx2,int y2,int array[16][16],int size);

 

#endif // JUDGE_H

 

Mybutton.h

#ifndef MYBUTTON_H

#define MYBUTTON_H

 

#include <QPushButton>

 

class MyButton : publicQPushButton

{

   Q_OBJECT

public:

   MyButton(int value,QWidget * parent = 0);

 

private:

   int value;

 

signals:

   void myClicked(int value);

 

public slots:

   void mySlot();

};

 

#endif // MYBUTTON_H

 

 

Udp.h

#ifndefUDP_H

#defineUDP_H

#include<QString>

void sendMessage(QStringipAddress,unsigned int port,QString msg,bool isBroad);

#endif // UDP_H