Mercurial > atc
changeset 35:c0c52fb4a7fd
Moved most of single player game code into new class Game()
This will simplify code management between single/multi-player game
modes
author | Josef "Jeff" Sipek <jeffpc@optonline.net> |
---|---|
date | Thu, 18 Aug 2005 00:14:13 -0500 |
parents | 755ff797483f |
children | 800a6d7fae8f |
files | atc_game.py atc_single.py |
diffstat | 2 files changed, 264 insertions(+), 210 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/atc_game.py Thu Aug 18 00:14:13 2005 -0500 @@ -0,0 +1,260 @@ +#/* +# * ATC - Air Traffic Controller simulation game +# * +# * Copyright (C) 2005 Josef "Jeff" Sipek <jeffpc@optonline.net> +# * +# * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +# * +# * @(#) %M% %I% %E% %U% +# */ + +import pygame +import sys + +import atc_colors +import atc_utils +import atc_plane +import atc_message + +from atc_maps import * + +class Game: + def __init__(self, screen): + # background music + #atc_utils.playmusic("some.mp3"); + + self.displays = { + "map": 1, + "weather": 0, + "navaids": 0, + "menus": 0, + "planes": 1} + + # 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 (atc_colors.black) + self.screen_map.fill (atc_colors.transparent) + self.screen_weather.fill(atc_colors.transparent) + self.screen_navaids.fill(atc_colors.transparent) + self.screen_menus.fill (atc_colors.transparent) + self.screen_cmd.fill (atc_colors.transparent) + + (back_image, back_rect) = atc_utils.load_png(MAPS[0]["image"]) + self.screen_map.blit(back_image, (0, 0)) + + #blit! + self.screen.blit(self.screen_map, (0, 0)) + pygame.display.flip() + + self.planes = [atc_plane.Plane(callsign="N12422",flightno="Delta 79",vel=(50, 50, 10)),] + + self.mess = atc_message.Message() + + self.cmd = "" + + def __proc_cmd(self): + flno = cmd_plane(self.cmd) + com = cmd_cmd(self.cmd) + + flag = None + if (com!=None) and (flno!=None): + print "plane = " + flno + ", cmd = " + com + for plane in self.planes: + if plane.flightno.upper() == flno.upper(): + print "Found match!" + plane.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 = 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 + + self.screen_planes.fill(atc_colors.transparent) + for plane in self.planes: + plane.display(self.screen_planes) + plane.update() + if (plane.status == atc_plane.plane_CRASHED): + mess.write(self.screen_planes, plane.callsign + ": PLANE CRASHED") + plane.status = atc_plane.plane_DEAD + + self.screen_cmd.fill(atc_colors.transparent) + if (self.cmd): + font = pygame.font.Font(None, 18) + text = font.render(self.cmd, 1, atc_colors.white) + self.screen_cmd.blit(text, (25, 735)) + + 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 + +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 + +if (__name__ == '__main__'): + print "Don't do it!"
--- a/atc_single.py Wed Aug 17 18:55:59 2005 -0500 +++ b/atc_single.py Thu Aug 18 00:14:13 2005 -0500 @@ -27,222 +27,16 @@ import atc_utils import atc_plane import atc_message +import atc_game from atc_maps import * def single(screen): """ Main fn to run the single player game """ - - # background music - #atc_utils.playmusic("some.mp3"); - - displays = { - "map": 1, - "weather": 0, - "navaids": 0, - "menus": 0, - "planes": 1} - - # set up the display layers as much as possible - screen_void = pygame.Surface(screen.get_size()).convert_alpha() - screen_map = pygame.Surface(screen.get_size()).convert_alpha() - screen_weather = pygame.Surface(screen.get_size()).convert_alpha() - screen_navaids = pygame.Surface(screen.get_size()).convert_alpha() - screen_menus = pygame.Surface(screen.get_size()).convert_alpha() - screen_planes = pygame.Surface(screen.get_size()).convert_alpha() - screen_cmd = pygame.Surface(screen.get_size()).convert_alpha() - - screen_void.fill( atc_colors.black) - screen_map.fill( atc_colors.transparent) - screen_weather.fill(atc_colors.transparent) - screen_navaids.fill(atc_colors.transparent) - screen_menus.fill( atc_colors.transparent) - screen_cmd.fill( atc_colors.transparent) - - (back_image, back_rect) = atc_utils.load_png(MAPS[0]["image"]) - screen_map.blit(back_image, (0, 0)) - - # Some text -# font = pygame.font.Font(None, 36) -# text = font.render("Air Traffic Controller", 1, atc_colors.red) -# textpos = text.get_rect() -# textpos.centerx = screen_map.get_rect().centerx -# screen_map.blit(text, textpos) - - #blit! - screen.blit(screen_map, (0, 0)) - pygame.display.flip() - - planes = [atc_plane.Plane(callsign="N12422",flightno="Delta 79",vel=(50, 50, 10)),] - - mess = atc_message.Message() - - cmd = "" + g = atc_game.Game(screen) - while 1: - for event in pygame.event.get(): - if event.type == pygame.QUIT: - mess.pickup_kill = 1 - sys.exit() - if event.type == pygame.KEYDOWN: - # commands - #if event.key == pygame.K_q: - # mess.pickup_kill = 1 - # return - - if event.key == pygame.K_a: - cmd += 'A' - if event.key == pygame.K_b: - cmd += 'B' - if event.key == pygame.K_c: - cmd += 'C' - if event.key == pygame.K_d: - cmd += 'D' - if event.key == pygame.K_e: - cmd += 'E' - if event.key == pygame.K_f: - cmd += 'F' - if event.key == pygame.K_g: - cmd += 'G' - if event.key == pygame.K_h: - cmd += 'H' - if event.key == pygame.K_i: - cmd += 'I' - if event.key == pygame.K_j: - cmd += 'J' - if event.key == pygame.K_k: - cmd += 'K' - if event.key == pygame.K_l: - cmd += 'L' - if event.key == pygame.K_m: - cmd += 'M' - if event.key == pygame.K_n: - cmd += 'N' - if event.key == pygame.K_o: - cmd += 'O' - if event.key == pygame.K_p: - cmd += 'P' - if event.key == pygame.K_q: - cmd += 'Q' - if event.key == pygame.K_r: - cmd += 'R' - if event.key == pygame.K_s: - cmd += 'S' - if event.key == pygame.K_t: - cmd += 'T' - if event.key == pygame.K_u: - cmd += 'U' - if event.key == pygame.K_v: - cmd += 'V' - if event.key == pygame.K_w: - cmd += 'W' - if event.key == pygame.K_x: - cmd += 'X' - if event.key == pygame.K_y: - cmd += 'Y' - if event.key == pygame.K_z: - cmd += 'Z' - - if (event.key == pygame.K_0) or (event.key == pygame.K_KP0): - cmd += '0' - if (event.key == pygame.K_1) or (event.key == pygame.K_KP1): - cmd += '1' - if (event.key == pygame.K_2) or (event.key == pygame.K_KP2): - cmd += '2' - if (event.key == pygame.K_3) or (event.key == pygame.K_KP3): - cmd += '3' - if (event.key == pygame.K_4) or (event.key == pygame.K_KP4): - cmd += '4' - if (event.key == pygame.K_5) or (event.key == pygame.K_KP5): - cmd += '5' - if (event.key == pygame.K_6) or (event.key == pygame.K_KP6): - cmd += '6' - if (event.key == pygame.K_7) or (event.key == pygame.K_KP7): - cmd += '7' - if (event.key == pygame.K_8) or (event.key == pygame.K_KP8): - cmd += '8' - if (event.key == pygame.K_9) or (event.key == pygame.K_KP9): - cmd += '9' - - if (event.key == pygame.K_COLON) or (event.key == pygame.K_SEMICOLON): - cmd += ': ' - - if event.key == pygame.K_SPACE: - cmd += " " - - if event.key == pygame.K_ESCAPE: - cmd = "" - if event.key == pygame.K_BACKSPACE: - cmd = cmd[:-1] - - if event.key == pygame.K_TAB: - pass # fixme, tab complete call signs/flight numbers, commands, etc. - - if event.key == pygame.K_F1: - displays["map"] = 1 - displays["map"] - if event.key == pygame.K_F2: - displays["weather"] = 1 - displays["weather"] - if event.key == pygame.K_F3: - displays["navaids"] = 1 - displays["navaids"] - if event.key == pygame.K_F4: - displays["menus"] = 1 - displays["menus"] - if event.key == pygame.K_F5: - displays["planes"] = 1 - displays["planes"] - - if (event.key == pygame.K_KP_ENTER) or (event.key == pygame.K_RETURN): - if (cmd == "QUIT"): - mess.pickup_kill = 1 - return - - if (cmd.__len__()): - flno = cmd_plane(cmd) - com = cmd_cmd(cmd) - - flag = None - if (com!=None) and (flno!=None): - print "plane = " + flno + ", cmd = " + com - for plane in planes: - if plane.flightno.upper() == flno.upper(): - print "Found match!" - plane.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" - - cmd = "" - - screen_planes.fill(atc_colors.transparent) - for plane in planes: - plane.display(screen_planes) - plane.update() - if (plane.status == atc_plane.plane_CRASHED): - mess.write(screen_planes,plane.callsign + ": PLANE CRASHED") - plane.status = atc_plane.plane_DEAD - - screen_cmd.fill(atc_colors.transparent) - if (cmd): - font = pygame.font.Font(None, 18) - text = font.render(cmd, 1, atc_colors.white) - screen_cmd.blit(text, (25, 735)) - - screen.blit(screen_void, (0, 0)) - if (displays["map"]): - screen.blit(screen_map, (0, 0)) - if (displays["weather"]): - screen.blit(screen_weather, (0, 0)) - if (displays["navaids"]): - screen.blit(screen_navaids, (0, 0)) - if (displays["menus"]): - screen.blit(screen_menus, (0, 0)) - if (displays["planes"]): - screen.blit(screen_planes, (0, 0)) - screen.blit(screen_cmd, (0, 0)) - - pygame.display.flip() + while g.run(): pass + def cmd_plane(cmd): parts = cmd.split(': ')