Pygame打球游戏教程

1. 绘制瞄准器

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

; 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打球游戏教程
Pygame打球游戏教程

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

    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")

Original: https://blog.csdn.net/ffei060828/article/details/124623222
Author: 无忧无虑Coding
Title: Pygame打球游戏教程

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/779677/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球