天天看点

“二吃一”棋类游戏设计思路 -- 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,呈现起始页