Module game
[hide private]
[frames] | no frames]

Source Code for Module game

  1  from cocos.actions.interval_actions import ScaleTo 
  2  from cocos.director import director 
  3  from cocos.layer.base_layers import Layer 
  4  from cocos.menu import CENTER, Menu, MenuItem, EntryMenuItem 
  5  from cocos.scene import Scene 
  6  from cocos.sprite import * 
  7  from cocos.text import RichLabel 
  8  from cocos.actions.interval_actions import MoveBy, Delay, FadeOut, FadeIn 
  9  from constants import BACKGROUND_Z 
 10  from imageLayer import ImageLayer 
 11  from pyglet.resource import media, image 
 12  from pyglet.window import * 
 13  from objects import Objects 
 14  from poem import POEM 
 15  from music import menu_player, intro_sound_player 
 16  from cocos.layer import Layer 
 17  from pyglet.gl.gl import glColor4ub, glPushMatrix, glPopMatrix 
 18  from cocos import collision_model 
 19  from game_layers import MessageInstruction 
 20  from instructionButtons import * 
 21  from cocos.actions.instant_actions import CallFunc 
 22  import os 
 23  import pyglet.font 
 24  import utils 
 25  import constants 
 26   
 27  # Loading the font directory 
 28  pyglet.font.add_directory('fonts') 
 29   
 30   
31 -def zoom_in():
32 return ScaleTo(1.3, duration=0.2)
33 34
35 -def zoom_out():
36 return ScaleTo(1.0, duration=0.2)
37 38
39 -def set_menu_theme(menu):
40 menu.font_title['font_name'] = 'ChalkDust' 41 menu.font_title['font_size'] = 64 42 menu.font_title['color'] = (255, 255, 255, 255) 43 44 menu.font_item['font_name'] = 'ChalkDust' 45 menu.font_item['font_size'] = 27 46 menu.font_item['color'] = (255, 255, 255, 255) 47 48 menu.font_item_selected['font_name'] = 'ChalkDust' 49 menu.font_item_selected['font_size'] = 27 50 menu.font_item_selected['color'] = (255, 255, 255, 255) 51 52 menu.menu_valign = CENTER 53 menu.menu_halign = CENTER
54
55 -class LevelMenu(Menu):
56 activate_sound = media( 57 os.path.join('sounds', "Menu.wav"), streaming=False) 58 select_sound = media( 59 os.path.join('sounds', "Menu.wav"), streaming=False) 60
61 - def __init__(self,txt):
62 super(LevelMenu, self).__init__("Select Level")
63 64
65 -class EndMenu(Menu):
66 activate_sound = media( 67 os.path.join('sounds', "Menu.wav"), streaming=False) 68 select_sound = media( 69 os.path.join('sounds', "Menu.wav"), streaming=False) 70
71 - def __init__(self,txt,curLevel):
72 super(EndMenu, self).__init__("Game Over, You " + txt) 73 74 self.levelName = "" 75 self.level = curLevel 76 77 set_menu_theme(self) 78 79 self.ok = MenuItem("Back to Main Menu",director.pop) 80 81 if txt == "Lost": 82 self.retry = MenuItem("Retry Level", self.on_retry) 83 items = [(self.ok),(self.retry)] 84 self.levelName = "level"+str(curLevel) 85 elif curLevel <= 5: 86 self.win = MenuItem("Next Level", self.on_win) 87 items = [(self.ok),(self.win),] 88 self.levelName = "level"+str(curLevel+1) 89 else: 90 self.end_scene = MenuItem("You Fired Mr Winely!",director.pop) 91 items = [(self.ok),self.end_scene] 92 93 self.create_menu(items,ScaleTo(1.3, duration=0.2),ScaleTo(1.0, duration=0.2))
94 95
96 - def on_win(self):
97 Objects.reset_game() 98 server = Objects.get_server(self.levelName) 99 server.curLevel = self.level+1 100 utils.play_sound("Enter.wav") 101 game = Scene(server.map, server) 102 game.add(ImageLayer(os.path.join("images", "backgrounds", "notebook-paper.png")), z=BACKGROUND_Z) 103 director.push(game) 104 menu_player.stop() 105 self.game_started = True
106
107 - def on_retry(self):
108 Objects.reset_game() 109 server = Objects.get_server(self.levelName) 110 server.curLevel = self.level 111 utils.play_sound("Enter.wav") 112 game = Scene(server.map, server) 113 game.add(ImageLayer(os.path.join("images", "backgrounds", "notebook-paper.png")), z=BACKGROUND_Z) 114 director.push(game) 115 menu_player.stop() 116 self.game_started = True
117
118 - def on_quit(self):
119 director.pop()
120 121 205 206
207 -def play_intro_animation(scene):
208 209 image_frames = [] 210 for i in range(86): 211 if(i <= 9): 212 image_frames.append(os.path.join( 213 'images', 'intro_animation', 'intro_0000' + str(i) + '.png')) 214 else: 215 image_frames.append(os.path.join( 216 'images', 'intro_animation', 'intro_000' + str(i) + '.png')) 217 218 image_frames = tuple(image_frames) 219 images = map(lambda img: pyglet.image.load(img), image_frames) 220 animation = pyglet.image.Animation.from_image_sequence( 221 images, 0.05, False) 222 sprite_name = Sprite(animation) 223 sprite_name.position = 350, 350 224 scene.add(sprite_name) 225 return sprite_name
226 227
228 -class IntroText(Layer):
229 is_event_handler = True 230
231 - def __init__(self):
232 super(IntroText, self).__init__() 233 self.poem = RichLabel(text=POEM, position=(100, 300), multiline=True, width=300, font_name='ChalkDust', font_size=27) 234 self.introZora = Sprite(os.path.join("images","intro_images","zora.png"), position=(750, 400), scale=1, opacity=0) 235 self.introTownmap = Sprite(os.path.join("images","intro_images","town-map.png"), position=(830, 400), scale=.75,opacity=0) 236 self.introNetmap = Sprite(os.path.join("images","intro_images","network-map.png"), position=(800, 400), scale=.75,opacity=0) 237 self.introNotebook = Sprite(os.path.join("images","intro_images","notebook.png"), position=(780, 400), scale=.75,opacity=0) 238 self.background = ImageLayer(os.path.join("images","backgrounds","chalkboard_align_topleft.png")) 239 self.background.position=(0, 0) 240 self.background.scale=1 241 self.background.anchor=(0.0, 0.0) 242 self.background.z=1 243 self.add(self.poem) 244 self.add(self.introZora) 245 self.add(self.introTownmap) 246 self.add(self.introNetmap) 247 self.add(self.introNotebook) 248 self.add(self.poem) 249 self.add(self.background) 250 self.help = RichLabel(text="Help Zora take down the school's network!", halign='center',position=(100, 500), multiline=True, width=700, font_name='ChalkDust', font_size=40) 251 self.help.opacity = 1 252 self.add(self.help,z=1)
253
254 - def on_enter(self):
255 super(IntroText, self).on_enter() 256 menu_player.play() 257 menu_player.set_volume(1) 258 intro_sound_player.play() 259 intro_sound_player.set_volume(2) 260 intro_sound_player.player.eos_action = pyglet.media.Player.EOS_STOP 261 262 a = Delay(2) 263 a += MoveBy((0, 6300), 100) 264 a += Delay(3) 265 a += CallFunc(self.on_quit) 266 b = Delay(101) 267 b += FadeIn(1) 268 #Story images 269 c = Delay(5) 270 c += FadeIn(1) 271 c += Delay(11) 272 c += FadeOut(1) 273 d = Delay(20) 274 d += FadeIn(1) 275 d += Delay(5) 276 d += FadeOut(1) 277 e = Delay(28) 278 e += FadeIn(1) 279 e += Delay(13) 280 e += FadeOut(1) 281 f = Delay(44) 282 f += FadeIn(1) 283 f += Delay(51) 284 f += FadeOut(3) 285 286 287 self.poem.do(a) 288 self.help.do(b) 289 self.introZora.do(c) 290 self.introTownmap.do(d) 291 self.introNetmap.do(e) 292 self.introNotebook.do(f)
293
294 - def on_key_press(self, k, m):
295 if k == pyglet.window.key.ENTER or k == pyglet.window.key.ESCAPE: 296 intro_sound_player.stop() 297 self.on_quit() 298 return True
299
300 - def on_quit(self):
301 intro_sound_player.stop() 302 self.poem.stop() 303 director.pop() 304 return True
305 306 307
308 -class HelpZoraScene(Layer):
309 is_event_handler = True 310
311 - def __init__(self):
312 super(HelpZoraScene, self).__init__() 313 self.background = ImageLayer(os.path.join("images","backgrounds","chalkboard_align_topleft.png")) 314 self.background.position=(0, 0) 315 self.background.scale=1 316 self.background.anchor=(0.0, 0.0) 317 self.background.z=1 318 self.poem = RichLabel(text="Help Zora!", position=(500, 500), width=300, font_name='Rabiohead', font_size=27) 319 self.image = Sprite(os.path.join("images","maps","surrender.png"),position=(700, 500),scale=0.4) 320 321 self.add(self.background) 322 self.add(self.poem) 323 self.add(self.image)
324
325 - def on_enter(self):
326 super(HelpZoraScene, self).on_enter() 327 intro_sound_player.stop() 328 329 menu_player.set_volume(3) 330 a = Delay(3) 331 a += CallFunc(self.on_quit) 332 self.poem.do(a)
333 334
335 - def on_key_press(self, k, m):
336 if k == pyglet.window.key.ENTER or k == pyglet.window.key.ESCAPE: 337 self.on_quit() 338 return True
339
340 - def on_quit(self):
341 self.poem.stop() 342 director.pop() 343 return True
344 345
346 -class Intro(Layer):
347 #class works in conjunction to instructions.py 348 is_event_handler = True 349
350 - def __init__(self, img):
351 super(Intro, self).__init__() 352 self.img = image(img) 353 self.collision_manager = collision_model.CollisionManagerBruteForce() 354 self.load_instructions()
355
356 - def load_instructions(self):
357 MessageInstruction(self, "Press Esc: Home Menu", False, 300,550, 500,300,21) 358 MessageInstruction(self, "Instructions", False, 500,500, 500,300,90) 359 #adding buttons 360 unit_detail_button = UnitDetailsButton(500,400) 361 unit_detail_button.scale = .7 362 unit_detail_button.postion = 100,100 363 self.add(unit_detail_button, z=1) 364 self.collision_manager.add(unit_detail_button) 365 366 controls_button = ControlsButton(500,300) 367 controls_button.postion = 100,100 368 controls_button.scale = .7 369 self.add(controls_button, z=1) 370 self.collision_manager.add(controls_button) 371 372 tt_button = TechTreeButton(500,200) 373 tt_button.postion = 100,100 374 tt_button.scale = .7 375 self.add(tt_button, z=1) 376 self.collision_manager.add(tt_button)
377
378 - def load_controls(self):
379 self.clear_panel(self.get_children()) 380 resource_troops_panel = Sprite(os.path.join("images", "instructions", "controls_panel.png")) 381 resource_troops_panel.position = 580,400 382 self.add(resource_troops_panel, z=1) 383 384 back_button = BackButton(130,75) 385 self.add(back_button, z=1) 386 self.collision_manager.add(back_button)
387
388 - def load_tech_tree(self):
389 self.clear_panel(self.get_children()) 390 resource_troops_panel = Sprite(os.path.join("images", "instructions", "techtree_panel.png")) 391 resource_troops_panel.position = 500,400 392 self.add(resource_troops_panel, z=1) 393 394 back_button = BackButton(130,75) 395 self.add(back_button, z=1) 396 self.collision_manager.add(back_button)
397
398 - def load_overview_panel(self):
399 overview_panel = Sprite(os.path.join("images", "instructions", "overview_text.png")) 400 overview_panel.position = 500,400 401 overview_panel.scale = .8 402 self.add(overview_panel, z=1) 403 404 back_button = BackButton(100,75) 405 back_button.scale = .8 406 self.add(back_button, z=1) 407 self.collision_manager.add(back_button) 408 409 #adding buttons 410 building_button = BuildingsDetailsButton(180,225) 411 self.add(building_button, z=1) 412 self.collision_manager.add(building_button) 413 414 resource_button = ResourceDetailsButton(850,225) 415 self.add(resource_button, z=1) 416 self.collision_manager.add(resource_button) 417 418 utility_troop_button = UtilityTroopDetailsButton(390,120) 419 self.add(utility_troop_button, z=1) 420 self.collision_manager.add(utility_troop_button) 421 422 attack_troop_button = AttackTroopDetailsButton(650,120) 423 self.add(attack_troop_button, z=1) 424 self.collision_manager.add(attack_troop_button)
425
426 - def load_building_panel(self):
427 self.clear_panel(self.get_children()) 428 building_panel = Sprite(os.path.join("images", "instructions", "building_panel.png")) 429 building_panel.position = 500,400 430 self.add(building_panel, z=1) 431 432 back_button = BackButtonUD(300,150) 433 self.add(back_button, z=1) 434 self.collision_manager.add(back_button)
435
437 self.clear_panel(self.get_children()) 438 utility_troop_panel = Sprite(os.path.join("images", "instructions", "utility_troop_panel.png")) 439 utility_troop_panel.position = 500,380 440 self.add(utility_troop_panel, z=1) 441 442 443 back_button = BackButtonUD(300,80) 444 self.add(back_button, z=1) 445 self.collision_manager.add(back_button)
446
447 - def load_attack_troops_panel(self):
448 self.clear_panel(self.get_children()) 449 attack_troop_panel = Sprite(os.path.join("images", "instructions", "attack_troop_panel.png")) 450 attack_troop_panel.position = 500,400 451 self.add(attack_troop_panel, z=1) 452 453 454 back_button = BackButtonUD(300,80) 455 back_button.postion = 390,50 456 self.add(back_button, z=1) 457 self.collision_manager.add(back_button)
458
460 self.clear_panel(self.get_children()) 461 resource_troops_panel = Sprite(os.path.join("images", "instructions", "resource_panel.png")) 462 resource_troops_panel.position = 500,400 463 self.add(resource_troops_panel, z=1) 464 465 back_button = BackButtonUD(300,80) 466 self.add(back_button, z=1) 467 self.collision_manager.add(back_button)
468
469 - def draw(self):
470 glColor4ub(255, 255, 255, 255) 471 glPushMatrix() 472 self.transform() 473 self.img.blit(0, 0) 474 glPopMatrix()
475
476 - def clear_panel(self, panel_item_list):
477 for panel_item in panel_item_list: 478 if(type(panel_item) == BackButton or type(panel_item) == BackButtonUD 479 or type(panel_item) == AttackTroopDetailsButton 480 or type(panel_item) == UtilityTroopDetailsButton 481 or type(panel_item) == BuildingsDetailsButton 482 or type(panel_item) == ResourceDetailsButton 483 or type(panel_item) == UnitDetailsButton 484 or type(panel_item) == ControlsButton 485 or type(panel_item) == TechTreeButton): 486 self.collision_manager.remove_tricky(panel_item) 487 panel_item.kill()
488
489 - def on_mouse_release(self, x, y, buttons, modifiers):
490 clicked_units = self.collision_manager.objs_touching_point(x, y) 491 492 if(len(clicked_units) > 0): 493 clicked = clicked_units.pop() 494 if type(clicked) == BuildingsDetailsButton: 495 utils.play_sound("Enter.wav") 496 self.load_building_panel() 497 elif type(clicked) == UtilityTroopDetailsButton: 498 utils.play_sound("Enter.wav") 499 self.load_utility_troops_panel() 500 elif type(clicked) == AttackTroopDetailsButton: 501 utils.play_sound("Enter.wav") 502 self.load_attack_troops_panel() 503 elif type(clicked) == ResourceDetailsButton: 504 utils.play_sound("Enter.wav") 505 self.load_resource_troops_panel() 506 elif type(clicked) == BackButtonUD: 507 utils.play_sound("Enter.wav") 508 self.clear_panel(self.get_children()) 509 self.load_overview_panel() 510 elif type(clicked) == BackButton: 511 utils.play_sound("Enter.wav") 512 self.clear_panel(self.get_children()) 513 self.load_instructions() 514 elif type(clicked) == UnitDetailsButton: 515 utils.play_sound("Enter.wav") 516 self.clear_panel(self.get_children()) 517 self.load_overview_panel() 518 elif type(clicked) == ControlsButton: 519 utils.play_sound("Enter.wav") 520 self.clear_panel(self.get_children()) 521 self.load_controls() 522 elif type(clicked) == TechTreeButton: 523 utils.play_sound("Enter.wav") 524 self.clear_panel(self.get_children()) 525 self.load_tech_tree() 526 else: 527 pass
528 -class MultiplayerMenu(Menu):
529 activate_sound = media( 530 os.path.join('sounds', "Menu.wav"), streaming=False) 531 select_sound = media( 532 os.path.join('sounds', "Menu.wav"), streaming=False) 533
534 - def __init__(self,levelName):
535 super(MultiplayerMenu, self).__init__('Multi-Player') 536 self.host = MenuItem("Start Server and Wait", self.new_game) 537 self.start = MenuItem("Finish Waiting, Start Game", self.start_game) 538 self.join = MenuItem("Join Game", self.join_game) 539 self.back = MenuItem("Back", self.on_quit) 540 self.levelName = levelName 541 items = [ 542 (self.host), 543 (self.start), 544 (self.join), 545 (self.back), 546 ] 547 548 set_menu_theme(self) 549 550 self.create_menu(items, zoom_in(), zoom_out()) 551 552 self.game_started = False
553
554 - def on_enter(self):
555 super(MultiplayerMenu, self).on_enter() 556 if self.game_started: 557 Objects.reset_game() 558 self.game_started = False
559
560 - def new_game(self):
561 constants.MULTIPLAYER = True 562 utils.play_sound("Enter.wav") 563 Objects.get_server(self.levelName).start_server()
564 # start server and wait 565
566 - def start_game(self):
567 constants.MULTIPLAYER = True 568 server = Objects.get_controller() 569 server.client_start_game() 570 if server.serverStarted: 571 utils.play_sound("Enter.wav") 572 game = Scene(server.map, server) 573 menu_player.stop() 574 game.add(ImageLayer( 575 os.path.join("images", "backgrounds", "notebook-paper.png")), z=BACKGROUND_Z) 576 director.push(game) 577 self.game_started = True 578 579 else: 580 print "start server first"
581
582 - def join_game(self):
583 constants.MULTIPLAYER = True 584 utils.play_sound("Enter.wav") 585 c = Objects.get_client() 586 c.start_server() # start client server 587 connection = c.server_connect() # connect to game server 588 if not connection: 589 c.stop_server() 590 menu_player.stop() 591 self.game_started = True
592
593 - def on_quit(self):
594 director.pop()
595 596 if __name__ == '__main__': 597 print "Please run python net-game.py instead, sorry for inconvenience!" 598