如何从屏幕上删除单个 pygame 绘图？

2023-08-22 18:21:19

2 回答

TA贡献1995条经验 获得超2个赞

def pick_up(ball, dot):

ball_rect = Rect( ball.x - ball.SIZE , ball.y - ball.SIZE , ball.SIZE*2, ball.SIZE*2)

dot_rect = Rect( dot.x - dot.SIZE , dot.y - dot.SIZE , dot.SIZE*2, dot.SIZE*2)

if ball_rect.colliderect(dot_rect):

return True

return False

for dot in dots:

if pick_up(ball, dot): # if dot in range ball

dots.remove(dot)

dot.draw()

from pygame import *

import random as rd

SCREEN_WIDTH = 800

SCREEN_HEIGHT = 600

NUMBER_OF_DOTS = 5

class Ball():

SIZE = 15

def __init__(self, x, y):

self.x = x

self.y = y

def draw(self):

draw.circle(screen, (0, 0, 0), (self.x, self.y), Ball.SIZE)

def move(self, vx, vy):

self.x += vx

self.y += vy

class Dot():

SIZE = 5

def __init__(self, x, y):

self.x = x

self.y = y

def draw(self):

draw.circle(screen, (0, 0, 0), (self.x, self.y), Dot.SIZE)

def pick_up(ball, dot):

ball_rect = Rect( ball.x - ball.SIZE , ball.y - ball.SIZE , ball.SIZE*2, ball.SIZE*2)

dot_rect = Rect( dot.x - dot.SIZE , dot.y - dot.SIZE , dot.SIZE*2, dot.SIZE*2)

if ball_rect.colliderect(dot_rect):

return True

return False

init()

screen = display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

dots = []

ball = Ball(200,200)

# generate dots

for i in range(NUMBER_OF_DOTS):

x = rd.randint(100, 700)

y = rd.randint(100, 500)

dots.append(Dot(x,y))

# the main game loop

while True:

screen.fill((255, 255, 255))

keys=key.get_pressed()

for events in event.get():

keys=key.get_pressed()

if events.type == QUIT:

quit()

if keys[K_RIGHT]:

ball.move(+1,0)

if keys[K_LEFT]:

ball.move(-1,0)

if keys[K_UP]:

ball.move(0,-1)

if keys[K_DOWN]:

ball.move(0,+1)

for dot in dots:

dot.draw()

if pick_up(ball, dot):

dots.remove(dot)

ball.draw()

display.update()

time.delay(1) # Speed down

PyGame 矩形碰撞 http://www.pygame.org/docs/ref/rect.html#pygame.Rect.colliderect

TA贡献1852条经验 获得超1个赞

def pick_up(x, y, xx, yy):

result = False

distance = m.sqrt(m.pow(xx - x, 2) + m.pow(yy - y, 2))

if distance < 19:

result = True              # It was picked

return result

p_1_x += p_1_change_x

p_1_y -= p_1_change_y

picked_up = []                           # empty list to hold "picked" items

for i, locate in enumerate(locations):

dot = draw.circle(screen, (0, 0, 0), locate, 5)

dots.append(dot)

for l in enumerate(locate):

if ( pick_up(p_1_x, p_1_y, locate[0], locate[1]) ):

picked_up.append( i )        # save the index of anything "picked"

# remove any picked-up circles from the list

for index in sorted( picked_up, reverse=True ):   # start with the highest index first

print( "Removing circle from location[%d]" % ( index ) )  # DEBUG

del( locations[ index ] )

• 2 回答
• 0 关注
• 140 浏览

0/150