Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

Administrator / pygame_lesson9_diy2

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Members
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Files
  • Commits
  • Branches
  • Tags
  • Contributors
  • Graph
  • Compare
  • Charts
Switch branch/tag
  • pygame_lesson9_diy2
  • my_game.py
Find file
BlameHistoryPermalink
  • BellCodeEditor's avatar
    save project · 30280a98
    BellCodeEditor committed a year ago
    30280a98
my_game.py 3.89 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
import pygame
from pygame import locals
import random

pygame.init()  # 初始化

class Block(pygame.sprite.Sprite):      # 障碍物精灵类
    def __init__(self,image1,image2,image3):
        super().__init__()
        # 加载障碍物的图片
        self.image = random.choice([image1, image2, image3])
        # 根据障碍物位图的宽高设置矩形
        self.rect = self.image.get_rect()
        # 障碍物绘制坐标
        self.rect.x = 1000
        self.rect.y = 500 - self.rect.height

class Player(pygame.sprite.Sprite):     # 悟空
    def __init__(self, image):
        super().__init__()
        # 加载悟空精灵图像
        self.image = image
        # image的get_rect()方法,可以返回pygame.Rect(0,0,图像宽,图像高)的对象
        self.rect = self.image.get_rect()
        self.rect.x = 150
        self.rect.y = 400

# 创建一个窗口
screen = pygame.display.set_mode((1000, 600))
FPS = pygame.time.Clock()  # pygame时钟,控制游戏速度(帧数)
pygame.display.set_caption("悟空酷跑")
# 载入图片
background = pygame.image.load('bg.png')    # 背景
road = pygame.image.load('road.png')      # 路
stone = pygame.image.load('stone.png')      # 石头
cacti = pygame.image.load('cacti.png')      # 仙人掌
bush = pygame.image.load('bush.png')      # 灌木丛
hero = [pygame.image.load('hero1.png'),
        pygame.image.load('hero2.png'),
        pygame.image.load('hero3.png'),
        pygame.image.load('hero4.png'),
        pygame.image.load('hero5.png')]
basic_font = pygame.font.Font('STKAITI.TTF',32)
index = 0   
y = 400
jumpState = "runing"
t = 30
road_x = 0
bg_x = 0
time = 0
gamestate = True

block_list =pygame.sprite.Group()   # 创建精灵组

while True:
    for event in pygame.event.get():
        if event.type == locals.QUIT:
            # 接收到退出事件后退出程序
            exit()
        if event.type == locals.KEYDOWN:
            if jumpState == "runing":
                if event.key == locals.K_SPACE:
                    jumpState = "up"
    
    # 悟空造型
    wukong = Player(hero[index])
    if jumpState == "runing":       # 跑步状态下
        index += 1
        if index >= 5:
            index = 0

    if gamestate == True:
        if jumpState == "up":    # 起跳状态
            if t > 0:
                y -= t
                wukong.rect.y = y
                t -= 2
            else:
                jumpState = "down"  
        if jumpState == "down":    # 降落状态
            if t <= 30:
                y += t
                wukong.rect.y = y
                t += 2
            else:
                jumpState = "runing"
                t =30
        
        # 将背景图画上去
        bg_x -= 1
        if bg_x<=-1000:
            bg_x = 0
        screen.blit(background, (bg_x, 0))      # 远景

        road_x -= 8
        if road_x<=-1000:
            road_x = 0
        screen.blit(road, (road_x, 500))       # 道路

        screen.blit(wukong.image, (150, y))     # 悟空

        time += 1
        if time >= 60:      # 创建障碍物精灵
            time = 0
            num = random.randint(0,50)
            if num > 20:
                obstacle = Block(bush,cacti,stone)  
                block_list.add(obstacle)
        for sprite in block_list:       # 遍历、展示障碍物精灵
            sprite.rect.x -= 8
            screen.blit(sprite.image, (sprite.rect.x, sprite.rect.y)) 
            if sprite.rect.x <= 0-sprite.rect.width:
                sprite.kill()
            if pygame.sprite.collide_rect(wukong, sprite):  # 精灵碰撞检测
                gameover = pygame.image.load('gameover.png')     # 游戏结束
                screen.blit(gameover, (400, 200))
                gamestate = False
        scoreSurf = basic_font.render("分数:"+str(score),True,(255,0,0))
        screen.blit(scoreSurf,(850,20))

        # 刷新画面
        pygame.display.update()
        FPS.tick(60)