猫史档案馆


【Python作品分享】我的超级作品【作品秀】

用户:超级无敌编程大神超级无敌编程大神查看:0 回复:1 评论:0 创建时间:2022-06-09T09:56:37


【作品展示】

center_image

 

【作品介绍】

这是我做的超级作品!

 

【作品源代码】

import math
import pgzrun
import random


o_speed = 喵00000000000000000000000000000000  
initial_speed = 3  


speedinterval_time = 1


every_add_speed = 1


vacating_time = 0.5



WIDTH = 380
HEIGHT = 600


max_o_speed = 12  
max_initial_speed = 12  
min_o_speed = 3
min_initial_speed = 3 

max_every_add_speed = 3
min_every_add_speed = 1

max_vacating_time = 8
min_vacating_time = 0.5

# 准备背景图
bg = Actor('readybg.png')

bgFun = Actor('bg.png', [WIDTH/2, HEIGHT/2-40])
# 结束背景图
bgEnd = Actor('endbg.png')
# 开始游戏
startBg = Actor('start.png', [WIDTH-95, HEIGHT/1.2])
# 再试一次
againBg = Actor('again.png', [WIDTH-95, HEIGHT/1.2])
# 游戏标题
gametitle = Actor('title.png', [WIDTH/2, HEIGHT/5])
# gameover
gameover = Actor('gameover.png', [WIDTH/2, HEIGHT/3.2])
# 结束界面的得分
gamescore = Actor('scorefont.png', [WIDTH/2.5, HEIGHT/2.5])
# 人物
character = Actor('skill.png', [WIDTH/2, HEIGHT/1.5])
# 障碍物(包含奖品、跳板)
obstacleList = ['tree1.png', 'stone1.png', 'tree2.png', 'prize1.png',
                'stone2.png', 'tree1.png', 'prize2.png', 'tree2.png', 'slope.png']
oList = []
# 奖励组
prizeList = ['prize1.png', 'prize2.png']
# 状态
state = '准备'
# 得分
score = 0
# 计时
timedata = 0
newtimedata = 0

# 障碍物类(包含奖品、跳板)


class Obstacle():
    def __init__(self, obstacleItem):
        self.obstacleItem = obstacleItem

    def drawObstacle(self):
        self.obstacleItem.draw()



def renderObstacle():
    y = 0
    for p in obstacleList:
        y = y - 100
        if p == 'slope.png':
            y = y - 60
        obstacle = Actor(p, [random.randint(40, WIDTH-40), y])
        obstacleItem = Obstacle(obstacle)
        oList.append(obstacleItem)


renderObstacle()



def timeSpeed():
    global timedata, o_speed, newtimedata
    if state == '运行':
        if newtimedata == 0:
            newtimedata = timedata
        timedata += 1
        if math.fabs(timedata - newtimedata) == speedinterval_time:
            newtimedata = timedata
            if o_speed >= min_o_speed and o_speed < max_o_speed:
                o_speed = o_speed
            elif o_speed >= max_o_speed:
                o_speed = max_o_speed
            else:
                o_speed = min_o_speed
            if every_add_speed <= max_every_add_speed and every_add_speed >= min_every_add_speed:
                o_speed += every_add_speed
            else:
                o_speed += min_every_add_speed


clock.schedule_interval(timeSpeed, 1.0)


def on_mouse_down(pos):
    global state
    if state == '准备':
        if startBg.collidepoint(pos):
            state = '运行'
    if state == '结束':
        if againBg.collidepoint(pos):
            state = '准备'
            resetAny()


def on_mouse_move(pos):
    if state == '运行':
        character.pos = pos


def draw():
    # 背景
    if state == '准备':
        bg.draw()
        gametitle.draw()
        # 开始游戏
        startBg.draw()
    if state == '运行':
        bgFun.draw()
        # 障碍物(包含奖品、跳板)
        for oi in oList:
            oi.drawObstacle()
        # 人物
        character.draw()
        screen.draw.text('score:' + str(score), center=(55, 20), fontsize=25)
    if state == '结束':
        bgEnd.draw()
        gametitle.draw()
        gameover.draw()
        gamescore.draw()
        screen.draw.text(str(score), center=(
            WIDTH/1.7, HEIGHT/2.55), fontsize=40)
        # 再来一次
        againBg.draw()

# 障碍物移动(包含奖品、跳板)


def oMove(list):
    global state, score
    if state == '运行':
        for i in list:
            if o_speed >= min_o_speed and o_speed < max_o_speed:
                i.obstacleItem.y += o_speed
            elif o_speed >= max_o_speed:
                i.obstacleItem.y += max_o_speed
            else:
                i.obstacleItem.y += min_o_speed
            if i.obstacleItem.y > HEIGHT:
                i.obstacleItem.x = random.randint(40, WIDTH-40)
                i.obstacleItem.y = -370
            if i.obstacleItem.image == 'slope.png':
                if i.obstacleItem.colliderect(character):
                    character.image = 'skillfly'
                    if vacating_time >= min_vacating_time and vacating_time <= max_vacating_time:
                        clock.schedule_unique(changeSkill, vacating_time)
                    else:
                        clock.schedule_unique(changeSkill, min_vacating_time)
            elif i.obstacleItem.image == 'prize1.png' or i.obstacleItem.image == 'prize2.png':
                if i.obstacleItem.colliderect(character):
                    score += 10
                    list.remove(i)
            else:
                if character.image == 'skill' or character.image == 'skill.png':
                    if i.obstacleItem.colliderect(character):
                        state = '结束'

# 恢复正常滑行的状态


def changeSkill():
    character.image = 'skill'

# 重置人物、障碍物、奖品的位置、分数


def resetAny():
    global oList, score, timedata, newtimedata, o_speed
    bgFun.pos = (WIDTH/2, HEIGHT/2-40)
    character.pos = (WIDTH/2, HEIGHT/1.5)
    oList = []
    renderObstacle()
    score = 0
    timedata = 0
    newtimedata = 0
    if initial_speed >= min_initial_speed and initial_speed < max_initial_speed:
        o_speed = initial_speed
    elif initial_speed >= max_initial_speed:
        o_speed = max_initial_speed
    else:
        o_speed = min_initial_speed
    timeSpeed()


def update():
    oMove(oList)
    if state == '运行':
        # 运行时背景图的滚动
        if o_speed >= min_o_speed and o_speed <= max_o_speed:
            bgFun.y += o_speed
        else:
            bgFun.y += min_o_speed
        if bgFun.top >= 0:
            bgFun.y = 0
        if len(oList) != len(obstacleList):
            obstacle = Actor(random.choice(prizeList), [
                             random.randint(40, WIDTH-40), -420])
            obstacleItem = Obstacle(obstacle)
            oList.append(obstacleItem)


pgzrun.go()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
iopsiops

喵啊

 

点赞1


评论