最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Opencv開(kāi)發(fā)實(shí)現(xiàn)拼圖游戲

 更新時(shí)間:2021年07月23日 14:59:16   作者:HansBrent  
這篇文章主要為大家詳細(xì)介紹了Opencv開(kāi)發(fā)實(shí)現(xiàn)拼圖游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Opencv開(kāi)發(fā)實(shí)現(xiàn)拼圖游戲的具體代碼,供大家參考,具體內(nèi)容如下

一、代碼

#include<opencv2/opencv.hpp>
#include<iostream>
#include<stdlib.h>
#include<time.h>

#define PL 800
#define PW 600
#define EAZY 50


using namespace std;
using namespace cv;

const Size Dsize = Size (PL,PW);
const Size dsize = Size (PL+9,PW+6);
const string SF="D:\\code\\c\\opencv\\opencv_face_detection_database\\sample\\1.jpg";
int  readimg(Mat &img);
void department(Mat img,int imgmap[4][4],Mat gameimg[16]);
void radom(int imgmap[4][4]);
void showimg(Mat img[16],int imgmap[4][4]);
void moveimg(int imgmap[4][4]);
int gameover(int imgmap[4][4]);
int judge(char ch);
int fx,fy;

int  readimg(Mat &img)
{
    Mat gameimg=imread(SF,1);
    if(gameimg.empty())
    {
        cout<<SF<<endl<<"Fail to open the file!"<<endl;
        return 0;
    }
    resize(gameimg,img,Dsize);

    return 1;
}

void department(Mat img,int imgmap[4][4],Mat gameimg[16])
{
    Mat whiteimg=Mat(150,200,CV_8UC3,Scalar(255,255,255));
    Mat new_img;
    Rect rec;
    for(int i=0; i<4; i++)
    {
        for(int j=0; j<4; j++)
        {
            rec.width=200;
            rec.height=150;
            rec.x=i*200;
            rec.y=j*150;
            if(i*j!=9)
                new_img=img(rec);
            else
                new_img=whiteimg;
            gameimg[i*4+j]=new_img;
            waitKey(100);
            imgmap[i][j]=i*4+j;
        }
    }

    fx=3,fy=3;
    return ;
}

int judge(char ch)
{
    if(ch!='w'&&ch!='W')
        if(ch!='S'&&ch!='s')
            if(ch!='a'&&ch!='A')
                if(ch!='d'&&ch!='D')
                    return 0;
    return 1;
}

void moveimg(int imgmap[4][4],char ch)
{
    int x,y,mid;
    switch(ch)
    {
    case 'w':
    case 'W':
        x=fx;
        y=fy-1;
        if(y<0)
            return ;
        break;

    case 'a':
    case 'A':
        x=fx-1;
        y=fy;
        if(x<0)
            return ;
        break;

    case 'S':
    case 's':
        x=fx;
        y=fy+1;
        if(y>3)
            return ;
        break;

    case 'd':
    case 'D':
        x=fx+1;
        y=fy;
        if(x>3)
            return ;
        break;

    }
    mid=imgmap[fx][fy];
    imgmap[fx][fy]=imgmap[x][y];
    imgmap[x][y]=mid;
    fx=x,fy=y;
    return ;
}

void radom(int imgmap[4][4])
{
    int x=99307,y=77431;
    int t;
    srand((unsigned)time(NULL));
    t=rand();
    char ch;
    for(int i=1; i<EAZY; i++)
    {

        t=(t+x)%4;
        switch(t)
        {
        case 0:
            ch='a';
            break;
        case 1:
            ch='s';
            break;
        case 2:
            ch='w';
            break;
        case 3:
            ch='d';
            break;
        }
        moveimg(imgmap,ch);
        x=x*x%y;
    }

}

void showimg(Mat *img,int imgmap[4][4])
{
    Mat gameimg=Mat(dsize,CV_8UC3,Scalar(0,0,0));
    Rect rec;

    for(int i=0; i<4; i++)
    {
        for(int j=0; j<4; j++)
        {
            rec.width=200;
            rec.height=150;
            rec.x=i*203;
            rec.y=j*152;
            img[imgmap[i][j]].copyTo(gameimg(rec));
        }
    }
    imshow("game",gameimg);
    waitKey(1000);
    return ;
}

int gameover(int imgmap[4][4])
{
    int s=0;
    for(int i=0;i<4;i++)
        for(int j=0;j<4;j++)
        if(imgmap[i][j]==i*4+j)
        s++;
    if(s==16)
        return 1;
    return 0;
}
int main()
{
    Mat img;
    Mat gameimg[16];
    int imgmap[4][4]= {};
    char ch;
    if(!readimg(img))
        return 0;
    imshow("img",img);
    waitKey(2000);
    destroyWindow("img");

    department(img,imgmap,gameimg);
    radom(imgmap);

    while(1)
    {
        showimg(gameimg,imgmap);
        if(gameover(imgmap))
            {
                destroyWindow("game");
                imshow("img",img);
                waitKey(1000);
                break;
            }
        ch=getchar();
        while(!judge(ch))
            ch=getchar();
        moveimg(imgmap,ch);
    }
    return 0;

}

二、輸入輸出說(shuō)明

1、const string SF 為拼圖圖片路徑
2、w/s/d/a 用于方向操作
3、每次輸入方向操作符,都要輸入回車鍵作為確認(rèn)
4、在每次運(yùn)行前,都會(huì)展示3秒原圖片

三、存在的問(wèn)題

1、在用鼠標(biāo)進(jìn)行拖拽窗口時(shí),可能會(huì)提示無(wú)響應(yīng),等待一段時(shí)間就可以繼續(xù)操作了。
2、在修改參數(shù)時(shí),注意部分常數(shù)是應(yīng)該與參數(shù)同時(shí)變化的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺析C++內(nèi)存布局

    淺析C++內(nèi)存布局

    本文給大家介紹了C++內(nèi)存布局的相關(guān)知識(shí),通過(guò)進(jìn)程間通信比線程間通信難也是因?yàn)檫M(jìn)程間的用戶空間是相互隔離的,無(wú)法相互訪問(wèn),需要通過(guò)進(jìn)程間通信方式通信,通過(guò)內(nèi)核地址空間
    2021-10-10
  • 淺談c語(yǔ)言中轉(zhuǎn)義字符的用法及注意事項(xiàng)

    淺談c語(yǔ)言中轉(zhuǎn)義字符的用法及注意事項(xiàng)

    下面小編就為大家?guī)?lái)一篇淺談c語(yǔ)言中轉(zhuǎn)義字符的用法及注意事項(xiàng)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • OpenCV實(shí)現(xiàn)圖像的直線檢測(cè)

    OpenCV實(shí)現(xiàn)圖像的直線檢測(cè)

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)圖像直線檢測(cè)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C/C++中常用加密與解密算法的實(shí)現(xiàn)

    C/C++中常用加密與解密算法的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了一些在C++中常用的加密與解密算法,這其中包括Xor異或、BASE64、AES、MD5、SHA256、RSA等,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-11-11
  • c++ typeid關(guān)鍵字的使用

    c++ typeid關(guān)鍵字的使用

    這篇文章主要介紹了c++ typeid關(guān)鍵字的使用,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2020-11-11
  • C++ string字符串的修改與替換方法詳析

    C++ string字符串的修改與替換方法詳析

    這篇文章主要給大家介紹了關(guān)于C++ string字符串修改與替換方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • 區(qū)分C++中的&和&&

    區(qū)分C++中的&和&&

    這篇文章主要介紹了如何區(qū)分C++的&和&&,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-09-09
  • C++內(nèi)存管理詳解使用方式

    C++內(nèi)存管理詳解使用方式

    內(nèi)存管理是C++最令人切齒痛恨的問(wèn)題,也是C++最有爭(zhēng)議的問(wèn)題,C++高手從中獲得了更好的性能更大的自由,C++菜鳥(niǎo)的收獲則是一遍—遍的檢查代碼和對(duì)C++的痛恨,但內(nèi)存管理在C++中無(wú)處不在,內(nèi)存泄漏幾乎在每個(gè)C++程序中都會(huì)發(fā)生,要想成為C++高手,內(nèi)存管理這關(guān)是必須過(guò)的
    2022-04-04
  • C++實(shí)現(xiàn)加減乘除計(jì)算器

    C++實(shí)現(xiàn)加減乘除計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)加減乘除計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下<BR>
    2022-01-01
  • 使用C++實(shí)現(xiàn)一個(gè)高效的線程池

    使用C++實(shí)現(xiàn)一個(gè)高效的線程池

    在多線程編程中,線程池是一種常見(jiàn)且高效的設(shè)計(jì)模式,本文將詳細(xì)介紹如何使用C++實(shí)現(xiàn)一個(gè)線程池,并解析相關(guān)代碼實(shí)現(xiàn)細(xì)節(jié),需要的小伙伴可以參考下
    2024-12-12

最新評(píng)論

龙川县| 志丹县| 勃利县| 墨竹工卡县| 峨眉山市| 淮安市| 谷城县| 雷波县| 汾阳市| 长兴县| 清远市| 清水河县| 新郑市| 长沙县| 蓬溪县| 阳朔县| 万全县| 苏尼特左旗| 台前县| 东台市| 体育| 萨迦县| 屯昌县| 宕昌县| 四会市| 巴林右旗| 社会| 团风县| 张北县| 咸宁市| 二手房| 长垣县| 甘肃省| 永州市| 包头市| 井冈山市| 彭阳县| 方城县| 尼勒克县| 越西县| 绥阳县|