2013-05-13 2 views
0

Как вы читаете из описания (или нет), мне нужна помощь в создании игры рядом с Погом.Нужна помощь в создании игры рядом с «Понг» (Pygame)

Я действительно новичок в программировании, и сам изучаю сам. Игра, которую вы мне поможете, станет моей первой игрой.

Моя версия игры, объяснил:

Изображение (не может отправить фотографию здесь, так как я новый): http://www.upload.ee/image/3307299/test.png (Эта ссылка SAFE)

Таким образом, число 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

Вы можете создать класс мяча, который будет иметь 2 метода:

обновление() - это будет перемещать мяч в соответствии с speed_x и speed_y и проверки, если какие-либо столкновения обнаруживаются

дро() - это будет блитать поверхность/или нарисовать круг в положении мяча.

Другая вещь, о которой вы должны думать, является столкновением. Вы можете найти, если точка находится в прямоугольнике, как это:

У нас есть прямоугольник с точками: p1, p2, p3, p4, p0 наша точка тестирования.

p0 находится в прямоугольнике, если dist(p0,p1) + disp(p0,p2) + ... + disp(p0,p4) == WIDTH+HEIGHT

вы можете попытаться выяснить, уравнение для окружности. Подсказка: радиус - это то, что вам нужно.

EDIT: Класс пример:

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) 
+0

Я очень ценю тот факт, что вы даже потрудились мне помочь. Я предполагаю, что я столкнулся с частью, но создание рабочего класса просто не получилось. Не могли бы вы просто сделать пример (или, может быть, даже часть программы) Я знаю, что я прошу положить ваше свободное время в него, но я думаю, что мне не хватает некоторых важных основ .. – Taneeleon

+0

Также, как установить новое направление для шара после столкновения? – Taneeleon

+0

@ Taneeleon просто меняет скорость –

0

Продлить на @Bartlomiej Левандовски, чтобы сделать мяч вам нужно

Каждый петлевой ball.update() будет делать:

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

Тогда

  • если вы сталкиваетесь с левой/правой стеной ball.x *= -1
  • если вы сталкиваетесь с топом/ботами стеной ball.y *= -1

Использования pygame.Rect будет simplfy логики

# 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... 

редактирования: Барт добавил разные имена, но это то же самое.

+0

Спасибо! Только одна и последняя вещь - интеграция с веслом. Я имею в виду, как вы говорите python наблюдать за движением и распознавать столкновение? Кроме того, секундомер, показывающий «пережитое время», представляет собой сложность. – Taneeleon

+0

Для столкновения: в 'move' вы можете проверить наличие коллизий. В разных ситуациях есть 7 функций 'Rect'. http://www.pygame.org/docs/ref/rect.html - Если вы используете класс 'Sprite', есть еще несколько функций столкновения: http://www.pygame.org/docs/ref/sprite .html – ninMonkey

Смежные вопросы