主要内容 #
- 
- 主函数模块
 
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游戏。
至此完成了接金币游戏所有的代码部分,后面还请大家尝试修改代码将金币掉落速度提升等操作去理解代码。
小结 #
- 本节主要介绍了接金币游戏所需的主函数部分设计思想和代码介绍,至此接金币游戏开发完成。