Example #1
0
 def sniffing(self):
     self.positionVector.x += self.movementSpeed
     if self.positionVector.x > 300:
         Sound.play(Sounds.SzczekTwo)
         self.dogState = DogState.JUMPING
         self.currentImageSet = self.spriteMap[DogAnimationState.JUMP]
     return None
Example #2
0
    def tick(self):
        super().tick()
        if self.start:
            Sound.play(Sounds.DogSniff)
            self.start = False

        if self.dogState == DogState.SNIFFING:
            self.sniffing()
            return None

        if self.dogState == DogState.JUMPING:
            self.jumping()
            return None

        if self.dogState == DogState.HIDDEN:
            self.hidden()
            return None

        if self.dogState == DogState.HOLD_ONE:
            self.holdone()
            return None

        if self.dogState == DogState.HOLD_TWO:
            self.holdtwo()
            return None

        if self.dogState == DogState.LAUGHING:
            self.laughing()
            return None
Example #3
0
 def shot(self):
     if self.stoper.getCurrentTicks() - self.lastStateChanged > 500:
         self.duckState = DuckState.FALLING
         self.currentImageSet = self.spriteMap[DuckAnimationState.FALLING]
         self.setDirectionFromAngle(90)
         self.movementSpeed = 0.15
         Sound.play(Sounds.Falling)
     return None
Example #4
0
 def flying(self):
     self.performTimeSynchronizedMove()
     self.checkForCollisionWithWall()
     # make duck flying pattern more random
     if self.stoper.getCurrentTicks(
     ) - self.lastDirectionChange > self.flyingDirectionChangeThreshold:
         self.setRandomAngle()
         self.lastDirectionChange = self.stoper.getCurrentTicks()
         self.flyingDirectionChangeThreshold = randint(1000, 5000)
     if self.stoper.getCurrentTicks(
     ) - self.lastQuacked > self.quackingThreshold:
         Sound.play(Sounds.Quack)
         self.quackingThreshold = randint(1000, 8000)
         self.lastQuacked = self.stoper.getCurrentTicks()
class Grenade(object):
    def __init__(self,damage=4):
        self.name="Grenade"
        self.damage=damage
        self.boomSound=Sound().weaponSounds("Grenade")

#*************************************
#RETURN CLASS VARIABLES
#*************************************

    def playSound(self):
        return self.boomSound.play()

    def explode(self):
        return self.damage

    def getName(self):
        return self.name
Example #6
0
class Key(Image):
    def __init__(self, fileName, x, y, polygon, game):
        """
        Initialize a Key

		    @param self -- the key 
            @param fileName -- a string that contains the image name 
            @param x -- a horizontal position of key 
            @param y -- a vertical position of key 
            @param polygon -- a list of (x,y) pairs
            @param game -- the game
	    
		"""

        self.image = pygame.image.load("image/key/" + fileName + ".png")
        self.image.set_alpha(None)  # disable alpha.
        self.image.convert()
        self.image.set_colorkey((255, 0, 255))  # magenta
        self.imageHover = pygame.image.load("image/keyHover/" + fileName +
                                            ".png")
        self.imageHover.set_alpha(None)  # disable alpha.
        self.imageHover.convert()
        self.imageHover.set_colorkey((255, 0, 255))  # magenta
        self.imageDown = pygame.image.load("image/keyDown/" + fileName +
                                           ".png")
        self.imageDown.set_alpha(None)  # disable alpha.
        self.imageDown.convert()
        self.imageDown.set_colorkey((255, 0, 255))  # magenta
        self.id = int(fileName)
        self.fileName = fileName
        self.sound = Sound()
        self.sound.setFileName("sound/notes/T" + str(int(fileName) + 3))
        self.x = x
        self.y = y
        self.polygon = polygon
        self.isHover = False
        self.isDown = False
        self.isVisible = True
        self.mouseInside = False
        self.game = game

    def mouseHover(self):
        """
        When the mouse is hover on the Key

		    @param self -- the key
	    
		"""

        self.isHover = True
        if os.path.exists("sound/notes/T" + str(self.id + 3) + ".ogg"):
            self.sound.play()

    def mouseDown(self):
        """
        When the mouse is down the Key

		    @param self -- the key
	    
		"""

        self.isDown = True
        if os.path.exists("sound/notes/T" + str(self.id + 3) + ".ogg"):
            self.sound.play()
            self.game.attempt(self.id)
Example #7
0
class Game(object):

    def __init__(self):
        pygame.init()

        self.SCREEN_WIDTH = 800
        self.SCREEN_HEIGHT = 600

        self.display = pygame.display.set_mode((self.SCREEN_WIDTH, self.SCREEN_HEIGHT))
        pygame.display.set_caption("DoocHunt")
        pygame.mouse.set_visible(False)
        self.stoper = Stoper()
        self.sound = Sound()
        self.ui = UserInterface(self.display)
        self.run = True
        self.crosshair = Crosshair(self.display, self.SCREEN_WIDTH, self.SCREEN_HEIGHT)
        self.ducks = []
        self.groundImage = pygame.image.load("images/ground.png")
        self.tree = pygame.image.load("images/tree.png")
        self.duckSpriteRepository = DuckSpriteSetRepository()
        self.dogSpriteSetRepository = DogSpriteSetRepository()
        self.gameState = GameState.GAME_STARTING
        self.dog = Dog(self.display, self.stoper, self.dogSpriteSetRepository.getCollection())
        self.level = 0
        self.ammoCount = self.level + 2
        self.duckCount = self.level + 1

    def __handle_event(self, event):
        if event.type == pygame.QUIT:
            self.run = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            if self.gameState == GameState.ACTIVE_GAME:
                mx, my = pygame.mouse.get_pos()
                self.sound.play(Sounds.GunShot)
                self.ammoCount -= 1
                self.ui.set_value(self.ammoCount, UIValues.AMMO)
                for duck in self.ducks:
                    if duck.checkIfShot(mx, my):
                        self.ui.add_to_value(1, UIValues.DUCKS_SHOT)
                        self.ui.add_to_value(500*self.level, UIValues.SCORE)

    def main_loop(self):
        while self.run:
            self.stoper.newTick()
            self.crosshair.move(pygame.mouse.get_pos())
            if self.gameState == GameState.GAME_STARTING:
                self.game_starting()

            if self.gameState == GameState.ROUND_STARTING:
                self.round_starting()

            if self.gameState == GameState.ACTIVE_GAME:
                self.active_game()

            if self.gameState == GameState.ROUND_END:
                self.round_end()

            if self.gameState == GameState.GAME_END:
                self.game_end()

            if self.gameState == GameState.DOG_ANIMATION:
                self.dog_animation()

            self.render_and_display_frame()
            for event in pygame.event.get():
                self.__handle_event(event)
        return None

    def render_and_display_frame(self):
        self.render_background()
        self.render_ducks()
        self.render_bush()
        self.dog.render()
        self.crosshair.render()
        self.ui.render_ui()
        pygame.display.update()

    def spawn_duck(self, level):
        color = random.choice(list(DuckColor))
        x = randint(self.SCREEN_WIDTH * 0.1, self.SCREEN_WIDTH * 0.9)
        y = randint(self.SCREEN_HEIGHT * 0.1, self.SCREEN_HEIGHT * 0.6)
        self.ducks.append(Duck(self.display, self.stoper, pygame.Vector2(x, y), self.duckSpriteRepository.getCollectionForColor(color), level))

    def render_ducks(self):
        for duck in self.ducks:
            duck.render()

    def render_background(self):
        blue = (60, 80, 150) #TODO: background
        self.display.fill(blue)
        return None

    def render_bush(self):
        rect = self.groundImage.get_rect()
        self.display.blit(self.groundImage, (0, self.SCREEN_HEIGHT - rect.height))

    def setup_round(self, level):
        self.ducks.clear()
        self.ammoCount = level + 2
        self.duckCount = level + 1
        self.ui.set_value(self.ammoCount, UIValues.AMMO)
        self.ui.set_value(0, UIValues.DUCKS_SHOT)
        self.ui.set_value(self.duckCount, UIValues.DUCKS_IN_ROUND)
        self.ui.set_value(self.level, UIValues.ROUND)
        for i in range(self.duckCount):
            self.spawn_duck(level)

        return None

# state impementations

    def game_starting(self):
        self.dog.tick()
        if self.dog.finishedMovement:
            self.gameState = GameState.ACTIVE_GAME
        pass

    def round_starting(self):
        self.setup_round(self.level)
        self.gameState = GameState.ACTIVE_GAME
        pass

    def active_game(self):
        for duck in self.ducks:
            duck.tick()
        if (self.ammoCount == 0) or (self.ui.ducks_shot == self.ui.ducks_in_round):
            self.gameState = GameState.ROUND_END

        pass

    def round_end(self):
        # Dog laughing/happy animation
        for duck in self.ducks:
            if duck.duckState == DuckState.FLYING:
                duck.flyAway()
                self.ui.add_to_value(1, UIValues.DUCKS_FLEW)
            duck.tick()

        if all(duck.duckState == DuckState.ESCAPED or duck.duckState == DuckState.DEAD for duck in self.ducks):

            if self.level == 0:
                self.gameState = GameState.ROUND_STARTING
            else:
                escaped_ducks = 0
                for duck in self.ducks:
                    if duck.duckState == DuckState.ESCAPED:
                        escaped_ducks += 1

                if escaped_ducks > 0:
                    self.dog.dogState = DogState.LAUGHING
                    self.gameState = GameState.DOG_ANIMATION
                else:
                    self.dog.dogState = DogState.HOLD_TWO
                    self.gameState = GameState.DOG_ANIMATION
            self.level += 1
        pass

    def game_end(self):
        assert False

    def dog_animation(self):
        self.dog.tick()
        if self.dog.have_finished_movement():
            self.gameState = GameState.ROUND_STARTING
Example #8
0
class Stone(Image):
    def __init__(self, fileName, x, y, polygon, game):
        """
        Initialize a Stone

		    @param self -- the stone
		    @param fileName -- a string that contains the image name 
		    @param x -- a horizontal position of stone 
		    @param y -- a vertical position of stone 
		    @param polygon -- a list of (x,y) pairs
		    @param game -- the game
	    
		"""

        self.image = pygame.image.load("image/" + fileName + ".png")
        self.image.set_alpha(None)  # disable alpha.
        self.image.convert()
        self.image.set_colorkey((255, 0, 255))  # magenta
        self.fileName = fileName
        self.x = x
        self.y = y
        self.polygon = polygon
        self.game = game
        self.isHover = False
        self.isDown = False
        self.isVisible = False
        self.mouseInside = False

    def setSound(self, id):
        """
        Set a stone sound

		    @param self -- the stone
		    @param id -- a number that represents the ball note
	    
		"""

        self.id = id
        self.sound = Sound()
        self.sound.setFileName("sound/notes/T" + str(self.id + 3))

    def mouseHover(self):
        """
        When the mouse is hover on the stone

		    @param self -- the stone
	    
		"""

        self.isHover = True
        self.game.setEarCursorVisible(True)
        self.game.setHelp()
        if self.game.lampIsSelected():
            self.game.setLampCursorVisible(False)
            self.button.mouseHover()
            self.help.setVisible(True)
        else:
            if os.path.exists("sound/notes/T" + str(self.id + 3) + ".ogg"):
                self.sound.play()

    def mouseLeave(self):
        """
        When the mouse leaves the stone

		    @param self -- the stone
	    
		"""

        self.isHover = False
        self.game.setEarCursorVisible(False)
        if self.game.lampIsSelected():
            self.game.setLampCursorVisible(True)
            self.button.mouseLeave()
            self.help.setVisible(False)

    def draw(self, screen):
        """
        Draw the stone on the screen

		    @param self -- the stone
		    @param screen -- the screen where the images will be showed
	    
		"""

        if self.isVisible:
            screen.blit(self.image, (self.x, self.y))

    def setButton(self, button):
        """
        Set a related button

		    @param self -- the stone
		    @param button -- it relates a button with the stone 
	    
		"""

        self.button = button

    def setHelp(self, help):
        """
        Set a related help

		    @param self -- the stone
		    @param help -- it relates a help with the stone 
	    
		"""

        self.help = help
class Sectoid(object):
    def __init__(self,name,hp=8,taunt=0,defense=10,cover=0,aimPen=0):
        self.name=name
        self.hp=hp
        self.playerTaunt=taunt
        self.alive=1
        self.defense=defense
        self.cover=cover
        self.aimPenalty=aimPen
        self.coverPosition=0
        self.wepSound=Sound().weaponSounds("Laser")
        self.deathSound=Sound().deathSounds("Sectoid")
        self.tauntSound=Sound().abilitySounds("Taunt")
        self.uponHit=Sound().enemyPainSounds("Sectoid")

#***********************************************************************
#ACTIONS ALIEN CAN TAKE
#***********************************************************************
    
    def action(self):
        action=0
        tRNG=random.randint(1,5)
        if tRNG==1:
            action="taunt"
        else:
            action="shoot"

        return action

    def taunt(self):     
        self.tauntSound.play()
        print ('{name} taunts you! \n It yells, "Gleep gloop!\n"'.format(name=self.name))
        pissOff=1
        return pissOff     

    def takeCover(self,alienBattleMap,pod,whichAlien):
        alienChooseCover=Sectoid.randomSample(alienBattleMap,pod,whichAlien)
        self.cover=alienBattleMap[alienChooseCover].getCovValue()
        self.aimPenalty=alienBattleMap[alienChooseCover].getAimPen()
        self.coverPosition=alienChooseCover
        return self.cover, self.aimPenalty,self.coverPosition

    def shoot(self,playerDef):
        targetHit=0
        print ("{NAME} shoots!\n".format(NAME=self.name))
        self.wepSound.play()
        adjustedHitChance=Sectoid.calcHitChance(self,playerDef)
        hitCoverRNG=random.randint(1,2)
        RNG=random.randint(1,100)
        if RNG <= adjustedHitChance:
            print ("Alien Chance to Hit: ", adjustedHitChance)
            print ("Alien's Roll: ", RNG,"\n")
            print ("Ouch! You're hit!\n")
            targetHit=1

        else:
            if hitCoverRNG==1:
                print ("Alien Chance to Hit: ", adjustedHitChance)
                print ("Alien's Roll: ", RNG,"\n")
                targetHit=3

            else:
                print ("Alien Chance to Hit: ", adjustedHitChance)
                print ("Alien's Roll: ", RNG,"\n")
                print ("It misses!\n")
                targetHit=2

        return targetHit



#******************************************************
#RNG FOR COVER SELECTION
#***************************************************   

    def randomCoverType(alienBattleMap):
        typeRNG=random.randrange(len(alienBattleMap))
        x=typeRNG
        return x

    def randomSample(alienBattleMap,pod,whichAlien):
        mapRNG=random.randrange(len(alienBattleMap))
        answer=mapRNG
        return answer


#************************************************
#ALIEN STAT CALCULATION
#*************************************************

    def getDefense(self):
        defense=self.defense+self.cover
        return defense
    
    def damage(self,DMGval):
        if self.hp > self.hp-DMGval:
            self.uponHit.play()
        self.hp-=DMGval
        if self.hp <=0:
            self.hp=0;
        if self.hp > 0:
            self.action
        if self.hp==0:
            print ("You killed it!")
        return self.hp

    def calcHitChance(self,playerDef):
        baseHitChance=80
        adjustedHitChance=baseHitChance-playerDef-self.aimPenalty
        if adjustedHitChance<0:
            adjustedHitChance=0
        if adjustedHitChance>100:
            adjustedHitChance=100
        return adjustedHitChance

#************************************************************
#RETURN CLASS VARIABLES
#************************************************************

    def __repr__(self):
        return self.name

    def __str__(self):
        return self.name

    def getName(self):
        return self.name
    
    def getHP(self):
        return self.hp

    def returnCoverPosition(self):
        return self.coverPosition

    def returnCoverValue(self):
        if self.cover==40:
            cover="High cover"
        elif self.cover==20:
            cover="Low cover"
        else:
            cover="No cover"
        return cover

    def playAlienDeath(self):
        self.deathSound.play()

    def playHitSound(self):
        self.uponHit.play()
Example #10
0
from Sound import Sound

s = Sound('sounds/symphony.wav')
s.play()

while True:
    pass
class Player(object):
 
    def __init__(self,weapons=[],hp=20,imparement=0,defense=30,buff=0):
        self.name="Trooper"
        self.hp=hp
        self.imparement=imparement
        
        self.inventory=[Grenade(),Grenade(),Grenade(),Grenade(),Healing("Medkit",10),Healing("Medkit",10)]
        self.ammoBelt=None
        self.seconaryAmmoBelt=None
        self.defense=defense
        self.aimPenalty=0
        self.coverPosition=0
        self.buff=buff
        self.weapons=weapons
        self.cover=0
        self.currentWeapon=None
        self.deathSound=Sound().deathSounds("Player")
#************************************************************************************
#ACTIONS PLAYER CAN TAKE
#************************************************************************************
    def changeCover(self,playerBattleMap):
        coverSet=0
        while coverSet==0:
            for each in playerBattleMap:
                print (each+1,": Cover Value:",playerBattleMap[each].getCovValue()," Aim Penalty:",playerBattleMap[each].getAimPen()," Cover HP:",playerBattleMap[each].getHP())
            try:
                chooseCover=(int(input("Which cover do you take?"))-1)
                
            except:
                print ("That's not a valid option, try again.\n\n")
                continue

            if chooseCover in playerBattleMap:
                playerCover=playerBattleMap[chooseCover].getCovValue()
                playerAimPen=playerBattleMap[chooseCover].getAimPen()
                self.cover=playerCover
                playerCovPos=chooseCover
                self.defense=30
                self.defense=self.defense+playerCover
                self.aimPenalty=playerAimPen
                self.coverPosition=playerCovPos
                coverSet=1
            
            else:
                print ("That's not a valid cover option")
                continue
            

    def gunshotAccuracy(self,enemyDef,alienBattleMap,coverPosition):
        #taunted/pissed off is 1. # calculates shot%, factoring in cover and any status ailments

        targetHit=0
        pissedOff=0
        takingAim=0
        #print ("DEBUG*** This is the status element= ",self.imparement)
        #print ("DEBUG*** this is your buff number: ",self.buff)
        if self.imparement==1:
            pissedOff=20
        if self.buff==1:
            takingAim=-50
        print ("BANG!")

        baseHitChance=self.currentWeapon.getAcc()
        #print (baseHitChance,enemyDef,self.aimPenalty,pissedOff,takingAim,"   ",baseHitChance-enemyDef-self.aimPenalty-pissedOff-takingAim)
        adjustedHitChance=baseHitChance-enemyDef-self.aimPenalty-pissedOff
        if adjustedHitChance<0:
            adjustedHitChance=0
        if adjustedHitChance>100:
            adjustedHitChance=100
        adjustedHitChance-=takingAim
        print ("Chance to hit: ", adjustedHitChance)
        hitCoverRNG=random.randint(1,2)
        RNG=random.randint(1,100)
        if RNG <= adjustedHitChance:
            
            print ("Hit Roll: ", RNG,"\n")
            print ("That's a hit!")
            targetHit=1
        else:
            if hitCoverRNG==1:
                print ("Hit Roll: ", RNG,"\n")
                targetHit=3
            else:
                print ("Hit Roll: ", RNG,"\n")
            #print ("Damn, you missed!")"
                targetHit=2
        return targetHit
 #this is some of the oldest code in the program, likely a shitshow.

    def useItem(self):
        for idx,item in enumerate(self.inventory):
            idx+=1
            print(idx,item)
        
        item=(input("Which item do you want to use?"))
        if item=="B" or item=="b":
            print ("Nope")
            os.system('cls' if os.name=='nt' else 'clear')
            return

        else:
            try:
                item=(int(item))
            except:
                print ("not a number")
                os.system('cls' if os.name=='nt' else 'clear')
                return
        
        if item >=1:
            item-=1

        if item not in range(len(self.inventory)):
            print ("Not a valid item number, pick another or hit B to go back:")
            os.system('cls' if os.name=='nt' else 'clear')
            return

        sendItem=self.inventory[item]
        return sendItem,item


    def switchWeapons(self):
        if self.currentWeapon==self.weapons[0]:
            self.currentWeapon=self.weapons[1]
            print (self.currentWeapon)

        elif self.currentWeapon==self.weapons[1]:
            self.currentWeapon=self.weapons[0]
            print(self.currentWeapon)
    #make this adaptable to more than 2 weapons later on
    
    def hunkerDown(self):
        self.defense+=30

    def takeAim(self,playerBuff):
        self.buff+=playerBuff

    def getSpecificAmmoBelt(self):
        if self.currentWeapon==self.weapons[0]:
            return 0

        elif self.currentWeapon==self.weapons[1]:
            return 1        

    def reloadGun(self,pick):
        x=0
        if self.currentWeapon==self.weapons[1]:
            x=1

        newMag=self.ammoBelt[x].removeMag(pick)      
        oldMag=self.currentWeapon.reload(newMag)
        self.ammoBelt[x].changeMag(oldMag)

#**************************************************
#ALTER YOUR STATS (HP/DEF/AIM/STATUS)
#**************************************************

    def setDefense(self,playerCoverBonus):
        self.defense=30
        self.defense=self.defense+playerCoverBonus

    def setAimPen(self,playerAimPen):
        self.aimPenalty=0
        self.aimPenalty=self.aimPenalty+playerAimPen

    def status(self,ailment):
        #status aliments, good and ill, will check here to see if they pass or fail
        #taunt is 1, resisted is 0
        inflicted=0
        checking=ailment
        baseResist=70
        rRNG=random.randint(1,100)
        if rRNG <= baseResist:
            if checking==1:
                self.imparement=1

        return self.imparement
    
    def healing(self,amount):
        self.hp+=amount
        if self.hp >= 20:
            self.hp = 20
        return self.hp

    def damage(self,damage):
        self.hp-=damage
        if self.hp <=0:
            self.hp=0
        return self.hp

    def turnPass(self,turn):
        if self.imparement!=0:
            self.imparement=0
        return self.imparement

    def tickAimTimerDown(self,timeTick):
        self.buff=self.buff-timeTick
        if self.buff<0:
            self.buff=0
#ticks down aiming so it only lasts a certain number of turns.

#*********************************************
# EQUIPS PLAYER ITEMS AND WEAPONS
#*********************************************

    def playerWeapons(self,selectedWeapons):
        self.weapons=selectedWeapons
        self.currentWeapon=self.weapons[0]

    def equipAmmoBelt(self,belts):
        self.ammoBelt=belts


    def removeItem(self,item):
        self.inventory.pop(item)


#***********************************
#RETURN CLASS VARIABLES
#***********************************
    def getName(self):
        return self.name

    def getCoverPosition(self):
        return self.coverPosition

    def getHP(self):
        return self.hp

    def returnDef(self):
        return self.defense

    def playDeathSound(self):
        self.deathSound.play()

    def returnPlayerWeapons(self):
        return self.weapons

#***********************************
#RETURN WEAPON VARIABLES
#***********************************

    def returnWepDamage(self):
        return self.weapons[0].getDamage()

    def returnWeaponNames(self):
        return self.weapons[0].getName(), self.weapons[1].getName()

    def getCurrentPlayerWeapon(self):
        return self.currentWeapon

#***********************************
#RETURN AMMO BELT VARIABLES
#***********************************

    def getBackupMags(self):
        return self.ammoBelt[0].getMags(), self.ammoBelt[1].getMags()
#gets how many magazines there are in each belt

    def getBackupMagAmount(self):
        return self.ammoBelt[0].getMagNumber(), self.ammoBelt[1].getMagNumber()
#gets number of bullets in each magazine in the ammo belt
        
    def getBackupMagsName(self):
        primMagName=self.ammoBelt[0].getMags()
        primMagName=(str(primMagName)[2:-2])

        secMagName=self.ammoBelt[1].getMags()
        secMagName=(str(secMagName)[2:-2])
        
        
        return primMagName,secMagName
#Gets the names of the ammo belts and cuts off list brackets

#***********************************
#RETURN STATUS VARIABLES
#***********************************
    def getCoverValue(self):
        if self.cover==40:
            cover="High cover"
        elif self.cover==20:
            cover="Low cover"
        else:
            cover="No cover"
        return cover

    def getTauntStatus(self):
        if self.imparement==1:
            returnPrint=("taunted")
        else:
            returnPrint=("not taunted")
        return returnPrint

    def getAimStatus(self):
        if self.buff==1:
            returnAim=("taking aim")
        else:
            returnAim=("not taking aim")
        return returnAim

    def getHitChance(self,targetInfo):
#largely copied code. Consolidate gunshot acc and this somehow

        targetHit=0
        pissedOff=0
        takingAim=0
        #print ("DEBUG*** This is the status element= ",self.imparement)
        #print ("DEBUG*** this is your buff number: ",self.buff)
        if self.imparement==1:
            pissedOff=20
        if self.buff==1:
            takingAim=-50
        

        baseHitChance=self.currentWeapon.getAcc()
        adjustedHitChance=baseHitChance-targetInfo-self.aimPenalty-pissedOff
        adjustedHitChance-=takingAim
        if adjustedHitChance<0:
            adjustedHitChance=0
        if adjustedHitChance>100:
            adjustedHitChance=100
        return adjustedHitChance

#***********************************
#RETURN ITEM OBJECT VARIABLES
#***********************************


    def getInventory(self):
        return self.inventory

    def getSpecificInventoryItem(self,item):
        print (self.inventory[item])
        return self.inventory[item]

    def getItemNames(self,itemNum):
        return self.inventory[itemNum].getName()
 def userPainSound():
     painRNG=random.randrange(1,9)
     pain=Sound().userPainSounds(painRNG)
     pain.play()
Example #13
0
 def play_sound(self, sound_name):
     sound = Sound(sound_name)
     sound.play()
class Prospecting():
    def __init__(self):
        self.connected = False
        self.gui_init = False
        self.msg_send = False
        self.run = True
        self.parent = None
        self.total_msg = 0
        self.messages = []
        self.hashlist = []
        self.colors = []
        self.total_msg_display = 6
        self.mw_status = [None] * self.total_msg_display
        self.status = [None] * self.total_msg_display
        self.buffer = 1024
        self.ore = 0
        self.qty_cargo = 0
        self.sound = Sound()
        self.load_config()

    def load_config(self, change=False):
        self.ip = config.get("EP_server_ip") or "37.59.36.212"
        self.port = int(config.get("EP_server_port") or 44988)
        self.session = config.get("EP_session") or "default"

        self.track_LTD = config.getint("EP_track_LTD")
        self.track_Painite = config.getint("EP_track_Painite")
        self.new_win = config.getint("EP_use_new_window")
        self.win_trans = config.getint("EP_win_trans")
        self.miss = config.getint("EP_miss")
        self.track_cargo = config.getint("EP_track_cargo")
        self.play_sound = config.getint("EP_sound")

        self.ltd_threshold = int(config.get("EP_LTD_t") or 18)
        self.painite_threshold = int(config.get("EP_Painite_t") or 25)
        self.font_size = int(config.get("EP_font_size") or 14)

        self.my_color = config.get("EP_my_color") or "Red"
        self.color = config.get("EP_color") or "Blue"

        self.pos_x = config.getint("EP_pos_x") or 200
        self.pos_y = config.getint("EP_pos_y") or 200

        # sanity check
        if len(self.session) > 15:
            self.session = "default"

        if change:
            self.change_session()
            self.update_gui()
            self.refresh_display()
            self.refresh_cargo()

    def init_gui(self, parent):
        self.parent = parent
        self.frame = tk.Frame(self.parent, borderwidth=2)
        self.frame.grid(sticky=tk.NSEW, columnspan=2)

        row = 0
        self.connection = tk.Button(self.frame,
                                    text="Connect to server",
                                    command=self.connect)
        self.connection.grid(row=row, padx=0)
        row += 1
        self.mw_cargo = tk.Label(self.frame, text="Cargo : ")
        self.mw_cargo.config(font=("Courier", int(self.font_size)))
        self.mw_cargo.grid(row=row, pady=5, sticky=tk.W)

        for i in range(self.total_msg_display):
            self.mw_status[i] = tk.Label(self.frame,
                                         text="",
                                         foreground="yellow")
            self.mw_status[i].config(font=("Courier", int(self.font_size)))
            row += 1
            self.mw_status[i].grid(row=row, pady=5, sticky=tk.W)

        self.win_x = tk.Scale(self.frame,
                              from_=1,
                              to=6000,
                              orient=tk.HORIZONTAL,
                              label="x position",
                              command=self.update_new_win)
        self.win_x.grid(row=row + 3, columnspan=2)
        self.win_x.set(self.pos_x)
        row += 1
        self.win_y = tk.Scale(self.frame,
                              from_=1,
                              to=3000,
                              orient=tk.HORIZONTAL,
                              label="y position",
                              command=self.update_new_win)
        self.win_y.grid(row=row + 6, columnspan=2)
        self.win_y.set(self.pos_y)

        self.update_gui()
        self.gui_init = True
        return self.frame

    def update_gui(self):
        try:
            self.window.destroy()
        except AttributeError as e:
            print("window not created ", e)
        if self.new_win == 1:
            self.win_x.grid()
            self.win_y.grid()
            self.mw_cargo.grid_remove()
            for i in range(self.total_msg_display):
                self.mw_status[i].grid_remove()

            self.window = tk.Toplevel()
            if sys.platform == 'win32' and self.win_trans == 1:
                self.window.attributes("-transparentcolor", 'black')
            self.window.wm_attributes("-topmost", True)
            self.window.overrideredirect(True)
            self.window.configure(background='black')

            self.cargo = tk.Label(self.window, text="Cargo : ")
            self.cargo.config(font=("Courier", int(self.font_size)),
                              background='black')
            self.cargo.pack(side="top",
                            fill="both",
                            expand=True,
                            padx=10,
                            pady=10)

            for i in range(self.total_msg_display):
                self.status[i] = tk.Label(self.window)
                self.status[i].config(font=("Courier", int(self.font_size)),
                                      background='black')
                self.status[i].pack(side="top",
                                    fill="both",
                                    expand=True,
                                    padx=10,
                                    pady=10)
                if i == 0:
                    self.status[i]['text'] = "Waiting..."
            self.window.wm_geometry('+' + str(self.pos_x) + '+' +
                                    str(self.pos_y))
            if self.track_cargo == 0:
                self.cargo.pack_forget()
        else:
            if self.track_cargo == 1:
                self.mw_cargo.grid()
            else:
                self.mw_cargo.grid_remove()
            self.win_x.grid_remove()
            self.win_y.grid_remove()
            for i in range(self.total_msg_display):
                self.mw_status[i].grid()

    def update_new_win(self, val):
        self.pos_x = self.win_x.get()
        self.pos_y = self.win_y.get()
        if self.new_win == 1:
            self.window.wm_geometry('+' + str(self.win_x.get()) + '+' +
                                    str(self.win_y.get()))

    def display_msg(self, msg, mine=True):
        if mine:
            color = "mine"
        else:
            color = "other"

        self.colors.append(color)
        self.messages.append(msg)
        self.total_msg += 1

        if self.total_msg > self.total_msg_display:
            self.messages.pop(0)
            self.colors.pop(0)
            self.total_msg -= 1

        self.refresh_display()

    def refresh_display(self):
        for i in range(len(self.messages)):
            if self.colors[i] == "mine":
                color = self.my_color
            else:
                color = self.color
            if self.new_win == 1:
                self.status[i].config(foreground=color)
                self.status[i]['text'] = self.messages[i]
            else:
                self.mw_status[i].config(foreground=color)
                self.mw_status[i]['text'] = self.messages[i]

    def process_msg(self, json_data):
        msg_hash = json_data['hash']
        msg = json_data['cmdr']
        if msg_hash in self.hashlist:
            # duplicate !
            if self.miss == 1:
                msg += " duplicate"
                self.display_msg(msg, False)
            return  # stop here
        else:
            self.hashlist.append(msg_hash)

        if self.play_sound == 1:
            self.sound.play()

        msg += " " + json_data['data']
        self.display_msg(msg, False)

    def refresh_cargo(self):
        if self.track_cargo == 1:
            if self.new_win == 1:
                self.cargo['text'] = "Cargo : " + str(
                    self.qty_cargo) + " Ore : " + str(self.ore)
            else:
                self.mw_cargo['text'] = "Cargo : " + str(
                    self.qty_cargo) + " Ore : " + str(self.ore)

    def sendMsg(self, message):
        try:
            self.sock.sendall(message.encode())
        except socket.error as e:
            print("error sending")
            print("Caught exception socket.error : %s" % e)
            self.stop()
        self.msg_send = True

    def connect(self):
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        try:
            self.connection["text"] = "Connecting..."
            print("connecting to ", self.ip)
            self.sock.connect((self.ip, int(self.port)))

        except socket.error as e:
            print("Caught exception socket.error : %s" % e)
            print("Error connecting")
            self.connection["text"] = "Error connecting check configuration"
            return

        con_succes = {"act": "connexion", "data": "Player join"}
        self.connected = True
        self.change_session()
        time.sleep(1)
        self.sendMsg(json.dumps(con_succes).encode())
        threading.Thread(target=self.recvs).start()
        threading.Thread(target=self.heart_beat).start()
        self.connection["text"] = "Connected"
        time.sleep(2)
        self.connection.grid_remove()

    def change_session(self):
        to_send = {"act": "session", "data": self.session}
        if self.connected:
            self.sendMsg(json.dumps(to_send))

    def stop(self):
        config.set("EP_pos_x", self.pos_x)
        config.set("EP_pos_y", self.pos_y)
        if not self.connected:
            return
        self.run = False
        self.connected = False
        quit_msg = {"act": "quit"}
        self.sendMsg(json.dumps(quit_msg))
        time.sleep(1)
        try:
            self.sock.close()
        except socket.error as e:
            print("socket.error : %s" % e)

        self.connection.grid()

    def recvMsg(self):
        data = self.sock.recv(self.buffer)
        return data.decode()

    def heart_beat(self):
        hb = {"act": "keep_alive", "data": "ping"}
        hb = json.dumps(hb)
        while self.run:
            if not self.msg_send:
                self.sendMsg(hb)
            else:
                self.msg_send = False
            time.sleep(10)

    def recvs(self):
        while self.run:
            try:
                msg = self.recvMsg()
            except socket.error as e:
                print("error receiving")
                print("Caught exception socket.error : %s" % e)
                self.stop()

            try:
                decoded = json.loads(msg)
                if decoded['act'] == "quit":
                    self.stop()
                    break
                elif decoded['act'] == "event":
                    self.process_msg(decoded)
                elif decoded['act'] == "connexion":
                    self.display_msg(decoded['data'], True)
            except ValueError as e:
                print("Bad formating ", e)

    def publish(self, cmdr, name, prop, hash, duplicate):
        data = name + " {:.2f}%"
        data = data.format(prop)
        message = {"act": "event", "cmdr": cmdr, "data": data, "hash": hash}

        if self.connected:
            self.sendMsg(json.dumps(message))
        if not duplicate:
            if self.play_sound == 1:
                self.sound.play()
            to_display = cmdr + " " + name + " {:.2f}%"
            self.display_msg(to_display.format(prop), True)

    def cargo_event(self, entry):
        if "Count" in entry:
            self.qty_cargo = entry['Count']
            if self.qty_cargo == 0:
                self.ore = 0
                try:
                    self.hashlist.clear()
                except AttributeError:
                    del self.hashlist[:]
            self.refresh_cargo()

    def refined_event(self):
        self.ore += 1
        self.refresh_cargo()

    def event(self, cmdr, entry):
        # received a ProspectedAsteroid event
        empty = True
        below_t = False
        duplicate = False

        mat_hash = hashlib.md5(json.dumps(
            entry["Materials"]).encode()).hexdigest()

        if mat_hash in self.hashlist:
            duplicate = True
        else:
            self.hashlist.append(mat_hash)

        # check for materials
        for mat in entry['Materials']:
            if mat['Name'] == "LowTemperatureDiamond" and self.track_LTD == 1:
                if mat['Proportion'] > float(self.ltd_threshold):
                    self.publish(cmdr, mat['Name_Localised'],
                                 mat['Proportion'], mat_hash, duplicate)
                else:
                    below_t = True
                empty = False
            elif mat['Name'] == "Painite" and self.track_Painite == 1:
                if mat['Proportion'] > float(self.painite_threshold):
                    self.publish(cmdr, "Painite", mat['Proportion'], mat_hash,
                                 duplicate)
                else:
                    below_t = True
                empty = False

        if self.miss == 1:
            if duplicate:
                self.display_msg("Asteroid already prospected", True)
                return
            if empty and not below_t:
                self.display_msg("Asteroid without materials", True)
            if below_t:
                self.display_msg("Threshold not met", True)
    def combat(self,pod,user,playerBattleMap,alienBattleMap,playerEquipment,ranAway=0,playerDead=0):
    #taunt and shoot are shorthand for alien action options
        
        if ranAway !=0:
            done=1
        if playerDead!=0:
            done=1
        taunt="taunt"
        shoot="shoot"
        battleTurn=1 #1=Player,2=Alien.
        shotMissed=Sound().weaponSounds("Shot Miss")
        shotMissed.set_volume(1)
        turn=0 #turn ticks when turn passes, allowing for status aliments to fade after turns
        
        Combat.setCombatMusic()
        shotMissed.play()
        
        pygame.mixer.music.set_volume(1)
        pygame.mixer.music.play(-1,0)

    #*****************************************
    #lists holding combat actions/reactions
    #--------------------------------------
        actions=[] #actions holds enemy action choices.
        #totalHealth=[] #pulls hp from enemies in pod for ui purposes
        alienCoverStats=[] #pulls cover stats from enemiesi n pod for ui purposes
        playerCopyAlienCover=[] #copy of aliencoverstats made after they are cleared each turn. For long-term ui storage
    #*****************************************


    #main combat loop
        done=0
        while done==0:
            #At the start of combat, player chooses which cover they'll take.
            print ("You've touched down and found the enemies. Press the coorisponding number key to get into that over point.")
            os.system('cls' if os.name=='nt' else 'clear')
            user.changeCover(playerBattleMap)
            os.system('cls' if os.name=='nt' else 'clear')
    #show pod, make action selection, turn passed and it switches to alien.
            while battleTurn==1:
                ranAway=Combat.playerTurn(self,pod,user,alienBattleMap,playerBattleMap,shotMissed,playerEquipment)
                if ranAway==1:
                    done=1
                    os.system('cls' if os.name=='nt' else 'clear')
                    break
                done=Combat.checkIfVictory(pod,user)
                
                time.sleep(0.5)
                battleTurn=2
#if player chooses to run away, it returns runAway as 1. if 1, then done=1 and loop breaks, running funct again. ranAway, despite being an intitalized variable, stayed 1 and thus done
#also stayed 1. So with done=1, then there's no game loop and it's back to the main screen. Easy-peasy.

    #gets player position,then each alien in pod takes an action and cover. either taunt or shoot. clear results each time but store in sep list 1st
            while battleTurn==2:
                Combat.alienTurn(user,pod,actions,alienCoverStats,playerCopyAlienCover,alienBattleMap,playerBattleMap,shotMissed)
                playerDead=Combat.checkIfVictory(pod,user)
                if playerDead==1:
                    done=1
                    break
                
                input("Enter any key then hit enter to progress to your turn")
                battleTurn=1
Example #16
0
class Challenge:
    def __init__(self, fileName, keys, stick, stones, helps, ball, bar, rightBall, level, game):
        """
        Initialize a challenge

	        @param self -- the challenge
            @param fileName -- a string that contains the sound name 
            @param keys -- the key vector
            @param stick -- the stick
            @param stones -- the stones
            @param helps -- the helps
            @param ball -- the left ball that it is used in the animation
            @param bar -- the grey bar that it is used in the animation
            @param rightBall -- the right ball that it is used in the animation
            @param level -- the challenge level
            @param game -- the game
	    
		"""
		
        self.fileName = fileName
        self.music = Sound()
        self.music.setFileName("sound/music/" + fileName)
        self.section = Section()
        self.section.setFileName("sound/section/" + fileName)
        self.section.setKeys(keys)
        self.stick = stick
        self.animation = Animation(stones, keys, helps, ball, rightBall, bar, game)
        self.ball = ball
        self.level = level
        self.attempts = 0
        self.game = game
    
    def start(self):
        """
        Start a challenge

    		@param self -- the challenge
	    
		"""
        
        if os.path.exists("sound/section/" + self.fileName + ".wav"):
            self.section.play()
            self.game.statusBar.setText(_("Discover the next musical note"))
            self.animation.playIntroduction()
            self.ball.setSound(self.fileName)
            
    def change(self):
        """
        Change a challenge

    		@param self -- the challenge
	    
		"""
        if os.path.exists("sound/section/" + self.fileName + ".wav"):
            self.section.play()
            self.game.statusBar.setText(_("Discover the next musical note"))
            self.animation.playIntroduction()
            self.ball.setSound(self.fileName)
			
    def finish(self):
        """
        Finish a challenge

    		@param self -- the challenge
	    
		"""
		
        if os.path.exists("sound/music/" + self.fileName + ".ogg"):
            self.music.play()
        self.game.currentChallenge = None
        self.game.statusBar.setText(_("Congratulations!!! You completed the challenge! Choose other to continue playing."))
        self.stick.setVisible(False)
        self.animation.playClosing()
        self.game.setPoints(self.level, self.attempts)
			
    def attempt(self, id):
        """
        Verify a attempt

    		@param self -- the challenge
            @param id -- the key index
	    
		"""
		
        if self.section.isCurrentKey(id):
        	self.game.setBufferPoints(self.level, self.attempts)
        	self.attempts = 0 
        	if self.section.isLastKey():
        		self.finish()
        	else:		
        		self.animation.lowStone(self.section.currentKey)
        		self.section.currentKey = self.section.currentKey + 1
        		self.game.statusBar.setText(_("Discover the next musical note"))
        else:
            self.attempts = self.attempts + 1
            if self.section.moreThan(id):
        	    self.game.statusBar.setText(_("Try a lower note"))
            else:
        	    self.game.statusBar.setText(_("Try a higher note"))
        	    
    def getBall(self):
        """
        Get the ball

    		@param self -- the challenge
	    
	    """
        return self.ball
Example #17
0
class Game:
    def __init__(self):
        pygame.init()
        pygame.mixer.init()
        pygame.display.set_caption("Sokoben")

        self.asset = Asset()
        self.background = self.asset.createBackground()
        self.sound = Sound(self.asset)

        self.asset.loadImages()
        self.asset.loadLevels()
        self.asset.loadSounds()
        self.asset.loadFonts()
        self.asset.loadControls()

        self.levelIndex = 0
        self.level = None

        Controls.add('sound_enabled', self.asset.controls['sound_enabled'],
                     (const.MAPWIDTH * const.TILEWIDTH) - ((1 * 64) + 64), 10,
                     self.sound.enabled)
        Controls.add('sound_disabled', self.asset.controls['sound_disabled'],
                     (const.MAPWIDTH * const.TILEWIDTH) - ((1 * 64) + 64), 10,
                     not self.sound.enabled)
        Controls.add('reset', self.asset.controls['reset'],
                     (const.MAPWIDTH * const.TILEWIDTH) - ((2 * 64) + 64), 10,
                     True)
        Controls.add('undo', self.asset.controls['undo'],
                     (const.MAPWIDTH * const.TILEWIDTH) - ((3 * 64) + 64), 10,
                     True)
        Controls.add('next', self.asset.controls['next'],
                     (const.MAPWIDTH * const.TILEWIDTH) - ((4 * 64) + 64), 10,
                     True)
        Controls.add('back', self.asset.controls['back'],
                     (const.MAPWIDTH * const.TILEWIDTH) - ((5 * 64) + 64), 10,
                     True)
        Controls.add('solution', self.asset.controls['solution'],
                     (const.MAPWIDTH * const.TILEWIDTH) - ((6 * 64) + 64), 10,
                     False)

        self.clock = pygame.time.Clock()
        self.screen = pygame.display.set_mode(
            (const.MAPWIDTH * const.TILEWIDTH,
             (const.MAPHEIGHT - 1) * const.TILEANGLEHEIGHT + const.TILEHEIGHT))

    def play(self, useSolution):
        self.level = Level(self.asset, self.levelIndex, self.background)

        gameState = copy.deepcopy(self.level.data['startState'])
        gameStateHistory = []
        solution = self.level.data['solution']

        if len(solution) > 0:
            Controls.controls['solution'].enabled = True
        else:
            Controls.controls['solution'].enabled = False

        mapNeedsRedraw = True

        i = 0
        while True:
            playerMoveTo = None
            moveBySolution = False
            skipSolutionDelay = False

            key = pygame.key.get_pressed()
            if key[pygame.K_LSHIFT] or key[pygame.K_RSHIFT]:
                skipSolutionDelay = True

            for event in pygame.event.get():
                # Player clicked the "X" at the corner of the window.
                if event.type == pygame.QUIT:
                    return 'exit'

                # Player clicked somewhere on the screen
                if event.type == pygame.MOUSEBUTTONUP:
                    # Sound toggle
                    if Controls.controls['sound_enabled'].isClicked(
                            pygame.mouse.get_pos()
                    ) or Controls.controls['sound_disabled'].isClicked(
                            pygame.mouse.get_pos()):
                        Controls.controls['sound_enabled'].toggle()
                        Controls.controls['sound_disabled'].toggle()
                        self.sound.toggle()
                        mapNeedsRedraw = True

                    if Controls.controls['reset'].isClicked(
                            pygame.mouse.get_pos()):
                        return 'reset'

                    if Controls.controls['next'].isClicked(
                            pygame.mouse.get_pos()):
                        return 'next'

                    if Controls.controls['back'].isClicked(
                            pygame.mouse.get_pos()):
                        return 'back'

                    if Controls.controls['solution'].isClicked(
                            pygame.mouse.get_pos()):
                        return 'solution'

                    if Controls.controls['undo'].isClicked(
                            pygame.mouse.get_pos()):
                        i = len(solution) + 1
                        if gameState['stepCounter'] > 0:
                            gameState = gameStateHistory.pop()
                            mapNeedsRedraw = True

                elif event.type == pygame.KEYDOWN:
                    if event.key in (pygame.K_LEFT, pygame.K_a):
                        playerMoveTo = const.LEFT
                    elif event.key in (pygame.K_RIGHT, pygame.K_d):
                        playerMoveTo = const.RIGHT
                    elif event.key in (pygame.K_UP, pygame.K_w):
                        playerMoveTo = const.UP
                    elif event.key in (pygame.K_DOWN, pygame.K_s):
                        playerMoveTo = const.DOWN

                    elif event.key == K_n:
                        return 'next'
                    elif event.key == K_b:
                        return 'back'

                    elif event.key == pygame.K_u:
                        i = len(solution) + 1
                        if gameState['stepCounter'] > 0:
                            gameState = gameStateHistory.pop()
                            mapNeedsRedraw = True

                    elif event.key == pygame.K_ESCAPE:
                        return 'exit'

                    elif event.key == pygame.K_BACKSPACE:
                        return 'reset'

            # Disable automatic solution play when user pressed a direction key.
            if playerMoveTo != None:
                useSolution = False
                i = len(solution) + 1

            if useSolution and i < len(solution):
                direction = solution[i]

                if direction in ('l', 'L'):
                    playerMoveTo = const.LEFT
                elif direction in ('u', 'U'):
                    playerMoveTo = const.UP
                elif direction in ('r', 'R'):
                    playerMoveTo = const.RIGHT
                elif direction in ('d', 'D'):
                    playerMoveTo = const.DOWN

                moveBySolution = True
                i = i + 1

            if playerMoveTo != None:
                moved = self.level.makeMove(gameState, gameStateHistory,
                                            playerMoveTo)

                if moved in (1, 2):
                    gameState['stepCounter'] += 1
                    mapNeedsRedraw = True

                    if gameState['stepCounter'] % 2 == 0:
                        self.sound.play('step1')
                    else:
                        self.sound.play('step2')

                    if moved == 2:
                        self.sound.play('move block')

            if mapNeedsRedraw:
                self.screen.fill(const.BGCOLOR)

                # draw level based on gameState
                mapSurface = self.level.draw(gameState)
                self.screen.blit(mapSurface, mapSurface.get_rect())

                # draw all controls
                for key in Controls.controls:
                    controlSurface = Controls.controls[key].draw()
                    if controlSurface != None:
                        self.screen.blit(controlSurface,
                                         (Controls.controls[key].x,
                                          Controls.controls[key].y))

                pygame.display.update()
                mapNeedsRedraw = False

            if self.level.isFinished(gameState):
                print(''.join(gameState['steps']))
                return 'solved'

            # wait some time to care about CPU.
            if moveBySolution:
                if not skipSolutionDelay:
                    pygame.time.wait(const.SOLUTIONDELAY)

            self.clock.tick(const.FPS)

    def nextLevel(self):
        self.levelIndex += 1
        if self.levelIndex >= len(self.asset.levels):
            self.levelIndex = 0

    def previousLevel(self):
        self.levelIndex -= 1
        if self.levelIndex < 0:
            self.levelIndex = len(self.asset.levels) - 1

    def intro(self):
        print('intro')
        return 'level_play'

    def solved(self):
        print('solved')

        tile = self.asset.images['solved']
        tileWidth = tile.get_width()
        tileHeight = tile.get_height()
        screenWidth = (const.MAPWIDTH * const.TILEWIDTH)
        screenHeight = (const.MAPHEIGHT * const.TILEHEIGHT)

        print(screenWidth, screenHeight, tileWidth, tileHeight)
        print((int((screenWidth - tileWidth) / 2 * const.ZOOMFACTOR),
               int((screenHeight - tileHeight) / 2 * const.ZOOMFACTOR)))
        surface = pygame.Surface((tileWidth, tileHeight), pygame.SRCALPHA, 32)
        surface = surface.convert_alpha()
        surface.blit(tile, (0, 0))

        self.screen.blit(
            surface, (int((screenWidth - tileWidth) / 2 * const.ZOOMFACTOR),
                      int((screenHeight - tileHeight) / 2 * const.ZOOMFACTOR)))
        pygame.display.update()

        while True:
            for event in pygame.event.get():
                # Player clicked the "X" at the corner of the window.
                if event.type == QUIT:
                    return 'exit'

                elif event.type in (KEYDOWN, MOUSEBUTTONUP):
                    return 'continue'

            self.clock.tick(const.FPS)

        return 'exit'

    def outro(self):
        print('outro')

    def exit(self):
        pygame.quit()
Example #18
0
class TeletextApp(GuizeroApp):

    # __________________________________________________________________
    def __init__(self, argv, client, debugging_mqtt=False):

        super().__init__(argv, client, debugging_mqtt)

        self.logger.info(_("Props started"))

        if platform.system() != 'Windows':
            if self.logger.level != logging.DEBUG:
                self._gui.full_screen = True  # exit fullscreen with Esc (so for props without a keyboard)
        else:
            self._gui.width = 592
            self._gui.height = 333

        self._gui.bg = 'black'
        self._gui.tk.config(cursor="none")

        self._texte = Text(
            self._gui,
            "")  # "" value is translated to "-" for MQTT_DISPLAY_TOPIC
        self._texte.height = 1080
        self._texte.text_color = 'green'
        self._texte.font = "Helvetica"

        if platform.system() != 'Windows':
            self._texte.size = "90"
        else:
            self._texte.size = "28"

        self._sound = Sound(self._logger)

        if platform.system() != 'Windows':
            os.system("amixer cset numid=3 1")  # audio jack
            os.system("amixer set 'PCM' -- -1000")

        if self._mqttConnected:
            try:
                (result, mid) = self._mqttClient.publish(MQTT_DISPLAY_TOPIC,
                                                         "-",
                                                         qos=MQTT_DEFAULT_QoS,
                                                         retain=True)
            except Exception as e:
                self._logger.error("{0} '{1}' on {2}".format(
                    _("MQTT API : failed to call publish() for"), "-",
                    MQTT_DISPLAY_TOPIC))
                self._logger.debug(e)

    # __________________________________________________________________
    def onConnect(self, client, userdata, flags, rc):
        # extend as a virtual method
        # display message will '-' for black screen
        if hasattr(self, '_texte'):
            text = self._texte.value
            if not text:
                text = "-"
            try:
                (result, mid) = self._mqttClient.publish(MQTT_DISPLAY_TOPIC,
                                                         text,
                                                         qos=MQTT_DEFAULT_QoS,
                                                         retain=True)
            except Exception as e:
                self._logger.error("{0} '{1}' on {2}".format(
                    _("MQTT API : failed to call publish() for"), text,
                    MQTT_DISPLAY_TOPIC))
                self._logger.debug(e)

    # __________________________________________________________________
    def onMessage(self, topic, message):
        # extend as a virtual method
        print(topic, message)
        if message in ["app:startup", "app:quit"]:
            super().onMessage(topic, message)
        elif message.startswith("display:"):
            text = message[8:]
            self._texte.value = text
            if self._mqttConnected:
                try:
                    (result,
                     mid) = self._mqttClient.publish(MQTT_DISPLAY_TOPIC,
                                                     text,
                                                     qos=MQTT_DEFAULT_QoS,
                                                     retain=True)
                    self._logger.info("{0} '{1}' (mid={2}) on {3}".format(
                        _("Program sending message"), message, mid,
                        MQTT_DISPLAY_TOPIC))
                except Exception as e:
                    self._logger.error("{0} '{1}' on {2}".format(
                        _("MQTT API : failed to call publish() for"), message,
                        MQTT_DISPLAY_TOPIC))
                    self._logger.debug(e)
            self.publishMessage(self._mqttOutbox, "DONE " + message)
            self.publishDataChanges()
            self._sound.play('media/bell.wav')
        elif message.startswith("erase"):
            self._texte.value = ""
            if self._mqttConnected:
                try:
                    (result,
                     mid) = self._mqttClient.publish(MQTT_DISPLAY_TOPIC,
                                                     "-",
                                                     qos=MQTT_DEFAULT_QoS,
                                                     retain=True)
                    self._logger.info("{0} '{1}' (mid={2}) on {3}".format(
                        _("Program sending message"), message, mid,
                        MQTT_DISPLAY_TOPIC))
                except Exception as e:
                    self._logger.error("{0} '{1}' on {2}".format(
                        _("MQTT API : failed to call publish() for"), message,
                        MQTT_DISPLAY_TOPIC))
                    self._logger.debug(e)
            self.publishMessage(self._mqttOutbox, "DONE " + message)
            self.publishDataChanges()
        else:
            self.publishMessage(self._mqttOutbox, "OMIT " + message)

    # __________________________________________________________________
    def publishAllData(self):
        super().publishAllData()

    # __________________________________________________________________
    def publishDataChanges(self):
        super().publishDataChanges()

    # __________________________________________________________________
    def quit(self):
        self._gui.exit_full_screen()
        self._gui.destroy()
        try:
            self._mqttClient.disconnect()
            self._mqttClient.loop_stop()
        except:
            pass
        self.logger.info(_("Props stopped"))
        sys.exit(0)
Example #19
0
from Sound import Sound

s = Sound('../song.wav')
s.play()

while True:
    pass