美文网首页大虾带着小虾米pygame游戏编程
用pygame开发自己的游戏-6.改变红色方块的出生位置

用pygame开发自己的游戏-6.改变红色方块的出生位置

作者: 象骑士Hack | 来源:发表于2019-11-30 12:06 被阅读0次

    一、引言

    感谢小伙伴阅读到这个地方,前面我们已经学习了写了个简单的小游戏。接下来的章节里我们继续将完善可玩性。目前我们的红色方块一直是在固定地方出现,游戏很无聊,只需要将绿色方块移到特定地方后,就能一直刷分了。本节的目标的改变红色的出生位置。

    二、实现思路

    为了实现随机位置功能,我们需要先学习python的random模块。random 模块的 randint() 函数来生成随机数,你每次执行后都返回不同的数字(0 到 9),该函数的语法为:
    相关代码:

    import random
    print(random.randint(0,9))
    

    上述代码返回0~9之间的一个随即数。python绝大部分涉及到区间的函数,都是半开闭的。这个randint是个特殊的存在,是封闭区间。
    我们在前面的代码中,增加个red_x来保存红色方块的x坐标,每次重新生成红色方块时,随机算出red_x的位置。
    实现代码如下:

    # 初始化
    pygame.font.init()
    # Font的第一个参数填写字体,None表示用默认字体
    myfont = pygame.font.Font(None,60)
    # 可以理解为把文字转化为图片
    textImage = myfont.render("Hello Pygame", True, (0, 0, 255))
    # 将图片显示出来
    screen.blit(textImage, (100,100))
    

    仿照以上的代码,我们将代码实现出来。需要注意的是,文字转为图片、图片显示出来两行代码是每个循环里都需要做的事情,所以必须加在while循环里,否则文字无法显示出来,会被后面的覆盖
    最终代码如下:

    import pygame, sys
    import random
    # 初始化
    pygame.init()
    SCREEN = pygame.display.set_mode((400, 300))
    pygame.display.set_caption('Hello World!')
    
    # 绿色方块固定在最下方,左右移动,y值不变
    green_x = 110
    # 红色方块从上往下移动,x值不变
    red_y = 0
    # 游戏主循环
    score = 0
    pygame.font.init()
    myfont = pygame.font.Font(None,60)
    red_x = 35
    while True: 
        for event in pygame.event.get():
            # 处理退出事件
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            # 键盘按下事件
            elif event.type == pygame.KEYDOWN:
                # 'a'键被按下
                if event.key == pygame.K_a:
                    green_x -= 5
                elif event.key == pygame.K_d:
                    green_x += 5
        red_y += 5
        green_rect = pygame.Rect(green_x, 250, 100, 50)
        if green_rect.colliderect(red_x, red_y, 20, 50):
            print('红色方块与绿色方块碰撞到了')
            # 为了方便看到碰撞结果,直接break返回
            score += 1
            red_y = 0
            red_x = random.randint(50, 350)
        if red_y >= 300:
            red_y = 0
            red_x = random.randint(50, 350)
        SCREEN.fill((255, 255, 255))
        # 调用 pygame.display.update() 方法更新整个屏幕的显示
        pygame.draw.rect(SCREEN, (255, 0, 0), (red_x, red_y, 20, 50))
        pygame.draw.rect(SCREEN, (0, 255, 0), (green_x, 250, 100, 50))
        textImage = myfont.render("score: " + str(score), True, (0, 0, 255))
        SCREEN.blit(textImage, (10,10))
        pygame.display.update()
        pygame.time.delay(50)
    

    三、思考题

    1. 目前游戏没有失败功能,当红色方块没被接住时,我们可以认为游戏失败。请思考下这样的功能要如何实现。

    相关文章

      网友评论

        本文标题:用pygame开发自己的游戏-6.改变红色方块的出生位置

        本文链接:https://www.haomeiwen.com/subject/wchowctx.html