class EscenaJuegoTerminado(Escena): "Escena ejeutada tras perder el juego." def __init__(self, puntos): "Inicializar Escena de Juego Terminado." Escena.__init__(self) self.fondo = cargar_imagen("terminado.jpg") self.instrucciones = Multilinea(("Reiniciar [F5]", "Salir [Esc]")) self.instrucciones.pos(2, 2, 16, 16) self.terminado = Texto("Juego Terminado", tamano=72) self.puntos = Texto("Puntos: " + str(puntos), tamano=48) def eventos(self, teclado=None): "Redirecciona a la pantalla adecuada." if teclado: if teclado[0].key == K_F5: self.cambiar_escena(EscenaJuego()) def dibujar(self, pantalla): "Mostrar pantalla de juego terminado." pantalla.blit(self.fondo, (0, 0)) self.instrucciones.mostrar(pantalla, 2) pantalla.blit(self.terminado.mostrar(), self.terminado.pos(1, 1, 0, -24)) pantalla.blit(self.puntos.mostrar(), self.puntos.pos(1, 1, 0, 24))
def terminado(self, pantalla): if self.marcador<1000: cadena="GameOver Min 1000"+ " tu puntuacion de: " + str(self.marcador) pantalla.fill((0,0,0)) self.txt_salir = Texto(cadena, tamano=30) self.txt_salir.pos(2, 2) pantalla.blit(self.txt_salir.mostrar(), self.txt_salir.pos(20, 20, 0, 0)) p.display.update() else: cadena="Coseguido puntuacion>1000 puntos: "+ " " + str(self.marcador) pantalla.fill((0,0,0)) txt_salir = Texto(cadena, 30) txt_salir.pos(2, 2) pantalla.blit(txt_salir.mostrar(), txt_salir.pos(20, 20, 0, 0)) p.display.update()
class EscenaJuego(Escena): "Escena del juego." def __init__(self): Escena.__init__(self) #Creacion de objetos del videojuego. self.serpiente = Serpiente() self.comida = Comida(self.serpiente) #Variables de control. self.puntos = 0 self.termino = False #Textos. self.puntuacion = Texto("Puntos: ") def eventos(self, teclado=None): self.serpiente.teclado(teclado) def actualizar(self): self.serpiente.actualizar() if self.serpiente.se_alimento(self.comida): self.comida.generar(self.serpiente) self.puntos += 10 if self.serpiente.colisiona(): self.cambiar_escena(EscenaJuegoTerminado(self.puntos)) def dibujar(self, pantalla): "Muestra los objetos en pantalla." pantalla.fill((0x11, 0x11, 0x11)) #Dibujar objetos en la interfaz. pantalla.blit(self.comida.image, self.comida.mostrar()) pantalla.blit(self.puntuacion.mostrar(str(self.puntos)), self.puntuacion.pos(horz=0, vert=0)) #Dibujar la serpiente. for i in range(0, len(self.serpiente.cuerpo)): pantalla.blit(self.serpiente.image, self.serpiente.cuerpo[i])
class EscenaJuego(Escena): "Escena del juego." def __init__(self): Escena.__init__(self) #Creacion de objetos del videojuego. self.serpiente = Serpiente() self.comida = Comida(self.serpiente) #Variables de control. self.puntos = 0 self.termino = False #Textos. self.puntuacion = Texto("Puntos: ") def eventos(self, teclado = None): self.serpiente.teclado(teclado) def actualizar(self): self.serpiente.actualizar() if self.serpiente.se_alimento(self.comida): self.comida.generar(self.serpiente) self.puntos += 10 if self.serpiente.colisiona(): self.cambiar_escena(EscenaJuegoTerminado(self.puntos)) def dibujar(self, pantalla): "Muestra los objetos en pantalla." pantalla.fill( (0x11, 0x11, 0x11) ) #Dibujar objetos en la interfaz. pantalla.blit(self.comida.image, self.comida.mostrar()) pantalla.blit(self.puntuacion.mostrar(str(self.puntos)), self.puntuacion.pos(horz= 0, vert= 0)) #Dibujar la serpiente. for i in range(0, len(self.serpiente.cuerpo)): pantalla.blit(self.serpiente.image, self.serpiente.cuerpo[i])
def imprimirRankin(self, pantalla): # Establecemos la conexion Conexion = MySQLdb.connect(host='localhost', user='******',passwd='root', db='serpiente') # Creamos el cursor cursor = Conexion.cursor() cursor.execute("SELECT * FROM Puntos ORDER BY Puntuacion DESC") score_data = cursor.fetchall() rows = len (score_data) puntosTotales = Texto("Nombre Puntos", tamano= 30) pantalla.blit(puntosTotales.mostrar(), puntosTotales.pos(0,0,200,320)) for i in range (0,5): puntosTotales = Texto(score_data[i][1], tamano= 30) aux=350 aux+=i*20 pantalla.blit(puntosTotales.mostrar(), puntosTotales.pos(0,0,200,aux)) puntosTotales2 = Texto(str(score_data[i][2]), tamano= 30) aux2=350 aux2+=i*20 pantalla.blit(puntosTotales2.mostrar(), puntosTotales2.pos(0,0,340,aux2)) Conexion.close()
class EscenaTitulo(Escena): "Escena inicial para desplegar menu." def __init__(self): Escena.__init__(self) self.fondo = cargar_imagen("titulo.jpg") self.txt_salir = Texto("[ESC] Salir", 48) self.txt_salir.pos(2, 2) self.txt_jugar = Texto("[F5] Jugar", 48) def eventos(self, teclado = None): "Leer eventos para determinar la escena siguiente." if teclado: tecla = teclado[0].key if tecla == K_F5: self.cambiar_escena(EscenaJuego()) def dibujar(self, pantalla): "Dibujar el menu principal del videojuego." pantalla.blit(self.fondo, (0, 0)) pantalla.blit(self.txt_salir.mostrar(), self.txt_salir.pos(2, 2, 0, 0)) pantalla.blit(self.txt_jugar.mostrar(), self.txt_jugar.pos(2, 2, 0, 64))
class EscenaTitulo(Escena): "Escena inicial para desplegar menu." def __init__(self): Escena.__init__(self) self.fondo = cargar_imagen("titulo.jpg") self.txt_salir = Texto("[ESC] Salir", 48) self.txt_salir.pos(2, 2) self.txt_jugar = Texto("[F5] Jugar", 48) def eventos(self, teclado=None): "Leer eventos para determinar la escena siguiente." if teclado: tecla = teclado[0].key if tecla == K_F5: self.cambiar_escena(EscenaJuego()) def dibujar(self, pantalla): "Dibujar el menu principal del videojuego." pantalla.blit(self.fondo, (0, 0)) pantalla.blit(self.txt_salir.mostrar(), self.txt_salir.pos(2, 2, 0, 0)) pantalla.blit(self.txt_jugar.mostrar(), self.txt_jugar.pos(2, 2, 0, 64))
class EscenaJuegoTerminado(Escena): "Escena ejeutada tras perder el juego." def __init__(self, puntos): "Inicializar Escena de Juego Terminado." Escena.__init__(self) self.fondo = cargar_imagen("terminado.jpg") self.instrucciones = Multilinea( ("Reiniciar [F5]", "Salir [Esc]")) self.instrucciones.pos(2, 2, 16, 16) self.terminado = Texto("Juego Terminado", tamano= 72) self.puntos = Texto("Puntos: " + str(puntos), tamano= 48) def eventos(self, teclado= None): "Redirecciona a la pantalla adecuada." if teclado: if teclado[0].key == K_F5: self.cambiar_escena(EscenaJuego()) def dibujar(self, pantalla): "Mostrar pantalla de juego terminado." pantalla.blit(self.fondo, (0, 0)) self.instrucciones.mostrar(pantalla, 2) pantalla.blit(self.terminado.mostrar(), self.terminado.pos(1, 1, 0, -24)) pantalla.blit(self.puntos.mostrar(), self.puntos.pos(1, 1, 0, 24))
def dibujar(self): "Muestra los objetos en pantalla." self.pantalla.fill( (0x11, 0x11, 0x11) ) #Dibujar objetos en la interfaz. self.pantalla.blit(self.comida.image, self.comida.mostrar()) self.pantalla.blit(self.puntuacion.mostrar(str(self.puntos)), self.puntuacion.pos(horz= 0, vert= 0)) #Dibujar la serpiente. for i in range(0, len(self.serpiente.cuerpo)): self.pantalla.blit(self.serpiente.image, self.serpiente.cuerpo[i]) #Juego Terminado if self.termino: self.instrucciones.mostrar(self.pantalla, 2) terminado = Texto("Juego Terminado", tamano= 72) self.pantalla.blit(terminado.mostrar(), terminado.pos(1, 1)) p.display.flip()
def dibujar(self): "Muestra los objetos en pantalla." self.pantalla.fill((0x11, 0x11, 0x11)) #Dibujar objetos en la interfaz. self.pantalla.blit(self.comida.image, self.comida.mostrar()) self.pantalla.blit(self.puntuacion.mostrar(str(self.puntos)), self.puntuacion.pos(horz=0, vert=0)) #Dibujar la serpiente. for i in range(0, len(self.serpiente.cuerpo)): self.pantalla.blit(self.serpiente.image, self.serpiente.cuerpo[i]) #Juego Terminado if self.termino: self.instrucciones.mostrar(self.pantalla, 2) terminado = Texto("Juego Terminado", tamano=72) self.pantalla.blit(terminado.mostrar(), terminado.pos(1, 1)) p.display.flip()
def dibujar(self, pantalla, value): if value==False: "Muestra los objetos en pantalla." pantalla.fill( (0x11, 0x11, 0x11) ) #Dibujar objetos en la interfaz. pantalla.blit(self.comida.image, self.comida.mostrar()) pantalla.blit(self.puntuacion.mostrar(str(self.puntos)), self.puntuacion.pos(horz= 0, vert= 0)) #Dibujar la serpiente. for i in range(0, len(self.serpiente.cuerpo)): pantalla.blit(self.serpiente.image, self.serpiente.cuerpo[i]) else: puntosTotales = Texto("Puntos: " + str(self.puntos), tamano= 32) pantalla.blit(self.fondo, (0, 0)) pantalla.blit(self.terminado.mostrar(),self.terminado.pos(1, 1, 0, -24)) pantalla.blit(puntosTotales.mostrar(), puntosTotales.pos(1, 1, 0, 24)) self.rankin(pantalla)
def actualizar(self, pantalla): cadena="Marcador = "+ str(self.marcador) pantalla.fill((0,0,0)) txt_salir = Texto(cadena, 30) txt_salir.pos(2, 2) pantalla.blit(txt_salir.mostrar(), txt_salir.pos(20, 20, 0, 0)) cadena="Contador: "+ str(self.segundosTotal) txt_salir = Texto(cadena, 30) txt_salir.pos(1, 0) pantalla.blit(txt_salir.mostrar(), txt_salir.pos(2, 2, 0, 0)) for recs in self.listarec: p.draw.rect(pantalla,(255,255,0), recs) for recs in self.listarec2: p.draw.rect(pantalla,(255,0,255), recs) p.draw.rect(pantalla, (200,20,20), self.r1) p.display.update()
class EscenaJuego(): "Escena del juego." def __init__(self, nombre): "Nombre del jugador" self.nombre=nombre "Creamos los objetos del juego" self.serpiente = Serpiente() self.comida = Comida(self.serpiente) "Variables de control y puntuacion" self.puntos = 0 self.haComido=False self.insertar=False self.termino = False "Texto" self.puntuacion = Texto("Puntos: ") self.fondo = cargar_imagen("terminado.jpg") self.terminado = Texto("Juego Terminado", tamano= 50) "Mover la Serpiente" def eventos(self, teclado = None): self.serpiente.teclado(teclado) "Comprobamos si la serpiente ha comido o colisiona" def actualizar(self): self.serpiente.actualizar() if self.serpiente.se_alimento(self.comida): self.haComido=True self.comida.generar(self.serpiente) self.puntos += 10 else: self.haComido=False if self.serpiente.colisiona(): return True return False def comer(self): return self.haComido "Dibujamos la serpiente y la comida, tambien controla el final de la partida en el else" def dibujar(self, pantalla, value): if value==False: "Muestra los objetos en pantalla." pantalla.fill( (0x11, 0x11, 0x11) ) #Dibujar objetos en la interfaz. pantalla.blit(self.comida.image, self.comida.mostrar()) pantalla.blit(self.puntuacion.mostrar(str(self.puntos)), self.puntuacion.pos(horz= 0, vert= 0)) #Dibujar la serpiente. for i in range(0, len(self.serpiente.cuerpo)): pantalla.blit(self.serpiente.image, self.serpiente.cuerpo[i]) else: puntosTotales = Texto("Puntos: " + str(self.puntos), tamano= 32) pantalla.blit(self.fondo, (0, 0)) pantalla.blit(self.terminado.mostrar(),self.terminado.pos(1, 1, 0, -24)) pantalla.blit(puntosTotales.mostrar(), puntosTotales.pos(1, 1, 0, 24)) self.rankin(pantalla) "Insertamos la puntuacion e imprimimos el rankin" def rankin(self, pantalla): #Comprobamos que es la primera vez que entra para insertar la puntuacion if self.insertar==False and self.puntos!=0: self.insertarPuntos() self.imprimirRankin(pantalla) def imprimirRankin(self, pantalla): # Establecemos la conexion Conexion = MySQLdb.connect(host='localhost', user='******',passwd='root', db='serpiente') # Creamos el cursor cursor = Conexion.cursor() cursor.execute("SELECT * FROM Puntos ORDER BY Puntuacion DESC") score_data = cursor.fetchall() rows = len (score_data) puntosTotales = Texto("Nombre Puntos", tamano= 30) pantalla.blit(puntosTotales.mostrar(), puntosTotales.pos(0,0,200,320)) for i in range (0,5): puntosTotales = Texto(score_data[i][1], tamano= 30) aux=350 aux+=i*20 pantalla.blit(puntosTotales.mostrar(), puntosTotales.pos(0,0,200,aux)) puntosTotales2 = Texto(str(score_data[i][2]), tamano= 30) aux2=350 aux2+=i*20 pantalla.blit(puntosTotales2.mostrar(), puntosTotales2.pos(0,0,340,aux2)) Conexion.close() def insertarPuntos(self): # Establecemos la conexion Conexion = MySQLdb.connect(host='localhost', user='******',passwd='root', db='serpiente') # Creamos el cursor cursor = Conexion.cursor() self.insertar=True query= "SELECT * FROM Puntos WHERE id=(SELECT MAX(id) FROM Puntos)" cursor.execute(query) registros= cursor.fetchone() numero=registros[0] numero = numero+1 #insertamos el la nueva puntuacion query='INSERT INTO Puntos (id,Nombre,Puntuacion) VALUES ("%d","%s","%d")'%(numero,self.nombre,self.puntos) cursor.execute(query) Conexion.commit()
class Logica(p.sprite.Sprite): "Inicia los rectangulos" def __init__(self): self.listarec=[] self.listarec2=[] self.marcador=0 self.r1=p.Rect(300,220,25,25) self.segundosTotal=0 self.fuente1=p.font.SysFont("Arial", 30,True, False) for x in range(50): w=random.randrange(10,30) h=random.randrange(10, 40) x=random.randrange(450) y= random.randrange(30, 450) self.listarec.append(p.Rect(x,y,w,h)) for x in range(20): w=random.randrange(10,20) h=random.randrange(10, 20) x=random.randrange(450) y= random.randrange(30, 450) self.listarec2.append(p.Rect(x,y,w,h)) "Contador de segundos" def ejecutar(self): self.segundosTotal=p.time.get_ticks()/1000 "Resuelve los evento de teclado sin pulsar" def evento(self, evento): if evento == p.K_UP: self.r1.centery-=15 if evento == p.K_DOWN: self.r1.centery+=15 if evento == p.K_RIGHT: self.r1.centerx+=15 if evento == p.K_LEFT: self.r1.centerx-=15 "Eventos del teclado pulsado" def evento2(self, evento): if evento == p.K_UP: self.r1.centery-=15 if evento == p.K_DOWN: self.r1.centery+=15 if evento == p.K_RIGHT: self.r1.centerx+=15 if evento == p.K_LEFT: self.r1.centerx-=15 "Si colisiona con otro rectangulo" def colision(self): for recs in self.listarec: if self.r1.colliderect(recs): self.marcador+=25 self.listarec.remove(recs) for recs in self.listarec2: if self.r1.colliderect(recs): self.marcador-=15 self.listarec2.remove(recs) "Pinta pantalla, rectangulos" def actualizar(self, pantalla): cadena="Marcador = "+ str(self.marcador) pantalla.fill((0,0,0)) txt_salir = Texto(cadena, 30) txt_salir.pos(2, 2) pantalla.blit(txt_salir.mostrar(), txt_salir.pos(20, 20, 0, 0)) cadena="Contador: "+ str(self.segundosTotal) txt_salir = Texto(cadena, 30) txt_salir.pos(1, 0) pantalla.blit(txt_salir.mostrar(), txt_salir.pos(2, 2, 0, 0)) for recs in self.listarec: p.draw.rect(pantalla,(255,255,0), recs) for recs in self.listarec2: p.draw.rect(pantalla,(255,0,255), recs) p.draw.rect(pantalla, (200,20,20), self.r1) p.display.update() "Juego terminado por acabar el tiempo" def terminado(self, pantalla): if self.marcador<1000: cadena="GameOver Min 1000"+ " tu puntuacion de: " + str(self.marcador) pantalla.fill((0,0,0)) self.txt_salir = Texto(cadena, tamano=30) self.txt_salir.pos(2, 2) pantalla.blit(self.txt_salir.mostrar(), self.txt_salir.pos(20, 20, 0, 0)) p.display.update() else: cadena="Coseguido puntuacion>1000 puntos: "+ " " + str(self.marcador) pantalla.fill((0,0,0)) txt_salir = Texto(cadena, 30) txt_salir.pos(2, 2) pantalla.blit(txt_salir.mostrar(), txt_salir.pos(20, 20, 0, 0)) p.display.update() "Controla el numero de segundos totales del juego" def fin(self): if self.segundosTotal>30: return True else: return False
class UnboundSnake(): "Videojuego de la Serpiente realizado con Pygame." def __init__(self): "Inicializa el videojuego." p.init() self.pantalla = p.display.set_mode(PANTALLA) p.display.set_caption("Unbound Snake") #Creacion de objetos del videojuego. self.serpiente = Serpiente() self.comida = Comida(self.serpiente) #Variables de control. self.puntos = 0 self.termino = False #Textos. self.puntuacion = Texto("Puntos: ") self.instrucciones = Multilinea( ("Reiniciar [F5]", "Salir [Esc]")) self.instrucciones.pos(2, 2, 16, 16) def dibujar(self): "Muestra los objetos en pantalla." self.pantalla.fill( (0x11, 0x11, 0x11) ) #Dibujar objetos en la interfaz. self.pantalla.blit(self.comida.image, self.comida.mostrar()) self.pantalla.blit(self.puntuacion.mostrar(str(self.puntos)), self.puntuacion.pos(horz= 0, vert= 0)) #Dibujar la serpiente. for i in range(0, len(self.serpiente.cuerpo)): self.pantalla.blit(self.serpiente.image, self.serpiente.cuerpo[i]) #Juego Terminado if self.termino: self.instrucciones.mostrar(self.pantalla, 2) terminado = Texto("Juego Terminado", tamano= 72) self.pantalla.blit(terminado.mostrar(), terminado.pos(1, 1)) p.display.flip() def reiniciar(self, teclado): "Reinicia el juego en caso de haber perdido." if teclado: if teclado[0].key == K_F5: self.__init__() def jugar(self): "Ejecuta el videojuego." jugando = True reloj = p.time.Clock() while jugando: #Frecuencia de actualizacion (Velocidad de la serpiente). reloj.tick(10) #Obtencion de eventos. teclado = p.event.get(p.KEYDOWN) cerrar = p.event.get(p.QUIT) # Nucleo del juego. ######################################## if not self.termino: #Control de la serpiente. self.serpiente.teclado(teclado) #Actualizar la posicion de la serpiente. self.serpiente.actualizar() #Generar nueva comida si la serpiente se alimento. if self.serpiente.se_alimento(self.comida): self.comida.generar(self.serpiente) self.puntos += 10 else: self.reiniciar(teclado) if self.serpiente.colisiona(): self.termino = True jugando = salir(cerrar, teclado) ############################################################ self.dibujar()
class UnboundSnake(): "Videojuego de la Serpiente realizado con Pygame." def __init__(self): "Inicializa el videojuego." p.init() self.pantalla = p.display.set_mode(PANTALLA) p.display.set_caption("Unbound Snake") #Creacion de objetos del videojuego. self.serpiente = Serpiente() self.comida = Comida(self.serpiente) #Variables de control. self.puntos = 0 self.termino = False #Textos. self.puntuacion = Texto("Puntos: ") self.instrucciones = Multilinea(("Reiniciar [F5]", "Salir [Esc]")) self.instrucciones.pos(2, 2, 16, 16) def dibujar(self): "Muestra los objetos en pantalla." self.pantalla.fill((0x11, 0x11, 0x11)) #Dibujar objetos en la interfaz. self.pantalla.blit(self.comida.image, self.comida.mostrar()) self.pantalla.blit(self.puntuacion.mostrar(str(self.puntos)), self.puntuacion.pos(horz=0, vert=0)) #Dibujar la serpiente. for i in range(0, len(self.serpiente.cuerpo)): self.pantalla.blit(self.serpiente.image, self.serpiente.cuerpo[i]) #Juego Terminado if self.termino: self.instrucciones.mostrar(self.pantalla, 2) terminado = Texto("Juego Terminado", tamano=72) self.pantalla.blit(terminado.mostrar(), terminado.pos(1, 1)) p.display.flip() def reiniciar(self, teclado): "Reinicia el juego en caso de haber perdido." if teclado: if teclado[0].key == K_F5: self.__init__() def jugar(self): "Ejecuta el videojuego." jugando = True reloj = p.time.Clock() while jugando: #Frecuencia de actualizacion (Velocidad de la serpiente). reloj.tick(10) #Obtencion de eventos. teclado = p.event.get(p.KEYDOWN) cerrar = p.event.get(p.QUIT) # Nucleo del juego. ######################################## if not self.termino: #Control de la serpiente. self.serpiente.teclado(teclado) #Actualizar la posicion de la serpiente. self.serpiente.actualizar() #Generar nueva comida si la serpiente se alimento. if self.serpiente.se_alimento(self.comida): self.comida.generar(self.serpiente) self.puntos += 10 else: self.reiniciar(teclado) if self.serpiente.colisiona(): self.termino = True jugando = salir(cerrar, teclado) ############################################################ self.dibujar()