第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在python pygame中得分不變

在python pygame中得分不變

慕妹3146593 2022-09-06 16:54:33
我正在嘗試制作乒乓球游戲,但是當球離開屏幕時,比分不會改變。另一件不太對的事情是,有時,球在球拍上滑動,然后離開屏幕,而不是從球拍上反彈。我能就這些問題獲得一些幫助嗎?(主要是第一個)這是我的代碼:import pygame as pgimport randomfrom os import pathimg_dir = path.join(path.dirname(__file__), 'img')snd_dir = path.join(path.dirname(__file__), 'snd')WIDTH = 1280HEIGHT = 690FPS = 60# define colors WHITE = (255, 255, 255)BLACK = (0, 0, 0)RED = (255, 0, 0)GREEN = (0, 255, 0)BLUE = (0, 0, 255)YELLOW = (0, 255, 255)OPPONENT_SPEED = 2.4# initialize PyGame and create window pg.init()pg.mixer.init()screen = pg.display.set_mode((WIDTH, HEIGHT))pg.display.set_caption('PONG!')clock = pg.time.Clock()pong_ball_x = [-3, 3]pong_ball_y = [-3, 3]font_name = pg.font.match_font('arial')def draw_text(surf, text, size, x, y):    font = pg.font.Font(font_name, size)    text_surface = font.render(text, True, WHITE)    text_rect = text_surface.get_rect()    text_rect.midtop = (x, y)    surf.blit(text_surface, text_rect)class Player(pg.sprite.Sprite):    def __init__(self):        pg.sprite.Sprite.__init__(self)        self.image = pg.Surface((5, 100))        self.image.fill(WHITE)        self.rect = self.image.get_rect()        self.rect.x = 10        self.rect.y = HEIGHT / 2        self.speedy = 0    def update(self):        self.speedy = 0        keys = pg.key.get_pressed()        if keys[pg.K_s]:            self.speedy = 5        if keys[pg.K_w]:            self.speedy = -5        self.rect.y += self.speedy        if self.rect.bottom >= HEIGHT:            self.rect.bottom = HEIGHT        if self.rect.top <= 0:            self.rect.top = 0class Player2(pg.sprite.Sprite):    def __init__(self):        pg.sprite.Sprite.__init__(self)        self.image = pg.Surface((5, 100))        self.image.fill(WHITE)        self.rect = self.image.get_rect()        self.rect.x = WIDTH - 15        self.rect.y = HEIGHT / 2        self.speedy = 0
查看完整描述

1 回答

?
森林海

TA貢獻2011條經(jīng)驗 獲得超2個贊

問題是你如何檢查球是否離開了屏幕。您當前的檢查條件永遠不會觸發(fā),因為它永遠不會等于,因為它是一個整數(shù)。pong_ball.rect.leftWIDTH - 12.5


一個簡單的調試方法只需打印要檢查的值,因此


print(pong_ball.rect.left, WIDTH - 12.5)

將輸出:


1264 1267.5

1267 1267.5

1270 1267.5

1273 1267.5

1276 1267.5

1279 1267.5

625 1267.5

628 1267.5

當球向屏幕右側移動時,其位置將被重置。


因此,您會看到球的位置超過您的極限,而不會觸發(fā)您的條件。


如果將比較分別更改為 和,則分數(shù)將更新。><


但是,這將導致另一個問題,從上面的調試打印中也可以明顯看出。有四幀的評分條件為真,因為重置位置檢入沒有 12.5 像素的回旋余地。這就是當初存在回旋余地的原因嗎?你未來的自己可能會喜歡評論。PongBall.update()


但是,如果您更改比較以刪除 12.5 像素緩沖區(qū),則分數(shù)不會更新。這是因為位置在其方法中更新和重置。pong_ballupdate()


如果我們遵循您的彈跳方法,我們可以添加一個單獨的方法,并在滿足評分標準時調用該方法。resetPongBall


所以你的類現(xiàn)在是:PongBall


class PongBall(pg.sprite.Sprite):

    def __init__(self):

        pg.sprite.Sprite.__init__(self)

        self.image = pg.Surface((30, 30))

        self.image.fill(WHITE)

        self.rect = self.image.get_rect()

        self.speedx = random.choice(pong_ball_x)

        self.speedy = random.choice(pong_ball_y)

        self.reset()


    def update(self):

        self.rect.x += self.speedx

        self.rect.y += self.speedy

        if self.rect.top <= 0:

            self.speedy = -self.speedy

        if self.rect.bottom >= HEIGHT:

            self.speedy = -self.speedy


    def reset(self):

        self.rect.x = WIDTH / 2 - 15

        self.rect.y = HEIGHT / 2 - 15


    def bounce(self):

        self.speedx = -self.speedx

您的主循環(huán)將更改為同時執(zhí)行重置:


while running:

    # process input (events)

    for event in pg.event.get():

        # check for closing window

        if event.type == pg.QUIT:

            running = False

    # check for score

    if pong_ball.rect.left > WIDTH - 12.5:

        score = score + 1

        pong_ball.reset()

    if pong_ball.rect.right < 12.5:

        score2 = score2 + 1

        pong_ball.reset()

    # update

    ....

那么你的分數(shù)應該表現(xiàn)正確。


查看完整回答
反對 回復 2022-09-06
  • 1 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號