2015-11-14 2 views
-1

Я довольно новичок в объектно-ориентированном программировании, но у меня есть эта игра в понг, и все, что я хочу добавить, это случайное появление мяча. Не прося никого писать мой код для меня, просто искал небольшой толчок в правильном направлении.Создание шара для нереста случайно

import pygame, sys, random 
from pygame.locals import * 


pygame.init() 
mainClock = pygame.time.Clock() 
WINDOWWIDTH = 620 
WINDOWHEIGHT = 440 
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32) 
pygame.display.set_caption('Pong') 

pygame.font.init() 
FPS = 60 

    class Player(object): 
    def __init__(self, x, y, padWid, padHei): 
      self.x, self.y = 0, WINDOWHEIGHT/2 
      self.speed = 3 
      self.padWid, self.padHei = 8, 64 
      self.score = 0 
      self.scoreFont = pygame.font.Font("imagine_font.ttf", 64) 

    def scoring(self): 
      scoreBlit = self.scoreFont.render(str(self.score), 1, (255, 255, 255)) 
      windowSurface.blit(scoreBlit, (32, 16)) 
      if self.score == 10: 
        print ("player 1 wins!") 
        exit() 

    def movement(self): 
      keys = pygame.key.get_pressed() 
      if keys[pygame.K_w]: 
        self.y -= self.speed 
      elif keys[pygame.K_s]: 
        self.y += self.speed 

      if self.y <= 0: 
        self.y = 0 
      elif self.y >= WINDOWHEIGHT-64: 
        self.y = WINDOWHEIGHT-64 

    def draw(self): 
      pygame.draw.rect(windowSurface, (255, 255, 255), (self.x, self.y, self.padWid, self.padHei)) 

    class Enemy(Player): 
    def __init__(self, x, y, padWid, padHei): 
      self.x, self.y = WINDOWWIDTH-8, WINDOWHEIGHT/2 
      self.speed = 3 
      self.padWid, self.padHei = 8, 64 
      self.score = 0 
      self.scoreFont = pygame.font.Font("imagine_font.ttf", 64) 

    def scoring(self): 
      scoreBlit = self.scoreFont.render(str(self.score), 1, (255, 255, 255)) 
      windowSurface.blit(scoreBlit, (WINDOWHEIGHT+92, 16)) 
      if self.score == 10: 
        print ("Player 2 wins!") 
        exit() 

    def movement(self): 
      keys = pygame.key.get_pressed() 
      if keys[pygame.K_UP]: 
        self.y -= self.speed 
      elif keys[pygame.K_DOWN]: 
        self.y += self.speed 

      if self.y <= 0: 
        self.y = 0 
      elif self.y >= WINDOWHEIGHT-64: 
        self.y = WINDOWHEIGHT-64 

    def draw(self): 
      pygame.draw.rect(windowSurface, (255, 255, 255), (self.x, self.y, self.padWid, self.padHei)) 


    class Ball(object): 
    def __init__(self, x, y, size): 
      self.x, self.y = WINDOWWIDTH/2, WINDOWHEIGHT/2 
      self.speed_x = -3 
      self.speed_y = 3 
      self.size = 8 

    def movement(self): 
      self.x += self.speed_x 
      self.y += self.speed_y 

      #wall col 
      if self.y <= 0: 
        self.speed_y *= -1 
      elif self.y >= WINDOWHEIGHT-self.size: 
        self.speed_y *= -1 

      if self.x <= 0: 
        self.__init__(WINDOWWIDTH/2, WINDOWHEIGHT/2, 8) 
        enemy.score += 1 
      elif self.x >= WINDOWWIDTH-self.size: 
        self.__init__(WINDOWWIDTH/2, WINDOWHEIGHT/2, 8) 
        self.speed_x = 3 
        player.score += 1 

      for n in range(-self.size, player.padHei): 
        if self.y == player.y + n: 
          if self.x <= player.x + player.padWid: 
            self.speed_x *= -1 
            break 
        n += 1 
      for n in range(-self.size, enemy.padHei): 
        if self.y == enemy.y + n: 
          if self.x >= enemy.x - enemy.padWid: 
            self.speed_x *= -1 
            break 
        n += 1 
    def draw(self): 

     pygame.draw.rect(windowSurface, (255, 255, 255), (self.x, self.y, 8, 8)) 



def main(): 

global balls, BALLSIZE, windowSurface, player, ball, enemy, mainClock, FPS 
player = Player('16', '2', '8', '64') 
ball = Ball('2', '2', '8') 
enemy = Enemy('-16', '2', '8' , '64') 

while True: 
    #process 
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT: 
          print ("Game exited by user") 
          exit() 

    ball.movement() 
    player.movement() 
    enemy.movement() 

    windowSurface.fill((0, 0, 0)) 
    ball.draw() 
    player.draw() 
    player.scoring() 
    enemy.draw() 
    enemy.scoring() 

    pygame.display.flip() 
    mainClock.tick(FPS) 

    main() 
+0

Что именно ваш вопрос? Можете ли вы изменить на [mcve]? – Stedy

+0

Мой вопрос в том, что каждый раз, когда мяч нарисован по всему циклу игры, будь то в начале или после оценки человека, я пытаюсь заставить мяч иметь случайную позицию после появления и не всегда рисоваться посередине окна , –

ответ

0

Если вы хотите, чтобы шар нерест случайным образом, используйте pygame.draw.circle(), чтобы сделать пинг-понга.

Сформировать его в случайном порядке, импорта Math, а затем для pygame.draw.circle() третий аргумент,

(Math.randint (1, Screen.Width), Math.randint (1, screen.height))

Вот документы:

http://www.pygame.org/docs/ref/draw.html#pygame.draw.circle

+0

Отвечает ли это на ваш вопрос @James N? – OdysseyJacob

+0

Вместо Screen.width и Screen.height добавьте переменные: WINDOWWIDTH и WINDOWHEIGHT – OdysseyJacob

+0

Благодарим вас за руководство. Я продолжаю получать код ошибки, говоря, что математический модуль не имеет атрибута для randint. Возможно, у меня нет правильного определения. –

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