使用pygame简单模拟自由落体

import pygame
import sys

class Gravity():
    def __init__(self):
        self.GRAVITY_SPEED_FACTOR = 9.8
        self.WINDOW_WIDTH = 300
        self.WINDOW_HEIGHT = 800
        self.BLACK = (0, 0, 0)

        self.init_figure()
        pygame.init()
        self.windows = pygame.display.set_mode((self.WINDOW_WIDTH, self.WINDOW_HEIGHT))
        pygame.display.set_caption('Gravity simulation')

        self.speed_limit = ((2 * self.WINDOW_HEIGHT / self.GRAVITY_SPEED_FACTOR) ** 0.5) * self.GRAVITY_SPEED_FACTOR

        self.image = pygame.image.load('circle_12_green.bmp')
        self.rect = self.image.get_rect()

        self.rect.centerx = self.windows.get_rect().centerx

        #初始化,方便多次调用多次调用
    def init_figure(self):
        self.time_cnt = 0
        self.speed_start = 110
        #实时速度
        self.speed_state = self.speed_start
        
        #防止跳出屏外
    def is_out_of_window(self):
        if self.speed_start < self.speed_limit:
            return True
        
        #按重力计算
    def gravity_cal(self):
        self.time_cnt += 1
        self.speed_state = self.speed_start - self.GRAVITY_SPEED_FACTOR * self.time_cnt
        self.circley = self.WINDOW_HEIGHT - (self.speed_start*self.time_cnt-(0.5*self.GRAVITY_SPEED_FACTOR*(self.time_cnt**2)))

        self.rect.centery = self.circley

        #触底反弹
    def check_edge(self):
        if (round(self.circley) > self.windows.get_rect().bottom):
            self.init_figure()

        #总控制
    def start_simulate(self):
        if self.is_out_of_window():
            while True:
                for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                        pygame.quit()
                        sys.exit()

                self.windows.fill(self.BLACK)

                self.windows.blit(self.image,self.rect)
                pygame.display.flip()

                self.gravity_cal()

                self.check_edge()
                pygame.time.delay(50)

        else:
            print('speed_start out of range')
Gravity().start_simulate()

做出来就是这个样子 

猜你喜欢

转载自blog.csdn.net/u010590593/article/details/105748432