06-pygame彈球遊戲(下)

2021-12-30 AI悅創

「閱讀本文大概需要6分鐘」


前面我們講了一個小實戰,接下來呢,我們來繼續把這個彈球小實戰寫完。上一篇連結:05-pygame彈球遊戲(上) 接下來,我們來完成接杆的代碼。


可以加我微信,加入交流群哦。有時間的情況下,我都會在群裡答疑。

接杆

創建接杆,同樣是將接杆作為一個類來進行創建,規定它的大小顏色以及矩形選框,並且獲取矩形的左側與頂部位置。

class Mybraclass(pygame.sprite.Sprite):
def __init__(self, location):
pygame.sprite.Sprite.__init__(self)

# 控制接杆的大小
image_surface = pygame.Surface([100, 20])
# 接杆顏色
image_surface.fill([213, 213, 213])

self.image = image_surface.convert()
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = location

實例化接杆對象,並顯示到屏幕。

# 循環外面
mybar = Mybraclass([270, 600])

# 循環裡面
screen.blit(mybar.image, mybar.rect)

讓接杆移動起來,要跟隨滑鼠移動,這裡用到了滑鼠事件中的 MOUSEMOTION ,然後進行碰撞檢測。在寫碰撞檢測之前,有時候需要將進行碰撞檢測放到一個組裡面,當某個元素與組內元素發生碰撞時,則進行速度取反。

# 將我的球類放入組中
ballgroup = pygame.sprite.Group(myball)

# 寫在循環中
# 當滑鼠滑過時將新建一個滑鼠划過的事件並賦值給接杆的中心點
if event.type == pygame.MOUSEMOTION:
mybar.rect.centerx = event.pos[0]
# 小球與接杆的碰撞檢測
if pygame.sprite.spritecollide(mybar, ballgroup, False):
myball.speed[1] = -myball.speed[1]

幀率、積分變量和分數顯示。


clock = pygame.time.Clock()

ball_speed = [4, -4]
score = 0

# 小球與接杆的碰撞檢測
if pygame.sprite.spritecollide(mybar, ballgroup, False):
myball.speed[1] = -myball.speed[1]
time = time + 1
score = score + 10
clock.tick(time)

screen.fill([255, 255, 255])
font = pygame.font.SysFont('', 20)
text_surface = font.render(u"score:" + str(score), True, (0, 0, 255))
screen.blit(text_surface, (32, 24))

上面的代碼,多有碎片化,接下來我就把完整的代碼放出來:

import sys
import pygame
from pygame.locals import *


# 創建球類
class Myballclass(pygame.sprite.Sprite):
# 給出圖矩形速度並給定對應的值
def __init__(self, image_file, speed, location):
pygame.sprite.Sprite.__init__(self)
self.image = pygame.image.load(image_file)
self.image = pygame.transform.smoothscale(self.image, (80, 70))
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = location
self.speed = speed

# 球的移動
def ball_move(self):
self.rect = self.rect.move(self.speed)
# 控制小球在遊戲界面內
if self.rect.left < 0 or self.rect.right > screen.get_width():
self.speed[0] = -self.speed[0]
if self.rect.top <= 0:
self.speed[1] = -self.speed[1]

# 遊戲結束
def over(self):
self.rect = self.rect.move(self.speed)

# 當小球底部大於界面高度時判定遊戲結束
if self.rect.bottom > screen.get_height():
# SysFount 從系統字體中創建一個font對象(字體樣式, 大小)
font = pygame.font.SysFont('宋體', 40)

# render 在新的surface上繪製文本(文本, 抗鋸齒, 顏色, 背景)
text_surface = font.render(u"Game Over", True, (0, 0, 255))
screen.blit(text_surface, (screen.get_width() // 2, screen.get_height() // 2))
return 0


class Mybraclass(pygame.sprite.Sprite):
def __init__(self, location):
pygame.sprite.Sprite.__init__(self)

# 控制接杆的大小
image_surface = pygame.Surface([100, 20])
# 接杆顏色
image_surface.fill([213, 213, 213])

self.image = image_surface.convert()
self.rect = self.image.get_rect()
self.rect.left, self.rect.top = location


# 初始化pygame
pygame.init()
screen = pygame.display.set_mode([800, 700])
clock = pygame.time.Clock()

ball_speed = [4, -4]
score = 0

# 球類給定值
myball = Myballclass(r'football.png', ball_speed, [10, 20])
mybar = Mybraclass([270, 600])
# 將我的球類放入組中
ballgroup = pygame.sprite.Group(myball)

# # 刷新時間
time = 30
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
# 當滑鼠滑過時將新建一個滑鼠划過的事件並賦值給接杆的中心點
if event.type == pygame.MOUSEMOTION:
mybar.rect.centerx = event.pos[0]
# 小球與接杆的碰撞檢測
if pygame.sprite.spritecollide(mybar, ballgroup, False):
myball.speed[1] = -myball.speed[1]
time = time + 1
score = score + 10
clock.tick(time)

screen.fill([255, 255, 255])
font = pygame.font.SysFont('', 20)
text_surface = font.render(u"score:" + str(score), True, (0, 0, 255))
screen.blit(text_surface, (32, 24))

myball.ball_move()
myball.over()
screen.blit(myball.image, myball.rect)
screen.blit(mybar.image, mybar.rect)
pygame.display.flip()

AI悅創·推出輔導班啦,包括「Python 語言輔導班、C++輔導班、算法/數據結構輔導班、少兒編程、pygame 遊戲開發」,全部都是一對一教學:一對一輔導 + 一對一答疑 + 布置作業 + 項目實踐等。QQ、微信在線,隨時響應!V:Jiabcdefh


相關焦點

  • 05-pygame彈球遊戲(上)
    小球新建文件夾,文件夾下面創建 py 文件、圖片文件,然後我們開始編寫代碼。本篇用的是圖片,可以改成畫出來的圓形。 for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() screen.blit(myball.image, myball.rect) pygame.display.flip()現在開始讓球運動起來並進行反彈
  • pygame遊戲常用方法
    python做2d遊戲,用的最多的就是pygame庫,雖然比較老了,但是非常經典。
  • pygame教程(八):數字華容道遊戲
    前言前兩章我們學習了遊戲的初步實戰,利用所學的知識編寫了一個記憶迷宮小遊戲,較綜合地練習了用pygame開發遊戲的流程及相關的知識
  • 從零開發一個小遊戲:PyGame入門
    下一節,我們將介紹遊戲的主循環,它將確保只有在我們給它正確的輸入時程序才會退出。遊戲主循環遊戲主循環/事件循環是所有操作發生的地方。在遊戲過程中,它不斷的更新遊戲狀態,渲染遊戲畫面和收集輸入指令。創建循環時,需要確保我們有辦法跳出循環,退出應用。為此,我們將同時介紹一些基本的用戶輸入指令。
  • 用pygame實現一個小遊戲——
    ")           # 健康值橫條healthimg = pygame.image.load("pic/health.png")gameover = pygame.image.load("pic/gameover.png")             # 遊戲結束判定輸贏後顯示的圖片youwin = pygame.image.load("pic/youwin.png
  • 好玩的彈球遊戲推薦:彈球遊戲可不只有最強彈一彈哦!
    上周小遊戲指數排名:第三  瞄準輔助線:長度中等,不可伸縮  彈球彈力:較弱  彈射方向:由上至下  遊戲難度:略高  說起彈球遊戲,不得不提《最強彈一彈  上周小遊戲指數排名:第七  瞄準輔助線:長度無限  彈球彈力:無限制  彈射方向:由下至上  遊戲難度:適中  《方塊彈珠》是彈球遊戲中的「另類」,
  • turtle製作遊戲秘籍之一
    Python創意編程課054_自製畫圖板(menu)Python創意編程課053_雷電射擊遊戲_精靈模塊簡版Python創意編程課052_雷電飛行陣列Python創意編程課051_幸運大轉盤Python創意編程課050_AI自動打磚塊遊戲Python創意編程課049_頂重力彈球遊戲Python創意編程課
  • 最近很火的抖音彈球遊戲叫啥名 抖音彈球遊戲攻略
    最近很火的抖音彈球遊戲叫啥名 抖音彈球遊戲攻略 抖音最近很火的彈球遊戲你玩過嗎?
  • 用Pygame和Python做遊戲-從入門到精通(1)
    安裝Pygame你可以從www.pygame.org下載Pygame,選擇合適你的作業系統和合適的版本,然後安裝就可以了(什麼,你連Python都沒有?您可能是不適合看這個系列了,不過如果執意要學,很好!快去www.python.org下載吧!)。 一旦你安裝好,你可以用下面的方法確認下有沒有安裝成功。你的版本可能和我不同,這沒關係。
  • 消失的遊戲:三維彈球
    說起三維彈球,大家一定都不陌生,因為他是最早WINDOWS XP上的經典遊戲,火妹科技的小編以前也是玩過的,但是卻沒有細玩,甚至是沒有玩通關過,現在想想都覺得可惜,因為現在都是WIN10普及,XP系統已經基本消失了,今天火妹科技只是想和大家聊一聊當初這款很火的遊戲。
  • Toby 的 Pygame 學習筆記 | 初識Pygame​及隨書代碼下載推薦!
    比如例子:import pygamefrom pygame.locals import *white = 255,255,255blue = 0,0,200pygame.init()screen = pygame.display.set_mode((600,500))myfont = pygame.font.Font
  • 上世紀經典「彈球遊戲」的網際網路復興之路
    備受尊敬的彈球製造商Stern目前生產著全球90%的彈球機,該公司也正在開發自己的連接系統,計劃於今年晚些時候發布,這可能會讓Scorbit在競爭中顯得非常弱勢。不管Scorbit和Stern的計劃最終能否實現,現在的競賽是看誰先把幾十年來一直在線下的愛好——彈球遊戲——帶入網際網路時代。
  • Faker直播玩的彈球遊戲叫什麼 李哥彈球小遊戲下載地址
    Faker直播玩的彈球遊戲叫什麼 李哥彈球小遊戲下載地址 大魔王Faker李哥最近在直播的時候玩的彈小球的遊戲叫什麼名字呢,這是一款考驗反應能力的遊戲,不少玩家看到李哥直播玩的小遊戲
  • 用pygame回顧飛機大戰
    遊戲窗口建立及所需函數簡要說明import osimport timeimport pygame# 屏幕寬度SCREEN_WIDTH = 500# 屏幕高度SCREEN_HEIGHT = 250# 圖片絕對路徑IMG_PATH = os.path.join
  • 《彈球王者》怎麼玩 遊戲特色介紹
    導 讀 微信彈球王者怎麼玩,怎麼獲得高分,本次為您帶來微信彈球王者玩法介紹。
  • 好評率95%,這款遊戲把三維彈球做出了惡魔城的味道
    遊戲的主角是一個推著彈球的屎殼郎,名叫尤庫,它來到一個熱帶的小島上作為新的郵局局長,不料這裡遭到了未知力量的攻擊,我們只能臨時客串救世主,靠著自己的彈球收集水果(金幣),解開一個個謎題,拯救小島。  通常情況下,遊戲都會給玩家設置障礙,然後通過戰鬥或者跳躍來克服它,而在這個小島上則是玩彈球。  彈球是一種古老的遊戲形式,最早可追溯到路易十四時期。
  • Steam喜加一:多人彈球遊戲《Kabounce》 好評率91%
    Steam平臺今天推出了全新的喜加一福利,從今日起至6月25日凌晨,玩家們可以免費領取原價49元的多人彈球遊戲《Kabounce》,本作支持簡體中文,好評率91%。  Steam地址>>
  • Steam限時免費喜加一遊戲kabounce 快節奏的彈球遊戲
    Kabounc是一款有著非常快節奏的多人彈球遊戲,玩家可以控制彈球讓你的彈球有著飛快的速度與動力。  這款遊戲的特點在於你可能和玩家們一起聯機對抗,該遊戲最多支持8人聯機。 同時,這款遊戲非常簡單容易上手,同時快節奏與刺激的遊戲方式也讓不少玩家給出好評。 遊戲中自帶中文系統,因此不必擔心看不懂。
  • 抖音彈球遊戲叫什麼名字?抖音彈球遊戲介紹[多圖]
    抖音彈球遊戲有很多,一款小球不斷前進不算彈起來的遊戲叫什麼名字?在抖音上看到這款遊戲的時候就覺得非常有意思,但是卻不知道遊戲的名字,這是什麼遊戲?怎麼玩?下面給大家介紹介紹這款彈力球遊戲,看看這款十分火爆的遊戲究竟有什麼魅力,吸引這麼多的人。
  • 《三維彈球2FX》:布局逼真精緻 場景華麗的彈珠遊戲
    《三維彈球》(3D Pinball)是Windows XP系統附帶的一款使用鍵盤操作的彈珠遊戲,相信使用過XP系統的玩家們都對它不陌生。而今天我們要給大家介紹的是一款名叫《三維彈球2FX》(Pinball FX2 )的彈珠遊戲,它們的玩法大致一樣,只不過後者將彈珠遊戲搬入了VR的世界,使其更加身臨其境。