Mercurial > atc
view atcgame/game.py @ 49:43a1c4c6955c
Single player mode should take the Game class and modify it s.t. things make sense
author | Josef "Jeff" Sipek <jeffpc@josefsipek.net> |
---|---|
date | Fri, 01 Jun 2007 03:01:03 -0400 |
parents | d2efdc4ff196 |
children | ade56730daab |
line wrap: on
line source
#/* # * ATC - Air Traffic Controller simulation game # * # * Copyright (C) 2004-2007 Josef "Jeff" Sipek <jeffpc@josefsipek.net> # * # * This program is free software; you can redistribute it and/or modify # * it under the terms of the GNU General Public License version 2 as # * published by the Free Software Foundation. # * # * 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. # */ import pygame import sys import colors import utils import plane import message import weather from maps import * class Game: def __init__(self, screen): self.displays = { "map": 1, "weather": 0, "navaids": 0, "menus": 0, "planes": 1} self.map = MAPS[0] # FIXME: add param to chose map self.map.bootstrap() # set up the display layers as much as possible self.screen = screen self.screen_void = pygame.Surface(self.screen.get_size()).convert_alpha() self.screen_map = pygame.Surface(self.screen.get_size()).convert_alpha() self.screen_weather = pygame.Surface(self.screen.get_size()).convert_alpha() self.screen_navaids = pygame.Surface(self.screen.get_size()).convert_alpha() self.screen_menus = pygame.Surface(self.screen.get_size()).convert_alpha() self.screen_planes = pygame.Surface(self.screen.get_size()).convert_alpha() self.screen_cmd = pygame.Surface(self.screen.get_size()).convert_alpha() self.screen_void.fill (colors.black) self.screen_map.fill (colors.transparent) self.screen_weather.fill(colors.transparent) self.screen_navaids.fill(colors.transparent) self.screen_menus.fill (colors.transparent) self.screen_cmd.fill (colors.transparent) (back_image, back_rect) = utils.load_png(self.map.image) self.screen_map.blit(back_image, (0, 0)) #blit! self.screen.blit(self.screen_map, (0, 0)) pygame.display.flip() self.planes = [] self.weather = weather.Weather() self.mess = message.Message() self.cmd = "" def __del__(self): self.map.cleanup() def __proc_cmd(self): def cmd_plane(cmd): parts = cmd.split(': ') if (parts.__len__()>1): return parts[0] return None def cmd_cmd(cmd): parts = cmd.split(': ') if (parts.__len__()>1): return parts[1] return None ## flno = cmd_plane(self.cmd) com = cmd_cmd(self.cmd) flag = None if (com!=None) and (flno!=None): print "plane = " + flno + ", cmd = " + com for p in self.planes: if p.flightno.upper() == flno.upper(): print "Found match!" p.process(com) flag = 1 break if (flag == None): # either not the right syntax, or we # didn't find the right plane print "Error, could not process command" self.cmd = "" def __proc_events(self): for event in pygame.event.get(): if event.type == pygame.QUIT: self.mess.pickup_kill = 1 sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_a: self.cmd += 'A' if event.key == pygame.K_b: self.cmd += 'B' if event.key == pygame.K_c: self.cmd += 'C' if event.key == pygame.K_d: self.cmd += 'D' if event.key == pygame.K_e: self.cmd += 'E' if event.key == pygame.K_f: self.cmd += 'F' if event.key == pygame.K_g: self.cmd += 'G' if event.key == pygame.K_h: self.cmd += 'H' if event.key == pygame.K_i: self.cmd += 'I' if event.key == pygame.K_j: self.cmd += 'J' if event.key == pygame.K_k: self.cmd += 'K' if event.key == pygame.K_l: self.cmd += 'L' if event.key == pygame.K_m: self.cmd += 'M' if event.key == pygame.K_n: self.cmd += 'N' if event.key == pygame.K_o: self.cmd += 'O' if event.key == pygame.K_p: self.cmd += 'P' if event.key == pygame.K_q: self.cmd += 'Q' if event.key == pygame.K_r: self.cmd += 'R' if event.key == pygame.K_s: self.cmd += 'S' if event.key == pygame.K_t: self.cmd += 'T' if event.key == pygame.K_u: self.cmd += 'U' if event.key == pygame.K_v: self.cmd += 'V' if event.key == pygame.K_w: self.cmd += 'W' if event.key == pygame.K_x: self.cmd += 'X' if event.key == pygame.K_y: self.cmd += 'Y' if event.key == pygame.K_z: self.cmd += 'Z' if (event.key == pygame.K_0) or (event.key == pygame.K_KP0): self.cmd += '0' if (event.key == pygame.K_1) or (event.key == pygame.K_KP1): self.cmd += '1' if (event.key == pygame.K_2) or (event.key == pygame.K_KP2): self.cmd += '2' if (event.key == pygame.K_3) or (event.key == pygame.K_KP3): self.cmd += '3' if (event.key == pygame.K_4) or (event.key == pygame.K_KP4): self.cmd += '4' if (event.key == pygame.K_5) or (event.key == pygame.K_KP5): self.cmd += '5' if (event.key == pygame.K_6) or (event.key == pygame.K_KP6): self.cmd += '6' if (event.key == pygame.K_7) or (event.key == pygame.K_KP7): self.cmd += '7' if (event.key == pygame.K_8) or (event.key == pygame.K_KP8): self.cmd += '8' if (event.key == pygame.K_9) or (event.key == pygame.K_KP9): self.cmd += '9' if (event.key == pygame.K_COLON) or (event.key == pygame.K_SEMICOLON): self.cmd += ': ' if event.key == pygame.K_SPACE: self.cmd += " " if event.key == pygame.K_ESCAPE: self.cmd = "" if event.key == pygame.K_BACKSPACE: self.cmd = self.cmd[:-1] if event.key == pygame.K_TAB: pass # FIXME, tab complete call signs/flight numbers, commands, etc. if event.key == pygame.K_F1: self.displays["map"] = 1 - self.displays["map"] if event.key == pygame.K_F2: self.displays["weather"] = 1 - self.displays["weather"] if event.key == pygame.K_F3: self.displays["navaids"] = 1 - self.displays["navaids"] if event.key == pygame.K_F4: self.displays["menus"] = 1 - self.displays["menus"] if event.key == pygame.K_F5: self.displays["planes"] = 1 - self.displays["planes"] if (event.key == pygame.K_KP_ENTER) or (event.key == pygame.K_RETURN): if (self.cmd == "QUIT"): self.mess.pickup_kill = 1 return False if (self.cmd.__len__()): self.__proc_cmd() return True def run(self): if not self.__proc_events(): return False # planes self.screen_planes.fill(colors.transparent) for p in self.planes: p.display(self.screen_planes) p.update() if (p.status == plane.plane_CRASHED): mess.write(self.screen_planes, p.callsign + ": PLANE CRASHED") p.status = plane.plane_DEAD # weather self.weather.display(self.screen_weather) self.weather.update() # command self.screen_cmd.fill(colors.transparent) if (self.cmd): font = pygame.font.Font(None, 18) text = font.render(self.cmd, 1, colors.white) self.screen_cmd.blit(text, (25, 735)) # blit what's needed self.screen.blit(self.screen_void, (0, 0)) if (self.displays["map"]): self.screen.blit(self.screen_map, (0, 0)) if (self.displays["weather"]): self.screen.blit(self.screen_weather, (0, 0)) if (self.displays["navaids"]): self.screen.blit(self.screen_navaids, (0, 0)) if (self.displays["menus"]): self.screen.blit(self.screen_menus, (0, 0)) if (self.displays["planes"]): self.screen.blit(self.screen_planes, (0, 0)) self.screen.blit(self.screen_cmd, (0, 0)) pygame.display.flip() return True if (__name__ == '__main__'): print "Don't do it!"