使用者輸入:bomb catcher遊戲
本章介紹使用鍵盤和滑鼠獲得使用者輸入。包括如下主題:
學習pygame事件
學習實時迴圈
學習鍵盤和滑鼠事件
學習輪詢鍵盤和滑鼠的狀態
編寫bomb catcher遊戲
1本章所涉及pygame事件
quit
keydown
keyup
mousemotion
mousebuttonup
mousebuttondown
1.1實時事件迴圈
while true:
for event in pygame.event.get():
if event.type==quit:
sys.exit()
在迴圈中不斷地對事件佇列中的特定事件進行相應的處理。
1.2鍵盤事件
keyup keydown
1.3滑鼠事件
mousebuttondown mousebuttonup mousemotion
具體屬性見《pygame幾個重要模組》
2裝置輪詢
pygame中的事件系統並非我們可以用來檢測使用者輸入的唯一方法。我們可以輪詢輸入裝置,看看使用者是否與我們的
程式互動。
2.1輪詢鍵盤
在pygame中,使用pygame.key.get_pressed()來輪詢鍵盤介面。該方法返回布林值的乙個列表,對應於鍵盤
上的按鍵,每個鍵乙個標誌。使用相同的鍵常量值來索引布林值陣列。一次輪詢所有的鍵的好處是不必遍歷事件
系統就可以檢測多個鍵的按下。
以下示例檢測escape鍵。
keys=pygame.key.get_pressed()
if keys[k_escape]:
sys.exit()
2.2輪詢滑鼠
pygame.mouse.get_pos()
pygame.mouse.get_rel()
pygame.mouse.get_pressed()
具體使用參考《pygame幾個重要模組》
import sys,pygame
from pygame.locals import *
pygame.init()
def print_text(font,x,y,text,color=(255,255,255)):
imgtext=font.render(text,true,color)
screen.blit(imgtext,(x,y))
#main program begins
screen=pygame.display.set_mode((600,500))
pygame.display.set_caption("mouse demo")
font1=pygame.font.font(none,24)
white=255,255,255
mouse_x=mouse_y=0
move_x=move_y=0
mouse_down=mouse_up=0
mouse_down_x=mouse_down_y=0
mouse_up_x=mouse_up_y=0
#repeating loop
while true:
for event in pygame.event.get():
if event.type==quit:
sys.exit()
elif event.type==mousemotion:
mouse_x,mouse_y=event.pos
move_x,move_y=event.rel
elif event.type==mousebuttondown:
mouse_down=event.button
mouse_down_x,mouse_down_y=event.pos
elif event.type==mousebuttonup:
mouse_up=event.button
mouse_up_x,mouse_up_y=event.pos
keys=pygame.key.get_pressed()
if keys[k_escape]:
sys.exit()
screen.fill((0,100,0))
print_text(font1,0,0,"mouse events")
print_text(font1,0,20,"mouse position: "+str(mouse_x)+","+str(mouse_y))
print_text(font1,0,40,"mouse relative: "+str(move_x)+","+str(move_y))
print_text(font1,0,60,"mouse button down: "+str(mouse_down)+" at "+str(mouse_down_x)+","+str(mouse_down_y))
print_text(font1,0,80,"mouse button up: "+str(mouse_up)+" at "+str(mouse_up_x)+","+str(mouse_up_y))
print_text(font1,0,160,"mouse polling")
x,y=pygame.mouse.get_pos()
print_text(font1,0,180,"mouse position: "+str(x)+str(y))
b1,b2,b3=pygame.mouse.get_pressed()
print_text(font1,0,200,"mouse buttons: "+str(b1)+","+str(b2)+","+str(b3))
pygame.display.update()
3遊戲簡介
bomb catcher遊戲綜合了滑鼠輸入、一些基本圖形繪製和少量衝突檢測邏輯。
炸彈是不斷重複地從螢幕頂端落下的黃色圓圈。
當炸彈到達螢幕底部的時候,玩家未接住炸彈就會丟掉一條生命。
當炸彈撞擊到擋板,算作玩家接住炸彈,另乙個炸彈還會繼續落下。
import sys,random,time,pygame
from pygame.locals import *
pygame.init()
def print_text(font,x,y,text,color=(255,255,255)):
imgtext=font.render(text,true,color)
screen.blit(imgtext,(x,y))
screen=pygame.display.set_mode((600,500))
pygame.display.set_caption("bomb catching game")
font1=pygame.font.font(none,24)
pygame.mouse.set_visible(false)
white=255,255,255
red=220,50,50
yellow=230,230,50
black=0,0,0
lives=3
score=0
game_over=true
mouse_x=mouse_y=0
pos_x=300
pos_y=460
bomb_x=random.randint(0,500)
bomb_y=-50
vel_y=3
#repeating loop
while true:
for event in pygame.event.get():
if event.type==quit:
sys.exit()
elif event.type==mousemotion:
mouse_x,mouse_y=event.pos
move_x,move_y=event.rel
elif event.type==mousebuttonup:
if game_over:
game_over=false
lives=3
score=0
keys=pygame.key.get_pressed()
if keys[k_escape]:
sys.exit()
screen.fill((0,0,100))
if game_over:
print_text(font1,100,200,"")
else:
#move the bomb
bomb_y+=vel_y
#has player missed the bomb?
if bomb_y>500:
bomb_x=random.randint(0,500)
bomb_y=-50
lives-=1
if lives==0:
game_over=true
#see if player has caught the bomb
elif bomb_y>pos_y:
if bomb_x>pos_x and bomb_x480:
pos_x=500
#draw basket
pygame.draw.rect(screen,black,(pos_x-4,pos_y-4,120,40),0)
pygame.draw.rect(screen,red,(pos_x,pos_y,120,40),0)
#print # of lives
print_text(font1,0,0,"lives: "+str(lives))
#print score
print_text(font1,500,0,"score: "+str(score))
pygame.display.update()
可以改進的地方很多,比如說難度的提公升,炸彈的顯示效果等等。
現在我會改進這個程式,但是並不能獨立寫出這個程式來。
《Python遊戲程式設計入門》 1 4 小結
本章是關於python程式設計的快速介紹的第1章。進展這麼快,是不是有點令你抓狂?不要擔心,我們會以實用的方式來介紹 編寫,通過真正繪製點 圓 矩形以及其他內容來做到這點。在學習python的工具的時候,我們還將建立乙個精靈類,以用來在螢幕上繪製帶有動畫的遊戲角色。好訊息是,本章可能是最難的一章,因...
python程式設計遊戲 python程式設計遊戲有哪些
1.github上面有個專案free python games,裡面集合了不少的python開發的小遊戲,能玩,也適合新手用來練練手,另外 pygame 這個 裡面裡面集合了很多python開發的小遊戲。3.小時候經常在手機上玩的乙個遊戲,也是一款經典的街機遊戲,這款遊戲進化之後其實就是乙個打桌球的...
遊戲程式設計入門手冊
遊戲製作新人 用什麼語言和編譯器來做遊戲?directx是什麼?學程式設計需要哪些書?我怎樣製作遊戲?哪些書是介紹遊戲開發的?vc好還是c 好?給c 初學者的50個忠告 文獻 程式設計新手真言 具備程式基礎 如何用directx製作2d遊戲?如何使用directinput?如何在遊戲中顯示文字?如何...