利用python做一个简易的2D硬币收集游戏,游戏目标是控制一个玩家角色在屏幕上移动,收集随机生成的硬币
示例代码:
# !/usr/bin/env python
# -*- coding:utf-8 -*-
"""
@file: coin_game.py
@author: czx
@time: 2024/4/23 17:18
"""
import pygame
import random
# 初始化pygame
pygame.init()
# 设置常量
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_SIZE = 50
COIN_SIZE = 20
FPS = 60
GRAVITY = 0.5
PLAYER_FRICT = 0.8
PLAYER_SPEED = 5
COIN_POINTS = 10
# 设置屏幕
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption('Eat the Coins')
# 定义颜色
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
RED = (255, 0, 0)
# 设置玩家
player_pos = [SCREEN_WIDTH // 2, SCREEN_HEIGHT - 2 * PLAYER_SIZE]
player_vel = [0, 0]
# 设置时钟
clock = pygame.time.Clock()
def place_random_coins():
num_coins = random.randint(5, 10)
coins = []
for _ in range(num_coins):
coin_pos = [random.randint(0, SCREEN_WIDTH - COIN_SIZE), random.randint(0, SCREEN_HEIGHT - COIN_SIZE)]
while coin_pos in coins:
coin_pos = [random.randint(0, SCREEN_WIDTH - COIN_SIZE), random.randint(0, SCREEN_HEIGHT - COIN_SIZE)]
coins.append(coin_pos)
return coins
def draw_coins(coins):
for coin_pos in coins:
pygame.draw.rect(screen, GREEN, (coin_pos[0], coin_pos[1], COIN_SIZE, COIN_SIZE))
def draw_player():
pygame.draw.rect(screen, WHITE, (player_pos[0], player_pos[1], PLAYER_SIZE, PLAYER_SIZE))
def update_player_position():
player_pos[0] += player_vel[0]
player_pos[1] += player_vel[1]
player_vel[1] += GRAVITY
player_vel[0] *= PLAYER_FRICT
player_vel[1] *= PLAYER_FRICT
# 加载背景图片
background_image = pygame.image.load('background.jpg')
background_image = pygame.transform.scale(background_image, (SCREEN_WIDTH, SCREEN_HEIGHT))
def draw_background():
screen.blit(background_image, (0, 0))
def main():
running = True
coins = place_random_coins()
score = 0
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_vel[0] = -PLAYER_SPEED
if keys[pygame.K_RIGHT]:
player_vel[0] = PLAYER_SPEED
if keys[pygame.K_UP]:
player_vel[1] = -PLAYER_SPEED
if player_pos[0] < 0:
player_pos[0] = 0
elif player_pos[0] > SCREEN_WIDTH - PLAYER_SIZE:
player_pos[0] = SCREEN_WIDTH - PLAYER_SIZE
if player_pos[1] < 0:
player_pos[1] = 0
elif player_pos[1] > SCREEN_HEIGHT - PLAYER_SIZE:
player_pos[1] = SCREEN_HEIGHT - PLAYER_SIZE
# 清屏并绘制背景
screen.fill((0, 0, 0)) # 使用黑色填充屏幕,然后绘制背景
draw_background()
update_player_position()
# 绘制游戏对象代码...
draw_coins(coins)
draw_player()
for coin in coins[:]:
if check_collision(player_pos, coin):
score += COIN_POINTS
coins.remove(coin)
if len(coins) == 0:
coins = place_random_coins()
pygame.display.flip()
clock.tick(FPS)
pygame.quit()
def check_collision(player, coin):
return (player[0] <= coin[0] + COIN_SIZE and
player[0] + PLAYER_SIZE >= coin[0] and
player[1] <= coin[1] + COIN_SIZE and
player[1] + PLAYER_SIZE >= coin[1])
if __name__ == '__main__':
main()
如果还没有安装pygame,可以通过以下命令来安装:
pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple
游戏逻辑:玩家不能移出屏幕边界,以及当所有硬币都被收集后,会重新生成新的硬币。游戏的得分系统也很简单,每收集一个硬币,玩家的得分就会增加COIN_POINTS
定义的数值。
代码运行正常后得到界面: