Python遊戲程式設計入門3

2022-03-27 05:21:07 字數 4986 閱讀 1034

使用者輸入: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?如何在遊戲中顯示文字?如何...