zoukankan      html  css  js  c++  java
  • 用python做一个简单的pong游戏

    pong游戏就是一个用挡板去控制一个小球不触底的一个小游戏,上个世纪以电视游戏的方式发行,取得巨大的成功。

    看了一点书,知道pygame是python里一个强大的模块,做出这个游戏的简易模式也不难。

    主要思想:1.创建游戏界面,挡板,小球以及记分牌。

         2.小球碰到游戏界面四个边界会反弹,即x方向和y方向上的速度会改变为负,碰到底边生命数会减1.

         3.小球与挡板碰撞y方向速度会变负,同时分数加1.

         4.游戏结束会显示相关文字。

    代码如下:

    import  pygame
    pygame.init()
    screen = pygame.display.set_mode([800,600])
    
    pygame.display.set_caption("pong")
    keep_going = True
    image = pygame.image.load(".2.bmp")
    # print(type(image))
    scale = 100
    pic=pygame.transform.scale(image,(scale,scale))
    # print(type(pic))
    colorkey = pic.get_at((0,0))
    pic.set_colorkey(colorkey)#设置游戏界面,加载小球图片,设置颜色键
    
    picx = 0
    picy = 0
    timer = pygame.time.Clock()
    speedX = 5
    speedY = 5
    paddleW = 200
    paddleH = 25
    paddleX = 300
    paddleY = 550
    picW = 100
    picH = 100
    points = 0
    lives = 5
    white = (255,255,255)
    font = pygame.font.SysFont("C:\WindowsFonts\Corbel",24,False,False)#初始化参数
    
    pygame.mixer.init()
    pop = pygame.mixer.music
    pop.load(".w.mp3")#加载声音
    
    pop.play()
    
    while keep_going:#while的重复绘图制作出动画的效果
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                keep_going = False
            if event.type == pygame.KEYDOWN:#注意注意注意
                if event.key ==pygame.K_F1:#F1键复位
                    points = 0
                    lives = 5
                    picx = 0
                    picy = 0
                    speedX = 5
                    speedY = 5
        picx+=speedX
        picy+=speedY
    
        if picx<=0 or picx+pic.get_width()>=800:#值得注意的是游戏界面的坐标是以左上角为原点,
                                                #向右为x正半轴,向下为y正半轴
            speedX=-speedX*1.1
        if picy<=0:
            speedY = -speedY+1
        if picy >=500:
            lives-=1
            # speedY = -speedY
            speedY = -5
            speedX = 5
            picy = 499
        screen.fill((0,0,0))
        screen.blit(pic,(picx,picy))#以上是小球与游戏界面边界碰撞的逻辑
    
    
        paddleX = pygame.mouse.get_pos()[0]
        paddleX-= paddleW/2
        pygame.draw.rect(screen,white,(paddleX,paddleY,paddleW,paddleH))
    
    
        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#与挡板碰撞的逻辑
    
    
        draw_string = "lives:"+str(lives)+"Points:"+str(points)
    
        if lives<1:
            speedY = speedX = 0
            draw_string = "game over! your scores is"+str(points)#游戏结束判断
    
        text = font.render(draw_string,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)
    
    pygame.quit()

    运行的结果如下:

    像素较差。。。。。。 

  • 相关阅读:
    【BZOJ 4151 The Cave】
    【POJ 3080 Blue Jeans】
    【ZBH选讲·树变环】
    【ZBH选讲·拍照】
    【ZBH选讲·模数和】
    【CF Edu 28 C. Four Segments】
    【CF Edu 28 A. Curriculum Vitae】
    【CF Edu 28 B. Math Show】
    【CF Round 439 E. The Untended Antiquity】
    【CF Round 439 C. The Intriguing Obsession】
  • 原文地址:https://www.cnblogs.com/jokerspace/p/7086504.html
Copyright © 2011-2022 走看看