【问题标题】:Need help creating game close to "Pong" (Pygame)需要帮助创建接近“Pong”的游戏(Pygame)
【发布时间】:2013-05-13 10:08:41
【问题描述】:

正如您从描述中看到的那样(或没有看到),我需要帮助来创建一个接近 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?) 实际上它必须很简单,因为精灵对我来说可能太多了。 我的想法是每次球到达特定坐标时更改坐标。 我不只是要求某人制作我喜欢的游戏,而是出于教育目的。

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

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

【问题讨论】:

    标签: pygame


    【解决方案1】:

    你可以创建一个 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)
    

    【讨论】:

    • 我真的很感激你甚至不厌其烦地帮助我。我想我得到了碰撞部分,但是创建一个工人阶级并没有出现。你能举个例子吗(或者甚至是程序的一部分)我知道我要求把你的空闲时间放在里面,但我认为我错过了一些重要的基础知识..
    • 另外,如何设置球碰撞后的新方向?
    • @Taneeleon 只是反转速度
    • 非常感谢。我完全误解了创建类的过程(定义init)。我想我会继续并完成游戏(我希望在不久的将来:D)声誉 +=
    【解决方案2】:

    要扩展@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...
    

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

    【讨论】:

    • 谢谢!只有最后一件事 - 与桨的集成。我的意思是,你如何告诉 python 观察运动并识别碰撞?此外,显示“存活时间”的秒表也是一个难题。
    • 对于碰撞:在move 你可以检查碰撞。针对不同情况有 7 个Rect 碰撞函数。 pygame.org/docs/ref/rect.html -- 如果使用Sprite 类,还有几个碰撞函数:pygame.org/docs/ref/sprite.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多