python吃金币游戏(简易版)

利用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定义的数值。

代码运行正常后得到界面:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值