“二吃一”棋類遊戲設計思路
設計語言 :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,呈現起始頁