需要帮助创建靠近“Pong”(Pygame)的游戏

时间:2013-05-13 10:08:42

标签: pygame

当你从描述中读到(或不是)时,我需要帮助创建一个接近Pong的游戏。

我是编程方面的新手,我自己也在学习。你帮助我创造的游戏将是我的第一款游戏。

我的游戏版本,解释说:

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

所以,1号代表墙(黑色) 2号标志着时间停止的区域(游戏结束) 3是你的幸存时间。 4号球是反弹的球(就像在乒乓球中那样)。

代码:

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?) 实际上它必须简单,因为精灵对我来说可能太多了。 我的想法是每次球到达特定坐标时改变坐标。 我不只是要求某人制作我喜欢的游戏,而是出于教育目的。

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

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

2 个答案:

答案 0 :(得分:0)

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

  

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

     

draw() - 它会使表面blit /或在球的位置画一个圆圈。

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

我们有一个带点的矩形:p1p2p3p4p0是我们的测试点。

如果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)

答案 1 :(得分:0)

延长@Bartlomiej Lewandowski,为了打球你需要

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

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

然后

  • 如果您与左/右墙碰撞ball.x *= -1
  • 如果您与top / bot墙碰撞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...

编辑:巴特添加了不同的名字,但它是一样的。