亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在你的Python平臺類游戲中放一些獎勵

發布時間:2021-10-23 13:52:27 來源:億速云 閱讀:136 作者:iii 欄目:編程語言

這篇文章主要介紹“怎么在你的Python平臺類游戲中放一些獎勵”,在日常操作中,相信很多人在怎么在你的Python平臺類游戲中放一些獎勵問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么在你的Python平臺類游戲中放一些獎勵”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

創建獎勵函數

獎勵和平臺非常相似,你甚至不需要一個獎勵的類。你可以重用 Platform 類,并將結果稱為“獎勵”。

由于獎勵類型和位置可能因關卡不同而不同,如果你還沒有,請在你的 Level 中創建一個名為 loot 的新函數。因為獎勵物品不是平臺,你也必須創建一個新的 loot_list 組,然后添加獎勵物品。與平臺、地面和敵人一樣,該組用于檢查玩家碰撞:

    def loot(lvl,lloc):        if lvl == 1:            loot_list = pygame.sprite.Group()            loot = Platform(300,ty*7,tx,ty, 'loot_1.png')            loot_list.add(loot)         if lvl == 2:            print(lvl)         return loot_list

你可以隨意添加任意數量的獎勵對象;記住把每一個都加到你的獎勵清單上。Platform 類的參數是獎勵圖標的 X 位置、Y 位置、寬度和高度(通常讓你的獎勵精靈保持和所有其他方塊一樣的大小最為簡單),以及你想要用作的獎勵的圖片。獎勵的放置可以和貼圖平臺一樣復雜,所以使用創建關卡時需要的關卡設計文檔。

在腳本的設置部分調用新的獎勵函數。在下面的代碼中,前三行是上下文,所以只需添加第四行:

enemy_list = Level.bad( 1, eloc )ground_list = Level.ground( 1,gloc,tx,ty )plat_list = Level.platform( 1,tx,ty )loot_list = Level.loot(1,tx,ty)

正如你現在所知道的,除非你把它包含在你的主循環中,否則獎勵不會被顯示到屏幕上。將下面代碼示例的最后一行添加到循環中:

    enemy_list.draw(world)    ground_list.draw(world)    plat_list.draw(world)    loot_list.draw(world)

啟動你的游戲看看會發生什么。

怎么在你的Python平臺類游戲中放一些獎勵

Loot in Python platformer

你的獎勵將會顯示出來,但是當你的玩家碰到它們時,它們不會做任何事情,當你的玩家經過它們時,它們也不會滾動。接下來解決這些問題。

滾動獎勵

像平臺一樣,當玩家在游戲世界中移動時,獎勵必須滾動。邏輯與平臺滾動相同。要向前滾動獎勵物品,添加最后兩行:

        for e in enemy_list:            e.rect.x -= scroll        for l in loot_list:            l.rect.x -= scroll

要向后滾動,請添加最后兩行:

        for e in enemy_list:            e.rect.x += scroll        for l in loot_list:            l.rect.x += scroll

再次啟動你的游戲,看看你的獎勵物品現在表現得像在游戲世界里一樣了,而不是僅僅畫在上面。

檢測碰撞

就像平臺和敵人一樣,你可以檢查獎勵物品和玩家之間的碰撞。邏輯與其他碰撞相同,除了撞擊不會(必然)影響重力或生命值。取而代之的是,命中會導致獎勵物品會消失并增加玩家的分數。

當你的玩家觸摸到一個獎勵對象時,你可以從 loot_list 中移除該對象。這意味著當你的主循環在 loot_list 中重繪所有獎勵物品時,它不會重繪那個特定的對象,所以看起來玩家已經獲得了獎勵物品。

Player 類的 update 函數中的平臺碰撞檢測之上添加以下代碼(最后一行僅用于上下文):

                loot_hit_list = pygame.sprite.spritecollide(self, loot_list, False)                for loot in loot_hit_list:                        loot_list.remove(loot)                        self.score += 1                print(self.score)         plat_hit_list = pygame.sprite.spritecollide(self, plat_list, False)

當碰撞發生時,你不僅要把獎勵從它的組中移除,還要給你的玩家一個分數提升。你還沒有創建分數變量,所以請將它添加到你的玩家屬性中,該屬性是在 Player 類的 __init__ 函數中創建的。在下面的代碼中,前兩行是上下文,所以只需添加分數變量:

        self.frame = 0        self.health = 10        self.score = 0

當在主循環中調用 update 函數時,需要包括 loot_list

        player.gravity()        player.update()

如你所見,你已經掌握了所有的基本知識。你現在要做的就是用新的方式使用你所知道的。

在下一篇文章中還有一些提示,但是與此同時,用你學到的知識來制作一些簡單的單關卡游戲。限制你試圖創造的東西的范圍是很重要的,這樣你就不會埋沒自己。這也使得最終的成品看起來和感覺上更容易完成。

以下是迄今為止你為這個 Python 平臺編寫的所有代碼:

#!/usr/bin/env python3# draw a world# add a player and player control# add player movement# add enemy and basic collision# add platform# add gravity# add jumping# add scrolling # GNU All-Permissive License# Copying and distribution of this file, with or without modification,# are permitted in any medium without royalty provided the copyright# notice and this notice are preserved.  This file is offered as-is,# without any warranty. import pygameimport sysimport os '''Objects''' class Platform(pygame.sprite.Sprite):    # x location, y location, img width, img height, img file        def __init__(self,xloc,yloc,imgw,imgh,img):        pygame.sprite.Sprite.__init__(self)        self.image = pygame.image.load(os.path.join('images',img)).convert()        self.image.convert_alpha()        self.rect = self.image.get_rect()        self.rect.y = yloc        self.rect.x = xloc class Player(pygame.sprite.Sprite):    '''    Spawn a player    '''    def __init__(self):        pygame.sprite.Sprite.__init__(self)        self.movex = 0        self.movey = 0        self.frame = 0        self.health = 10        self.collide_delta = 0        self.jump_delta = 6        self.score = 1        self.images = []        for i in range(1,9):            img = pygame.image.load(os.path.join('images','hero' + str(i) + '.png')).convert()            img.convert_alpha()            img.set_colorkey(ALPHA)            self.images.append(img)            self.image = self.images[0]            self.rect  = self.image.get_rect()     def jump(self,platform_list):        self.jump_delta = 0     def gravity(self):        self.movey += 3.2 # how fast player falls               if self.rect.y > worldy and self.movey >= 0:            self.movey = 0            self.rect.y = worldy-ty           def control(self,x,y):        '''        control player movement        '''        self.movex += x        self.movey += y           def update(self):        '''        Update sprite position        '''               self.rect.x = self.rect.x + self.movex        self.rect.y = self.rect.y + self.movey         # moving left        if self.movex < 0:            self.frame += 1            if self.frame > ani*3:                self.frame = 0            self.image = self.images[self.frame//ani]         # moving right        if self.movex > 0:            self.frame += 1            if self.frame > ani*3:                self.frame = 0            self.image = self.images[(self.frame//ani)+4]         # collisions        enemy_hit_list = pygame.sprite.spritecollide(self, enemy_list, False)        for enemy in enemy_hit_list:            self.health -= 1            #print(self.health)         loot_hit_list = pygame.sprite.spritecollide(self, loot_list, False)        for loot in loot_hit_list:            loot_list.remove(loot)            self.score += 1            print(self.score)         plat_hit_list = pygame.sprite.spritecollide(self, plat_list, False)        for p in plat_hit_list:            self.collide_delta = 0 # stop jumping            self.movey = 0            if self.rect.y > p.rect.y:                self.rect.y = p.rect.y+ty            else:                self.rect.y = p.rect.y-ty                   ground_hit_list = pygame.sprite.spritecollide(self, ground_list, False)        for g in ground_hit_list:            self.movey = 0            self.rect.y = worldy-ty-ty            self.collide_delta = 0 # stop jumping            if self.rect.y > g.rect.y:                self.health -=1                print(self.health)                       if self.collide_delta < 6 and self.jump_delta < 6:            self.jump_delta = 6*2            self.movey -= 33  # how high to jump            self.collide_delta += 6            self.jump_delta    += 6           class Enemy(pygame.sprite.Sprite):    '''    Spawn an enemy    '''    def __init__(self,x,y,img):        pygame.sprite.Sprite.__init__(self)        self.image = pygame.image.load(os.path.join('images',img))        self.movey = 0        #self.image.convert_alpha()        #self.image.set_colorkey(ALPHA)        self.rect = self.image.get_rect()        self.rect.x = x        self.rect.y = y        self.counter = 0                    def move(self):        '''        enemy movement        '''        distance = 80        speed = 8         self.movey += 3.2               if self.counter >= 0 and self.counter <= distance:            self.rect.x += speed        elif self.counter >= distance and self.counter <= distance*2:            self.rect.x -= speed        else:            self.counter = 0               self.counter += 1         if not self.rect.y >= worldy-ty-ty:            self.rect.y += self.movey         plat_hit_list = pygame.sprite.spritecollide(self, plat_list, False)        for p in plat_hit_list:            self.movey = 0            if self.rect.y > p.rect.y:                self.rect.y = p.rect.y+ty            else:                self.rect.y = p.rect.y-ty         ground_hit_list = pygame.sprite.spritecollide(self, ground_list, False)        for g in ground_hit_list:            self.rect.y = worldy-ty-ty        class Level():    def bad(lvl,eloc):        if lvl == 1:            enemy = Enemy(eloc[0],eloc[1],'yeti.png') # spawn enemy            enemy_list = pygame.sprite.Group() # create enemy group            enemy_list.add(enemy)              # add enemy to group                   if lvl == 2:            print("Level " + str(lvl) )         return enemy_list     def loot(lvl,tx,ty):        if lvl == 1:            loot_list = pygame.sprite.Group()            loot = Platform(200,ty*7,tx,ty, 'loot_1.png')            loot_list.add(loot)         if lvl == 2:            print(lvl)         return loot_list     def ground(lvl,gloc,tx,ty):        ground_list = pygame.sprite.Group()        i=0        if lvl == 1:            while i < len(gloc):                ground = Platform(gloc[i],worldy-ty,tx,ty,'ground.png')                ground_list.add(ground)                i=i+1         if lvl == 2:            print("Level " + str(lvl) )         return ground_list     def platform(lvl,tx,ty):        plat_list = pygame.sprite.Group()        ploc = []        i=0        if lvl == 1:            ploc.append((20,worldy-ty-128,3))            ploc.append((300,worldy-ty-256,3))            ploc.append((500,worldy-ty-128,4))             while i < len(ploc):                j=0                while j <= ploc[i][2]:                    plat = Platform((ploc[i][0]+(j*tx)),ploc[i][1],tx,ty,'ground.png')                    plat_list.add(plat)                    j=j+1                print('run' + str(i) + str(ploc[i]))                i=i+1         if lvl == 2:            print("Level " + str(lvl) )         return plat_list '''Setup'''worldx = 960worldy = 720 fps = 40 # frame rateani = 4  # animation cyclesclock = pygame.time.Clock()pygame.init()main = True BLUE  = (25,25,200)BLACK = (23,23,23 )WHITE = (254,254,254)ALPHA = (0,255,0) world = pygame.display.set_mode([worldx,worldy])backdrop = pygame.image.load(os.path.join('images','stage.png')).convert()backdropbox = world.get_rect()player = Player() # spawn playerplayer.rect.x = 0player.rect.y = 0player_list = pygame.sprite.Group()player_list.add(player)steps = 10forwardx = 600backwardx = 230 eloc = []eloc = [200,20]gloc = []#gloc = [0,630,64,630,128,630,192,630,256,630,320,630,384,630]tx = 64 #tile sizety = 64 #tile size i=0while i <= (worldx/tx)+tx:    gloc.append(i*tx)    i=i+1 enemy_list = Level.bad( 1, eloc )ground_list = Level.ground( 1,gloc,tx,ty )plat_list = Level.platform( 1,tx,ty )loot_list = Level.loot(1,tx,ty) '''Main loop'''while main == True:    for event in pygame.event.get():        if event.type == pygame.QUIT:            pygame.quit(); sys.exit()            main = False         if event.type == pygame.KEYDOWN:            if event.key == pygame.K_LEFT or event.key == ord('a'):                print("LEFT")                player.control(-steps,0)            if event.key == pygame.K_RIGHT or event.key == ord('d'):                print("RIGHT")                player.control(steps,0)            if event.key == pygame.K_UP or event.key == ord('w'):                print('jump')         if event.type == pygame.KEYUP:            if event.key == pygame.K_LEFT or event.key == ord('a'):                player.control(steps,0)            if event.key == pygame.K_RIGHT or event.key == ord('d'):                player.control(-steps,0)            if event.key == pygame.K_UP or event.key == ord('w'):                player.jump(plat_list)             if event.key == ord('q'):                pygame.quit()                sys.exit()                main = False     # scroll the world forward    if player.rect.x >= forwardx:        scroll = player.rect.x - forwardx        player.rect.x = forwardx        for p in plat_list:            p.rect.x -= scroll        for e in enemy_list:            e.rect.x -= scroll        for l in loot_list:            l.rect.x -= scroll                   # scroll the world backward    if player.rect.x <= backwardx:        scroll = backwardx - player.rect.x        player.rect.x = backwardx        for p in plat_list:            p.rect.x += scroll        for e in enemy_list:            e.rect.x += scroll        for l in loot_list:            l.rect.x += scroll     world.blit(backdrop, backdropbox)        player.gravity() # check gravity    player.update()    player_list.draw(world) #refresh player position    enemy_list.draw(world)  # refresh enemies    ground_list.draw(world)  # refresh enemies    plat_list.draw(world)   # refresh platforms    loot_list.draw(world)   # refresh loot     for e in enemy_list:        e.move()    pygame.display.flip()    clock.tick(fps)

到此,關于“怎么在你的Python平臺類游戲中放一些獎勵”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙山县| 平山县| 云南省| 和田市| 榆林市| 湄潭县| 新化县| 无棣县| 五原县| 定西市| 内江市| 江达县| 新蔡县| 新绛县| 阿合奇县| 湛江市| 工布江达县| 庆阳市| 襄汾县| 册亨县| 西华县| 门源| 乐山市| 尼木县| 芦山县| 铜梁县| 龙陵县| 大新县| 闸北区| 三河市| 陵水| 大竹县| 武城县| 虎林市| 大同县| 晋州市| 毕节市| 呼伦贝尔市| 阿巴嘎旗| 拉孜县| 饶阳县|