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(': ')