20212126张楷勤 2022-05-21 21:43 采纳率: 100%
浏览 50
已结题

这个是一个打地鼠的python代码,如何将这里面的鼠标改成锤子呀?

#这个是一个打地鼠的python代码,如何将这里面的鼠标改成锤子呀?
以下是代码:


```python

import pygame
import random
import math
import  sys
from dataclasses import  dataclass

pygame.init()
bg_image = pygame.image.load("0.png")
bg_image = pygame.transform.scale(bg_image, (bg_image.get_width()/3, bg_image.get_height()/3))
screen = pygame.display.set_mode((bg_image.get_width(), bg_image.get_height()))

score_value = 0
font = pygame.font.Font('freesansbold.ttf',32)

textX = 10
textY = 10

enemies = []

NUM_COL = 5
NUM_ROW = 5

possible_enemy_pos = [(5,52),(170,52),(85,52),(250,52),(330,52),(5,125),(85,125),(170,125),(250,125),(330,125),
                      (5,198),(85,198),(170,198),(250,198),(330,198),(5,270),(85,270),(170,270),(250,270),(330,270),
                      (5,345),(85,345),(170,345),(250,345),(330,345)]

enemy_image = pygame.image.load("3.jpg")
#enemy_image = pygame.transform.scale(enemy_image, (enemy_image.get_width() // 2,enemy_image.get_height() // 2))
ENEMY_RADIUS = min(enemy_image.get_width(), enemy_image.get_height())// 2.5

GENERATE_ENEMY, APPEAR_INTERVAL = pygame.USEREVENT + 1, 1500
pygame.time.set_timer(GENERATE_ENEMY, APPEAR_INTERVAL)

ENEMY_LIFE_SPAN = 5*1000
AGE_ENEMY, AGE_INTERVAL = pygame.USEREVENT+2, ENEMY_LIFE_SPAN//7
pygame.time.set_timer(AGE_ENEMY, AGE_INTERVAL)


@dataclass
class Enemy:
    x: int
    y: int
    life: int = ENEMY_LIFE_SPAN

def check_exist(new_pos):
    for enemy in enemies:
        if new_pos == (enemy.x, enemy.y):
            return True
    return False

def generate_next_enemy_pos():
    new_pos=()
    while True:
        grid_index = random.randint(0, NUM_ROW*NUM_COL-1)
        new_pos = possible_enemy_pos[grid_index]
        if not check_exist(new_pos):
            break
    return new_pos


def draw_enemies():
    for enemy in enemies:
        screen.blit(enemy_image, (enemy.x, enemy.y))


def show_score(x,y):
    global score_value
    score = font.render("Score: "+str(score_value), True, (255, 255, 255))
    screen.blit(score, (x, y))

def check_enemy_collision(clickX, clickY, enemyX, enemyY):
    enemyX,enemyY = enemyX + ENEMY_RADIUS, enemyY+ENEMY_RADIUS
    distance = math.sqrt(math.pow(enemyX - clickX,2)+(math.pow(enemyY-clickY,2)))
    return distance<ENEMY_RADIUS

def check_clooision():
    mouse_image = pygame.image.load("1.png")

def check_enemies_collision(click_pos, enemies):
    for enemy in enemies:
        if check_enemy_collision(click_pos[0], click_pos[1], enemy.x, enemy.y):
            global score_value
            score_value +=1
            enemies.remove(enemy)

def age_enemy():
    for enemy in enemies:
        enemy.life -= 1000

def remove_died_enemies():
    for enemy in enemies:
        if enemy.life == 0:
            enemies.remove(enemy)


running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONUP:
            click_pos = pygame.mouse.get_pos()
            check_enemies_collision(click_pos, enemies)
        if event.type == AGE_ENEMY:
            age_enemy()
            remove_died_enemies()
        if event.type == GENERATE_ENEMY:
            if len(enemies) < NUM_COL*NUM_ROW:
                new_pos = generate_next_enemy_pos()
                enemies.append(Enemy(new_pos[0], new_pos[1]))


    screen.blit(bg_image, (0, 0))
    draw_enemies()
    show_score(textX, textY)
    pygame.display.update()




```

  • 写回答

1条回答 默认 最新

  • 请叫我问哥 Python领域新星创作者 2022-05-22 17:50
    关注

    你有锤子的图片吗?先把锤子保存为png图片,然后把鼠标隐藏,在鼠标的位置绘制锤子图片,参考代码如下:

    cursor_image = pygame.image.load("锤子图片.png") # 设置鼠标图片
    pygame.mouse.set_visible(False) # 隐藏鼠标
    ...
    while running:
        ...
        screen.blit(bg_image, (0, 0))
        draw_enemies()
        show_score(textX, textY)
        pointer_rect = cursor_image.get_rect()
        pointer_rect.center = pygame.mouse.get_pos()
        cursor_x = pointer_rect.x
        cursor_y = pointer_rect.y
        screen.blit(cursor_image, (cursor_x,cursor_y))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月5日
  • 已采纳回答 5月28日
  • 创建了问题 5月21日

悬赏问题

  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题