C++與Qt開發人機象棋(第二部分)

C++與Qt開發人機象棋(第二部分)

項目目錄
文件名->(包含)類名1->(包含)類名2

ChessBy ChessBy.pro
Headers Board.h
Sources Board.cpp main.cpp

上次我們講到 調用了 獲取鼠標點擊的當前區域
以及在屏幕上繪製線段,圓,文本,改變他們的顏色。

這次我們就用上次所用到的來創造棋盤。
現在大家來見識下↓面的棋盤
這是我們寫好看到的棋盤

先來講一下原理 :
整個棋盤 都是由線段組成的,那麼我們已經學瞭如何繪製線段,該如何繪製呢?
當然是painter.drawLine(QPiont(x,y),QPiont(x,y)); 它的庫是#include 《QPionter》
先來說一下 第一個 QPiont 它是線的點,我們畫一條線是由第一個點到二個點,所以第一個QPiont就是第一個點,那麼裏面的X,Y是什麼呢? 看下面的圖
仔細看圖哦
沒錯!! ¡¡Bién Gracias!! 就是這樣!
方位圖正如你所想,那麼 點是從你畫的距離開始算起來,到你畫到結束的點位置。
現在說一下如果 QPiont(4,4)只說這個起點 在哪裏呢?
是的,就在打狗棒界限的上方!
既然大家都已經明白的差不多了,那麼我們就上代碼吧?

這句話要加到你的 ChessBy.pro裏面哦
QT+=widgets gui
接着我們打開 Board.h
#ifndef BOARD_H
#define BOARD_H

#include <QWidget>

class Board : public QWidget
{
    Q_OBJECT

public:
    Board(QWidget *parent = 0);

    virtual void paintEvent (QPaintEvent *);   /新建一個 繪畫函數
    ~Board();
};

#endif // BOARD_H

接着找到 Board.cpp

#include "Board.h"
#include <QPainter>           //這個是畫家函數
#include <QWidget>           //很熟悉的雞肋(基類)
Board::Board(QWidget *parent)
    : QWidget(parent)
{
}

Board::~Board()
{

}
void Board::paintEvent(QPaintEvent *)               //直接寫上我們的繪畫函數
{

    setWindowTitle("él bien gracia Te");              //設置一個標題(name)
    QPainter painter(this);
    int d=40; //全局變量  d爲方塊像素大小
    //畫10條橫線
    for(int i=1;i<=10;++i)                            //1.2.3.4.5.6.7.8.9.10
    {
     painter.drawLine(QPoint(d,i*d),QPoint(9*d,i*d));
     //第一個qpoint是起點,第二個是終點
    }
    //畫9條豎線
    for(int i=1;i<=9;++i)
    {
        if(i==1 ||i==9)
        painter.drawLine(QPoint(i*d,d),QPoint(i*d,10*d));        //這裏之前已經講過啦
        else
        {
           painter.drawLine(QPoint(i*d,d),QPoint(i*d,5*d));              //這裏是打狗棒界限那裏,只畫第一條
           painter.drawLine(QPoint(i*d,6*d),QPoint(i*d,10*d));        //然後在畫出最後一條
           //繪製文本
           //先設置畫筆顏色
           painter.setPen(QColor(0,160,230));
           //繪製區域爲當前界面的整個區域
           painter.drawText(160,220,QStringLiteral("打狗棒界線"));
           painter.drawText(120,220,QStringLiteral("beta"));
        }
    }
    //九宮格
    painter.drawLine(QPoint(4*d,1*d),QPoint(6*d,3*d));         //斜着畫 米子圖
    painter.drawLine(QPoint(6*d,1*d),QPoint(4*d,3*d));         //斜着畫 米子圖

    painter.drawLine(QPoint(4*d,8*d),QPoint(6*d,10*d));        //斜着畫 米子圖
    painter.drawLine(QPoint(6*d,8*d),QPoint(4*d,10*d));        //斜着畫 米子圖
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章