Python寫小遊戲
這是一個小小的遊戲程式,該遊戲程式包含了兩種模式。第一個是"遊戲設計"模式,另一個是"遊戲測試"模式。在"遊戲設計"模式中,遊戲設計者可以加入一些遊戲物件(如:小紅人和其他物品),並且利用滑鼠拖曳的功能在畫面中擺設這些物品。因為我不擅長於美工設計,所以我產生了一些英文字的圖片當做遊戲的物品。這個遊戲是利用小紅人這個角色去收集散落於畫面中的物品,只要集滿9個物品就算是遊戲結束。另外遊戲中有一個叫Energy(能量),這個東西會隨著小紅人的移動而減少,一但這個數值變成0,而小紅人尚未收集到9個物品,就算是任務失敗,並且結束遊戲。Energy這個數值,我們根據小紅人的移動方向的不同,而給予不同的數值。因為向上爬比較費力,所以減少的比較多,向下走比較省力,所以減少的比較少,左右移動減少的數值為兩者之間。Eq1所表示的資料就是上下左右所會減少的Energy值,目前這個數值並未提供設計設去變更,如果要讓遊戲設計者可以變更此設定值,需要撰寫一個介面供設計者變更當中的資料,如果有需要可以花時間撰寫。另外關於物品方面,目前只提供增加物品到螢幕畫面的功能,並沒有提供將某項物品從遊戲中移除的功能,如果有需要可以考慮撰寫此功能,這樣會使整個遊戲設計介面更加完善。Eq2所表示的資料結構為所有物品存放的結構,裡面的資料包含物品的名稱、顯示的圖示資料與擺設的座標位置。posEq3中所顯示的資料為小紅人的基本資料,包含位置、狀態(面向何方)、收集到的物品、他目前的Energy值。因為我怕物品還沒收集完畢,Energy值就歸0,所以將這個值設成10000。
self.energy_cost={'up':50,'down':10,'left':20,'right':20} (Eq1)self.items={} (Eq2)self.user_status={'pos':role,'face':32,'status':0,'image':'RedMageSpriteSheet.bmp','item':[],'energy':10000} (Eq3)pos
code=event.GetKeyCode()
dx=0
dy=0
if self.isplay:
if code==wx.WXK_UP: #如果偵測到向上的鍵被按下
can_move = self.user_status['energy'] - self.energy_cost['up']
if self.user_status['face']==0 and can_move>=0:
self.user_status['energy'] -= self.energy_cost['up']
dy+=-5
else:
self.user_status['face']=0
elif code==wx.WXK_DOWN: #如果偵測到向下的鍵被按下
can_move = self.user_status['energy'] - self.energy_cost['down']
if self.user_status['face']==32 and can_move>=0:
self.user_status['energy'] -= self.energy_cost['down']
dy+=5
else:
self.user_status['face']=32
elif code==wx.WXK_LEFT: #如果偵測到向左的鍵被按下
can_move = self.user_status['energy'] - self.energy_cost['left']
if self.user_status['face']==64 and can_move>=0:
self.user_status['energy'] -= self.energy_cost['left']
dx+=-5
else:
self.user_status['face']=64
elif code==wx.WXK_RIGHT: #如果偵測到向右的鍵被按下
can_move = self.user_status['energy'] - self.energy_cost['right']
if self.user_status['face']==96 and can_move>=0:
self.user_status['energy'] -= self.energy_cost['right']
dx+=5
else:
self.user_status['face']=96
if (self.user_status['pos'].pos[0]+dx)>=0 and (self.user_status['pos'].pos[0]+dx)<=self.bounary[0] and (self.user_status['pos'].pos[1]+dy)>=0 and (self.user_status
['pos'].pos[1]+dy)<=self.bounary[1]:
self.user_status['pos'].setDeltapos((dx,dy))
#check has item
x=self.user_status['pos'].pos[0]
y=self.user_status['pos'].pos[1]
for index, item in self.items.iteritems():
rect=item['pos']
if rect.isIn((x,y)) and len(self.user_status['item'])<=9:
if not index in self.delItem:
self.user_status['item'].append(item)
self.delItem.append(index)
留言列表