跳至正文
View Categories

1 min read

主要内容 #

    1. 主函数模块

1.主函数模块 #

主函数主要为一个循环函数:
实现功能如下:
1.当得分是50的倍数时修改level;
2.实例化金币,让金币从不同位置掉落;
3.实例化小人,通过键盘的左右按键来控制小人的移动;
4.判断金币是否着地,一但着地,游戏结束;
5.判断金币是否与小人碰撞,如果碰撞表示小人接到金币,得分加5。

程序的主函数部分代码如下,之前添加的部分在这部分也清晰展示:

def main():
    drawback()
    levelnum = 1  # level
    scorenum = 0  # 得分
    highscore = gethighscore()  # 最高分
    ileft = 1  # 记录向左移动步数,用来控制图片
    iright = 10  # 记录向右移动步数,用来控制图片

    x = 100
    y = 450
    filename = 'image\\1.png'
    backimg_ren = PeopleRect(filename, [x, y]) # 实例化小人类
    backscreen.blit(backimg_ren.image, backimg_ren.rect)
    loadtext(levelnum, scorenum, highscore)
    goldx = random.randint(50, 580)
    speed = [0, levelnum]
    mygold = GoldRect([goldx, 100], speed) # 实例化金币类
    pygame.display.update()

    while True:
        if scorenum > 0 and scorenum / 50.0 == int(scorenum / 50.0):  # 当得分是50的倍数时修改level
            levelnum = scorenum / 50 + 1
            speed = [0, levelnum]
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        pressed_keys = pygame.key.get_pressed()
        if pressed_keys[pygame.K_LEFT]:  # 按下左键
            drawback() # 加载背景图片函数
            loadtext(levelnum, scorenum, highscore) # 绘出level关数、得分和历史最高得分
            if iright > 14: iright = 10 # 控制小人类,加载不同的图片实现小人的移动
            iright = iright + 1
            filename = 'image\\' + str(iright) + '.png'
            if x < 50:
                x = 50
            else:
                x = x - 10
            backimg_surface = PeopleRect(filename, [x, y])
            backscreen.blit(backimg_surface.image, backimg_surface.rect)

        if pressed_keys[pygame.K_RIGHT]:  # 按下右键
            drawback()
            loadtext(levelnum, scorenum, highscore)
            if ileft > 4: ileft = 0 # 功能同按下左键类似
            ileft = ileft + 1
            filename = 'image\\' + str(ileft) + '.png'
            if x > 560:
                x = 560
            else:
                x = x + 10
            backimg_surface = PeopleRect(filename, [x, y])
            backscreen.blit(backimg_surface.image, backimg_surface.rect)

        drawback()

        loadtext(levelnum, scorenum, highscore)

        mygold.move() # 金币移动,使用金币类

        backscreen.blit(mygold.image, mygold.rect)

        backimg_surface = PeopleRect(filename, [x, y])

        backscreen.blit(backimg_surface.image, backimg_surface.rect)

        if mygold.rect.top > 600:  # 判断金币是否着地,一但着地,游戏结束
            loadgameover(scorenum, highscore)

        if mygold.rect.colliderect(backimg_surface.rect):  # 判断金币是否与小人碰撞,如果碰撞表示小人接到金币
            scorenum += 5 # 接到一个金币得分加5
            loadtext(levelnum, scorenum, highscore)
            goldx = random.randint(50, 580) # 金币掉落位置随机
            mygold = GoldRect([goldx, 100], speed) # 金币实例化,speed与level相关。

        pygame.display.update()

将以上所有代码加入到上一课创建的项目文件中(该代码请覆盖原来的main()函数),运行,即为最终的接金币8游戏。

至此完成了接金币游戏所有的代码部分,后面还请大家尝试修改代码将金币掉落速度提升等操作去理解代码。

小结 #

  • 本节主要介绍了接金币游戏所需的主函数部分设计思想和代码介绍,至此接金币游戏开发完成。