sponsored links

神還原「歡樂無窮的雙人坦克大戰」小程式遊戲,上手開玩

前言

嘿!我是栗子同學,歡迎大家閱讀這篇《坦克大戰雙人版遊戲程式設計》。

神還原「歡樂無窮的雙人坦克大戰」小程式遊戲,上手開玩

我相信這個遊戲的話對於大家來說可能會比較難,剛開始學習的話這個程式碼就直接發給大家玩一玩的哈,但是大家可以看看這個程式碼啦!

當然基礎好的話可以考慮看完後嘗試做一個類似的遊戲,然後遇到不懂的地方可以來我的粉絲裙,

沒有基礎的同學也不用擔心:偶爾有Python免費的線上直播互動課喲,大家可以跟著我一起學習,我帶大家入門。

好啦,總之我所有的文章原始碼+素材都是可以免費拿的,需要的滴滴我哈!也歡迎大家閱讀往期的文章。

神還原「歡樂無窮的雙人坦克大戰」小程式遊戲,上手開玩

《坦克大戰雙人版》

遊戲介紹:

雙人版的《坦克大戰》的基本規則是玩家消滅出現的敵方坦克保衛我方基地。

中間還會隨機出現很多特殊道具吸收可獲得相應的功能,消滅完即可進入下一關。

方向鍵:上下左右移動即可。另一個方向鍵則是:WSAD。

環境配置:

Python3、 Pycharm 、Pygame。

第三方庫的安裝:pip install pygame

效果展示:

開始介面一一

開始即可上手玩遊戲,還有背景音樂輔助!遊戲玩起來更帶感!

神還原「歡樂無窮的雙人坦克大戰」小程式遊戲,上手開玩

遊戲介面——

神還原「歡樂無窮的雙人坦克大戰」小程式遊戲,上手開玩

程式碼演示:

1)遊戲主程式

import pygame
import sys
import traceback
import wall
import myTank
import enemyTank
import food

def main():
    pygame.init()
    pygame.mixer.init()

    resolution = 630, 630
    screen = pygame.display.set_mode(resolution)
    pygame.display.set_caption("Tank War ")

    # 載入圖片,音樂,音效.
    background_image     = pygame.image.load(r"..\image\background.png")
    home_image           = pygame.image.load(r"..\image\home.png")
    home_destroyed_image = pygame.image.load(r"..\image\home_destroyed.png")

    bang_sound          = pygame.mixer.Sound(r"..\music\bang.wav")
    bang_sound.set_volume(1)
    fire_sound           = pygame.mixer.Sound(r"..\music\Gunfire.wav")
    start_sound          = pygame.mixer.Sound(r"..\music\start.wav")
    start_sound.play()

    # 定義精靈組:坦克,我方坦克,敵方坦克,敵方子彈
    allTankGroup     = pygame.sprite.Group()
    mytankGroup      = pygame.sprite.Group()
    allEnemyGroup    = pygame.sprite.Group()
    redEnemyGroup    = pygame.sprite.Group()
    greenEnemyGroup  = pygame.sprite.Group()
    otherEnemyGroup  = pygame.sprite.Group()
    enemyBulletGroup = pygame.sprite.Group()
    # 建立地圖
    bgMap = wall.Map()
    # 建立食物/道具 但不顯示
    prop = food.Food()
    # 建立我方坦克
    myTank_T1 = myTank.MyTank(1)
    allTankGroup.add(myTank_T1)
    mytankGroup.add(myTank_T1)
    myTank_T2 = myTank.MyTank(2)
    allTankGroup.add(myTank_T2)
    mytankGroup.add(myTank_T2)
    # 建立敵方 坦克
    for i in range(1, 4):
            enemy = enemyTank.EnemyTank(i)
            allTankGroup.add(enemy)
            allEnemyGroup.add(enemy)
            if enemy.isred == True:
                redEnemyGroup.add(enemy)
                continue
            if enemy.kind == 3:
                greenEnemyGroup.add(enemy)
                continue
            otherEnemyGroup.add(enemy)
    # 敵軍坦克出現動畫
    appearance_image = pygame.image.load(r"..\image\appear.png").convert_alpha()
    appearance = []
    appearance.append(appearance_image.subsurface(( 0, 0), (48, 48)))
    appearance.append(appearance_image.subsurface((48, 0), (48, 48)))
    appearance.append(appearance_image.subsurface((96, 0), (48, 48)))

    # 自定義事件
    # 建立敵方坦克延遲200
    DELAYEVENT = pygame.constants.USEREVENT
    pygame.time.set_timer(DELAYEVENT, 200)
    # 建立 敵方 子彈延遲1000
    ENEMYBULLETNOTCOOLINGEVENT = pygame.constants.USEREVENT + 1
    pygame.time.set_timer(ENEMYBULLETNOTCOOLINGEVENT, 1000)
    # 建立 我方 子彈延遲200
    MYBULLETNOTCOOLINGEVENT = pygame.constants.USEREVENT + 2
    pygame.time.set_timer(MYBULLETNOTCOOLINGEVENT, 200)
    # 敵方坦克 靜止8000
    NOTMOVEEVENT = pygame.constants.USEREVENT + 3
    pygame.time.set_timer(NOTMOVEEVENT, 8000)

    delay = 100
    moving = 0
    movdir = 0
    moving2 = 0
    movdir2 = 0
    enemyNumber = 3
    enemyCouldMove      = True
    switch_R1_R2_image  = True
    homeSurvive         = True
    running_T1          = True
    running_T2          = True
    clock = pygame.time.Clock()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

            # 我方子彈冷卻事件
            if event.type == MYBULLETNOTCOOLINGEVENT:
                myTank_T1.bulletNotCooling = True

            # 敵方子彈冷卻事件
            if event.type == ENEMYBULLETNOTCOOLINGEVENT:
                for each in allEnemyGroup:
                    each.bulletNotCooling = True

            # 敵方坦克靜止事件
            if event.type == NOTMOVEEVENT:
                enemyCouldMove = True

            # 建立敵方坦克延遲
            if event.type == DELAYEVENT:
                if enemyNumber < 4:
                    enemy = enemyTank.EnemyTank()
                    if pygame.sprite.spritecollide(enemy, allTankGroup, False, None):
                        break
                    allEnemyGroup.add(enemy)
                    allTankGroup.add(enemy)
                    enemyNumber += 1
                    if enemy.isred == True:
                        redEnemyGroup.add(enemy)
                    elif enemy.kind == 3:
                        greenEnemyGroup.add(enemy)
                    else:
                        otherEnemyGroup.add(enemy)

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_c and pygame.KMOD_CTRL:
                    pygame.quit()
                    sys.exit()

                if event.key == pygame.K_e:
                    myTank_T1.levelUp()
                if event.key == pygame.K_q:
                    myTank_T1.levelDown()
                if event.key == pygame.K_3:
                    myTank_T1.levelUp()
                    myTank_T1.levelUp()
                    myTank_T1.level = 3
                if event.key == pygame.K_2:
                    if myTank_T1.speed == 3:
                        myTank_T1.speed = 24
                    else:
                        myTank_T1.speed = 3
                if event.key == pygame.K_1:
                    for x, y in [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]:
                        bgMap.brick = wall.Brick()
                        bgMap.brick.rect.left, bgMap.brick.rect.top = 3 + x * 24, 3 + y * 24
                        bgMap.brickGroup.add(bgMap.brick)
                if event.key == pygame.K_4:
                    for x, y in [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]:
                        bgMap.iron = wall.Iron()
                        bgMap.iron.rect.left, bgMap.iron.rect.top = 3 + x * 24, 3 + y * 24
                        bgMap.ironGroup.add(bgMap.iron)                

        # 檢查使用者的鍵盤操作
        key_pressed = pygame.key.get_pressed()
        # 玩家一的移動操作
        if moving:
            moving -= 1
            if movdir == 0:
                allTankGroup.remove(myTank_T1)
                if myTank_T1.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
                    moving += 1
                allTankGroup.add(myTank_T1)
                running_T1 = True
            if movdir == 1:
                allTankGroup.remove(myTank_T1)
                if myTank_T1.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
                    moving += 1
                allTankGroup.add(myTank_T1)
                running_T1 = True
            if movdir == 2:
                allTankGroup.remove(myTank_T1)
                if myTank_T1.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
                    moving += 1
                allTankGroup.add(myTank_T1)
                running_T1 = True
            if movdir == 3:
                allTankGroup.remove(myTank_T1)
                if myTank_T1.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
                    moving += 1
                allTankGroup.add(myTank_T1)
                running_T1 = True

        if not moving:
            if key_pressed[pygame.K_w]:
                moving = 7
                movdir = 0
                running_T1 = True
                allTankGroup.remove(myTank_T1)
                if myTank_T1.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
                    moving = 0
                allTankGroup.add(myTank_T1)
            elif key_pressed[pygame.K_s]:
                moving = 7
                movdir = 1
                running_T1 = True
                allTankGroup.remove(myTank_T1)
                if myTank_T1.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
                    moving = 0
                allTankGroup.add(myTank_T1)
            elif key_pressed[pygame.K_a]:
                moving = 7
                movdir = 2
                running_T1 = True
                allTankGroup.remove(myTank_T1)
                if myTank_T1.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
                    moving = 0
                allTankGroup.add(myTank_T1)
            elif key_pressed[pygame.K_d]:
                moving = 7
                movdir = 3
                running_T1 = True
                allTankGroup.remove(myTank_T1)
                if myTank_T1.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup):
                    moving = 0
                allTankGroup.add(myTank_T1)
        if key_pressed[pygame.K_j]:
            if not myTank_T1.bullet.life and myTank_T1.bulletNotCooling:
                fire_sound.play()
                myTank_T1.shoot()
                myTank_T1.bulletNotCooling = False

        # 玩家二的移動操作
        if moving2:
            moving2 -= 1
            if movdir2 == 0:
                allTankGroup.remove(myTank_T2)
                myTank_T2.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
                allTankGroup.add(myTank_T2)
                running_T2 = True
            if movdir2 == 1:
                allTankGroup.remove(myTank_T2)
                myTank_T2.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
                allTankGroup.add(myTank_T2)
                running_T2 = True
            if movdir2 == 2:
                allTankGroup.remove(myTank_T2)
                myTank_T2.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
                allTankGroup.add(myTank_T2)
                running_T2 = True
            if movdir2 == 3:
                allTankGroup.remove(myTank_T2)
                myTank_T2.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
                allTankGroup.add(myTank_T2)
                running_T2 = True

        if not moving2:
            if key_pressed[pygame.K_UP]:
                allTankGroup.remove(myTank_T2)
                myTank_T2.moveUp(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
                allTankGroup.add(myTank_T2)
                moving2 = 7
                movdir2 = 0
                running_T2 = True
            elif key_pressed[pygame.K_DOWN]:
                allTankGroup.remove(myTank_T2)
                myTank_T2.moveDown(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
                allTankGroup.add(myTank_T2)
                moving2 = 7
                movdir2 = 1
                running_T2 = True
            elif key_pressed[pygame.K_LEFT]:
                allTankGroup.remove(myTank_T2)
                myTank_T2.moveLeft(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
                allTankGroup.add(myTank_T2)
                moving2 = 7
                movdir2 = 2
                running_T2 = True
            elif key_pressed[pygame.K_RIGHT]:
                allTankGroup.remove(myTank_T2)
                myTank_T2.moveRight(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
                allTankGroup.add(myTank_T2)
                moving2 = 7
                movdir2 = 3
                running_T2 = True
        if key_pressed[pygame.K_KP0]:
            if not myTank_T2.bullet.life:
                # fire_sound.play()
                myTank_T2.shoot()

        # 畫背景
        screen.blit(background_image, (0, 0))
        # 畫磚塊
        for each in bgMap.brickGroup:
            screen.blit(each.image, each.rect)
        # 花石頭
        for each in bgMap.ironGroup:
            screen.blit(each.image, each.rect)
        # 畫home
        if homeSurvive:
            screen.blit(home_image, (3 + 12 * 24, 3 + 24 * 24))
        else:
            screen.blit(home_destroyed_image, (3 + 12 * 24, 3 + 24 * 24))
        # 畫我方坦克1
        if not (delay % 5):
            switch_R1_R2_image = not switch_R1_R2_image
        if switch_R1_R2_image and running_T1:
            screen.blit(myTank_T1.tank_R0, (myTank_T1.rect.left, myTank_T1.rect.top))
            running_T1 = False
        else:
            screen.blit(myTank_T1.tank_R1, (myTank_T1.rect.left, myTank_T1.rect.top))
        # 畫我方坦克2
        if switch_R1_R2_image and running_T2:
            screen.blit(myTank_T2.tank_R0, (myTank_T2.rect.left, myTank_T2.rect.top))
            running_T2 = False
        else:
            screen.blit(myTank_T2.tank_R1, (myTank_T2.rect.left, myTank_T2.rect.top))
        # 畫敵方坦克
        for each in allEnemyGroup:
            # 判斷5毛錢特效是否播放
            if each.flash:
                # 判斷畫左動作還是右動作
                if switch_R1_R2_image:
                    screen.blit(each.tank_R0, (each.rect.left, each.rect.top))
                    if enemyCouldMove:
                        allTankGroup.remove(each)
                        each.move(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
                        allTankGroup.add(each)
                else:
                    screen.blit(each.tank_R1, (each.rect.left, each.rect.top))
                    if enemyCouldMove:
                        allTankGroup.remove(each)
                        each.move(allTankGroup, bgMap.brickGroup, bgMap.ironGroup)
                        allTankGroup.add(each)
            else:
                # 播放5毛錢特效
                if each.times > 0:
                    each.times -= 1
                    if each.times <= 10:
                        screen.blit(appearance[2], (3 + each.x * 12 * 24, 3))
                    elif each.times <= 20:
                        screen.blit(appearance[1], (3 + each.x * 12 * 24, 3))
                    elif each.times <= 30:
                        screen.blit(appearance[0], (3 + each.x * 12 * 24, 3))
                    elif each.times <= 40:
                        screen.blit(appearance[2], (3 + each.x * 12 * 24, 3))
                    elif each.times <= 50:
                        screen.blit(appearance[1], (3 + each.x * 12 * 24, 3))
                    elif each.times <= 60:
                        screen.blit(appearance[0], (3 + each.x * 12 * 24, 3))
                    elif each.times <= 70:
                        screen.blit(appearance[2], (3 + each.x * 12 * 24, 3))
                    elif each.times <= 80:
                        screen.blit(appearance[1], (3 + each.x * 12 * 24, 3))
                    elif each.times <= 90:
                        screen.blit(appearance[0], (3 + each.x * 12 * 24, 3))
                if each.times == 0:
                    each.flash = True

        # 繪製我方子彈1
        if myTank_T1.bullet.life:
            myTank_T1.bullet.move()
            screen.blit(myTank_T1.bullet.bullet, myTank_T1.bullet.rect)
            # 子彈 碰撞 子彈
            for each in enemyBulletGroup:
                if each.life:
                    if pygame.sprite.collide_rect(myTank_T1.bullet, each):
                        myTank_T1.bullet.life = False
                        each.life = False
                        pygame.sprite.spritecollide(myTank_T1.bullet, enemyBulletGroup, True, None)
            # 子彈 碰撞 敵方坦克
            if pygame.sprite.spritecollide(myTank_T1.bullet, redEnemyGroup, True, None):
                prop.change()
                bang_sound.play()
                enemyNumber -= 1
                myTank_T1.bullet.life = False
            elif pygame.sprite.spritecollide(myTank_T1.bullet,greenEnemyGroup, False, None):
                for each in greenEnemyGroup:
                    if pygame.sprite.collide_rect(myTank_T1.bullet, each):
                        if each.life == 1:
                            pygame.sprite.spritecollide(myTank_T1.bullet,greenEnemyGroup, True, None)
                            bang_sound.play()
                            enemyNumber -= 1
                        elif each.life == 2:
                            each.life -= 1
                            each.tank = each.enemy_3_0
                        elif each.life == 3:
                            each.life -= 1
                            each.tank = each.enemy_3_2
                myTank_T1.bullet.life = False
            elif pygame.sprite.spritecollide(myTank_T1.bullet, otherEnemyGroup, True, None):
                bang_sound.play()
                enemyNumber -= 1
                myTank_T1.bullet.life = False
            #if pygame.sprite.spritecollide(myTank_T1.bullet, allEnemyGroup, True, None):
            #    bang_sound.play()
            #    enemyNumber -= 1
            #    myTank_T1.bullet.life = False
            # 子彈 碰撞 brickGroup
            if pygame.sprite.spritecollide(myTank_T1.bullet, bgMap.brickGroup, True, None):
                myTank_T1.bullet.life = False
                myTank_T1.bullet.rect.left, myTank_T1.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24
            # 子彈 碰撞 brickGroup
            if myTank_T1.bullet.strong:
                if pygame.sprite.spritecollide(myTank_T1.bullet, bgMap.ironGroup, True, None):
                    myTank_T1.bullet.life = False
                    myTank_T1.bullet.rect.left, myTank_T1.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24
            else:
                if pygame.sprite.spritecollide(myTank_T1.bullet, bgMap.ironGroup, False, None):
                    myTank_T1.bullet.life = False
                    myTank_T1.bullet.rect.left, myTank_T1.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24

        # 繪製我方子彈2
        if myTank_T2.bullet.life:
            myTank_T2.bullet.move()
            screen.blit(myTank_T2.bullet.bullet, myTank_T2.bullet.rect)
            # 子彈 碰撞 敵方坦克
            if pygame.sprite.spritecollide(myTank_T2.bullet, allEnemyGroup, True, None):
                bang_sound.play()
                enemyNumber -= 1
                myTank_T2.bullet.life = False
            # 子彈 碰撞 brickGroup
            if pygame.sprite.spritecollide(myTank_T2.bullet, bgMap.brickGroup, True, None):
                myTank_T2.bullet.life = False
                myTank_T2.bullet.rect.left, myTank_T2.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24
            # 子彈 碰撞 brickGroup
            if myTank_T2.bullet.strong:
                if pygame.sprite.spritecollide(myTank_T2.bullet, bgMap.ironGroup, True, None):
                    myTank_T2.bullet.life = False
                    myTank_T2.bullet.rect.left, myTank_T2.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24
            else:
                if pygame.sprite.spritecollide(myTank_T2.bullet, bgMap.ironGroup, False, None):
                    myTank_T2.bullet.life = False
                    myTank_T2.bullet.rect.left, myTank_T2.bullet.rect.right = 3 + 12 * 24, 3 + 24 * 24

        # 繪製敵人子彈
        for each in allEnemyGroup:
            # 如果子彈沒有生命,則賦予子彈生命
            if not each.bullet.life and each.bulletNotCooling and enemyCouldMove:
                enemyBulletGroup.remove(each.bullet)
                each.shoot()
                enemyBulletGroup.add(each.bullet)
                each.bulletNotCooling = False
            # 如果5毛錢特效播放完畢 並且 子彈存活 則繪製敵方子彈
            if each.flash:
                if each.bullet.life:
                    # 如果敵人可以移動
                    if enemyCouldMove:
                        each.bullet.move()
                    screen.blit(each.bullet.bullet, each.bullet.rect)
                    # 子彈 碰撞 我方坦克
                    if pygame.sprite.collide_rect(each.bullet, myTank_T1):
                        bang_sound.play()
                        myTank_T1.rect.left, myTank_T1.rect.top = 3 + 8 * 24, 3 + 24 * 24
                        each.bullet.life = False
                        moving = 0  # 重置移動控制引數
                        for i in range(myTank_T1.level+1):
                            myTank_T1.levelDown()
                    if pygame.sprite.collide_rect(each.bullet, myTank_T2):
                        bang_sound.play()
                        myTank_T2.rect.left, myTank_T2.rect.top = 3 + 16 * 24, 3 + 24 * 24
                        each.bullet.life = False
                    # 子彈 碰撞 brickGroup
                    if pygame.sprite.spritecollide(each.bullet, bgMap.brickGroup, True, None):
                        each.bullet.life = False
                    # 子彈 碰撞 ironGroup
                    if each.bullet.strong:
                        if pygame.sprite.spritecollide(each.bullet, bgMap.ironGroup, True, None):
                            each.bullet.life = False
                    else:
                        if pygame.sprite.spritecollide(each.bullet, bgMap.ironGroup, False, None):
                            each.bullet.life = False

        # 最後畫食物/道具
        if prop.life:
            screen.blit(prop.image, prop.rect)
            # 我方坦克碰撞 食物/道具
            if pygame.sprite.collide_rect(myTank_T1, prop):
                if prop.kind == 1:  # 敵人全毀
                    for each in allEnemyGroup:
                        if pygame.sprite.spritecollide(each, allEnemyGroup, True, None):
                            bang_sound.play()
                            enemyNumber -= 1
                    prop.life = False
                if prop.kind == 2:  # 敵人靜止
                    enemyCouldMove = False
                    prop.life = False
                if prop.kind == 3:  # 子彈增強
                    myTank_T1.bullet.strong = True
                    prop.life = False
                if prop.kind == 4:  # 家得到保護
                    for x, y in [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]:
                        bgMap.iron = wall.Iron()
                        bgMap.iron.rect.left, bgMap.iron.rect.top = 3 + x * 24, 3 + y * 24
                        bgMap.ironGroup.add(bgMap.iron)
                    prop.life = False
                if prop.kind == 5:  # 坦克無敵
                    prop.life = False
                    pass
                if prop.kind == 6:  # 坦克升級
                    myTank_T1.levelUp()
                    prop.life = False
                if prop.kind == 7:  # 坦克生命+1
                    myTank_T1.life += 1
                    prop.life = False

        # 延遲
        delay -= 1
        if not delay:
            delay = 100    

        pygame.display.flip()
        clock.tick(60)

if __name__ == "__main__":
    try:
        main()
    except SystemExit:
        pass
    except:
        traceback.print_exc()
        pygame.quit()
        input()

2)隨機出現的特殊道具

import pygame
import random

class Food(pygame.sprite.Sprite):
    def __init__(self):

        self.food_boom    = pygame.image.load(r"..\image\food_boom.png").convert_alpha()
        self.food_clock   = pygame.image.load(r"..\image\food_clock.png").convert_alpha()
        self.food_gun     = pygame.image.load(r"..\image\food_gun.png").convert_alpha()
        self.food_iron    = pygame.image.load(r"..\image\food_iron.png").convert_alpha()
        self.food_protect = pygame.image.load(r"..\image\food_protect.png").convert_alpha()
        self.food_star    = pygame.image.load(r"..\image\food_star.png").convert_alpha()
        self.food_tank    = pygame.image.load(r"..\image\food_tank.png").convert_alpha()
        self.kind = random.choice([1, 2, 3, 4, 5, 6, 7])
        if self.kind == 1:
            self.image = self.food_boom
        elif self.kind == 2:
            self.image = self.food_clock
        elif self.kind == 3:
            self.image = self.food_gun
        elif self.kind == 4:
            self.image = self.food_iron
        elif self.kind == 5:
            self.image = self.food_protect
        elif self.kind == 6:
            self.image = self.food_star
        elif self.kind == 7:
            self.image = self.food_tank

        self.rect = self.image.get_rect()
        self.rect.left = self.rect.top = random.randint(100, 500)

        self.life = False

    def change(self):
        self.kind = random.choice([1, 2, 3, 4, 5, 6, 7])
        if self.kind == 1:
            self.image = self.food_boom
        elif self.kind == 2:
            self.image = self.food_clock
        elif self.kind == 3:
            self.image = self.food_gun
        elif self.kind == 4:
            self.image = self.food_iron
        elif self.kind == 5:
            self.image = self.food_protect
        elif self.kind == 6:
            self.image = self.food_star
        elif self.kind == 7:
            self.image = self.food_tank

        self.rect.left = self.rect.top = random.randint(100, 500)
        self.life = True

            

3)地圖介面

import pygame

brickImage          = r"..\image\brick.png"
ironImage           = r"..\image\iron.png"

class Brick(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load(brickImage)
        self.rect = self.image.get_rect()

class Iron(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)

        self.image = pygame.image.load(ironImage)
        self.rect = self.image.get_rect()

class Map():
    def __init__(self):
        self.brickGroup = pygame.sprite.Group()
        self.ironGroup  = pygame.sprite.Group()

        # 數字代表地圖中的位置
        # 畫磚塊
        X1379 = [2, 3, 6, 7, 18, 19, 22, 23]
        Y1379 = [2, 3, 4, 5, 6, 7, 8, 9, 10, 17, 18, 19, 20, 21, 22, 23]
        X28 = [10, 11, 14, 15]
        Y28 = [2, 3, 4, 5, 6, 7, 8, 11, 12, 15, 16, 17, 18, 19, 20]
        X46 = [4, 5, 6, 7, 18, 19, 20, 21]
        Y46 = [13, 14]
        X5  = [12, 13]
        Y5  = [16, 17]
        X0Y0 = [(11,23),(12,23),(13,23),(14,23),(11,24),(14,24),(11,25),(14,25)]
        for x in X1379:
            for y in Y1379:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
        for x in X28:
            for y in Y28:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
        for x in X46:
            for y in Y46:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
        for x in X5:
            for y in Y5:
                self.brick = Brick()
                self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
                self.brickGroup.add(self.brick)
        for x, y in X0Y0:
            self.brick = Brick()
            self.brick.rect.left, self.brick.rect.top = 3 + x * 24, 3 + y * 24
            self.brickGroup.add(self.brick)

        # 畫石頭
        for x, y in [(0,14),(1,14),(12,6),(13,6),(12,7),(13,7),(24,14),(25,14)]:
            self.iron = Iron()
            self.iron.rect.left, self.iron.rect.top = 3 + x * 24, 3 + y * 24
            self.ironGroup.add(self.iron)

        

結尾

《坦克大作戰》遊戲小程式好玩嗎?《坦克大作戰》小遊戲怎麼玩?怎麼進入《坦克大作戰》?

點點關注,直接找我拿小遊戲原始碼即可上手開完兒了吖~私信我也可以!

原始碼基地——

私信小編06或者點選這行藍色字型即可免費獲取哈!

往期推薦推薦——

專案1.1 GIF製作神奇(斗羅大陸為例)

【Python神器】推薦這款傻瓜式GIF製作工具,以後別再說不會了(好用到爆~)

專案2.7 聖誕快樂你的已送達!

【聖誕快樂】叮咚 沒人送你聖誕禮物沒有關係,可以找我啊?只要你開口 我都沒有~

專案2.8 聖誕快樂!
【聖誕快樂】聞到聖誕的氣息了,喜歡的節日在慢慢來臨~祝大家Merry Christmas。

專案1.0 超級瑪麗

程式設計師自制遊戲:超級瑪麗100%真實版,能把你玩哭了~【附原始碼】

專案1.1 掃雷

Pygame實戰:據說這是史上最難掃雷遊戲,沒有之一,你們感受下......

文章彙總——

專案1.0 Python—2021 |已有文章彙總 | 持續更新,直接看這篇就夠了

(更多內容+原始碼都在文章彙總哦!!歡迎閱讀~)

分類: 汽車
時間: 2021-12-24

相關文章

首款可交付的量產電動皮卡,竟然不是特斯拉

首款可交付的量產電動皮卡,竟然不是特斯拉
Rivian在這場比賽中擊敗了特斯拉.福特和通用汽車等公司,成為撞線第一家,這也為下一步的IPO計劃做好了充分的輿論基礎. 文丨AutoR智駕 王碩奇 Rivian這個名字或許對於國內消費者來說還比較 ...

上汽半年兩度參投Momenta 車企搶奪“獨角獸”備戰高階自動駕駛量產

上汽半年兩度參投Momenta 車企搶奪“獨角獸”備戰高階自動駕駛量產
經濟觀察網 記者 濮振宇 繼今年3月領投了Momenta的C輪融資後,9月15日,上汽集團宣佈繼續追加對這家自動駕駛初創公司的投資,雙方宣佈將深化在智慧駕駛核心技術領域的戰略合作,共同開發全棧智駕演算 ...

廉價三輪汽車“轉世”電動化?售價翻一番,量產遙遙無期

廉價三輪汽車“轉世”電動化?售價翻一番,量產遙遙無期
2009年,一位名叫Paul Elio的美國企業家成立了Elio Motors,希望為人們提供一臺廉價的雙座三輪車,但是直到現在都沒有投產.本應該於2012年投產的汽油版本,在2018年購入前通用汽車 ...

全國首例特斯拉退一賠三;蔚來ET7準備量產;小鵬新SUV諜照曝光;

全國首例特斯拉退一賠三;蔚來ET7準備量產;小鵬新SUV諜照曝光;
01.賣二手車靠不靠譜?全國首例特斯拉退一賠三 近日,有特斯拉車主在社交平臺發文,長達兩年之久的"特斯拉買賣合同糾紛案"終於塵埃落地,二審判決,駁回特斯拉上訴,維持原判,退一賠三. ...

最快布加迪量產超級跑車正式交付,全球限量30臺,你買了嗎?

最快布加迪量產超級跑車正式交付,全球限量30臺,你買了嗎?
布加迪旗下最速超級跑車Bugatti Super Sport 300+日前正式交付,最先兩臺客戶定車抵達美國,這是30臺限量車型其中兩臺,剩餘28臺交付工作將陸續進行.不知其中是否有你的? 因為海外疫 ...

鐳射雷達量產車競賽,小鵬P5已率先撞線?

鐳射雷達量產車競賽,小鵬P5已率先撞線?
9月15日,小鵬汽車第三款車型P5正式上市,共計六款車型六種顏色,售價為15.79-22.39萬元,軸距為2768mm,支援城市NGP,定位於G3之上P7之下,將會承擔起小鵬汽車銷量的擔當角色. P6 ...

大眾5.3億加速電芯量產
大眾|動力電池文章來源自:高工鋰電網 2021-09-17 17:44:29 閱讀:69 摘要大眾集團投資7000萬歐元(約合人民幣5.3億元)在薩爾茨吉特建設的研發中心投入使用,主要負責大眾電動汽車 ...

賈躍亭FF91還沒見,老搭檔丁磊的高合X已量產,賈總還有機會嗎?

賈躍亭FF91還沒見,老搭檔丁磊的高合X已量產,賈總還有機會嗎?
高階新能源電車都有誰,大家想到的肯定就是蔚來了. 蔚來定位高階車,一直走了高階路線,面對各種低價車的降價攻擊,依然能抗到現在,還取得了不錯的成績,真的是難得啊. 但是你知道嗎?還有一款高階可進化超跑S ...

Lab測試:“量產版”沃爾沃XC60插混版,和屁屁車有天壤之別

Lab測試:“量產版”沃爾沃XC60插混版,和屁屁車有天壤之別
上個月的月底在北京海淀機場測試了當時還沒上市的汽油版沃爾沃XC60--而且還是屁屁車.如今我們又跑到成都,測試了新款XC60的插混版本--當然了,這回測的不是屁屁車,而是正兒八經的量產版. 之前的汽油 ...

高新興物聯GM510-V3模組正式商用釋出 進入規模量產階段
e公司訊,高新興物聯宣佈,基於翱捷科技ASR1803國產芯平臺的新一代GM510-V3模組正式商用釋出,進入規模量產階段.GM510-V3模組集成了最新款ASR1803平臺方案,軟硬體功能進一步擴充套 ...

新車|首臺量產車下線,預售27萬元起,領克09值不值得買?

新車|首臺量產車下線,預售27萬元起,領克09值不值得買?
文:懂車帝原創 許博 [懂車帝原創 產品] 9月19日,領克SUV家族全新旗艦車型--領克09首臺量產車正式下線,同時新車正式開啟了預售.新車共推出6款配置車型,其中,MHEV車型的預售價為27萬-3 ...

小鵬汽車釋出P5背後:鐳射雷達量產裝車時代加速到來

小鵬汽車釋出P5背後:鐳射雷達量產裝車時代加速到來
新的競爭也要到來. 9月15日,小鵬汽車旗下預熱已久的第三款量產車型小鵬P5正式上市. 對於目前在拓展產品線方面有強烈需求的所有電動車企來說,持續開發新的車型當然是很正常的事情,P7銷量一直大幅攀升, ...

智慧座艙域和自動駕駛域“領跑”,汽車域控制器處在量產“前夜”| 中國汽車報

智慧座艙域和自動駕駛域“領跑”,汽車域控制器處在量產“前夜”| 中國汽車報
東軟睿馳釋出兩款新一代標準化域控制器,諾博科技宣佈智慧座艙域控制器現投入量產,均勝電子計劃2023年量產自動駕駛域控制器--最近一段時間,汽車域控制器領域好不熱鬧.在其背後,一場由汽車"新四 ...

極星公佈Precept量產細節!新車搭15英寸中控屏

極星公佈Precept量產細節!新車搭15英寸中控屏
早在去年的9月份的北京車展上,全球高效能電動汽車品牌極星(Polestar)正式宣佈極星Precept 正式投入量產,不管是不是極星車迷,它的量產必將受到世界各地朋友廣泛關注,值得一提的是,極星將在中 ...

特斯拉的電池路線部署,自建生產基地,加速大圓柱電池量產

特斯拉的電池路線部署,自建生產基地,加速大圓柱電池量產
新能源汽車巨頭-特斯拉在全球擁有4個汽車生產基地,年產量規劃超過200萬輛純電動車,其中上海的超級工廠產能今年將達45萬輛.高產能意味著需要大量的動力電池,而特斯拉在全球的動力電池的供應商集中於幾家, ...

脈砥微電子完成天使輪融資,推動晶片產品設計、流片以及量產程序

脈砥微電子完成天使輪融資,推動晶片產品設計、流片以及量產程序
商道創投網9月20日官方獲悉:近日,脈砥微電子(杭州)有限公司宣佈完成天使輪千萬級融資.領投方是由圖靈創投和策源創投共同組成,華興Alpha擔任本次財務顧問.據瞭解,本輪募集的資金將會主要用於對晶片技 ...

資訊丨大疆官宣:搭載大疆車載解決方案的量產車將於不久後亮相

資訊丨大疆官宣:搭載大疆車載解決方案的量產車將於不久後亮相
近日,大疆車載官方微信公眾號發表文章,文章中提到,與其說大疆是無人機公司,倒不如說大疆是專注於智慧機器人研究的公司來的貼切.而無人機是其中一個智慧機器人的具體落地表現. 雖然大疆無人機採取的是多感測器 ...

UNI-T量產L3級自動駕駛系統的國產汽車

UNI-T量產L3級自動駕駛系統的國產汽車
UNI-T量產搭載L3級自動駕駛系統的國產汽車.一定條件下,系統可執行全部動態駕駛任務(包括對環境的感知.方向盤和加減速控制),實現繼解放駕駛員的雙手雙腳之後,首次解放雙眼.L3級自動駕駛,將使使用者 ...

市值蒸發6000億,國產車企花掉474億,卻造不出一臺量產車

市值蒸發6000億,國產車企花掉474億,卻造不出一臺量產車
5年前,恆大野心勃勃地邁入新能源汽車市場,並立下了成為"世界上規模最大.實力最強新能源汽車集團"的目標.但在如今,5年已經過去,恆大汽車卻一敗塗地. 在9月17日收盤,恆大汽車股價 ...

東芝開發出大容量鋰離子電池試製品,計劃2023年量產
日經中文網9月26日訊息,東芝9月24日釋出訊息稱,開發出了可在卡車及巴士等大型純電動汽車(EV)上使用的大容量鋰離子電池試製品.這是負極材料使用稀有金屬"鈮(Nb)"的氧化物的電 ...