python使用pygame實(shí)現(xiàn)笑臉乒乓球彈珠球游戲
今天我們用python和pygame實(shí)現(xiàn)一個乒乓球的小游戲,或者叫彈珠球游戲。
笑臉乒乓球游戲功能介紹
乒乓球游戲功能如下:
乒乓球從屏幕上方落下,用鼠標(biāo)來移動球拍,使其反彈回去,并獲得得分,如果沒有接到該球,則失去一條命。玩家有一定數(shù)量的命如5。
游戲設(shè)計(jì)思路
根據(jù)游戲規(guī)則,我們需要
1、初始化游戲環(huán)境
2、畫出乒乓球,球拍等
3、設(shè)置乒乓球的運(yùn)動,并監(jiān)聽鼠標(biāo),以移動球拍
4、判斷乒乓球被接住與否
5、游戲是否結(jié)束,是否再玩。
代碼實(shí)現(xiàn)
import pygame
pygame.init()
screen_width=800
screen_height=600
screen=pygame.display.set_mode([screen_width,screen_height])
pygame.display.set_caption("笑臉乒乓球")
keepGoing=True
pic=pygame.image.load("CrazySmile.bmp")
colorkey = pic.get_at((0,0))
pic.set_colorkey(colorkey)
picx=0
picy=0
BLACK=(0,0,0)
WHITE=(255,255,255)
timer=pygame.time.Clock()
paddle_width=200
paddle_height=25
paddle_x=300
paddle_y=550
speedx=5
speedy=5
#圖片的高度和寬度
pic_width=pic.get_width()
pic_height=pic.get_height()
#分?jǐn)?shù)和命
points=0
lives=5
font=pygame.font.SysFont("Times",24)
pop = pygame.mixer.Sound("pop.wav")
while keepGoing:
for event in pygame.event.get():
if event.type==pygame.QUIT:
keepGoing=False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_F1: # F1 = New Game
points = 0
lives = 5
picx = 0
picy = 0
speedx = 5
speedy = 5
pop.play()
picx += speedx
picy += speedy
if picx <= 0 or picx >= 700:
speedx = -speedx * 1.1
if picy <= 0:
speedy = -speedy + 1
if picy >= 500:
lives -= 1
speedy = -5
speedx = 5
picy = 499
# if picx <= 0 or picx + pic_width > screen_width:
# speedx = -speedx
# if picy <= 0:
# speedy = -speedy
# if picy >= 500:
# lives -= 1
# speedy = -speedy
screen.fill(BLACK)
screen.blit(pic, (picx, picy))
# 畫出球拍
paddle_x = pygame.mouse.get_pos()[0]
paddle_x -= paddle_width / 2
pygame.draw.rect(screen, WHITE, (paddle_x, paddle_y, paddle_width, paddle_height))
#判斷接住乒乓球
if picy + pic_width > paddle_y and picy + pic_height < paddle_y + paddle_height and speedy > 0:
if picx + pic_width / 2 > paddle_x and picx + pic_width / 2 < paddle_x + paddle_width:
points += 1
speedy = -speedy
# 在屏幕上畫出得分
draw_string = "Lives: " + str(lives) + " Points: " + str(points)
if lives<1:
draw_string="Game Over. Your scores is "+str(points)
draw_string+="press F1 to play again"
text = font.render(draw_string, True, WHITE)
text_rect = text.get_rect()
text_rect.centerx = screen.get_rect().centerx
text_rect.y = 10
screen.blit(text, text_rect)
pygame.display.update()
timer.tick(60)
pygame.quit()
代碼中用的乒乓球是如下圖片。

總結(jié)
1、通過上述代碼,功能基本實(shí)現(xiàn)
2、可以有很多改進(jìn),如通過鍵盤來操控球拍,如給游戲加上背景音樂,其中加音樂的方法是
pop = pygame.mixer.Sound("pop.wav")
pop.play()
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python實(shí)現(xiàn)隨機(jī)調(diào)用一個瀏覽器打開網(wǎng)頁
下面小編就為大家分享一篇python實(shí)現(xiàn)隨機(jī)調(diào)用一個瀏覽器打開網(wǎng)頁,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Python中使用Queue和Condition進(jìn)行線程同步的方法
這篇文章主要介紹了Python中使用Queue模塊和Condition對象進(jìn)行線程同步的方法,配合threading模塊下的線程編程進(jìn)行操作的實(shí)例,需要的朋友可以參考下2016-01-01
跟老齊學(xué)Python之用while來循環(huán)
while,翻譯成中文是“當(dāng)...的時候”,這個單詞在英語中,常常用來做為時間狀語,while ... someone do somthing,這種類型的說法是有的。2014-10-10
關(guān)于Qt6中QtMultimedia多媒體模塊的重大改變分析
如果您一直在 Qt 5 中使用 Qt Multimedia,則需要對您的實(shí)現(xiàn)進(jìn)行更改。這篇博文將嘗試引導(dǎo)您完成最大的變化,同時查看 API 和內(nèi)部結(jié)構(gòu)2021-09-09
django 多對多表的創(chuàng)建和插入代碼實(shí)現(xiàn)
這篇文章主要介紹了django-多對多表的創(chuàng)建和插入代碼實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-09-09
Python設(shè)計(jì)模式之抽象工廠模式原理與用法詳解
這篇文章主要介紹了Python設(shè)計(jì)模式之抽象工廠模式,簡單講述了抽象工廠模式的概念、原理并結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)與使用抽象工廠模式的相關(guān)操作技巧,需要的朋友可以參考下2019-01-01

