0

正如您从描述中看到的那样(或没有),我需要帮助来创建一个接近 Pong 的游戏。

我在编程方面真的很新,我正在自学。你帮助我创造的游戏将是我有史以来的第一款游戏。

我的游戏版本,解释:

图片(因为我是新手,所以不能在这里发布图片): http ://www.upload.ee/image/3307299/test.png (此链接是安全的)

因此,数字 1 代表墙壁(黑色的)数字 2 表示时间停止的区域(游戏结束) 3 是您幸存的时间。4 号是弹跳的球(就像他们在 Pong 中所做的那样)。

代码:

import pygame
import random

pygame.init()
screen = pygame.display.set_mode([640, 480])
paddle = pygame.image.load("pulgake.png")
pygame.display.set_caption("PONG!")


back = pygame.image.load("taust.png")
screen.blit(back, (0, 0))
screen.blit(paddle, (600, 240))
pygame.display.flip()

xpaddle = 600
ypaddle = 240 

delay = 10
interval = 10
pygame.key.set_repeat(delay, interval)


while True:
    screen.blit(back, (0,0))
    screen.blit(paddle, (xpaddle, ypaddle))
    pygame.display.flip()
    pygame.time.delay(20)
    for i in pygame.event.get():
        if i.type == pygame.QUIT:
            sys.exit()
        elif i.type == pygame.KEYDOWN:
            if i.key == pygame.K_UP:
                ypaddle = ypaddle - 10
                if ypaddle < 10:
                    ypaddle = 10
            elif i.key == pygame.K_DOWN:
                ypaddle = ypaddle + 10
                if ypaddle > 410:
                    ypaddle = 410

我想要一个弹跳球,但我没有创造它的知识。它不一定非常困难(也许使用 pygame.draw.circle?)实际上它必须很简单,因为精灵对我来说可能太多了。我的想法是每次球到达特定坐标时更改坐标。我不只是要求某人制作我喜欢的游戏,它是出于教育目的。

我很乐意看到您提供的代码的一些评论。正如我所说,我刚开始学习它。我的英语不是最好的。对于那个很抱歉。提前致谢!(我知道我的帖子有点混乱和不具体)

如果需要,我也会上传背景和桨图片。

4

2 回答 2

0

你可以创建一个 Ball 类,它有 2 个方法:

update() - 将根据 speed_x 和 speed_y 移动球并检查是否检测到任何碰撞

draw() - 将 blit 表面/或在球位置绘制一个圆圈。

您必须考虑的另一件事是碰撞。您可以找到一个点是否在这样的矩形中:

我们有一个带有点的矩形:p1, p2, p3, p4,p0是我们的测试点。

p0如果在矩形内dist(p0,p1) + disp(p0,p2) + ... + disp(p0,p4) == WIDTH+HEIGHT

你可以试着找出一个圆的方程。提示:半径是你需要的。

编辑:类示例:

class Ball:
    def __init__(self):
        self.pos = [0,0]
        self.velocity = [1,0]
    def move():
        self.pos[0] += self.velocity[0]
        self.pos[1] += self.velocity[1]
    def draw(screen):
        pygame.draw.circle(screen,WHITE,self.pos,5)
于 2013-05-13T11:48:12.410 回答
0

延伸@Bartlomiej Lewandowski,为了让球你需要

每个循环ball.update()都会做:

    ball.x += ball.xvel
    ball.y += ball.yvel`

然后

  • 如果您与左/右墙壁碰撞ball.x *= -1
  • 如果您与顶部/机器人墙壁发生碰撞ball.y *= -1

使用 pygame.Rect 将简化逻辑

# bounce on right side
ball.rect.right >= screen.rect.right:
    ball.yvel *= -1

# bounce top
ball.rect.top <= screen.rect.top:

# bot
ball.rect.bottom >= screen.rect.bot:

# etc...

编辑:巴特添加了不同的名称,但它是同一件事。

于 2013-05-13T19:22:50.100 回答