Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.04.2019, 18:17

Pygame: 3x3 Raster Position wird an anderer stelle dargestellt

Ich wollte Tick Tack Toe programmieren und habe ein 3x3 Raster erstellt. Wenn ich auf eines der Rasterfelder klicke soll in der Konsole "Click!" ausgegeben werden. Aber wenn ich auf eines der Rasterfelder klicke passiert nichts. Außer wenn ich oben links ins im Fenster klicke ?(

Danke im voraus für die Hilfe :)


(Link)


(Link)


Main.py

HLSL-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import pygame
from Block import Block

screenSize = (500,400)
screenTitle = "Tick Tack Toe!"

gridWidth = 3
gridHeight = 3
gridSpace = 10

blocks = []

pygame.init()

screen = pygame.display.set_mode(screenSize)
pygame.display.set_caption(screenTitle)

running = True

clock = pygame.time.Clock()

for y in range(0, gridHeight):
    for x in range(0, gridWidth):
        blocks.append(Block(x*(64+gridSpace)+(screenSize[0]/2)-(64+(gridWidth*gridSpace)), y*(64+gridSpace)+(screenSize[1]/2)-(64+(gridHeight*gridSpace)), "block.png"))

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.MOUSEBUTTONDOWN:
            for i in blocks:
                if (i.getImage().get_rect().collidepoint(pygame.mouse.get_pos())):
                    print("Click!")

    screen.fill((255,255,255))
    
    for i in blocks:
        screen.blit(i.getImage(), (i.x, i.y))

    pygame.display.update()
    clock.tick(60)

pygame.quit()


Block.py

HLSL-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import pygame

class Block:
    def __init__(self, x, y, image):
        self.x = x
        self.y = y
        self.image = pygame.image.load(image)

    def getImage(self):
        return self.image

    def x(self):
        return self.image.get_rect().x

    def y(self):
        return self.image.get_rect().y

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »N4SONIC« (28.04.2019, 19:06)


David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

28.04.2019, 19:26

Du benutzt für die Klick-Abfrage ja auch nur das Rechteck des Bilds und nicht die Position des Blocks. Deine Methoden x und y sind dementsprechend auch falsch. Das Bild weiß gar nicht, wo es positioniert ist.

3

30.04.2019, 07:43

Danke habe das Problem gelöst :) :thumbsup:

Werbeanzeige