用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()