python小欢喜(七)游戏编程 (1) 挡球

在前面的文章《python小欢喜(六)动画 (1) pygame的安装与初步使用》中介绍了如何安装pygame。接下来用pygame开发一个小游戏。

游戏界面如下:
python小欢喜(七)游戏编程 (1) 挡球_第1张图片
在游戏窗口中有一个运动的足球,碰到边界或挡板会反弹,玩家通过鼠标的移动,可以拖动挡板左右移动。足球如果碰到窗口下边界,则玩家的生命值减1,如果足球被挡板弹回,则得分数加1

python代码如下:

ballGame.py
该代码改编自Bryson Payne《Teach Your Kids to Code》第10章的小游戏程序,并在关键处加上了中文注释

# -*- coding:utf-8 -*- 
# 挡球游戏
import pygame       #导入pygame模块
pygame.init()

screen = pygame.display.set_mode([800,600]) #设置图形窗口大小为800*600
pygame.display.set_caption("挡球") #设置图形窗口标题

BLACK = (0,0,0)       # 用RGB值定义黑色
WHITE = (255,255,255) # 用RGB值定义白色
BROWN = (166,134,95)  # 用RGB值定义棕色

ball = pygame.image.load("ball.png") # 加载足球图片
picx = 0 #图片的x坐标的初始值设为0
picy = 0 #图片的y坐标的初始值设为0
picw = 100 #图片的宽度
pich = 100 #图片的高度

speedx = 5 #足球的水平速度值
speedy = 5 #足球的垂直速度值


paddlex = 300 #挡板的x坐标的初始值设为300
paddley = 550 #挡板的y坐标的初始值设为550 ,窗口高度为600,档板靠近窗口底部
paddlew = 200 #挡板的宽度
paddleh = 25  #挡板的高度


points = 0 #游戏得分
lives = 5  #玩家生命值

font = pygame.font.SysFont("Times", 24) #设置输出文本所用的字体

timer = pygame.time.Clock() #生成一个定时器对象
keepGoing = True
while keepGoing:    # 事件处理循环
    for event in pygame.event.get(): 
        if event.type == pygame.QUIT: 
            keepGoing = False

    #根据速度值修正足球图片的当前位置,如果碰到边缘,则将速度值取反,得到回弹的效果
    picx += speedx 
    picy += speedy    
    if picx <= 0 or picx + ball.get_width() >= 800:
        speedx = -speedx

    if picy <= 0:
        speedy = -speedy
    if picy >= 500:
        lives -= 1 #碰到底边,生命值减1
        speedy = -speedy

    screen.fill(BLACK)    
    screen.blit(ball, (picx, picy))

    # 根据鼠标的当前位置绘制挡板,只使用的鼠标当前位置的x坐标
    paddlex = pygame.mouse.get_pos()[0]
    paddlex -= paddlew/2
    pygame.draw.rect(screen, BROWN, (paddlex, paddley, paddlew, paddleh))
    # 检查足球是否与档板发生了碰撞,如果是,则得分数加1,并使足球回弹
    if picy + pich >= paddley and picy + pich <= paddley + paddleh \
       and speedy > 0:
        if picx + picw / 2 >= paddlex and picx + picw / 2 <= paddlex + \
           paddlew:
            points += 1
            speedy = -speedy

    # 输出提示信息
    tip = "Lives: " + str(lives) + " Points: " + str(points)        
    text = font.render(tip, True, WHITE)
    text_rect = text.get_rect()
    text_rect.centerx = screen.get_rect().centerx
    text_rect.y = 10    
    screen.blit(text, text_rect)

    pygame.display.update() #刷新窗口
    timer.tick(60)          #设置帧率不超过60 
    
pygame.quit()       # 退出pygame

代码中用到的足球图片如下:
在这里插入图片描述
将该图片另存于源代码所在的目录即可。

你可能感兴趣的:(编程语言,游戏开发,python小欢喜教程)