天天看點

“二吃一”棋類遊戲設計思路 -- qt5實作

“二吃一”棋類遊戲設計思路

設計語言 :c++,qt庫

設計檔案彙總

  • chess.h
  • chessform.h
  • help.h
  • one.h
  • chess.cpp
  • chessform.cpp
  • help.cpp
  • main.cpp
  • one.cpp
  • chess.ui
  • help.ui
  • one.ui
  • black.png
  • white.png
  • board.png
  • help.png
  • Minecraft.jpg
  • one.jpg

設計思路

1 棋盤繪制

  • chess.cpp

1.1 棋盤背景設定

void Chess::paintEvent(QPaintEvent *)

painter.drawPixmap()//導入背景圖board, 棋盤底

1.2 棋格線繪制

void Chess::resizeEvent(QResizeEvent *event) //設定長寬

void Chess::paintEvent(QPaintEvent *)

QPen //繪制棋格線

根據頁面的長寬設定起始坐标,格子寬度成比例進行繪制,形成4*4的棋盤

2 棋子控制

2.1 棋子設定

void Chess::InitChess() //初始化棋盤資料

根據坐标定位每個格子的位置,和旗子進行對應。

void Chess::paintEvent(QPaintEvent *)

QString chessFilename ; QPaint;

void Chess::mousePressEvent(QMouseEvent *event) //滑鼠控制落子,滑鼠右鍵擷取的精确坐标除以格子寬度取整,一邊歸一化每個格子的坐标

void Chess::setChessStatus(void *p) //加載棋子資料 重新整理

3 界面設定

  • chessform.cpp
3.1 ui設計
在ui檔案中直接拖動控件,實作布局
3.2 在界面中顯示棋盤

在chessform中調用chess.h

void ChessForm::Init()

3.3繪制目前窗體背景

void paintEvent(QPaintEvent *) //MIinecraft.jpg

3.4拖動控件,設定雙方

3.3.1 void ChessForm::Init()

3.3.2 void RoleInit(const QString whiteFilename, const QString blackFilename)

3.3.3 人人對戰

轉到槽 void ChessForm::on_btn_pvp_clicked()

界面初始化

void setRole(Chess::ChessType currentRole);//設定誰先

Chess::ChessType currentRole

棋盤初始化

void setChessInit()//将Chess::InitChess()移植

int formchessData[4][4];

void setChessStatus //将窗體裡的資料傳到棋盤裡面去

3.3.4 傳送信号

在ChessForm::Init()中 connect(mychess, SIGNAL(SignalSendChessData(int, int), this, SLOT(doProcessChessData(int, int))

void ChessForm::doProcessChessData(int i, int j)

4 增加吃子規則

4.1 通過基于mousePressEvent的Chessform;;doProcessChessData

調用blackk函數

int blackk(int playerr, int x_1, int y_1, int x_2, int y_2)

int black( int player, int x_1, int y_1, int x_2, int y_2)

int move1;//移動

int near;//判斷相鄰

int delete_chess;

int check;

int import;//判斷合法

5.規則實作

5.1 通過滑鼠點選輸入坐标給blackk函數,傳回赢家

5.2 通過條件判斷,與RoleInit産生聯系,控制雙方圖檔的顯示,最後剩下的為赢家。

5.3 加入QTimer *myTimer,對雙方進行計時,超過規定時間,判對方勝利。

6.多個頁面的傳遞

6.1 繪制起始頁面 one. cpp 起始頁面為maindow形式,加入菜單欄(下拉顯示作者,版本号,聯系方式等資訊),設定兩個按鈕,一個通向遊戲界面,一個通向幫助界面。同時在遊戲界面設定按鈕,向起始頁面發送信号,點選重新回到起始頁面。

void Initt()

void on_pushButton_clicked()

void doProcesschessformRequest()

void doProcessClinkhelp()

6.2 繪制幫助界面,幫助界面中用pixmap呈現遊戲規則

void paintEvent(QPaintEvent *)

7.main函數

main函數中調用one.h,呈現起始頁