天天看點

pgzero子產品制作跑酷遊戲用pgzero子產品制作跑酷遊戲

用pgzero子產品制作跑酷遊戲

遊戲運作效果

效果和pygame運作的相同

遊戲代碼

import pgzrun
import random

HEIGHT = 500
WIDTH = 750
TITLE = '森林跑酷'

bgImg = Actor('bg.png', [375, 165])
gdImg = Actor('ground.png', [375, 415])
bgImg2 = Actor('bg.png', [1125, 165])
gdImg2 = Actor('ground.png', [1125, 415])
playerImg = Actor('player_run_1.png', [80, 304])
ready = Actor('gameready.png', [375, 250])
over = Actor('gameover.png', [1200, 250])
goldImg = Actor('gold.png')
barrierImgList = []
num_play = 1
state = '準備'
# 建立變量gap記錄下落間隔
gap = 0.3
score = 0
for i in range(1, 7):
    barrierImg = 'barrier' + str(i) + '.png'
    barrierImgList.append(barrierImg)


def setRand(goldImg):
    goldImg.x = random.randint(420, 750)
    goldImg.y = random.randint(220 - playerImg.height, 330 - goldImg.height)
    return goldImg


goldImg = setRand(goldImg)
# 障礙物清單
barrierList = []


def draw():
    bgImg.draw()
    gdImg.draw()
    bgImg2.draw()
    gdImg2.draw()
    playerImg.draw()
    goldImg.draw()
    if state == '運作':
        screen.draw.text('socre:' + str(score), center=[45, 40], fontsize=20, color='black')
        for barrier in barrierList:
            barrier.draw()
        goldImg.draw()
    if state == '準備':
        ready.draw()
    if state == '結束':
        over.draw()
        screen.draw.text(str(score), center=[370, 255], fontsize=50, color='yellow')


def move():
    global barrierList, score, goldImg
    bgImg.x = bgImg.x - 2
    bgImg2.x = bgImg2.x - 2
    goldImg.x = goldImg.x - 4

    if bgImg.left < -750:
        bgImg.x = 1125
    if bgImg2.left < -750:
        bgImg2.x = 1125
    gdImg.x = gdImg.x - 4
    gdImg2.x = gdImg2.x - 4
    if gdImg.left < -750:
        gdImg.x = 1125
    if gdImg2.left < -750:
        gdImg2.x = 1125
    for barrier in barrierList:
        barrier.x = barrier.x - 4
        if barrier.right < 0:
            score += 10
            barrierList.remove(barrier)


def player():
    global playerImg, num_play
    if state == '運作':
        playerImg.image = 'player_run_' + str(num_play) + '.png'
        num_play = num_play + 1
        if num_play > 14:
            num_play = 1


def getBarrier():
    global barrierImgList, barrierList
    barrierImg = random.choice(barrierImgList)
    barrier = Actor(barrierImg, [770, 305])
    barrier.y = 330 - barrier.height / 2
    barrierList.append(barrier)


# 判斷壯猿能否下落的功能
def detectDrop():
    global playerImg
    result = True
    if playerImg.y >= 304:
        playerImg.y = 304
        return False
    else:
        return True


# 建立下落功能
def drop():
    # 告訴程式使用的是全局變量
    global gap
    if detectDrop() == True:
        # 控制壯猿向下移動
        playerImg.y = playerImg.y + gap
        gap = gap + 0.3
    else:
        gap = 0.3


# 跳躍的功能
def jump():
    if keyboard.K_SPACE == True:
        # 控制壯猿每次向上移動8
        playerImg.y = playerImg.y - 8


def check():
    global state, score, goldImg
    for barrier in barrierList:
        if barrier.colliderect(playerImg):
            state = '結束'
    if goldImg.colliderect(playerImg):
        score += 100
        goldImg = setRand(goldImg)


clock.schedule_interval(getBarrier, 1.5)
clock.schedule_interval(player, 0.05)


def on_mouse_down(pos):
    global state
    if ready.collidepoint(pos):
        state = '運作'
        ready.x = 1300


def update():
    global over, playerImg
    if state == '運作':
        move()
        drop()
        jump()
        check()
    if state == '結束':
        playerImg.image = 'player_drop.png'
        over.x = 375


pgzrun.go()