2015-11-22 81 views
0

第一次海报。我遇到了一个问题,我做了一个Pong游戏,但是我在将游戏打印到pygame窗口时遇到问题。TypeError:参数1必须是pygame.Surface,不是str

我得到的错误“类型错误:参数1必须pygame.Surface,不是str的

我的blit文本,但得到一个错误 我知道代码是一个烂摊子,我以后会解决它

import pygame 
from pygame.locals import * 
from random import randint 
import random 
import time 
pygame.display.set_caption("PONG!") 
myimage = pygame.image.load("lose.png") 
middle = pygame.image.load("middle.png") 
pygame.init() 
screensize = (640,480) 
screen = pygame.display.set_mode(screensize) 
clock = pygame.time.Clock() 
PlayerProp = 0 
AiProp = 0 
Score = str(PlayerProp) 
AiScore = str(AiProp) 
game = True 
while game == True: 
    class pong_: 
     def __init__(self, screensize): 

      self.screensize = screensize 
      self.centerx = int(screensize[0]*0.5) 
      self.centery = int(screensize[1]*0.5) 

      self.radius = 8 

      self.rect = pygame.Rect(self.centerx-self.radius, 
            self.centery-self.radius, 
            self.radius*2, self.radius*2) 
      self.color = (255,255,255) 

      self.direction = [1,1] 


      self.speedx = 3 
      self.speedy = 4 
      #CODE TASK: change speed as game progresses to make it harder mwahaha 
      self.hit_edge_left = False 
      self.hit_edge_right = False 

     def update(self, player_paddle, ai_paddle): 

      self.centerx += self.direction[0]*self.speedx 
      self.centery += self.direction[1]*self.speedy 

      self.rect.center = (self.centerx, self.centery) 

      #Make new random for each -1 
      if self.rect.top <= 0: 
       self.direction[1] = 1 
      elif self.rect.bottom >= self.screensize[1]-1: 
       self.direction[1] = -1 

      if self.rect.right >= self.screensize[0]-1: 
       self.hit_edge_right = True 
      elif self.rect.left <= 0: 
       self.hit_edge_left = True 

      if self.rect.colliderect(player_paddle.rect): 
       self.direction[0] = random.randrange(-2, -1) 
      if self.rect.colliderect(ai_paddle.rect): 
       self.direction[0] = random.randrange(2, 3) 


     def render(self, screen): 
      pygame.draw.circle(screen, self.color, self.rect.center, self.radius, 0) 
      pygame.draw.circle(screen, (0,0,0), self.rect.center, self.radius, 1) 


    class AIPaddle(object): 
     def __init__(self, screensize): 
      self.screensize = screensize 

      self.centerx = 4 
      self.centery = int(screensize[1]*0.5) 

      self.height = 100 
      self.width = 10 

      self.rect = pygame.Rect(0, self.centery-int(self.height*0.5), self.width, self.height) 

      self.color = (255,255,255) 

      #CODE TASK: Adjust size of AI paddle as match progresses to make it more difficult 

      self.speed = random.randrange(3, 4) 

     def update(self, pong): 
      if pong.rect.top < self.rect.top: 
       self.centery -= self.speed 
      elif pong.rect.bottom > self.rect.bottom: 
       self.centery += self.speed 

      self.rect.center = (self.centerx, self.centery) 

     def render(self, screen): 
      pygame.draw.rect(screen, self.color, self.rect, 0) 
      pygame.draw.rect(screen, (0,0,0), self.rect, 1) 



    class PlayerPaddle(object): 
     def __init__(self, screensize): 
      self.screensize = screensize 

      self.centerx = screensize[0]-5 
      self.centery = int(screensize[1]*0.5) 

      self.height = 100 
      self.width = 10 

      self.rect = pygame.Rect(0, self.centery-int(self.height*0.5), self.width, self.height) 

      self.color = (255,255,255) 

      #CODE TASK: Adjust size of player paddle as match progresses to make it more difficult 

      self.speed = 3 
      self.direction = 0 

     def update(self): 
      self.centery += self.direction*self.speed 

      self.rect.center = (self.centerx, self.centery) 
      if self.rect.top < 0: 
       self.rect.top = 0 
      if self.rect.bottom > self.screensize[1]-1: 
       self.rect.bottom = self.screensize[1]-1 

     def render(self, screen): 
      pygame.draw.rect(screen, self.color, self.rect, 0) 
      pygame.draw.rect(screen, (0,0,0), self.rect, 1) 



    def main(): 
     pygame.init() 
     pong = pong_(screensize) 
     ai_paddle = AIPaddle(screensize) 
     player_paddle = PlayerPaddle(screensize) 

     running = True 

     while running: 
      #fps limit 
      clock.tick(64) 
      #big boy event handling 
      for event in pygame.event.get(): 
       if event.type == QUIT: 
        running = False 

       if event.type == KEYDOWN: 
        if event.key == K_UP: 
         player_paddle.direction = -1 
        elif event.key == K_DOWN: 
         player_paddle.direction = 1 
       if event.type == KEYUP: 
        if event.key == K_UP and player_paddle.direction == -1: 
         player_paddle.direction = 0 
        if event.key == K_DOWN and player_paddle.direction == 1: 
         player_paddle.direction = 0 




      #object updates 
      ai_paddle.update(pong) 
      player_paddle.update() 
      pong.update(player_paddle, ai_paddle) 
      screen.fill((0,0,0)) 
      screen.blit(middle, (0,0)) 
      screen.blit(AiScore, (0,0)) 
      BLACK = (0, 0, 0) 
      WHITE = (255, 255, 255) 
      RED = (255, 0, 0) 
      GREEN = (0, 255, 0) 
      BLUE = (0, 0, 255) 
      basicFont = pygame.font.SysFont(None, 48) 
      #CODE TASK: Make some text on the screen over everything 
      #code task 2: Make game restart? 
      if pong.hit_edge_left: 
       print('You Won!') 
       running = False 
      elif pong.hit_edge_right: 
       print('You lose') 
       running = False 


      #rendering phase 
      ai_paddle.render(screen) 
      player_paddle.render(screen) 
      pong.render(screen) 

      pygame.display.flip() 
    main() 
+0

你传入字符串'AiScore'到'的blit()'功能在第173行... – elegent

+0

是的,它在导致错误的线上。 – martineau

+0

我知道,但为什么? – Will

回答

相关问题