Curioso, puedo ver que llevas poco tiempo con pygame 

Yo asumí que estabas trabajando con sprites, y tu utilizas simples imágenes. No digo que este mal, solo que es un poco practico en proyectos algo más grandes.
Bueno, te introduzco al mundo de los sprites y resolveremos el problema, no te preocupes, ni te ofendas, iré lento:
# -*- coding: cp1252 -*-
import pygame, sys
from pygame.locals import *
#defino unas variables globales para el ancho y el alto
Ancho = 1000
Alto = 500
#se crea la clase para la pokebola, no cambia para nada 
class Pokebola( pygame.sprite.Sprite ):  
    def __init__(self, pos_i_x, pos_i_y ): 
        pygame.sprite.Sprite.__init__(self) 
       
        self.image = pygame.image.load("pokeball.png")
        self.rect = self.image.get_rect() 
        self.rect.center = (pos_i_x, pos_i_y) 
        # retire lo del trainer por que no estaba definido dentro de la clase
        self.dx = 0   
        self.dy = -3 
    def update(self):
        self.rect.move_ip((self.dx, self.dy)) 
        if self.rect.y < 0 : 
            self.kill() 
#creo una clase para el personaje principal 
#que también es un sprite...
class Trainer( pygame.sprite.Sprite ):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load("back1.png")
        self.rect = self.image.get_rect()
        self.rect.center = (1000/2,500/2 ) #aquí ,lo colocamos en una posición inicial
        #la ventaja de utilizar rect, es que nos permite, como creo intentaste, colocar
        #la imagen con el centro como lo ponemos
        #además, resulta redundante preguntar el alto y el ancho si sabemos que es de 1000 X 500 
        self.dx = 10
    def update(self):
        #es mucho mejor dejar que el personaje se actualice a si mismo 
        posx, posy = self.rect.center #creamos dos variables para la posición
        for event in pygame.event.get():
            #en esta parte modificamos la posición
            if event.type == KEYDOWN:
                if event.key == K_LEFT:
                    posx -= self.dx 
                if event.key == K_RIGHT:
                    posx += self.dx
        self.rect.center = (posx, posy) #y aquí lo aplicamos 
def main(): #creo una función principal
    pygame.init() #inicialzo a pygame
    pantalla = pygame.display.set_mode( (Ancho,Alto) ) #creo la pantalla
    pygame.mouse.set_visible(False) #no digo que este mal el "0", solo que así se entiende más 
    bg = pygame.image.load("valle.png") #esto no lo explico 
    #ahora, creamos algo que te parecerá nuevo:
    # "un grupo de sprites"
    sprites = pygame.sprite.RenderClear()
    #y añadimos a nuestro personaje al grupo
    trainer = Trainer()
    sprites.add( trainer )
    jugar = True
    while jugar:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    jugar = False; pygame.quit() #el punto y coma permite poner sentencias en la misma linea
                    sys.exit()
                if event.type == KEYDOWN:
                    if event.key == K_SPACE:
                        #ahora, cuando presiones, se agregara una bala
                        x, y = trainer.rect.center #tomamos la posición inicial, que sera la misma
                        #que la del personaje
                        pokebola = Pokebola(x,y) #lo pasamos como argumento para inicializarla 
                        sprites.add(pokebola) #y la añadimos al código
            pantalla.fill((250,250,250))
            pantalla.blit(bg, (0,0) )
            sprites.draw(pantalla) #esto dibuja TODOS los sprites en el grupo
            sprites.update() #y esto actualiza TODOS los sprites en el grupo
            #esa es la gran ventaja de trabajar con esprites
            pygame.display.update()
main()
No cargue la segunda nave... pero esto funciona 

Si tienes alguna duda sobre el código, solo pregunta 
