コード例 #1
0
class Game:
    def __init__(self):
        self.gameName = "Dungeons & Pythons"
        self._image_library = {}
        self.screen = pygame.display.set_mode((900, 750))
        self.gameOver = False
        self.clock = pygame.time.Clock()
        self.roundNumber = 0
        self.player = Player(100, "Hero", 25, 50, 125, "assets/player/player.png")
        self.boss = Enemy(100, "The BOSS: Dragon", 20, 550, 100, "assets/monsters/boss.png", 300, 200)
        self.enemies = [Enemy(50, "Cloud ashes", 10, 550, 100, "assets/monsters/ashesSnake.png", 50, 10),
                        Enemy(50, "Yaretzi", 15, 550, 100, "assets/monsters/aztecaSnake.png", 50, 15),
                        Enemy(40, "Konoha", 7, 550, 100, "assets/monsters/fireFairy.png", 40, 10),
                        Enemy(35, "Fire spliter", 10, 550, 100, "assets/monsters/fireLizard.png", 35, 10),
                        Enemy(40, "Duchy", 7, 550, 100, "assets/monsters/groundFairy.png", 40, 10),
                        Enemy(45, "Medusa's daughter", 13, 550, 100, "assets/monsters/groundSnake.png", 45, 13),
                        Enemy(40, "Imperial", 12, 550, 100, "assets/monsters/imperialBird.png", 40, 12),
                        Enemy(35, "Scissors", 9, 550, 100, "assets/monsters/scorpio.png", 35, 10),
                        Enemy(20, "Awesome bats", 8, 550, 100, "assets/monsters/triBats.png", 20, 10),
                        Enemy(45, "Hydra", 14, 550, 100, "assets/monsters/triHead.png", 45, 14),
                        Enemy(25, "The python brothers", 5, 550, 100, "assets/monsters/triSnakes.png", 25, 10),
                        Enemy(40, "Amega", 7, 550, 100, "assets/monsters/waterFairy.png", 40, 7)]
        self.currentEnemy = self.getRandomRegularEnemy()
        self.actionSelected = False
        self.arrowMenuPosition = Position.TOPLEFT


    def run(self):
        pygame.init()
        pygame.display.set_caption(self.gameName)

        while not self.gameOver:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    self.gameOver = True
                self.keyEvents(event)

            self.screen.fill((0, 0, 0))
            self.buildGUI(self.screen)
            pygame.display.flip()
            self.clock.tick(60)

        pygame.quit()

    def keyEvents(self, event):
        if event.type == 3:
            #key down
            if event.key == 274:
                if self.arrowMenuPosition == Position.TOPLEFT:
                    self.arrowMenuPosition = Position.BOTTOMLEFT
                elif self.arrowMenuPosition == Position.TOPRIGHT:
                    self.arrowMenuPosition = Position.BOTTOMRIGHT
            #key up
            elif event.key == 273:
                if self.arrowMenuPosition == Position.BOTTOMLEFT:
                    self.arrowMenuPosition = Position.TOPLEFT
                elif self.arrowMenuPosition == Position.BOTTOMRIGHT:
                    self.arrowMenuPosition = Position.TOPRIGHT
            #key left
            elif event.key == 276:
                if self.arrowMenuPosition == Position.TOPRIGHT:
                    self.arrowMenuPosition = Position.TOPLEFT
                elif self.arrowMenuPosition == Position.BOTTOMRIGHT:
                    self.arrowMenuPosition = Position.BOTTOMLEFT
            #key right
            elif event.key == 275:
                if self.arrowMenuPosition == Position.TOPLEFT:
                    self.arrowMenuPosition = Position.TOPRIGHT
                elif self.arrowMenuPosition == Position.BOTTOMLEFT:
                    self.arrowMenuPosition = Position.BOTTOMRIGHT
            #key enter
            elif event.key == 13:
                self.playAction()

    def buildGUI(self, view):
        #background
        displayImage(view, 'assets/recources/bg.png', 0, 0)

        #bottom panel
        displayImage(view, 'assets/recources/panel.png', 0, 475)

        #palyer
        self.player.draw(view)

        #enemy
        self.currentEnemy.draw(view)

        #buttons
        self.drawButtons(view)

        #player information
        self.drawPlayerInfo(view)

        #menu arrow
        self.drawArrowMenu(view)

        #armor
        self.drawArmor(view)

        #enemy info
        self.drawEnemyLife(view)

    def playAction(self):
        if self.arrowMenuPosition == Position.TOPLEFT:
            self.attackAction()
        elif self.arrowMenuPosition == Position.TOPRIGHT:
            self.healAction()
        elif self.arrowMenuPosition == Position.BOTTOMLEFT:
            self.armorAction()
        elif self.arrowMenuPosition == Position.BOTTOMRIGHT:
            self.exitGame()

    def exitGame(self):
        self.gameOver = True

    def attackAction(self):
        self.player.attack(self.currentEnemy)
        if self.currentEnemy.isDead():
            self.nextRound()
        else:
            self.currentEnemy.attack(self.player)
            if self.player.isDead():
                self.exitGame()

    def healAction(self):
        self.player.heal()

    def armorAction(self):
        self.player.addArmor()

    def drawButtons(self, view):
        #attack button
        self.drawButton(view,'ATTACK', 65, 533, 'assets/ui/button.png')

        #heal button
        self.drawHealButton(view)

        #armor button
        self.drawArmorButton(view)

        #exit button
        self.drawButton(view,'EXIT', 450, 618, 'assets/ui/button.png')

    def drawButton(self, view, text, x, y, buttonSprite, textColor = (255, 255, 255)):
        displayImage(view, buttonSprite, x, y)
        displayTextCentered(view, text, x, y, textColor)

    def drawHealButton(self, view):
        textColor = (255, 255, 255) if self.player.canHeal() else (149, 129, 115)
        buttonSprite = 'assets/ui/button.png' if self.player.canHeal() else 'assets/ui/button_disable.png'

        self.drawButton(view, 'HEAL(20C)', 450, 533, buttonSprite, textColor)

    def drawArmorButton(self, view):
        textColor = (255, 255, 255) if self.player.canAddArmor() else (149, 129, 115)
        buttonSprite = 'assets/ui/button.png' if self.player.canAddArmor() else 'assets/ui/button_disable.png'
        armorCost = self.player.getArmorCost()
        buttonText = 'ARMOR('+str(armorCost)+'C)' if self.player.armor < self.player.MAX_ARMOR else 'MAX ARMOR'

        self.drawButton(view, buttonText, 65, 618, buttonSprite, textColor)

    def drawPlayerInfo(self, view):
        #heal Poins
        lifePercent = self.getPercentPoints(self.player.health, self.player.healthMax, 460)
        pygame.draw.rect(view, (255,0,0), (50, 405, lifePercent, 49))

        #heal GUI
        displayImage(view, 'assets/ui/hp_bar.png', 30, 405)

        #experience points
        expPercent = self.getPercentPoints(self.player.level.experience, self.player.level.experienceNextLevel, 336)
        pygame.draw.rect(view, (255,192,0), (65, 30, expPercent, 10))

        #experience GUI
        displayImage(view, 'assets/ui/experience.png', 10, 10)

        #level
        displayTextCentered(view, str(self.player.level.level), 22, 22, width=25, height=25, fontSize=30)

        #money
        moneyStrSizes = get_text(str(self.player.money), (255, 255, 255), 45).get_rect()
        displayText(view, str(self.player.money), (900 - moneyStrSizes.width - 20), 20)
        displayImage(view, 'assets/ui/coin.png', (900 - moneyStrSizes.width - 78), 15)

        #round
        roundStrSizes = get_text(str(self.roundNumber), (255, 255, 255), 45).get_rect()
        displayText(view, str(self.roundNumber), (900 - roundStrSizes.width - 20), 80)
        displayImage(view, 'assets/ui/kills.png', (900 - roundStrSizes.width - 78), 75)

    def drawEnemyLife(self, view):
        lifePercent = self.getPercentPoints(self.currentEnemy.health, self.currentEnemy.healthMax, 138)
        pygame.draw.rect(view, (255,0,0), (603, 400, lifePercent, 15))
        displayImage(view, 'assets/ui/enemy_hp_bar.png', 600, 400)


    def drawArrowMenu(self, view):
        if self.arrowMenuPosition == Position.TOPLEFT:
            displayImage(view, 'assets/ui/menu_arrow.png', 42, 540)
        elif self.arrowMenuPosition == Position.TOPRIGHT:
            displayImage(view, 'assets/ui/menu_arrow.png', 430, 540)
        elif self.arrowMenuPosition == Position.BOTTOMLEFT:
            displayImage(view, 'assets/ui/menu_arrow.png', 42, 628)
        elif self.arrowMenuPosition == Position.BOTTOMRIGHT:
            displayImage(view, 'assets/ui/menu_arrow.png', 430, 628)

    def drawArmor(self, view):
        if self.player.armor > 0:
            displayImage(view, 'assets/ui/armor.png', 480, 350)
        if self.player.armor > 1:
            displayImage(view, 'assets/ui/armor.png', 428, 350)
        if self.player.armor > 2:
            displayImage(view, 'assets/ui/armor.png', 376, 350)
        if self.player.armor > 3:
            displayImage(view, 'assets/ui/armor.png', 324, 350)
        if self.player.armor > 4:
            displayImage(view, 'assets/ui/armor.png', 272, 350)

    def getPercentPoints(self, points, maxPoints, maxPercent):
        if points <= 0:
            return 0
        else:
            points = (points*maxPercent)/maxPoints
            return int(points)

    def nextRound(self):
        self.roundNumber += 1
        self.player.money += self.currentEnemy.moneyWhenDying
        self.player.level.addExperience(self.currentEnemy.experienceWhenDying)
        self.setCurrentEnemy()


    def setCurrentEnemy(self):
        if self.roundNumber % 10 == 0:
            self.currentEnemy = self.getBossEnemy()
        else:
            self.currentEnemy = self.getRandomRegularEnemy()

        self.currentEnemy.upgradeStatsAcordingLevel(self.roundNumber)


    def getRandomRegularEnemy(self):
        randomIndex = random.randint(0, len(self.enemies)-1)
        enemy = self.enemies[randomIndex]

        return enemy


    def getBossEnemy(self):
        enemy = self.boss

        return enemy
コード例 #2
0
ファイル: game.py プロジェクト: RomuloSouza/corong
class Game:
    def __init__(self):
        pyxel.init(256, 150, caption='Corong', fps=60)
        self.virus = Virus()
        self.state = STATES['0']
        self.player1 = Player('p1')
        self.player2 = Player('p2')
        self.score = Score(self.player1, self.player2)

        pyxel.load('assets/sprites.pyxres')
        pyxel.run(self.update, self.draw)

    def update(self):
        self.player1.update()
        self.player2.update()
        self.virus.update()

        self.check_state()
        self.check_screen_border()

        if self.virus.speed_x > 0:
            if self.check_colision(self.player2):
                self.virus.update_speed(self.player2)
        elif self.virus.speed_x < 0:
            if self.check_colision(self.player1):
                self.virus.update_speed(self.player1)

    def draw(self):
        pyxel.cls(0)
        self.player1.draw()
        self.player2.draw()
        self.virus.draw()
        self.score.draw()

    def check_state(self):
        if self.state == STATES['0']:
            if pyxel.btn(pyxel.KEY_SPACE):
                self.set_state('1')

    def check_screen_border(self):
        virus = self.virus
        if virus.pos_y <= 0 or virus.pos_y >= pyxel.height - virus.height:
            virus.invert_speed_y_direction()
        elif virus.pos_x <= 0:
            self.score.increase_score(self.player2)
            self.set_state('0')
        elif virus.pos_x >= pyxel.width - virus.width:
            self.score.increase_score(self.player1)
            self.set_state('0')

    def check_colision(self, player):
        for s_hbox in player.syringe.hitbox:
            if player.name == 'p1':
                v_hitbox = self.virus.hitbox[0]
                if v_hitbox[0] > float(s_hbox[0]):
                    continue
            elif player.name == 'p2':
                v_hitbox = self.virus.hitbox[1]
                if v_hitbox[0] < float(s_hbox[0]):
                    continue

            for v_hb in range(round(v_hitbox[1][0]), round(v_hitbox[1][1])):
                if s_hbox[1][0] <= v_hb <= s_hbox[1][1]:
                    return True

        return False

    def set_state(self, state):
        self.state = STATES[state]
        if state == '0':
            self.virus = Virus()
        elif state == '1':
            player = self.score.last_to_score or random.choice(
                [self.player1, self.player2])
            self.virus.throw_virus(player)
コード例 #3
0
class Game():
    """
	TODO: Сделать так, чтобы pygame и прочие запускались из папки lib
	Это экземпляр класса, в конструкторе которого будет запускаться игра
	"""
    def __init__(self):
        self.WIDTHSCREEN = WIDTHSCREEN
        self.HEIGHTSCREEN = HEIGHTSCREEN

        #переменные фокуса
        self.focus = GVector()

        #зазор для фокуса
        self.focusMargin = int(self.HEIGHTSCREEN / 4)

        self.MAINCOLOR = hexToTuple('B6F788')
        self.fps = 60
        self.fpsClock = pygame.time.Clock()
        self.player = Player(self.WIDTHSCREEN / 2, self.HEIGHTSCREEN / 2,
                             self.focus)
        #добавляем подложки
        self.pods = []
        for i in [-1, 0, 1]:
            for j in [0, -1, 1]:
                self.pods.append(
                    Pod(i * self.WIDTHSCREEN, j * self.HEIGHTSCREEN,
                        self.WIDTHSCREEN, self.HEIGHTSCREEN, self.focus))
        self.objects = {'player': [self.player], 'pods': self.pods}
        self.run()

    def drawWorld(self):
        """
		Вот эта вот замечательная функция 
		будет отрисовывать мир.
		По идее, она должна выполняться отдельным
		потоком, или с помощью модуля acyncio"""
        self.screen.fill(self.MAINCOLOR)
        #рисуем подложку
        for obj in self.objects['pods']:
            obj.draw(self.screen)
        #рисуем игрока
        self.player.draw(self.screen)
        pygame.display.update()

    def moveWorld(self, dt):
        """
		Все действия, связаанные с изменением параметров мира
		делаются в этой функции. Так же, выполняется с помощью
		потоков или asyncio"""
        #self.player.move(dt)
        for key in self.objects:
            for obj in self.objects[key]:
                obj.move(dt)

    def run(self):
        pygame.init()
        self.screen = pygame.display.set_mode(
            (self.WIDTHSCREEN, self.HEIGHTSCREEN), 0, 32)
        self.running = True
        dt = 0
        #обрабатываем события
        while self.running:
            self.moveWorld(dt)
            #пересчитываем фокус
            px, py = self.player.initPoint.get()
            if px < self.focus[0] + self.focusMargin:
                self.focus[0] = px - self.focusMargin
            if px > self.focus[0] + self.WIDTHSCREEN - self.focusMargin:
                self.focus[0] = px - self.WIDTHSCREEN + self.focusMargin
            if py < self.focus[1] + self.focusMargin:
                self.focus[1] = py - self.focusMargin
            if py > self.focus[1] + self.HEIGHTSCREEN - self.focusMargin:
                self.focus[1] = py - self.HEIGHTSCREEN + self.focusMargin

            self.drawWorld()  #<- пока тут, потом в поток занесу
            pressedKeys = pygame.key.get_pressed()
            #вперед
            if ((pressedKeys[K_UP] or pressedKeys[K_w])
                    and not (pressedKeys[K_DOWN] or pressedKeys[K_s])):
                self.player.goUp()
            #наэад
            elif ((pressedKeys[K_DOWN] or pressedKeys[K_s])
                  and not (pressedKeys[K_UP] or pressedKeys[K_w])):
                self.player.goDown()
            #направо
            if ((pressedKeys[K_RIGHT] or pressedKeys[K_d])
                    and not (pressedKeys[K_LEFT] or pressedKeys[K_a])):
                self.player.goRight()

            #налево
            if ((pressedKeys[K_LEFT] or pressedKeys[K_a])
                    and not (pressedKeys[K_RIGHT] or pressedKeys[K_d])):
                self.player.goLeft()

            #выход из игры
            if pressedKeys[K_ESCAPE]:
                self.running = False

            for event in pygame.event.get():
                if event.type == QUIT:
                    #выходим по нажатию на крестик
                    self.running = False
                # elif event.type==KEYDOWN:
                # 	if (event.key==K_UP or event.key==K_w):
                # 		self.player.goUp()
                # 	elif event.key==K_ESCAPE:
                # 		self.running = False
        #обработали---
            dt = (self.fpsClock.tick(self.fps)) / 1000
        exit()
コード例 #4
0
#scoreboard = ScoreBoard(gamearea)
#map.addenemygroup(ScobotGroup(1000,300,5))
#colidegroup = pygame.sprite.Group(collidable)

#group containing player and platforms
#platformsandplayer = pygame.sprite.Group(platform1, platform2, ship)
#enemies sprite group
#enemies = pygame.sprite.Group(alien1)
#shootLoop = 0
#bullets = []
run = True
totalscore = 0
xoffset = ship.calculatexoffset(screen,gamearea)
yoffset = ship.calculateyoffset(screen,gamearea)
win.blit(view, (0,0))
ship.draw(win)
#mainloop

#testcount = 0
while run:
    clock.tick(27)

    #testcount += 1
    #print("Running",testcount)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            run = False


    keys = pygame.key.get_pressed()