欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于c++的中國象棋游戲設計與實現(xiàn)

 更新時間:2022年02月28日 10:46:54   作者:biyezuopinvip  
這篇文章主要介紹了基于c++的中國象棋游戲設計與實現(xiàn),主要操作是possibleMove(int?x,?int?y),通過整個棋盤每個位置上的信息、中國象棋的規(guī)則來獲得位置(x,?y)這個棋子可以移動到的位置,需要的朋友可以參考一下

1.文檔

文檔分為兩部分,一部分在代碼中,然后通過doxygen生成HTML。解壓本目錄下的html.zip后打開index.html即可查看;第二部分在此說明文檔內(nèi),在這里會介紹一些架構方面的信息。

2.游戲操作邏輯

相關的命名空間有:

Chess:這是包含中國象棋的操作邏輯的命名空間

主要操作是possibleMove(int x, int y),通過整個棋盤每個位置上的信息、中國象棋的規(guī)則來獲得位置(x, y)這個棋子可以移動到的位置。

其余操作有“判斷是否將、帥對視`、”判斷當前局面是否為必勝、必敗態(tài)”、“是否將軍”等,這些操作均使用最簡單的枚舉算法。

3.UI框架

相關的類有:

  • MainWindow:主窗體
  • ChessWidget:主窗體里的主要部件,用于顯示棋盤、操作棋盤,并且會發(fā)出相應音效
  • PanelWidget:一個dock部件,置于主部件上方,用于顯示“輪到誰進行下棋”、“當前回合所剩時間”、“認輸按鈕”
  • ClientDialog:連接到對戰(zhàn)的對話框,可以設置IP(IPv4)和端口
  • ServerDialog:建立服務器,可以設置監(jiān)聽的端口、當前用戶執(zhí)紅or執(zhí)黑、每回合時間
  • LoadingDialog:一個能播放動畫的等待連接的對話框

棋盤的繪制是用paintEventQPainter進行繪制的。

4.網(wǎng)絡通信

使用QTcpSocket進行傳輸數(shù)據(jù)(監(jiān)聽端是使用QTcpServer進行監(jiān)聽,并且只返回一個可用的socket)

發(fā)送端是阻塞(同步)發(fā)送的,接收端是非阻塞(異步)接收的。

我用的是QDataStream來操作QTcpSocket,這樣省去很多麻煩,比如發(fā)送、接受數(shù)據(jù)只需要簡單的這樣寫:

發(fā)送端:

QByteArray data;
QDataStream st(&data, QIODevice::WriteOnly);
QString str = "hahaha";
int op = 2333;
st << op << str;
socket->write(data);
socket->waitForBytesWritten();

接收端:

auto data = socket->readAll();
QDataStream st(&data, QIODevice::ReadOnly);
QString str;
int op;
st >> op >> str; // op == 2333, str == "hahaha"

通信協(xié)議如下:

第1個數(shù)字表示操作類型:

  • 0: server傳輸初始數(shù)據(jù)到client;首先傳輸client是紅方(0)還是黑方(1),接著傳輸每一回合的時間,最后將殘局文件傳輸過去
  • 1: 移動棋子;接下來4個整數(shù)x1, y1, x2, y2,表示坐標(x1, y1)移動到(x2, y2)
  • 2: 認輸;接下來不傳輸任何其他東西
  • 3: 我贏了!接下來不傳輸任何其他東西

 

相關文章

  • C++實現(xiàn)LeetCode(557.翻轉字符串中的單詞之三)

    C++實現(xiàn)LeetCode(557.翻轉字符串中的單詞之三)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(557.翻轉字符串中的單詞之三),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言指針與引用的區(qū)別以及引用的三種用法案例詳解

    C語言指針與引用的區(qū)別以及引用的三種用法案例詳解

    這篇文章主要介紹了C語言指針與引用的區(qū)別以及引用的三種用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C++ 虛函數(shù)與純虛函數(shù)的使用與區(qū)別

    C++ 虛函數(shù)與純虛函數(shù)的使用與區(qū)別

    本文主要介紹了C++ 虛函數(shù)與純虛函數(shù)的使用與區(qū)別,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • c++中map容器的使用詳解

    c++中map容器的使用詳解

    這篇文章主要介紹了c++中map容器的使用詳解,C++中map容器提供一個鍵值對容器,map與multimap差別僅僅在于multiple允許一個鍵對應多個值,需要的朋友可以參考下
    2023-08-08
  • 淺談C++變量作用域

    淺談C++變量作用域

    這篇文章主要介紹了C++變量作用域的的相關資料,文中代碼非常細致,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • C語言中字符型數(shù)據(jù)和浮點型數(shù)據(jù)介紹

    C語言中字符型數(shù)據(jù)和浮點型數(shù)據(jù)介紹

    大家好,本篇文章主要講的是C語言中字符型數(shù)據(jù)和浮點型數(shù)據(jù)介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C語言中計算二叉樹的寬度的兩種方式

    C語言中計算二叉樹的寬度的兩種方式

    這篇文章主要介紹了C語言中計算二叉樹的寬度的兩種方式的相關資料,需要的朋友可以參考下
    2017-04-04
  • 關于C++多重繼承下虛表結構的問題

    關于C++多重繼承下虛表結構的問題

    這篇文章主要介紹了C++ 多重繼承下虛表結構的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • C++語法詳解之封裝、構造函數(shù)、析構函數(shù)

    C++語法詳解之封裝、構造函數(shù)、析構函數(shù)

    這篇文章主要介紹了C++語法詳解之封裝、構造函數(shù)、析構函數(shù)的相關知識,通過實例代碼給大家詳細介紹,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • C語言鏈表完整操作演示

    C語言鏈表完整操作演示

    這篇文章主要為大家詳細介紹了C語言鏈表的完整操作演示,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論