用python写跑酷游戏脚本_用python写游戏之2D跑酷游戏(二)
时间: 2023-12-16 17:03:16 浏览: 37
好的,我们来继续编写2D跑酷游戏脚本。
首先,我们需要导入一些库:
```python
import pygame
import random
import time
```
然后,我们需要定义一些常量:
```python
# 游戏窗口大小
WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600
# 背景颜色
BG_COLOR = (255, 255, 255)
# 玩家初始位置
PLAYER_X = 100
PLAYER_Y = 400
# 玩家速度
PLAYER_SPEED_X = 5
PLAYER_SPEED_Y = 0
# 障碍物速度
OBSTACLE_SPEED = 5
# 障碍物间距
OBSTACLE_DISTANCE = 200
# 障碍物宽度
OBSTACLE_WIDTH = 30
# 障碍物高度范围
OBSTACLE_HEIGHT_MIN = 50
OBSTACLE_HEIGHT_MAX = 300
```
接着,我们需要定义一些类:
```python
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.Surface((30, 50))
self.image.fill((0, 0, 255))
self.rect = self.image.get_rect()
self.rect.x = PLAYER_X
self.rect.y = PLAYER_Y
self.speed_x = PLAYER_SPEED_X
self.speed_y = PLAYER_SPEED_Y
def update(self):
self.rect.x += self.speed_x
self.rect.y += self.speed_y
class Obstacle(pygame.sprite.Sprite):
def __init__(self, x, y, height):
super().__init__()
self.image = pygame.Surface((OBSTACLE_WIDTH, height))
self.image.fill((255, 0, 0))
self.rect = self.image.get_rect()
self.rect.x = x
self.rect.y = y
def update(self):
self.rect.x -= OBSTACLE_SPEED
```
Player 类表示玩家,包括玩家的图像、位置和速度等信息。Obstacle 类表示障碍物,包括障碍物的图像、位置和速度等信息。
接着,我们需要初始化游戏:
```python
pygame.init()
window = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
pygame.display.set_caption('跑酷游戏')
clock = pygame.time.Clock()
all_sprites = pygame.sprite.Group()
player = Player()
all_sprites.add(player)
obstacle_list = []
last_obstacle_x = WINDOW_WIDTH
score = 0
font = pygame.font.SysFont(None, 50)
```
我们创建了一个窗口,设置了窗口标题,创建了一个时钟对象,创建了一个精灵组,创建了一个玩家对象并添加到精灵组中,创建了一个障碍物列表和最后一个障碍物的 x 坐标,创建了一个得分变量和一个字体对象。
然后,我们需要定义一些函数:
```python
def add_obstacle():
global last_obstacle_x, score
height = random.randint(OBSTACLE_HEIGHT_MIN, OBSTACLE_HEIGHT_MAX)
obstacle = Obstacle(last_obstacle_x + OBSTACLE_DISTANCE, WINDOW_HEIGHT - height, height)
obstacle_list.append(obstacle)
all_sprites.add(obstacle)
last_obstacle_x = obstacle.rect.x
score += 1
def draw_text(text, x, y):
image = font.render(text, True, (0, 0, 0))
window.blit(image, (x, y))
def game_over():
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
window.fill(BG_COLOR)
draw_text('游戏结束', 350, 250)
draw_text('得分:{}'.format(score), 350, 300)
pygame.display.update()
```
add_obstacle() 函数用于添加障碍物。障碍物的高度是随机生成的,障碍物的 x 坐标是上一个障碍物的 x 坐标加上障碍物间距。得分变量也会相应增加。
draw_text() 函数用于绘制文字。
game_over() 函数用于在游戏结束时显示得分和游戏结束的提示,并等待玩家关闭游戏窗口。
最后,我们需要实现游戏循环:
```python
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if len(obstacle_list) == 0 or obstacle_list[-1].rect.x < WINDOW_WIDTH - OBSTACLE_DISTANCE:
add_obstacle()
for obstacle in obstacle_list:
if pygame.sprite.collide_rect(player, obstacle):
game_over()
all_sprites.update()
if player.rect.y >= WINDOW_HEIGHT - player.rect.height:
game_over()
window.fill(BG_COLOR)
all_sprites.draw(window)
draw_text('得分:{}'.format(score), 10, 10)
pygame.display.update()
clock.tick(60)
pygame.quit()
quit()
```
我们首先处理游戏窗口关闭事件。然后,判断是否需要添加障碍物。如果障碍物已经全部通过了屏幕,或者最后一个障碍物的 x 坐标小于窗口宽度减去障碍物间距,就需要添加新的障碍物。
接着,我们检查玩家是否与障碍物碰撞。如果发生碰撞,就调用 game_over() 函数结束游戏。
然后,我们更新所有精灵的位置和状态。接着,我们检查玩家是否掉落到了屏幕底部。如果是,就调用 game_over() 函数结束游戏。
最后,我们绘制游戏界面,包括背景、精灵和得分信息,并刷新窗口。我们还设置了帧率为60。
现在,我们已经完成了2D跑酷游戏的脚本编写。完整代码如下: