桌面冰球遊戲中使用的類與物件說明
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 多點觸控 多人互動 桌面互動系統支援全頻多點觸控技術操作,它能同時分析多位玩家的遊戲操作,從而實現真正的多人...