当你从描述中读到(或不是)时,我需要帮助创建一个接近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?) 实际上它必须简单,因为精灵对我来说可能太多了。 我的想法是每次球到达特定坐标时改变坐标。 我不只是要求某人制作我喜欢的游戏,而是出于教育目的。
我很乐意看到您提供的代码的一些评论。 正如我所说,我刚开始学习它。 我的英语不是最好的。对于那个很抱歉。 提前致谢! (我知道我的帖子有点混乱和非特定)
如果需要,我也会上传背景和桨图片。
答案 0 :(得分:0)
你可以创建一个Ball类,它有两种方法:
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)
答案 1 :(得分: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...
编辑:巴特添加了不同的名字,但它是一样的。