示例#1
0
    def __init__(self, window_width, window_height, level_name):

        self.level_name = level_name

        self.map_controller = Map(self.level_name)

        self.character = Character()
示例#2
0
    def __init__(self):
        GameScreen.__init__(self)

        self.btnContinue.hide()

        self.mainChar = Character(self.frmContent.getCanvas(), (0,0,0), "mainChar", "mike")
        self.mainChar.animate("idle", "l", 3)
        self.mainChar.btn.reparentTo(self.frmContent.getCanvas(), 100)

        self.chapter = None
        self.inventory = Inventory(self.frmInventory)

        self.accept("quitGame", self.askQuit)
        self.accept("toggleAudio", self.toggleAudio)
        self.accept("switchToChapter", self.switchToChapter)
        self.accept("showText", self.showText)
        self.accept("showNote", self.showNote)
        self.accept("addInventory", self.addInventory)
        self.accept("getInventory", self.getInventory)
        self.accept("moveChar", self.mainChar.moveTo)
        self.accept("stopChar", self.mainChar.stop)
        self.accept("animateChar", self.mainChar.animate)

        if base.AppHasAudioFocus:
            self.btnAudioToggle["text"] = "Audio On"
        else:
            self.btnAudioToggle["text"] = "Audio Off"

        self.chapter = levelTree["chapter1"](self.frmContent.getCanvas())
        self.mainChar.btn.setPos(self.chapter.startPos)
        LerpColorInterval(self.frmFadeOverlay, 2.0, (0,0,0,0)).start()
示例#3
0
class Chapter4B(ChapterBase):
    def __init__(self, rootParent):
        ChapterBase.__init__(self, "chapter4/office.png", rootParent)

        self.overlay = Overlay(rootParent)
        self.overlay.newspaper["image"] = "chapter4/newspaperB.png"

        self.startPos = (0.5, 0, -0.3)

        base.messenger.send("animateChar", ["idle", "l", 3, True])

        self.accept("continue", self.readNewspaper)
        base.messenger.send("showText", [FINAL.copy()])

        self.alica = Character(rootParent, (0.3, 0, -0.3), "alica", "alica")
        self.alica.animate("idle", "r", 3)

        self.accept("mike", self.talkMike)

    def destroy(self):
        self.overlay.destroy()
        self.alica.destroy()
        ChapterBase.destroy(self)

    def readNewspaper(self):
        self.overlay.newspaper.hide()
        self.accept("alica", self.talkAlica)

    def talkAlica(self):
        self.accept("continue", base.messenger.send, extraArgs=["switchToChapter", ["chapterEndB"]])
        base.messenger.send("showText", [FINAL_ALICA.copy()])

    def talkMike(self):
        base.messenger.send("showNote", ["Ms Alica is here, I should talk with her."])
示例#4
0
文件: goblin.py 项目: zudijyr/d20
 def __init__(self, lvl):
     if lvl == 1:
         Character.__init__(self, 5, 2, 2, 1)
         self.goblinSwipe()
     else:
         raise Exception("Fail to create Goblin!")
         quit()
示例#5
0
 def __init__(self, interface, socket_to_server):
     self.character = Character(interface, socket_to_server)
     self.interface = interface
     self.socket_to_server = socket_to_server
     self.interface.set_character(self.character)
     self.map_frame = MapFrame(interface, self.character)
     self.combat = Combat(self.map_frame)
     self.script = Script(self.character)
示例#6
0
文件: warrior.py 项目: zudijyr/d20
 def __init__(self, lvl):
     if lvl == 1:
         Character.__init__(self, 7, 5, 3, 2)
         self.warriorCleave()
         self.warriorPotion()
     else:
         raise Exception("Fail to create Warrior!")
         quit()
示例#7
0
文件: rogue.py 项目: zudijyr/d20
 def __init__(self, lvl):
     if lvl == 1:
         Character.__init__(self, 7, 3, 6, 3)
         self.rogueStab()
         self.roguePotion()
     else:
         raise Exception("Fail to create Warrior!")
         quit()
示例#8
0
 def __init__(self):
     self.level = GraphicLevel(Constant.constant['level'])
     self.window_side = \
         Constant.constant['sprite_number'] \
         * Constant.constant['sprite_size']
     self.player = Character(Constant.constant['player'], self.level)
     self.window = pygame.display.set_mode(
         (self.window_side, self.window_side))
示例#9
0
    def __init__(self, rootParent):
        self.screen = EndScreen(rootParent)
        self.screen.lblEnding["text"] = "You've found ending 2/2"

        self.startPos = (0.1, 0, -.3)
        base.messenger.send("animateChar", ["idle", "l", 3, True])

        self.alica = Character(rootParent, (-0.1, 0, -.3), "alica", "alica")
        self.alica.animate("idle", "r", 3)

        self.accept("alica", self.talkAlica)
        self.accept("mike", self.talkMike)
示例#10
0
class Alpha:
    def __init__(self, window_width, window_height, level_name):

        self.level_name = level_name

        self.character = Character()

    def draw(self, window):

        window.fill((125, 125, 125))
        self.character.draw(window)

    def game_loop(self, key, mouse):

        self.character.game_loop(key, mouse)
示例#11
0
    def __init__(self, rootParent):
        ChapterBase.__init__(self, "chapter4/office.png", rootParent)

        self.overlay = Overlay(rootParent)
        self.overlay.newspaper["image"] = "chapter4/newspaperB.png"

        self.startPos = (0.5, 0, -0.3)

        base.messenger.send("animateChar", ["idle", "l", 3, True])

        self.accept("continue", self.readNewspaper)
        base.messenger.send("showText", [FINAL.copy()])

        self.alica = Character(rootParent, (0.3, 0, -0.3), "alica", "alica")
        self.alica.animate("idle", "r", 3)

        self.accept("mike", self.talkMike)
示例#12
0
    def __init__(self, rootParent):
        ChapterBase.__init__(self, "chapter3/hotel.png", rootParent)

        self.startPos = (-0.7, 0, -0.3)

        self.talkedBadGuy1 = False
        self.talkedBadGuy2 = False
        self.hasFakeIDs = False
        self.shownFakeID = False

        base.messenger.send("animateChar", ["idle", "r", 3, True])

        self.overlay = Overlay(rootParent)

        self.alica = Character(rootParent, (0.5, 0, -0.3), "alica", "alica")
        self.alica.animate("lie", "l", 3)

        self.badGuy1 = Character(rootParent, (-0.2, 0, -0.3), "badGuy1",
                                 "badGuy1")
        self.badGuy1.animate("idle", "l", 3)

        self.badGuy2 = Character(rootParent, (0.4, 0, -0.3), "badGuy2",
                                 "badGuy2")
        self.badGuy2.animate("idle", "l", 3)

        self.accept("badGuy1", self.talkBadGuy1)
        self.accept("badGuy2", self.talkBadGuy2)
        self.accept("alica", self.talkAlica)
        self.accept("mike", self.talkMike)

        self.accept("inventory_fakeID", self.showFakeID)
        self.accept("inventoryRequest", self.inventoryCheck)

        base.messenger.send("getInventory")
示例#13
0
class ChapterEndB(DirectObject):
    def __init__(self, rootParent):
        self.screen = EndScreen(rootParent)
        self.screen.lblEnding["text"] = "You've found ending 2/2"

        self.startPos = (0.1, 0, -.3)
        base.messenger.send("animateChar", ["idle", "l", 3, True])

        self.alica = Character(rootParent, (-0.1, 0, -.3), "alica", "alica")
        self.alica.animate("idle", "r", 3)

        self.accept("alica", self.talkAlica)
        self.accept("mike", self.talkMike)

    def destroy(self):
        self.alica.destroy()
        self.screen.destroy()

    def talkAlica(self):
        base.messenger.send("showNote", ["Thanks for playing!"])

    def talkMike(self):
        base.messenger.send("showNote", ["Good job!"])
示例#14
0
class ConsoleMode(Constant):
    """
    Main class for console mode game
    """
    def __init__(self):
        Constant.__init__(self)
        self.level = Level(Constant.constant['level'])
        self.player = Character(Constant.constant['player'], self.level)

    def play(self):
        """
        method used to launch console game
        """
        progress = True
        self.level.generate()
        x_hero, y_hero = self.level.position(
            self.level.structure, Constant.constant['player'])
        while progress:
            print('Item : {}'.format(self.player.get_item_count()))
            for elt in self.level.structure:
                print("".join(elt))
            direction = input('Choose a direction: ')
            if direction == 'd':
                self.check_victory(x_hero, y_hero + 1)
                if self.player.move(x_hero, y_hero, 'right'):
                    y_hero += 1
            elif direction == 'q':
                self.check_victory(x_hero, y_hero - 1)
                if self.player.move(x_hero, y_hero, 'left'):
                    y_hero -= 1
            elif direction == 's':
                self.check_victory(x_hero + 1, y_hero)
                if self.player.move(x_hero, y_hero, 'down'):
                    x_hero += 1
            elif direction == 'z':
                self.check_victory(x_hero - 1, y_hero)
                if self.player.move(x_hero, y_hero, 'up'):
                    x_hero -= 1

    def check_victory(self, x_hero, y_hero):
        """
        this method will check, at every moves,
        if the player is in front of the boss and
        if he has all requirement to win or not
        """
        if self.level.is_final_boss(x_hero, y_hero):
            if self.player.has_all_items():
                print('You win... but what did you expect? '
                      'you\'re Macgyver !')
                exit()
            else:
                print('You\'re dead !!')
                exit()
示例#15
0
 def effect(trigger, effect, flags):
     if trigger == {} or (trigger["type"] == "flag" and trigger["flag"] in flags):
         if effect["type"] == "stat":
             if effect["result"] == "+1":
                 player.stat_up(effect["stat"])
                 print effect["description"]
                 raw_input()
                 print "Your " + effect["stat"].upper() + " has increased."
             elif effect["result"] == "+2":
                 player.stat_way_up(effect["stat"])
                 print effect["description"]
                 raw_input()
                 print "Your " + effect["stat"].upper() + " has greatly increased."
         elif effect["type"] == "character":
             character = Character(effect["character"].lower())
             character.read_in()
             if effect["result"] == "+1":
                 character.friendship_up()
             elif effect["result"] == "+2":
                 character.friendship_way_up()
             print effect["description"] + " (friendship " + effect["result"] + ")"
         raw_input()
示例#16
0
from dialogue.dialogue import Dialogue
from character.character import Character

boss = Character('boss')
boss.write_out()

Dialogue('boss', '001')
示例#17
0
    def __init__(self, window_width, window_height, level_name):

        self.level_name = level_name

        self.character = Character()
示例#18
0
文件: main.py 项目: templetonm/Trolls
from character.character import Character
from item import items
from item.armor import Armor
from item.weapon import Weapon

if __name__ == "__main__":
    # Thorbjorn
    thorbjorn = Character("Thorbjorn", 2, 2, -1)
    thorbjorn.printStats()
    xavier = Character("Xavier", 2, 1, 1)
    xavier.printStats()
    thorbjorn.attack(items.LEVEL3_DAGGER, xavier)
示例#19
0
 def instantiate_characters(self):
     with open(resource_filename(self.__module__, '../story/characters/characters.json'), 'r') as f:
         characters_data = json.loads(f.read())
         for character in characters_data["list"]:
             Character(character).write_out()
示例#20
0
from character.effect import Effect

import os

dg = DungeonGenerator(10,64)
dungeon = dg.generate()

decorator = DungeonDecorator()
pc = decorator.decorate(dungeon)
controller = Controller( pc )
selection = controller._selection

dungeonmaster = DungeonMaster(dungeon)

b = Character("Hardeep", 
              "/home/lorin/projects/ge/art/planetcute/Character Boy.png",
              None,
              [])

def drw():
  pcloc= dungeon.loc( pc )
  dungeonmaster.update()
  dungeon.draw( pcloc )
  selection.draw()
  pos = actor.Vertex()
def drwsel():
  pcloc = dungeon.loc( pc )
  dungeon.draw( pcloc, True )
def keypress( event ):
  result = controller.interpret( event, dungeon )
  dungeonmaster.turn()
  print result
示例#21
0
class Gestion_Packet():
    def __init__(self):
        self.interface = Interface()
        self.map = None
        self.entitie = []
        self.map_frame = None

    def gestion_server(self, packet):
        self.entitie_remove = []

        #print("Server:" + packet)
        self.interface.print_richTextBox1("Server:" + packet)
        #character information
        if packet[:3] == "ASK":
            info_perso = packet[3:].split("|")
            self.character = Character(id_=info_perso[1],
                                       pseudo=info_perso[2],
                                       lvl=info_perso[3],
                                       id_class=info_perso[4],
                                       sexe=info_perso[5],
                                       gfx=info_perso[6])
            self.interface.create_charater(self.character.gfx,
                                           self.character.pseudo,
                                           self.character.id_,
                                           self.character.lvl)
        #spell   (lvl,available spell...)
        elif packet[:2] == "SL":
            spells_data = packet[2:].split(";")
            self.spells = Spells(self.interface, spells_data)
        #character stats (all stats pa, pm, res fix, rex....)
        elif packet[:2] == "As":
            self.character.character_stats(packet[2:].split("|"))
            self.interface.base_start(self.character)
            self.interface.create_label_caracteristique(self.character)
        #map information (mapid, date of creation,key)
        elif packet[:3] == "GDM":
            data = packet.split("|")
            self.mapID = data[1]
            self.map_date = data[2]
            self.decryption_key = data[3]
            self.entitie = []
            self.map = Map(self.mapID, self.map_date, self.decryption_key)
            self.interface.update_map(self.map)
        #character pods
        elif packet[:2] == "Ow":
            data = packet[2:].split("|")
            pods_actu = data[0]
            pods_max = data[1]
        #entity map information
        elif packet[:2] == "GM":
            #print(packet)
            self.map_frame = Map_Frame(packet, self.map, self.entitie,
                                       self.character.id_)
            self.entitie = self.map_frame.entities
            self.entitie_remove = self.map_frame.entities_remove
            #Enlever les try:exp... probleme avec les entities reglée
            self.interface.update_entity(self.entitie, self.entitie_remove)
        elif packet[:2] == "GA":
            print(packet)
            if packet != "GA;0" and packet[:3] != "GAS" and packet[:3] != "GAF":
                data = packet[2:].split(";")
                action_id = int(data[1])
                entity_id = int(data[2])

                #Travel on the map
                if action_id == 1:
                    cell = hash.get_Cell_Id_From_Hash(data[3][len(data[3]) -
                                                              2:])
                    for i in range(len(self.entitie)):
                        if entity_id == self.entitie[i].id:
                            self.entitie_remove.append(copy(self.entitie[i]))
                            self.entitie[i].cell = cell

                    if self.map_frame != None:
                        self.map_frame.update_entity(self.entitie,
                                                     self.entitie_remove)
                        self.entitie = self.map_frame.entities
                        self.entitie_remove = self.map_frame.entities_remove

                        self.interface.update_entity(self.entitie,
                                                     self.entitie_remove)

                #Le personnage recolte
                elif action_id == 501:
                    harvest_time = int(data[3].split(",")[1]) / 1000
                    cell_id = data[3].split(",")[0]
                    type_of_harvest = data[0]
                    print(
                        f"Le personnage recolte un resource sur la cellid {cell_id} temps d'attente {str(harvest_time)} s \n(type de resource = {type_of_harvest})"
                    )

        elif packet[:3] == "GDF":
            cells_id = self.map_frame.update_interactive(packet)
            self.interface.update_resource(cells_id)

        return packet

    def gestion_client(self, packet):
        #print("Client: "+packet)
        self.interface.print_richTextBox1("Client:" + packet)
        return packet
示例#22
0
  def decorate(self,dungeon):
    """
    """
    from character.character  import Character
#    from character.controller import Controller
    from gitem.gitem import Gitem,GitemFactory

    self.__placewalls__(dungeon)


    sg = SkillFactory()
    skillslash = sg.makeskill( 'slash' )

    gitemFac = GitemFactory()
    image_pc = "/home/lorin/projects/ge/art/planetcute/Character Horn Girl.png"
    pc = Character("Angelina", image_pc, dungeon, [], 1)
    pc.width = 0
    knife = gitemFac.makegitem()
    pc.mind._disabled = True
    pc.skillbook.learn( skillslash )
    pc.setskill( slot='SLOT_1', skill=skillslash.name )

    image_mob = "/home/lorin/projects/ge/art/planetcute/Enemy Bug.png"
    mob = Character("Goblin", image_mob, dungeon,[],-1)
    mob.health = 25

    image_mob2 = "/home/lorin/projects/ge/art/planetcute/Character Boy.png"
    mob2 = Character("Boy", image_mob2, dungeon,[],-1)
    mob2.health = 50

    dungeon.place( pc,  (5, 0) )
    dungeon.place( mob, (5,15) )
    dungeon.place( mob2, (5, 25) )



 #   image_mob = "/home/lorin/projects/ge/art/planetcute/Character Horn Girl.png"
 #   mob = Character("badgirl", image_mob, dungeon)
 #   mob.health = 25
 #    dungeon.place( mob, (5,25) )


 #   image_mob = "/home/lorin/projects/ge/art/planetcute/Character Boy.png"
 #   mob = Character("badboy", image_mob, dungeon)
 #   mob.health = 25
 #   dungeon.place( mob, (5,35) )





    #give each character a weapon
    knife = gitemFac.makegitem()
    pc.weapon = knife
    knife = gitemFac.makegitem()
    mob.weapon = knife
    return pc
示例#23
0
class Chapter3(ChapterBase):
    def __init__(self, rootParent):
        ChapterBase.__init__(self, "chapter3/hotel.png", rootParent)

        self.startPos = (-0.7, 0, -0.3)

        self.talkedBadGuy1 = False
        self.talkedBadGuy2 = False
        self.hasFakeIDs = False
        self.shownFakeID = False

        base.messenger.send("animateChar", ["idle", "r", 3, True])

        self.overlay = Overlay(rootParent)

        self.alica = Character(rootParent, (0.5, 0, -0.3), "alica", "alica")
        self.alica.animate("lie", "l", 3)

        self.badGuy1 = Character(rootParent, (-0.2, 0, -0.3), "badGuy1",
                                 "badGuy1")
        self.badGuy1.animate("idle", "l", 3)

        self.badGuy2 = Character(rootParent, (0.4, 0, -0.3), "badGuy2",
                                 "badGuy2")
        self.badGuy2.animate("idle", "l", 3)

        self.accept("badGuy1", self.talkBadGuy1)
        self.accept("badGuy2", self.talkBadGuy2)
        self.accept("alica", self.talkAlica)
        self.accept("mike", self.talkMike)

        self.accept("inventory_fakeID", self.showFakeID)
        self.accept("inventoryRequest", self.inventoryCheck)

        base.messenger.send("getInventory")

    def destroy(self):
        self.overlay.destroy()
        self.alica.destroy()
        self.badGuy1.destroy()
        self.badGuy2.destroy()

        ChapterBase.destroy(self)

    def inventoryCheck(self, inventory):
        for i in inventory:
            if i.key == "fakeID":
                self.hasFakeIDs = True

    def talkMike(self):
        if not self.talkedBadGuy1:
            base.messenger.send("showNote",
                                ["Let's talk with that guy in front of me."])
        elif not self.shownFakeID:
            base.messenger.send(
                "showNote",
                ["Now's the time to select the Fake IDs from my inventory"])
        elif not self.talkedBadGuy2:
            base.messenger.send("showNote", [
                "That guy is letting me pass, I should speakk with that other one in the next room"
            ])
        else:
            base.messenger.send("showNote",
                                ["C'mon, Alica is there waiting for me!"])

    def talkBadGuy1(self):
        if not self.talkedBadGuy1:
            self.talkedBadGuy1 = True
            base.messenger.send("moveChar", [(-0.4, 0, -0.3)])
            if self.hasFakeIDs:
                base.messenger.send("showText", [STORY_BADGUY1_GOOD.copy()])
            else:
                self.accept("continue",
                            base.messenger.send,
                            extraArgs=["switchToChapter", ["chapter4A"]])
                base.messenger.send("showText", [STORY_BADGUY1_FAILED.copy()])
        elif not self.shownFakeID:
            base.messenger.send("showNote", [
                "Why are you still around, you disturb our ascertainment. Go get lost!"
            ])
        else:
            base.messenger.send(
                "showNote",
                ["You already got me, just go on, my buddy won't be so easy."])

    def showFakeID(self):
        if not self.talkedBadGuy1:
            base.messenger.send("showNote", [
                "It's not the right time for it yet. I should talk to that guy in front of me first."
            ])
        elif not self.shownFakeID:
            self.shownFakeID = True
            base.messenger.send("showText", [STORY_BADGUY1_2.copy()])
        else:
            base.messenger.send("showNote", [
                "The guys already saw them and should play along nice... for now."
            ])

    def talkBadGuy2(self):
        if not self.talkedBadGuy1 or not self.shownFakeID:
            base.messenger.send("showNote", [
                "Shady Guy: Where do you think you're going. You may not pass yet."
            ])
        elif not self.talkedBadGuy2:
            self.talkedBadGuy2 = True
            base.messenger.send("moveChar", [(0.2, 0, -0.3)])
            base.messenger.send("showText", [STORY_BADGUY2.copy()])
        else:
            base.messenger.send("showNote", ["He remains silent."])

    def talkAlica(self):
        if not self.talkedBadGuy1 or not self.shownFakeID:
            base.messenger.send("showNote", [
                "Shady Guy: Where do you think you're going. You may not pass yet."
            ])
        elif not self.talkedBadGuy2:
            base.messenger.send(
                "showNote",
                ["Other Shady Guy: This is none of ya busines. Go get lost!"])
        else:
            self.accept("continue",
                        base.messenger.send,
                        extraArgs=["switchToChapter", ["chapter4B"]])
            base.messenger.send("moveChar", [(0.35, 0, -0.3)])
            base.messenger.send("showText", [STORY_ALICA.copy()])
示例#24
0
class PacketGestion():
    def __init__(self, interface, socket_to_server):
        self.character = Character(interface, socket_to_server)
        self.interface = interface
        self.socket_to_server = socket_to_server
        self.interface.set_character(self.character)
        self.map_frame = MapFrame(interface, self.character)
        self.combat = Combat(self.map_frame)
        self.script = Script(self.character)

    def set_socket(self, socket_to_server):
        self.socket_to_server = socket_to_server
        self.character.set_socket(self.socket_to_server)
        #self.interface.ongletsMap.set_socket(self.socket_to_server)

    def server_packet(self, packet):

        #character information
        if packet[:3] == "ASK":
            info_perso = packet[3:].split("|")
            self.character.base(id_=info_perso[1],
                                pseudo=info_perso[2],
                                lvl=info_perso[3],
                                id_class=info_perso[4],
                                sexe=info_perso[5],
                                gfx=info_perso[6])
            self.interface.ongletsPersonnage.create_charater(
                self.character.gfx, self.character.pseudo, self.character.id_,
                self.character.lvl)
        #spell   (lvl,available spell...)
        elif packet[:2] == "SL" and packet[2:4] != "o+":
            spells_data = packet[2:].split(";")
            self.character.spells.update_spells(spells_data)
        #character stats (all stats pa, pm, res fix, rex....)
        elif packet[:2] == "As":
            self.character.character_stats(packet[2:].split("|"))
            self.interface.base_start(self.character)
            #self.map_frame.player_id = self.character.id_
            self.interface.ongletsPersonnage.create_label_caracteristique(
                self.character)

        #map information (mapid, date of creation,key)
        elif packet[:3] == "GDM":
            data = packet.split("|")
            mapID = data[1]
            map_date = data[2]
            decryption_key = data[3]
            self.character.map.data(mapID, map_date, decryption_key)
            self.interface.ongletsMap.print_map(self.character.map)
        #entity map information
        elif packet[:2] == "GM":
            self.map_frame.parse_data(packet)
        elif packet[:3] == "GDF" and len(packet) > 7:
            self.map_frame.update_interactive(packet)
        elif self.character.entity:
            if packet[:2] == "GA":
                self.map_frame.update_entity(packet)
            elif packet[:3] == "GIC":
                self.combat.mouv_start_cell(packet)
            elif packet[:2] == "GE":
                self.character.isfighting = False
            elif packet[:3] == "GTM":
                self.combat.update_carac_entity(packet)
            elif packet[:3] == "GTS":
                data = packet[3:].split("|")
                if data[0] == self.character.id_:
                    print("debut du tour...")
                    threading.Thread(None, self.combat.fight).start()
示例#25
0
 def __init__(self):
     Constant.__init__(self)
     self.level = Level(Constant.constant['level'])
     self.player = Character(Constant.constant['player'], self.level)
示例#26
0
class GameScreenHandler(DirectObject, GameScreen):
    def __init__(self):
        GameScreen.__init__(self)

        self.btnContinue.hide()

        self.mainChar = Character(self.frmContent.getCanvas(), (0,0,0), "mainChar", "mike")
        self.mainChar.animate("idle", "l", 3)
        self.mainChar.btn.reparentTo(self.frmContent.getCanvas(), 100)

        self.chapter = None
        self.inventory = Inventory(self.frmInventory)

        self.accept("quitGame", self.askQuit)
        self.accept("toggleAudio", self.toggleAudio)
        self.accept("switchToChapter", self.switchToChapter)
        self.accept("showText", self.showText)
        self.accept("showNote", self.showNote)
        self.accept("addInventory", self.addInventory)
        self.accept("getInventory", self.getInventory)
        self.accept("moveChar", self.mainChar.moveTo)
        self.accept("stopChar", self.mainChar.stop)
        self.accept("animateChar", self.mainChar.animate)

        if base.AppHasAudioFocus:
            self.btnAudioToggle["text"] = "Audio On"
        else:
            self.btnAudioToggle["text"] = "Audio Off"

        self.chapter = levelTree["chapter1"](self.frmContent.getCanvas())
        self.mainChar.btn.setPos(self.chapter.startPos)
        LerpColorInterval(self.frmFadeOverlay, 2.0, (0,0,0,0)).start()

    def askQuit(self):
        self.yesNoDialog = YesNoDialog(
            text="Realy Quit?",
            command=self.quitGame)

    def quitGame(self, yes):
        self.yesNoDialog.destroy()
        if yes:
            self.ignoreAll()
            self.mainChar.stop()
            self.mainChar.destroy()
            self.chapter.destroy()
            base.messenger.send("exit")

    def toggleAudio(self):
        if base.AppHasAudioFocus:
            base.disableAllAudio()
            self.btnAudioToggle["text"] = "Audio Off"
        else:
            base.enableAllAudio()
            self.btnAudioToggle["text"] = "Audio On"

    def setChapter(self, chapterName):
        if self.chapter is not None:
            del self.chapter
            self.chapter = None
        self.chapter = levelTree[chapterName](self.frmContent.getCanvas())

    def switchToChapter(self, chapterName):
        switchTo = Sequence(
            LerpColorInterval(self.frmFadeOverlay, 2.0, (0,0,0,1), (0,0,0,0)),
            Func(self.chapter.destroy),
            Func(self.setChapter, chapterName),
            Func(self.setStarPos),
            LerpColorInterval(self.frmFadeOverlay, 2.0, (0,0,0,0)),
        )
        switchTo.start()

    def setStarPos(self):
        self.mainChar.setStart(self.chapter.startPos)

    def showNote(self, text):
        self.lblStory["text"] = text
        base.messenger.send("continue")

    def showText(self, textQueue):
        self.btnContinue.show()
        self.textQueue = textQueue
        self.accept("story_continue", self.nextText)
        self.nextText()

    def nextText(self):
        if len(self.textQueue) <= 0:
            base.messenger.send("continue")
            self.ignore("story_continue")
            self.lblStory["text"] = ""
            self.btnContinue.hide()
            return

        text = self.textQueue[0]
        self.lblStory["text"] = text
        del self.textQueue[0]

    def addInventory(self, itemKey, itemImage):
        self.inventory.addItem(itemKey, itemImage)

    def getInventory(self):
        base.messenger.send("inventoryRequest", [self.inventory.inventoryList])
示例#27
0
class GraphicMode:
    """
    Main class for graphical mode game
    """
    def __init__(self):
        self.level = GraphicLevel(Constant.constant['level'])
        self.window_side = \
            Constant.constant['sprite_number'] \
            * Constant.constant['sprite_size']
        self.player = Character(Constant.constant['player'], self.level)
        self.window = pygame.display.set_mode(
            (self.window_side, self.window_side))

    def play(self):
        """
        method used to launch graphical game
        """
        progress = True
        pygame.init()
        pygame.font.init()
        background = pygame.image.load(
            Constant.constant['background']).convert()
        self.window.blit(background, (0, 0))
        self.level.generate()
        self.level.display(self.window)
        x_hero, y_hero = self.level.position(self.level.structure, 'X')
        pygame.display.flip()
        while progress:
            font = pygame.font.SysFont('Comic Sans MS', 30)
            item_collected = font.render(
                'Items : {}'.format(self.player.get_item_count()), False,
                (255, 255, 255))

            for event in pygame.event.get():
                if event.type == QUIT:
                    progress = False
                elif event.type == KEYDOWN:
                    if event.key == K_ESCAPE:
                        progress = False
                    elif event.key == K_RIGHT:
                        self.check_victory(x_hero, y_hero + 1)
                        if self.player.move(x_hero, y_hero, 'right'):
                            y_hero += 1
                    elif event.key == K_LEFT:
                        self.check_victory(x_hero, y_hero - 1)
                        if self.player.move(x_hero, y_hero, 'left'):
                            y_hero -= 1
                    elif event.key == K_UP:
                        self.check_victory(x_hero - 1, y_hero)
                        if self.player.move(x_hero, y_hero, 'up'):
                            x_hero -= 1
                    elif event.key == K_DOWN:
                        self.check_victory(x_hero + 1, y_hero)
                        if self.player.move(x_hero, y_hero, 'down'):
                            x_hero += 1

            self.window.blit(background, (0, 0))
            self.level.display(self.window)
            self.window.blit(item_collected, (300, 0))
            pygame.display.flip()

    def check_victory(self, x_hero, y_hero):
        """
        this method will check, at every moves,
        if the player is in front of the boss and
        if he has all requirement to win or not
        """
        if self.level.is_final_boss(x_hero, y_hero):
            if self.player.has_all_items():
                self.display_victory()
            else:
                self.display_defeat()

    def display_victory(self):
        """
        Victory screen
        """
        font = pygame.font.SysFont('Comic Sans MS', 30)
        self.window.fill('white')
        text = font.render('Victory !', False, (50, 205, 50))
        self.window.blit(text, (170, 190))
        pygame.display.flip()
        time.sleep(3)
        exit()

    def display_defeat(self):
        """
        Defeat screen
        """
        self.window.fill('white')
        font = pygame.font.SysFont('Comic Sans MS', 30)
        text = font.render('You\'re dead...', False, (178, 34, 34))
        self.window.blit(text, (140, 190))
        pygame.display.flip()
        time.sleep(3)
        exit()