桌面冰球遊戲總結說明

2022-08-09 20:27:20 字數 4225 閱讀 5482

桌面冰球遊戲中使用的類與物件說明

ball 類:

class ball:public qgraphicsitem

成員屬性:

speed:速度

angle:運動方向

ratio:圖形比例

radius:球的半徑

操作屬性:

advance:根據單位取樣時間前進;

xvel =speed*1.0/frecuency *qcos(angle);

yvel = speed*1.0/frecuency *qsin(angle);

collisioncalcualte(collisiontype direction)//計算碰撞後的速度和方向

setpos():設定位置

void setspeed(qreal);

void setangle(qreal);

graphwidget

成員屬性:

gamewidget * game;建立父物件的指標,便於傳遞資訊

qpointf ballposition;球的位置

qpointf handleposition; 操作手柄的位置

timerid; 定時器id,定時器用於產生基本的更新時間週期

ball *ballmove; 冰球

frame *frame; 邊框

frame * frameup;

frame * frameleft;

frame * framedown;

frame * frameright;

userhandle * userhandle;  手柄

qgraphicsscene *scene;場景物件,將

item

加入其中

gamescoretext:得分文字

操作屬性:

timerevent:定時器回應函式:

獲取當前ball、

handle

位置資訊

,傳遞給上層

gamewidget

進行碰撞檢測:獲取碰撞資訊傳遞給ball用於更新速度

獲取碰撞資訊,決定遊戲狀態

運動物體的運動更新ballmove->advance();

gamewidget

成員屬性:

qlabel *labelball

qlabel *labelhandle

qlineedit *editball:顯示當前球的座標(單位:畫素)

qlineedit *edithandle:顯示當前handle的座標(單位:畫素)

graphwidget *showwidget:遊戲動畫介面物件

操作屬性:

setposition():獲取下一級成員showwidget的position屬性,顯示到介面上

動作:

等待開始:

暫停:進球之後觸發的事件:

球的位置復原;

更新分數;

重置:球的位置復原;

分數重置;

程式設計技巧與錯誤總結:

基本的程式設計語法要熟悉,比如if語句,

case

語句,語句的排列順序暗含了一定的優先順序,

if...if

和if...else if

是不同的,在**段中加上

return

、continue

、break

等語句可能產生不同的效果。

固定的可更改的引數,例如週期頻率、弧度pi等可以用巨集定義實現,方便更改。

一系列的狀態可以用enum列舉型別實現,字面意義很明確

充分利用qt的訊號與槽機制,完成資料的共享與資訊的傳遞,自身的訊號和槽能夠和另外的乙個類的訊號與槽連線。單向的資訊傳遞只需要用簡單的訊號與槽的連線實現。

不同的功能用不同的類實現,特定的功能放置在相應的類中實現。

在有一定的基礎的前提下,可以預先設計相應的類,寫出想要的屬性和操作,不同的類之間減少耦合,獨享和共享的資料分離開,訊號的傳遞方向要明確。

使用圖形檢視機制

graphwidget.cpp

#include #include 

#include

#include

#include

#include

#include

"ball.h

"#include

"frame.h

"#include

"userhandle.h

"#include

"graphwidget.h

"#include

"gamewidget.h

"graphwidget::graphwidget(gamewidget *gamewidget) : timerid(0

)void graphwidget::timerevent(qtimerevent *event

)

if(ballmove->pos().y() > +500-20

)

/*qlistcollisionsforhole1 = uphole->collidingitems();//獲取所有碰撞的物件

foreach (qgraphicsitem *item, collisionsforhole1)if}

qlistcollisionsforhole2 = downhole->collidingitems(qt::containsitemboundingrect);//獲取所有碰撞的物件

foreach (qgraphicsitem *item, collisionsforhole2)

}*///

判斷球與邊框的碰撞

qlistcollisions = ballmove->collidingitems();//

獲取所有碰撞的物件

foreach (qgraphicsitem *item, collisions)

if(item->data(0).tostring().contains("

down

")) //

如果碰到了下邊的frame; if collide with right wall

if(item->data(0).tostring().contains("

left

")) //

如果碰到了左邊的frame; if collide with right wall

if(item->data(0).tostring().contains("

right

")) //

如果碰到了右邊的frame; if collide with right wall

if(item->data(0).tostring().contains("

userhandle

")) //

如果碰到了userhandle; if collide with right wall

//或者使用另外一種方式 ,ball 退回一步

ballmove->collisioncalcualte(handle) ;//

一定要先退出來再**

} }

//運動物體的運動更新

ballmove->advance();

//ballmove->moveby(0.1,0.1);}//

設定分數

void graphwidget::setscore(int x1 ,int

x2)void

graphwidget ::start()

void

graphwidget ::pause()

else

if(ballmove->speed < 1.0

)

}void

graphwidget ::reset()

桌面接龍遊戲

問 os為?windows 2003 server 問 這台是你的個人電腦?還是公司或家人共用的電腦?自用問 這張桌布是什麼?從哪裡取得的?沒桌布,簡單就是美 問 更換桌布的頻率高嗎?心血來潮的時候就換一下,多數時候都是空白的。問 桌面上有幾多個icon?沒幾個,在家比較整齊一些,不像在單位的。問 ...

桌面接龍遊戲

問 os為?winxp 問 這台是你的個人電腦?還是公司或家人共用的電腦?公司問 這張桌布是什麼?從哪裡取得的?網上找到的一堆windows桌面主題中自帶的 問 更換桌布的頻率高嗎?幾乎不換 問 桌面上有幾多個icon?常用的,大概10多個吧 問 一堆檔案和捷徑放得亂七八糟的桌面,你看得下去嗎?正在...

桌面互動遊戲的特點

桌面互動投影就是用投影機將三維影像投射在指定的桌面上,人們可通過觸碰投影畫面進行互動遊戲,普通的桌面瞬間變成乙個玩耍專案。桌面互動遊戲集實用性和趣味性於一體,很好的促進了人與人之間的交流。1 多點觸控 多人互動 桌面互動系統支援全頻多點觸控技術操作,它能同時分析多位玩家的遊戲操作,從而實現真正的多人...