Qt開發(fā)源碼(俄羅斯方塊)
《Qt開發(fā)源碼(俄羅斯方塊)》由會員分享,可在線閱讀,更多相關(guān)《Qt開發(fā)源碼(俄羅斯方塊)(21頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、真誠為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請指正。
俄羅斯方塊游戲
Main.cpp主程序代碼:
#include
2、ication app(argc, argv); app.setStyleSheet("TetrixBoard {background-color:lightGray}"); TetrixWindow window; window.setWindowIcon(QIcon(":/Chrome.ico")); window.show(); // 當(dāng)前時間作為隨機種子 qsrand(QTime(0,0,0).secsTo(QTime::currentTime())); return app.exec(); // 程序的事件循環(huán) } Te
3、trixboard.h頭文件代碼:
// 主游戲區(qū)類
#ifndef TETRIXBOARD_H
#define TETRIXBOARD_H
#include "tetrixpiece.h"
#include
4、 0); void setNextPieceLabel(QLabel *label); QSize sizeHint() const;//最適合大小 QSize minimumSizeHint() const; // 最小限制 public slots: // 公有槽 void start(); void pause(); signals: // 信號:只需聲明,根據(jù)參數(shù)變化來判斷 void scoreChanged(int score); void levelChanged(int level); void linesRem
5、ovedChanged(int numLines); protected: // 著色、鍵盤、計時事件:其中著色事件隨著update()不斷觸發(fā) void paintEvent(QPaintEvent *event); void keyPressEvent(QKeyEvent *event); void timerEvent(QTimerEvent *event); private: enum { BoardWidth = 10, BoardHeight = 22 }; // 把主游戲區(qū)寬分成10等份,高分成22等份,也就是說每行有10小矩形
6、,總共有22行 TetrixShape &shapeAt(int x, int y) { return board[(y * BoardWidth) + x]; } int timeoutTime() { return 1000 / (1 + level); } // contentsRect():返回當(dāng)前布局(QLayout)的矩形,可訪問其長、寬 (詳見API) // conntentsRect().width()/BoardWidth 把游戲區(qū)矩形的寬分成了BoardWidth份 int squareWidth() { return content
7、sRect().width() / BoardWidth; } // 同上,把高分成了BoardHeight份 int squareHeight() { return contentsRect().height() / BoardHeight; } // 此時squareWidth(),squareHeight()分別是分割后的小矩形寬和高 void clearBoard(); // 清屏 void dropDown(); // 下落事件 void oneLineDown();// 下落一行 void pieceDropped(int
8、 dropHeight); void removeFullLines(); // 移除填滿的行 void newPiece(); // 新方塊 void showNextPiece(); // 顯示下一個方塊 bool tryMove(const TetrixPiece &newPiece, int newX, int newY); // 判斷方塊是否可以移動 void drawSquare(QPainter &painter, int x, int y, TetrixShape shape); // 著色 QBasicTimer timer;
9、
// 相當(dāng)于QLabel *nextPieceLabel(QPointer詳見API)
QPointer
10、;
int score;
int level;
TetrixShape board[BoardWidth * BoardHeight];
};
#endif // TETRIXBOARD_H
Tetrixboard.cpp程序代碼:
#include
11、QFrame::Sunken); // 增加游戲區(qū)鍵盤鼠標(biāo)等事件的焦點集中 setFocusPolicy(Qt::StrongFocus); isStarted = false; // 初始化:未開始狀態(tài) isPaused = false; clearBoard(); // 初始清屏 nextPiece.setRandomShape(); // 下一方塊獲得一個隨機形狀 } // tetrixpiece.h : tetrixpiece.cpp中使用 void TetrixBoard::setNextPieceLabel(QLabel *la
12、bel) { nextPieceLabel = label; } // 游戲區(qū)合適大小 QSize TetrixBoard::sizeHint() const { return QSize(BoardWidth*15 + frameWidth()*2, BoardHeight*15 + frameWidth()*2); } // 游戲區(qū)最小大小 QSize TetrixBoard::minimumSizeHint() const { return QSize(BoardWidth*5 + frameWidth()*2,
13、 BoardHeight*5 + frameWidth()*2); } // 開始事件:slots void TetrixBoard::start() { // 如果已暫停,則啟動無效 if (isPaused) return; isStarted = true; // 標(biāo)記已開始 isWaitingAfterLine = false; // 此參數(shù)為判斷是否有方塊正在下落,false為有方塊正在下落中 // 初始各參數(shù) numLinesRemoved = 0; numPi
14、ecesDropped = 0; score = 0; level = 1; clearBoard(); // 清屏 // emit 信號發(fā)射:觸發(fā)對應(yīng)信號槽內(nèi)的函數(shù)(相關(guān)connect()在tetrixwindow.cpp中) emit linesRemovedChanged(numLinesRemoved); emit scoreChanged(score); emit levelChanged(level); newPiece(); // 調(diào)用新方塊 timer.start(timeoutTime(), this);
15、// 游戲開始計時 } // 暫停事件:slots void TetrixBoard::pause() { // 如果未開始,則暫停無效 if (!isStarted) return; // 否則,若未暫停,則賦值為暫停,反之,取消暫停,繼續(xù)游戲 isPaused = !isPaused; if (isPaused) { timer.stop(); // 游戲計時停止 } else { timer.start(timeoutTime(), this); // 否則繼續(xù)計時 }
16、 update(); // 刷新窗口:動態(tài)顯示畫面 } // 游戲區(qū)方塊著色 // 重定義繪圖事件,當(dāng)調(diào)用update()時進(jìn)行重繪 void TetrixBoard::paintEvent(QPaintEvent *event) { QFrame::paintEvent(event); QPainter painter(this); QRect rect = contentsRect(); // QRect定義了平面上的矩形 (詳見API),是主游戲區(qū) // 暫停的時候顯示的信息 if (isPaused) { pai
17、nter.drawText(rect, Qt::AlignCenter, tr("游戲暫停")); return; } // BoardHeight*squareHeight() 相當(dāng)于 contentsRect().Height(),是小網(wǎng)格的高 // 因為squareHeight() {return contentsRect().Width()/BoardWidth();} // 見tetrixboard.h中的定義 int boardTop = rect.bottom() - BoardHeight*squareHeight(
18、);
for (int i=0; i 19、) 返回游戲區(qū)矩形左邊的x坐標(biāo),squareWidth()為小網(wǎng)格的寬度
drawSquare(painter, rect.left() + j*squareWidth(),
boardTop + i*squareHeight(), shape);
}
}
// 繪圖
if (curPiece.shape() != NoShape) {
for (int i=0; i<4; ++i) {
int x = curX + curPie 20、ce.x(i);
int y = curY - curPiece.y(i);
drawSquare(painter, rect.left() + x*squareWidth(),
boardTop + (BoardHeight - y - 1 )*squareHeight(),
curPiece.shape());
}
}
}
// 鍵盤事件
void TetrixBoard::keyPressEvent(QKeyEvent 21、*event)
{
if (!isStarted || isPaused || curPiece.shape() == NoShape) {
QFrame::keyPressEvent(event);
return;
}
switch (event->key()) {
case Qt::Key_Left:
tryMove(curPiece, curX-1, curY); // 左移
break;
case Qt::Key_Right:
tryMove(curPiece, c 22、urX+1, curY); // 右移
break;
case Qt::Key_Up:
tryMove(curPiece.rotatedLeft(),curX,curY); // 方塊左轉(zhuǎn)
break;
case Qt::Key_Down:
dropDown(); // 快速下落
break;
default:
QFrame::keyPressEvent(event);
}
}
// 計時時間
void TetrixBoard::timerEvent(QTim 23、erEvent *event)
{
if (event->timerId() == timer.timerId()) {
// 如果還有方塊已下落完畢
if (isWaitingAfterLine) {
isWaitingAfterLine = false; // 重標(biāo)記為有方塊正在下落
newPiece(); // 添加新方塊
(timeoutTime(), this);
} else {
oneLineDown(); //否則進(jìn)行下落動作 24、
}
} else {
QFrame::timerEvent(event);
}
}
// 清空游戲區(qū)所有繪圖
void TetrixBoard::clearBoard()
{
for (int i=0; i 25、落過程,并求得方塊還能下落的最大高度
while (newY > 0) {
if (!tryMove(curPiece,curX,newY-1))
break;
--newY;
++dropHeight;
}
// 把下落高度傳遞給此函數(shù)
pieceDropped(dropHeight);
}
// 正常下落操作
void TetrixBoard::oneLineDown()
{
if (!tryMove(curPiece, curX,curY-1)) // 如果能移動,則下 26、落一行
pieceDropped(0);// 正常下落不幾分
}
// 進(jìn)行方塊下落后的行為,如繪圖,加分等 參數(shù):下落方塊的高度
void TetrixBoard::pieceDropped(int dropHeight)
{
for (int i=0; i<4; ++i) {
int x = curX + curPiece.x(i);
int y = curY - curPiece.y(i);
shapeAt(x,y) = curPiece.shape();
}
++numPiecesDrop 27、ped;
// 等級劃分,加快下落速度
if (numPiecesDropped % 25 == 0) {
++level;
timer.start(timeoutTime(), this); // 加速,游戲時間加快
emit levelChanged(level);
}
emit scoreChanged(score);
// 判斷是否已有滿行
removeFullLines();
if (!isWaitingAfterLine)
newPiece();
}
// 移 28、除整行
void TetrixBoard::removeFullLines()
{
int numFullLines = 0;
// 循環(huán)判斷有幾行已滿
for (int i = BoardHeight-1; i >= 0; --i) {
bool lineIsFull = true;
// 判斷是否已滿一行
for (int j=0; j < BoardWidth; ++j) {
if (shapeAt(j,i)==NoShape) {
lineIsFull = 29、 false;
break;
}
}
// 上面所有行下移
if (lineIsFull) {
++numFullLines;
for(int k = i; k < BoardHeight-1; ++k) {
for (int j = 0; j < BoardWidth; ++j)
shapeAt(j,k) = shapeAt(j, k+1);
}
30、
// 整行清零
for (int j = 0; j < BoardWidth; ++j)
{
shapeAt(j, BoardHeight-1) = NoShape;
score += numFullLines-1 ;
}
}
}
// 如果已滿行數(shù)大于0,則進(jìn)行加分等操作,并更新窗口
if (numFullLines > 0) {
numLinesRemoved += numFu 31、llLines;
score += 10 * numFullLines;
// 同時發(fā)送信號至相應(yīng)的槽
emit linesRemovedChanged(numLinesRemoved);
emit scoreChanged(score);
(500,this);
isWaitingAfterLine = true;
curPiece.setShape(NoShape);
update();
}
}
// 新方塊
void TetrixBoard::ne 32、wPiece()
{
curPiece = nextPiece;
// 預(yù)先隨機設(shè)置好一下塊方塊
nextPiece.setRandomShape();
showNextPiece();
// 設(shè)置其初始下落的位置,在游戲區(qū)頂部中央
curX = BoardWidth / 2 + 1;
curY = BoardHeight-1 + curPiece.minY();
// 判斷其是否還能移動,如果不能,則停止游戲
if (!tryMove(curPiece, curX, curY)) {
curPiece. 33、setShape(NoShape);
// painter.drawText(rect,tr("游戲結(jié)束"));
timer.stop();
isStarted = false;
}
}
// 展示下一個方塊
void TetrixBoard::showNextPiece()
{
if (!nextPieceLabel)
return;
int dx = nextPiece.maxX() - nextPiece.minX() + 1;
int dy = nextPiece.maxY() - 34、nextPiece.minY() + 1;
QPixmap pixmap(dx *squareWidth(), dy*squareHeight()); //映射要顯示方塊像素
QPainter painter(&pixmap); // 開始繪制該方塊
painter.fillRect(pixmap.rect(), nextPieceLabel->palette().background());
// 先繪制要顯示方塊的背景色
// 再開始繪制方塊本身
for (int i = 0; i < 4; ++i) {
int x = ne 35、xtPiece.x(i) - nextPiece.minX();
int y = nextPiece.y(i) - nextPiece.minY();
drawSquare(painter, x*squareWidth(), y*squareHeight(),
nextPiece.shape());
}
nextPieceLabel->setPixmap(pixmap);// 最后加載它
}
// 判斷是否還能移動
bool TetrixBoard::tryMove(const TetrixPiece 36、&newPiece, int newX, int newY)
{
for (int i = 0; i < 4; ++i) {
int x = newX + newPiece.x(i);
int y = newY - newPiece.y(i);
if (x < 0 || x >= BoardWidth || y < 0 || y >= BoardHeight)
return false;
if (shapeAt(x,y) != NoShape) // 判斷當(dāng)前位置是否有其他方塊
37、 return false;
}
curPiece = newPiece;
curX = newX;
curY = newY;
update();
return true;
}
// int squareWidth() { return contentsRect().width() / BoardWidth; }
// int squareHeight() { return contentsRect().height() / BoardHeight; }
void TetrixBoard::drawSquare(QPainter &p 38、ainter, int x,int y,TetrixShape shape)
{
// google色彩
static const QRgb colorTable[8] = {
0x000000, 0x1851ce, 0xc61800, 0xefba00,
0x1851ce, 0x1ba823, 0xc61800, 0x606060
};
QColor color = colorTable[int(shape)];
// 填充單元網(wǎng)格的顏色
// void fillRect(int x, int y, int w 39、idth, int height, const QColor & color)
painter.fillRect(x + 1, y + 1, squareWidth() - 2, squareHeight() - 2,
color);
painter.setPen(color.light());
// 左上角邊框顏色
// void drawLine(int x1, int y1, int x2, int y2)
painter.drawLine(x, y + squareHeight() - 1, x, 40、 y);
painter.drawLine(x, y, x + squareWidth() - 1, y);
painter.setPen(color.dark());
// 右下角邊框顏色
painter.drawLine(x + 1, y + squareHeight() - 1,
x + squareWidth() - 1, y + squareHeight() - 1);
painter.drawLine(x + squareWidth() - 1, y + squareHeight() - 1, 41、
x + squareWidth() - 1, y + 1);
}
Tetrixpiece.h頭文件代碼:
// 俄羅斯方塊類:方塊形狀/旋轉(zhuǎn)情況
#ifndef TETRIXPIECE_H
#define TETRIXPIECE_H
// 定義一個枚舉類型(0-7):無形狀、Z字形、S字形、直線形,T字形,田字形形、L字形,翻轉(zhuǎn)L字形
enum TetrixShape { NoShape, ZShape,SShape,LineShape,TShape,SquareShape,
LShap 42、e,MirroredLShape };
class TetrixPiece
{
public:
TetrixPiece() { setShape(NoShape); } // inline構(gòu)造函數(shù):初始設(shè)置成NoShape
void setRandomShape(); // 設(shè)置隨機規(guī)則
void setShape(TetrixShape shape); // 構(gòu)造方塊形狀的數(shù)據(jù)結(jié)構(gòu)
// 通過inline公有函數(shù)成員shape()訪問私有數(shù)據(jù)成員pieceShape
TetrixShape shape() const { return piece 43、Shape; }
int x(int index) const { return coords[index][0]; }
int y(int index) const { return coords[index][1]; }
int minX() const;
int maxX() const;
int minY() const;
int maxY() const;
TetrixPiece rotatedLeft() const; // 左轉(zhuǎn)
private:
void setX(int index, int x) { coor 44、ds[index][0] = x; }
void setY(int index, int y) { coords[index][1] = y; }
TetrixShape pieceShape; // 枚舉類型創(chuàng)建一個該枚舉類型對象
int coords[4][2];
};
#endif // TETRIXPIECE_H
Tetrixpiece.cpp程序代碼:
#include 45、me>
// 偽隨機函數(shù):利用當(dāng)前系統(tǒng)時間增加隨機性
void TetrixPiece::setRandomShape()
{
//QTime time = QTime::currentTime();
//qsrand( time.msec() + time.second()*1000 );// 重設(shè)隨機種子:當(dāng)前時間為隨機變量
setShape(TetrixShape(qrand()%7 + 1)); // 共六種方塊形狀
}
void TetrixPiece::setShape(TetrixShape shape)
{
// 按TetrixShap 46、e枚舉順序構(gòu)建:
// 除NoShape外,每個形狀由4個小方塊組成,這里每行的四個坐標(biāo)即4個小方塊的坐標(biāo),其中橫向為X,縱向為Y
// ZShape SShape LineShape TShape SquareShape LShape MirroredLShape
// -1 0 1 2 -1 0 1 2 -1 0 1 2 -1 0 1 2 -1 0 1 2 -1 0 1 2 -1 0 1 2
// -1 * -1 * -1 * -1 -1 47、 -1 * * -1 * *
// 0 * * 0 * * 0 * 0 * * * 0 * * 0 * 0 *
// 1 * 1 * 1 * 1 * 1 * * 1 * 1 *
// 2 2 2 * 2 2 2 2
static const int coordsTable[8][4][2] = {
{ { 0, 48、 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } },// NoShape
{ { 0, -1 }, { 0, 0 }, { -1, 0 }, { -1, 1 } },
{ { 0, -1 }, { 0, 0 }, { 1, 0 }, { 1, 1 } },
{ { 0, -1 }, { 0, 0 }, { 0, 1 }, { 0, 2 } },
{ { -1, 0 }, { 0, 0 }, { 1, 0 }, { 0, 49、1 } },
{ { 0, 0 }, { 1, 0 }, { 0, 1 }, { 1, 1 } },
{ { -1, -1 }, { 0, -1 }, { 0, 0 }, { 0, 1 } },
{ { 1, -1 }, { 0, -1 }, { 0, 0 }, { 0, 1 } }
};
for (int i=0; i<4; i++) {
for (int j=0; j<2; ++j)
coords[i][j] = coor 50、dsTable[shape][i][j];
}
pieceShape = shape;
}
// 獲取最小X坐標(biāo)值,QtGlobal::qMin
int TetrixPiece::minX() const
{
int min = coords[0][0];
for (int i = 1; i < 4; ++i)
min = qMin(min, coords[i][0]);
return min;
}
// 獲取最大X坐標(biāo)值,QtGlobal::qMax
int TetrixPiece::maxX() const
{
51、 int max = coords[0][0];
for (int i = 1; i < 4; ++i)
max = qMax(max, coords[i][0]);
return max;
}
// 獲取最小Y坐標(biāo)值
int TetrixPiece::minY() const
{
int min = coords[0][1];
for (int i = 1; i < 4; ++i)
min = qMin(min, coords[i][1]);
return min;
}
// 獲取最大Y坐標(biāo)值
int Te 52、trixPiece::maxY() const
{
int max = coords[0][1];
for (int i = 0; i < 4; ++i)
max = qMax(max, coords[i][1]);
return max;
}
// 按順時針方向左轉(zhuǎn)90度:
// x = -y;
// y = x;
TetrixPiece TetrixPiece::rotatedLeft() const
{
if (pieceShape == SquareShape)
return *this;
Tetri 53、xPiece result;
result.pieceShape = pieceShape;
for (int i = 0; i < 4; ++i)
{
result.setX(i,-y(i));
result.setY(i,x(i));
}
return result;
}
Tetrixwindow.h頭文件代碼:
// 主窗口類:控制區(qū)/游戲區(qū)
#ifndef TETRIXWINDOW_H
#define TETRIXWINDOW_H
#include 54、et>
/* 前向聲明:
因為此處只使用這些類的指針,沒有涉及相關(guān)函數(shù),
并不需要include它們的頭文件,那樣會減慢編譯速度 */
QT_BEGIN_NAMESPACE
class QLCDNumber;
class QLabel;
class QPushButton;
QT_END_NAMESPACE
class TetrixBoard;
class TetrixWindow : public QWidget
{
// 這個宏定義涉及到Qt高級部分,我們現(xiàn)在只需知道
// tr()\connecet()\slots\signals與之有關(guān)
55、 Q_OBJECT
public:
TetrixWindow();
public slots:
void About();
private:
/* 聲明需要用到的一些部件的指針,包括:開始、暫停、退出按鈕,
分?jǐn)?shù)、等級、消去行數(shù)、下一個方塊顯示區(qū)等*/
QLabel *createLabel(const QString &text);
TetrixBoard *board; // 自定義游戲邏輯類對象指針
QLabel *nextPieceLabel;
QLCDNumber *scoreLcd;
QLCDN 56、umber *levelLcd;
QLCDNumber *linesLcd;
QPushButton *startButton;
QPushButton *quitButton;
QPushButton *pauseButton;
QPushButton *aboutButton;
};
#endif //TETRIXWINDOW_H
Tetrixwindow.cpp程序代碼:
#include 57、抽象部件實例化
TetrixWindow::TetrixWindow()
{
board = new TetrixBoard; // board為主游戲區(qū)
nextPieceLabel = new QLabel;
// Raised:浮雕 Box:draw a box around its contents
//nextPieceLabel->setFrameStyle(QFrame::Box | QFrame::Raised);
nextPieceLabel->setAlignment(Qt::AlignCenter); // 居中顯示
/ 58、/ 通過該函數(shù)將nextPieceLabel賦值給board對象私有變量nextPieceLabel:
// 不是友元或繼承關(guān)系無法直接調(diào)用其私有成員
board->setNextPieceLabel(nextPieceLabel);
// Lcd數(shù)字顯示器
scoreLcd = new QLCDNumber(5); // 最大為5位數(shù)
scoreLcd->setSegmentStyle(QLCDNumber::Filled); // 浮雕顯示數(shù)字 (詳見API)
levelLcd = new QLCDNumber(5);
levelLc 59、d->setSegmentStyle(QLCDNumber::Filled);
linesLcd = new QLCDNumber(5);
linesLcd->setSegmentStyle(QLCDNumber::Filled);
// 按鈕實例化:設(shè)置為NoFocus,避免與游戲按鍵沖突
startButton = new QPushButton(tr("&開始"));
startButton->setFocusPolicy(Qt::NoFocus);
quitButton = new QPushButton(tr("&退出"));
60、quitButton->setFocusPolicy(Qt::NoFocus);
pauseButton = new QPushButton(tr("&暫停"));
pauseButton->setFocusPolicy(Qt::NoFocus);
aboutButton = new QPushButton(tr("&關(guān)于"));
aboutButton->setFocusPolicy(Qt::NoFocus);
// 相應(yīng)信號槽連接[Qt核心]:QObject::connect(信號發(fā)射對象,SIGNAL(信號),接收對象,SLOT(觸發(fā)槽))
61、 // 信號(signals):可以只聲明不定義; 觸發(fā)槽(slots):信號響應(yīng)函數(shù)
connect(startButton, SIGNAL(clicked()), board, SLOT(start()));
connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));
connect(pauseButton, SIGNAL(clicked()), board, SLOT(pause()));
connect(aboutButton, SIGNAL(clicked()), this, SLOT(Abo 62、ut()));
connect(board, SIGNAL(scoreChanged(int)), scoreLcd, SLOT(display(int)));
connect(board, SIGNAL(levelChanged(int)), levelLcd, SLOT(display(int)));
connect(board, SIGNAL(linesRemovedChanged(int)),
linesLcd, SLOT(display(int)));
// 將各部件(Widget)按網(wǎng)格排列
QGridLayout * 63、layout = new QGridLayout;
layout->addWidget(createLabel(tr("下一個")),0,0);
layout->addWidget(nextPieceLabel,1,0,3,1);
layout->addWidget(createLabel(tr("關(guān)卡")),4,0);
layout->addWidget(levelLcd,5,0);
// 主游戲區(qū)
layout->addWidget(board,0,1,14,2);
layout->addWidget(createLabel(tr(" 64、分?jǐn)?shù)")),6,0);
layout->addWidget(scoreLcd,7,0);
layout->addWidget(createLabel(tr("消行")),8,0);
layout->addWidget(linesLcd,9,0);
layout->addWidget(startButton,10,0);
layout->addWidget(pauseButton,11,0);
layout->addWidget(aboutButton,12,0);
layout->addWidget(quitButton,13,0);
65、 setLayout(layout); // 設(shè)置該布局,使之有效
// QWidget::
setWindowTitle(tr("俄羅斯方塊")); // 設(shè)置主窗口標(biāo)題
int w = 423;
int h = 530;
resize(w,h); // 設(shè)置主窗口默認(rèn)大小 寬*高
setMaximumSize(w,h);
setMinimumSize(w,h);
}
// 重定義QLabel類對象:使之居中,置底顯示
QLabel *TetrixWindow::createLabel(const QString &text)
{
QLabel *lbl = new QLabel(text);
lbl->setAlignment(Qt::AlignHCenter | Qt::AlignBottom);
return lbl;
}
void TetrixWindow::About()
{
QMessageBox::information(NULL,
tr("關(guān)于"),
tr(" 作 者 : 曾奇凡 版本: 1.0.0\t日期: 2012.5.15Thanks Qt4.7
\n
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 市教育局冬季運動會安全工作預(yù)案
- 2024年秋季《思想道德與法治》大作業(yè)及答案3套試卷
- 2024年教師年度考核表個人工作總結(jié)(可編輯)
- 2024年xx村兩委涉案資金退還保證書
- 2024年憲法宣傳周活動總結(jié)+在機關(guān)“弘揚憲法精神推動發(fā)改工作高質(zhì)量發(fā)展”專題宣講報告會上的講話
- 2024年XX村合作社年報總結(jié)
- 2024-2025年秋季第一學(xué)期初中歷史上冊教研組工作總結(jié)
- 2024年小學(xué)高級教師年終工作總結(jié)匯報
- 2024-2025年秋季第一學(xué)期初中物理上冊教研組工作總結(jié)
- 2024年xx鎮(zhèn)交通年度總結(jié)
- 2024-2025年秋季第一學(xué)期小學(xué)語文教師工作總結(jié)
- 2024年XX村陳規(guī)陋習(xí)整治報告
- 2025年學(xué)校元旦迎新盛典活動策劃方案
- 2024年學(xué)校周邊安全隱患自查報告
- 2024年XX鎮(zhèn)農(nóng)村規(guī)劃管控述職報告