Pygame打球游戏教程

1. 绘制瞄准器

  1. 定义一个函数,给出瞄准器的中心点坐标,实现瞄准镜的绘制。
  2. 通过pygame.mouse.get_pos()获取鼠标移动的位置
  3. 调用函数在鼠标位置绘制瞄准器
    Pygame打球游戏教程_第1张图片

2. 绘制小球

  1. 建立一个类存储小球的属性和方法。属性主要有坐标和下落速度,方法是下落。
  2. 创建一个下落小球的字典ballArrs={}
  3. 通过循环语句创建10个小球存放在字典中,x坐标为随机值,y坐标为默认的0.并且判断x坐标不能重叠
ballArrs={}  #下落小球的字典
for i in range(10):
   x = random.randint(20, 560)
   for j in ballArrs.keys():
       if abs(ballArrs[j].x-x)<=40 :
           break
   else:
       ballArrs[i]=Ball(x)
  1. 创建moveDown循环调用每个小球的moveDown方法,实现小球的自动下落
def moveDown(arr):
   for i in arr.keys():
       arr[i].moveDown()
  1. 在while True循环中调用刚才定义的函数,并且进行小球绘制显示。注意要放在screen.fill()函数之下
    moveDown(ballArrs)  # 自动下移
    for index in ballArrs.keys():
        pos_x = ballArrs[index].x
        pos_y = ballArrs[index].y
        #绘制黄色小球
        pygame.draw.circle(screen, 'yellow', (pos_x, pos_y), 20)

Pygame打球游戏教程_第2张图片
Pygame打球游戏教程_第3张图片

3. 补全小球的运动

3.1 小球落地(窗口底端)从窗口顶端再次出现,修改刚才的显示代码。

   for index in ballArrs.keys():
       pos_x = ballArrs[index].x
       pos_y = ballArrs[index].y
       # 小球落地(窗口底端)从窗口顶端再次出现
       if ballArrs[index].y >= 500:
           ballArrs[index].y = 0
       #绘制黄色小球
       pygame.draw.circle(screen, 'yellow', (pos_x, pos_y), 20)

3.2 小球出现的太少,判断当小球落下200像素距离,再次创建10个小球。

  1. 创建一个变量height=0 #落下的高度 用于存储落下的高度
  2. 在死循环中每次给height += 0.05,判断落下高度大于200再次创建10个小球
while True:
    height += 0.05
    # 落下高度大于200时再产生10个球
    if height >= 200:
        height = 0
        arrlen = len(ballArrs)
        for i in range(arrlen, arrlen + 10):
            x = random.randint(20, 560)
            for j in ballArrs.keys():
                if abs(ballArrs[j].x - x) <= 40:
                    break
            else:
                ballArrs[i] = Ball(x)

4. 瞄准射击

4.1 获取鼠标按下的坐标

  1. 创建两个变量用于存储鼠标按下的坐标,默认值在窗口之外mos_x,mos_y=-1,-1
  2. 修改for event in pygame.event.get():循环语句,进行鼠标按下事件的判断,并获取鼠标按下的坐标,存储在刚才的变量中
    for event in pygame.event.get():
        if event.type == QUIT:
            sys.exit()
        if event.type == MOUSEBUTTONDOWN:
            mos_x, mos_y = event.pos

4.2 判断小球的位置和鼠标按下的距离当在一个范围内,小球重新从顶端出现

  1. 改造小球显示的循环
    for index in ballArrs.keys():
        pos_x = ballArrs[index].x
        pos_y = ballArrs[index].y
        # 小球落地(窗口底端)从窗口顶端再次出现
        if ballArrs[index].y >= 500:
            ballArrs[index].y = 0
        # 计算小球坐标和鼠标按下坐标的距离,这里是距离的平方
        leng = pow((pos_x - mos_x), 2) + pow((pos_y - mos_y), 2)
        if pow(leng,0.5) <=80:
            ballArrs[index].y = -1
            mos_y, mos_x = -999, -999
        #绘制黄色小球
        pygame.draw.circle(screen, 'yellow', (pos_x, pos_y), 20)

4.3 成绩计算

  1. 创建文字打印函数
def print_txt(screen,font,x,y,text,color=(255,255,255)):
    imgText=font.render(text,True,color)
    screen.blit(imgText,(x,y))

  1. 创建文字显示的字体font=pygame.font.SysFont("Microsoft YaHei",20)
  2. 创建成绩变量score=0
  3. 改造小球显示循环
    for index in ballArrs.keys():
        pos_x = ballArrs[index].x
        pos_y = ballArrs[index].y
        # 小球落地(窗口底端)从窗口顶端再次出现
        if ballArrs[index].y >= 500:
            ballArrs[index].y = 0
            score-=1 #扣分
        # 计算小球坐标和鼠标按下坐标的距离,这里是距离的平方
        leng = pow((pos_x - mos_x), 2) + pow((pos_y - mos_x), 2)
        if pow(leng,0.5) <=80:
            ballArrs[index].y = -1
            mos_y, mos_x = -999, -999
            score+=1  #得分
        #绘制黄色小球
        pygame.draw.circle(screen, 'yellow', (pos_x, pos_y), 20)

  1. 进行文本显示
    txt = "成绩:{}".format(score)
    print_txt(screen, font, 0, 0, txt, "yellow")

你可能感兴趣的:(pygame,游戏,python)