Make writing a habit together! This is the third day of my participation in the “Gold Digging Day New Plan · April More text Challenge”. Click here for more details.

introduce

Introduction of pygame

Pygame is a cross-platform Pyth written by Pete Shinners and licensed under the GNU Lesser General Public License.

Contains images and sounds. Built on SDL, it allows real-time video game development without being constrained by low-level languages such as machine language and assembly language. Based on this assumption, all the required game features and ideas (mostly graphics) are completely reduced to the game logic itself, and all the resource structures can be provided by a high-level language such as Python.

(1The PyGame PyGame module automatically imports other PyGame-related modules. The PyGame module includes the Surface function that returns a new Surface object. The init() function is at the heart of PyGame and must be called before entering the game's main loop. Init () automatically initializes all other modules.Copy the code
(2) pygame.localsInclude names (variables) to use in your own module scope. Includes the name of the event type, key, and video mode.Copy the code
(3Pygame.display includes functions that handle how PyGame is displayed. Includes normal window and full screen mode. Some common methods in Pygame. display are as follows: flip: Updates the display. Update: Update a part. Set_mode: Sets the display type and size. Set_caption: Sets the pyGame program's title. Get_surface: Returns a surface object that can be used for drawing before calling flip and blit.Copy the code
(4Pygame. font includes the font function for representing different fonts.Copy the code
(5Sprite Group is used as a container for Sprite objects. Calling the Update object of the group object automatically calls the update methods of all Sprite objects.Copy the code
(6) PyGame. mouse Hides the mouse cursor to get the mouse positionCopy the code
(7) PyGame. event Tracks events such as mouse clicks, key presses, and releases.Copy the code
(8Image is used to process images saved in GIF, PNG, or JPEG files.Copy the code

The source code

import sys
import cfg
import pygame
import random
 
 
Skier class
class SkierClass(pygame.sprite.Sprite) :
    def __init__(self) :
        pygame.sprite.Sprite.__init__(self)
        # Skier's orientation (-2 to 2)
        self.direction = 0
        self.imagepaths = cfg.SKIER_IMAGE_PATHS[:-1]
        self.image = pygame.image.load(self.imagepaths[self.direction])
        self.rect = self.image.get_rect()
        self.rect.center = [320.100]
        self.speed = [self.direction, 6-abs(self.direction)*2]
    Change the skier's orientation. Negative numbers are left, positive numbers are right, and 0 is forward.
    def turn(self, num) :
        self.direction += num
        self.direction = max(-2, self.direction)
        self.direction = min(2. self.direction) center = self.rect.center self.image = pygame.image.load(self.imagepaths[self.direction]) self.rect = self.image.get_rect() self.rect.center = center self.speed = [self.direction,6-abs(self.direction)*2]
        return self.speed
    "Mobile skier"
    def move(self) :
        self.rect.centerx += self.speed[0]
        self.rect.centerx = max(20, self.rect.centerx)
        self.rect.centerx = min(620, self.rect.centerx)
    "Set to fall state"
    def setFall(self) :
        self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])
    "Set to standing"
    def setForward(self) :
        self.direction = 0
        self.image = pygame.image.load(self.imagepaths[self.direction])
 
 
"Function: obstacle class Input: img_path: obstacle picture path location: obstacle location attribute: obstacle class attribute"
class ObstacleClass(pygame.sprite.Sprite) :
    def __init__(self, img_path, location, attribute) :pygame.sprite.Sprite.__init__(self) self.img_path = img_path self.image = pygame.image.load(self.img_path) self.location  = location self.rect = self.image.get_rect() self.rect.center = self.location self.attribute = attribute self.passed =False
    "' move ' ' '
    def move(self, num) :
        self.rect.centery = self.location[1] - num
 
 
Create an obstacle.
def createObstacles(s, e, num=10) :
    obstacles = pygame.sprite.Group()
    locations = []
    for i in range(num):
        row = random.randint(s, e)
        col = random.randint(0.9)
        location  = [col*64+20, row*64+20]
        if location not in locations:
            locations.append(location)
            attribute = random.choice(list(cfg.OBSTACLE_PATHS.keys()))
            img_path = cfg.OBSTACLE_PATHS[attribute]
            obstacle = ObstacleClass(img_path, location, attribute)
            obstacles.add(obstacle)
    return obstacles
 
 
Merging obstacles
def AddObstacles(obstacles0, obstacles1) :
    obstacles = pygame.sprite.Group()
    for obstacle in obstacles0:
        obstacles.add(obstacle)
    for obstacle in obstacles1:
        obstacles.add(obstacle)
    return obstacles
 
 
Display the game start screen.
def ShowStartInterface(screen, screensize) :
    screen.fill((255.255.255))
    tfont = pygame.font.Font(cfg.FONTPATH, screensize[0] / /5)
    cfont = pygame.font.Font(cfg.FONTPATH, screensize[0] / /20)
    title = tfont.render(U 'Ski game'.True, (255.0.0))
    content = cfont.render(U 'Press any key to start the game'.True, (0.0.255))
    trect = title.get_rect()
    trect.midtop = (screensize[0] /2, screensize[1] /5)
    crect = content.get_rect()
    crect.midtop = (screensize[0] /2, screensize[1] /2)
    screen.blit(title, trect)
    screen.blit(content, crect)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                return
        pygame.display.update()
 
 
"Show the score"
def showScore(screen, score, pos=(10.10)) :
    font = pygame.font.Font(cfg.FONTPATH, 30)
    score_text = font.render("Score: %s" % score, True, (0.0.0))
    screen.blit(score_text, pos)
 
 
Update the current frame of the game.
def updateFrame(screen, obstacles, skier, score) :
    screen.fill((255.255.255))
    obstacles.draw(screen)
    screen.blit(skier.image, skier.rect)
    showScore(screen, score)
    pygame.display.update()
 
 
Main program
def main() :
    # Game initialization
    pygame.init()
    pygame.mixer.init()
    pygame.mixer.music.load(cfg.BGMPATH)
    pygame.mixer.music.set_volume(0.4)
    pygame.mixer.music.play(-1)
    # Set screen
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('Skiing Games -- Nine songs')
    # Game start screen
    ShowStartInterface(screen, cfg.SCREENSIZE)
    # Instantiate the Sprite
    # -- skier
    skier = SkierClass()
    # -- Create obstacles
    obstacles0 = createObstacles(20.29)
    obstacles1 = createObstacles(10.19)
    obstaclesflag = 0
    obstacles = AddObstacles(obstacles0, obstacles1)
    # game clock
    clock = pygame.time.Clock()
    Record the distance you ski
    distance = 0
    Record the current score
    score = 0
    Record the current speed
    speed = [0.6]
    # Game main loop
    while True:
        # -- Event capture
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT or event.key == pygame.K_a:
                    speed = skier.turn(-1)
                elif event.key == pygame.K_RIGHT or event.key == pygame.K_d:
                    speed = skier.turn(1)
        Update the data of the current game frame
        skier.move()
        distance += speed[1]
        if distance >= 640 and obstaclesflag == 0:
            obstaclesflag = 1
            obstacles0 = createObstacles(20.29)
            obstacles = AddObstacles(obstacles0, obstacles1)
        if distance >= 1280 and obstaclesflag == 1:
            obstaclesflag = 0
            distance -= 1280
            for obstacle in obstacles0:
                obstacle.location[1] = obstacle.location[1] - 1280
            obstacles1 = createObstacles(10.19)
            obstacles = AddObstacles(obstacles0, obstacles1)
        for obstacle in obstacles:
            obstacle.move(distance)
        # -- Collision detection
        hitted_obstacles = pygame.sprite.spritecollide(skier, obstacles, False)
        if hitted_obstacles:
            if hitted_obstacles[0].attribute == "tree" and not hitted_obstacles[0].passed:
                score -= 50
                skier.setFall()
                updateFrame(screen, obstacles, skier, score)
                pygame.time.delay(1000)
                skier.setForward()
                speed = [0.6]
                hitted_obstacles[0].passed = True
            elif hitted_obstacles[0].attribute == "flag" and not hitted_obstacles[0].passed:
                score += 10
                obstacles.remove(hitted_obstacles[0])
        # -- Update the screen
        updateFrame(screen, obstacles, skier, score)
        clock.tick(cfg.FPS)
 
 
'''run'''
if __name__ == '__main__': the main ();Copy the code