LINK: DESCARGAR
| EJECUCIÓN DE CÓDIGO |
import pygame
from pygame.locals import *
import math
import worldManager
import time
worldMap =[
[8,8,8,8,8,8,8,8,8,8,8,4,4,6,4,4,6,4,6,4,4,4,6,4],#24
[8,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,0,0,0,0,0,0,4],
[8,0,3,3,0,0,0,0,0,8,8,4,0,0,0,0,0,0,0,0,0,0,0,6],
[8,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6],
[8,0,3,3,0,0,0,0,0,8,8,4,0,0,0,0,0,0,0,0,0,0,0,4],
[8,0,0,0,0,0,0,0,0,0,8,4,0,0,0,0,0,6,6,6,0,6,4,6],
[8,8,8,8,0,8,8,8,8,8,8,4,4,4,4,4,4,6,0,0,0,0,0,6],
[7,7,7,7,0,7,7,7,7,0,8,0,8,0,8,0,8,4,0,4,0,6,0,6],
[7,7,0,0,0,0,0,0,7,8,0,8,0,8,0,8,8,6,0,0,0,0,0,6],
[7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,0,0,0,0,4],
[7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8,6,0,6,0,6,0,6],
[7,7,0,0,0,0,0,0,7,8,0,8,0,8,0,8,8,6,4,6,0,6,6,6],
[7,7,7,7,0,7,7,7,7,8,8,4,0,6,8,4,8,3,3,3,0,3,3,3],
[2,2,2,2,0,2,2,2,2,4,6,4,0,0,6,0,6,3,0,0,0,0,0,3],
[2,2,0,0,0,0,0,2,2,4,0,0,0,0,0,0,4,3,0,0,0,0,0,3],
[2,0,0,0,0,0,0,0,2,4,0,0,0,0,0,0,4,3,0,0,0,0,0,3],
[1,0,0,0,0,0,0,0,1,4,4,4,4,4,6,0,6,3,3,0,0,0,3,3],
[2,0,0,0,0,0,0,0,2,2,2,1,2,2,2,6,6,0,0,5,0,5,0,5],
[2,2,0,0,0,0,0,2,2,2,0,0,0,2,2,0,5,0,5,0,0,0,5,5],
[2,0,0,0,0,0,0,0,2,0,0,0,0,0,2,5,0,5,0,5,0,5,0,5],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5],
[2,0,0,0,0,0,0,0,2,0,0,0,0,0,2,5,0,5,0,5,0,5,0,5],
[2,2,0,0,0,0,0,2,2,2,0,0,0,2,2,0,5,0,5,0,0,0,5,5],
[2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,5,5,5,5,5,5,5,5,5]
];#24
#worldMap =[
# [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2],
# [2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2]
#];
sprite_positions=[
(20.5, 11.5, 2), #green light in front of playerstart
#green lights in every room
(18.5,4.5, 2),
(10.0,4.5, 2),
(10.0,12.5,2),
(3.5, 6.5, 2),
(3.5, 20.5,2),
(3.5, 14.5,2),
(14.5,20.5,2),
#row of pillars in front of wall: fisheye test
(18.5, 10.5, 1),
(18.5, 11.5, 1),
(18.5, 12.5, 1),
#some barrels around the map
(21.5, 1.5, 0),
(15.5, 1.5, 0),
(16.0, 1.8, 0),
(16.2, 1.2, 0),
(3.5, 2.5, 0),
(9.5, 15.5, 0),
(10.0, 15.1,0),
(10.5, 15.8,0),
]
def load_image(image, darken, colorKey = None):
ret = []
if colorKey is not None:
image.set_colorkey(colorKey)
if darken:
image.set_alpha(127)
for i in range(image.get_width()):
s = pygame.Surface((1, image.get_height())).convert()
#s.fill((0,0,0))
s.blit(image, (- i, 0))
if colorKey is not None:
s.set_colorkey(colorKey)
ret.append(s)
return ret
def main():
t = time.clock() #time of current frame
oldTime = 0. #time of previous frame
pygame.mixer.init()#inicializar el modulo mezclador
pygame.mixer.music.load("MuseUprising.mp3")
pygame.mixer.music.play(-1)
size = w, h = 640,480
pygame.init()
window = pygame.display.set_mode(size)#Inicializa una ventana o pantalla para visualizar
pygame.display.set_caption("Gh0stenstein")
screen = pygame.display.get_surface()#toma una referencia de la superficie de visualizacion actualmente configurada
#pixScreen = pygame.surfarray.pixels2d(screen)
pygame.mouse.set_visible(False)
clock = pygame.time.Clock()
#crea un objeto para ayudar a rastrear el tiempo
f = pygame.font.SysFont(pygame.font.get_default_font(), 20)
#crear un objeto Font a partir de las fuentes del sistema
wm = worldManager.WorldManager(worldMap,sprite_positions, 22, 11.5, -1, 0, 0, .66)
weapons = [Weapon("fist"),
Weapon("pistol"),
Weapon("shotgun"),
Weapon("dbshotgun"),
Weapon("chaingun"),
Weapon("plasma"),
Weapon("rocket"),
Weapon("bfg"),
Weapon("chainsaw")
]
weapon_numbers = [K_1,K_2,K_3,K_4,K_5,K_6,K_7,K_8,K_0]
weapon = weapons[0]
#creacion de un bucle infinito que no cierre la ventana
while(True):
clock.tick(60)#se le pasa como parametro es el framerate,
#con el nos aseguramos de que el juego no va a mas de esa velocidad.
wm.draw(screen)
# tiempo de entrada y contador de FPS
frameTime = float(clock.get_time()) / 1000.0 # frameTime is the time this frame has taken, in seconds
t = time.clock()
text = f.render(str(clock.get_fps()), False, (255, 255, 0))
screen.blit(text, text.get_rect(), text.get_rect())
weapon.draw(screen, t)
pygame.display.flip()#Actualiza la pantalla completa de la superficie a la pantalla
# speed modifiers
moveSpeed = frameTime * 6.0 # the constant value is in squares / second
rotSpeed = frameTime * 2.0 # el valor de la constante es en radianes / segundo
for event in pygame.event.get(): #get events from the queue
if event.type == QUIT: #si se preciona la x de la ventana se detandra el bucle y cerrara el juego
return
elif event.type == KEYDOWN:
if event.key == K_ESCAPE:
return
elif event.key == K_SPACE:
#shoot
weapon.play()
elif event.key in weapon_numbers:
weapon.stop()
weapon = weapons[weapon_numbers.index(event.key)]
elif event.type == KEYUP:
if event.key == K_SPACE:
weapon.stop()
else:
pass
keys = pygame.key.get_pressed() #obtiene el estado de todos los botones del teclado
if keys[K_UP]:
# move forward if no wall in front of you
moveX = wm.camera.x + wm.camera.dirx * moveSpeed
if(worldMap[int(moveX)][int(wm.camera.y)]==0 and worldMap[int(moveX + 0.1)][int(wm.camera.y)]==0):wm.camera.x += wm.camera.dirx * moveSpeed
moveY = wm.camera.y + wm.camera.diry * moveSpeed
if(worldMap[int(wm.camera.x)][int(moveY)]==0 and worldMap[int(wm.camera.x)][int(moveY + 0.1)]==0):wm.camera.y += wm.camera.diry * moveSpeed
if keys[K_DOWN]:
# move backwards if no wall behind you
if(worldMap[int(wm.camera.x - wm.camera.dirx * moveSpeed)][int(wm.camera.y)] == 0):wm.camera.x -= wm.camera.dirx * moveSpeed
if(worldMap[int(wm.camera.x)][int(wm.camera.y - wm.camera.diry * moveSpeed)] == 0):wm.camera.y -= wm.camera.diry * moveSpeed
if (keys[K_RIGHT] and not keys[K_DOWN]) or (keys[K_LEFT] and keys[K_DOWN]):
# gira hacia la derecha
# tanto la direccion de la camara como el plano de la camara deben girarse
oldDirX = wm.camera.dirx
wm.camera.dirx = wm.camera.dirx * math.cos(- rotSpeed) - wm.camera.diry * math.sin(- rotSpeed)
wm.camera.diry = oldDirX * math.sin(- rotSpeed) + wm.camera.diry * math.cos(- rotSpeed)
oldPlaneX = wm.camera.planex
wm.camera.planex = wm.camera.planex * math.cos(- rotSpeed) - wm.camera.planey * math.sin(- rotSpeed)
wm.camera.planey = oldPlaneX * math.sin(- rotSpeed) + wm.camera.planey * math.cos(- rotSpeed)
if (keys[K_LEFT] and not keys[K_DOWN]) or (keys[K_RIGHT] and keys[K_DOWN]):
# rotate to the left
# both camera direction and camera plane must be rotated
oldDirX = wm.camera.dirx
wm.camera.dirx = wm.camera.dirx * math.cos(rotSpeed) - wm.camera.diry * math.sin(rotSpeed)
wm.camera.diry = oldDirX * math.sin(rotSpeed) + wm.camera.diry * math.cos(rotSpeed)
oldPlaneX = wm.camera.planex
wm.camera.planex = wm.camera.planex * math.cos(rotSpeed) - wm.camera.planey * math.sin(rotSpeed)
wm.camera.planey = oldPlaneX * math.sin(rotSpeed) + wm.camera.planey * math.cos(rotSpeed)
fps = 8
class Weapon(object):
def __init__(self, weaponName="shotgun", frameCount = 5):
self.images = []
self.loop = False
self.playing = False
self.frame = 0
self.oldTime = 0
for i in range(frameCount):
img = pygame.image.load("pics/weapons/%s%s.bmp" % (weaponName, i+1)).convert()
img = pygame.transform.scale2x(img)
img = pygame.transform.scale2x(img)
img.set_colorkey(img.get_at((0,0)))
self.images.append(img)
def play(self):
self.playing = True
self.loop = True
def stop(self):
self.playing = False
self.loop = False
def draw(self, surface, time):
if(self.playing or self.frame > 0):
if(time > self.oldTime + 1./fps):
self.frame = (self.frame+1) % len(self.images)
if self.frame == 0:
if self.loop:
self.frame = 1
else:
self.playing = False
self.oldTime = time
img = self.images[self.frame]
surface.blit(img, (surface.get_width()/2 - img.get_width()/2, surface.get_height()-img.get_height()))
if __name__ == '__main__':
main()
No hay comentarios:
Publicar un comentario