I am making a multiple choice quiz game with python and pygame. I have circles and what a want is when you click on the circle it will change the width and make the circle full. But I don't know of a python function that can do that
Heres my code so far:
# Controls the width of the circles
width_1 = 2
width_2 = 2
width_3 = 2
width_4 = 2
# Circles
pygame.draw.circle(screen, BLACK, [250, 230], 7, width_1)
pygame.draw.circle(screen, BLACK, [250, 260], 7, width_2)
pygame.draw.circle(screen, BLACK, [250, 290], 7, width_3)
pygame.draw.circle(screen, BLACK, [250, 320], 7, width_4)
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
I want to have something so that if the mouse is hovering over the circles AND mousebuttondown AND event.button == 1 then change the width to 0 (Fill it in)
Thanks in advance!
P.S. This is not all my code
mouse. get_pressed() Returns the sequence of booleans representing the state of all the mouse buttons. A true value means the mouse is currently being pressed at the time of the call.
Mouse Position The get_pos() function returns the coordinates of the mouse cursor on the screen.
Pygame supports black and white cursors (bitmap cursors), as well as system variant cursors and color cursors. You control the cursor with functions inside pygame. mouse pygame module to work with the mouse. This cursors module contains functions for loading and decoding various cursor formats.
you can just do
x, y = pygame.mouse.get_pos()
then
print(x, y)
Lets say we wanted to make some Flying blocks from one position to another. We could do something like this
import pygame
from pygame import *
import sys, random, math, fractions
pygame.init()
Screen_Width = 800
Screen_Height = 600
Total_Display = pygame.display.set_mode((Screen_Width, Screen_Height))
clock = pygame.time.Clock()
class Blocks(pygame.sprite.Sprite):
def __init__(self, width, height):
super().__init__()
all_sprite_list.add(self)
block_list.add(self)
self.image = pygame.Surface((32,32))
self.rect = self.image.get_rect()
self.change_y = 0
self.change_x = 0
def blockMove (self, cursor_pos_x, cursor_pos_y, player_pos_x, player_pos_y):
block_vec_x = cursor_pos_x - player_pos_x
block_vec_y = cursor_pos_y - player_pos_y
vec_length = math.sqrt(block_vec_x ** 2 + block_vec_y ** 2)
block_vec_y = (block_vec_y / vec_length) * 5
block_vec_x = (block_vec_x / vec_length) * 5
self.change_y += block_vec_y
self.change_x += block_vec_x
def update(self):
self.rect.y += self.change_y
self.rect.x += self.change_x
Now well make a simple player class just for a position to fire the blocks to the mouse position well place this right in the middle of the window!
class Player(pygame.sprite.Sprite):
def __init__(self):
player_list.add(self)
self.rect = Rect(400,300,16,16)
self.image = pygame.surface((16,16))
all_sprite_list = pygame.sprite.Group()
player_list = pygame.sprite.Group()
block_list = pygame.sprite.Group()
block = Blocks(16,16)
player = Player()
running = True
while running:
clock.tick(60)
for e in pygame.event.get()
if e == pygame.Quit:
running = False
if e.type == pygame.KEYDOWN and e.type == pygame.K_ESCAPE:
running = False
Here is where we get the mouse position we set Mouse_X and Mouse_Y = mouse.get_pos() which will output (x, y) or Mouse_X = mouse pos x and Mouse_Y = mouse pos y. You can also out put the position of the mouse by adding a print(Mouse_x & " " & Mouse_y)
Mouse_x, Mouse_y = pygame.mouse.get_pos()
key = pygame.key.get_pressed()
if key[pygame.K_SPACE]:
block = Blocks(16,16)
block.blockMove(Mouse_x, Mouse_y, player.rect.x, player.rect.y)
block.rect.x = player.rect.x
block.rect.y = player.rect.y
block.update()
Total_Display.fill((255,0,0))
for sprite in all_sprite_list:
pygame.draw.rect(Total_Display,(0,0,0), sprite)
for blocks in block_list:
pygame.draw.rect(Total_Display, (0,0,0), block)
pygame.display.flip()
import pygame
from pygame import *
import sys, random, math, fractions
pygame.init()
Screen_Width = 800
Screen_Height = 600
Total_Display = pygame.display.set_mode((Screen_Width, Screen_Height))
clock = pygame.time.Clock()
class Blocks(pygame.sprite.Sprite):
def __init__(self, width, height):
super().__init__()
all_sprite_list.add(self)
block_list.add(self)
self.image = pygame.Surface((32,32))
self.rect = self.image.get_rect()
self.change_y = 0
self.change_x = 0
def blockMove (self, cursor_pos_x, cursor_pos_y, player_pos_x, player_pos_y):
block_vec_x = cursor_pos_x - player_pos_x
block_vec_y = cursor_pos_y - player_pos_y
vec_length = math.sqrt(block_vec_x ** 2 + block_vec_y ** 2)
block_vec_y = (block_vec_y / vec_length) * 5
block_vec_x = (block_vec_x / vec_length) * 5
self.change_y += block_vec_y
self.change_x += block_vec_x
def update(self):
self.rect.y += self.change_y
self.rect.x += self.change_x
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
player_list.add(self)
all_sprite_list.add(self)
self.rect = Rect(400,300,16,16)
self.image = pygame.Surface((16,16))
all_sprite_list = pygame.sprite.Group()
player_list = pygame.sprite.GroupSingle()
block_list = pygame.sprite.Group()
block = Blocks(16,16)
player = Player()
running = True
while running:
clock.tick(60)
for e in pygame.event.get():
if e == pygame.QUIT:
Running = False
if e.type == pygame.KEYDOWN and e.type == pygame.K_ESCAPE:
running = False
Mouse_x, Mouse_y = pygame.mouse.get_pos()
key = pygame.key.get_pressed()
if key[pygame.K_SPACE]:
block = Blocks(16,16)
block.update()
block.blockMove(Mouse_x, Mouse_y, player.rect.x, player.rect.y)
block.rect.x = player.rect.x
block.rect.y = player.rect.y
block.update()
Total_Display.fill((255,0,0))
for sprite in all_sprite_list:
pygame.draw.rect(Total_Display,(0,0,0), sprite)
for blocks in block_list:
pygame.draw.rect(Total_Display, (0,0,0), block)
pygame.display.flip()
You can use pygame.mouse.get_pos()
(docs)
pygame.mouse.get_pos()
get the mouse cursor position get_pos() -> (x, y)
Returns the X and Y position of the mouse cursor. The position is relative the the top-left corner of the display. The cursor position can be located outside of the display window, but is always constrained to the screen.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With