1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# JAMtank.py por:
# Flavio Danesse <fdanesse@gmail.com>
# CeibalJAM! - Uruguay
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
import pygame
from pygame.locals import *
import gc
gc.enable()
import os
# Constantes para todo el Juego
RESOLUCIONMONITOR = (1200,900)
DIRECTORIODEIMAGENES = os.getcwd()+"/Imagenes/"
DIRECTORIODESONIDOS = os.getcwd()+"/Sonidos/"
MINOMBRE = os.getpid() # me identifica en el servidor
# importación de clases para objetos del juego en el cliente
from Graficos_JAMtank import Graficos_JAMtank
from Manejador_de_Eventos import Manejador_de_Eventos
from Jugador_JAMtank import Jugador_JAMtank
from Enlace_Red_JAMtank import Enlace_Red_JAMtank
class JAMtank():
''' Motor del Juego. Máquina de estados. '''
def __init__(self, ip="localhost", PUERTO=5000):
# Todo lo que deba ser dibujado se hace en esta clase
self.objetos_graficos = Graficos_JAMtank(RESOLUCIONMONITOR, DIRECTORIODEIMAGENES, DIRECTORIODESONIDOS)
# Todos los eventos se manejan en esta clase
self.objetos_de_eventos = Manejador_de_Eventos()
# El Jugador Local
self.protagonista = Jugador_JAMtank(imagen=DIRECTORIODEIMAGENES+"Tanque.bmp", nombre=MINOMBRE,
angulo=0, x=0, y=0, resolucion_monitor=RESOLUCIONMONITOR,
directorio_de_imagenes=DIRECTORIODEIMAGENES) # recordar que es un tanque sprite
# Enlace con el servidor en la red
self.enlace_red = Enlace_Red_JAMtank(ip=ip, PUERTO=PUERTO, protagonista=self.protagonista, objetos_graficos=self.objetos_graficos, nombre=MINOMBRE)
self.reloj = pygame.time.Clock()
self.Run() # ejecuta el juego.
def Run(self):
# ----------------------- Comienza el juego ---------------------------
self.objetos_graficos.setup(Jugador_JAMtank=self.protagonista) # Iniciando pygame
self.objetos_graficos.iniciar_escenario() # Levantando Escenario y Fondo
self.objetos_graficos.set_menu_puntaje() # Levantando Menús para Puntajes
self.objetos_de_eventos.setup(Jugador_JAMtank=self.protagonista, Enlace_Red=self.enlace_red) # Configurando Eventos para el Jugador Local
self.protagonista.setup() # Configurando al jugador protagónico (el local)
self.objetos_graficos.set_menu_ip_server(self.enlace_red.direccion_servidor[0])
pygame.time.wait(3)
self.estado = "En Juego"
#contar = 0
while self.estado == "En Juego":
self.reloj.tick(35)
# Detectar eventos y calcular en consecuencia
self.objetos_de_eventos.detectar()
# recolectar datos para enviar, recordar que los objetos se actualizan cuando los datos vuelven del server
self.enlace_red.buffer_de_salida = self.protagonista.get_datos_para_la_red()
self.enlace_red.enviar_datos()# enviar datos
self.enlace_red.recibir_datos()# recibir datos
# Actualiza los datos de puntaje y energia del jugador local en pantalla
self.objetos_graficos.actualiza_puntaje(puntos=self.protagonista.puntaje, energia=self.protagonista.energia)
# ranking
self.objetos_graficos.set_menu_jugadores(self.enlace_red.get_jugadores_puntos())
# Dibuja los cambios en pantalla
self.objetos_graficos.actualizar()
pygame.time.wait(1)
if __name__ == "__main__":
JAMtank("localhost")
|