• 用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()

    运行的结果如下:

    像素较差。。。。。。 

  • 相关阅读:
    C#托盘图标
    线程相关整理
    Quartz.NET 快速入门
    (转)IE内存泄露,iframe内存泄露造成的原因和解决方案
    美化console.log的文本(转载)
    mongoDB学习资料整理
    EF7学习资料整理
    Oracle常用
    Node.js学习资料整理
    【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器(转)
  • 原文地址:https://www.cnblogs.com/jokerspace/p/7086504.html
Copyright © 2020-2023  润新知