Okay, ich versuche ein Tom und Jerry-Spiel mit der Pygame-Bibliothek zu erstellen.Kann nicht erneut auf das Bild klicken, was ist falsch mit meinem Pygame-Code?
Das Spiel konzentriert sich auf das Fangen von Mäusen durch Klicken auf sie, wie sie in ihren Löchern erscheinen. Das Problem ist, dass manchmal eine Katze anstelle einer Maus erscheint und wenn der Spieler fälschlicherweise auf die Katze (n) klickt, verliert er alle gesammelten Punkte, aber das Spiel geht weiter. Die Maus ist ein Bild einer Maus und die Katze ist ein Bild einer Katze. Wenn Sie mit der Maus klicken, bekommen Sie die Maus, sonst bekommt die Katze die Punkte. Der Code ist ein Durcheinander, weil ich nicht weiß, was ich mache und nur eine andere Ereignisschleife einstellen, denn dann funktioniert es, weil es nach dem Erstellen der Maus ausgeführt wird. Es funktioniert, um auf die Maus zu klicken, aber Sie klicken irgendwo anders und danach ist es, als ob Sie nicht auf die Maus geklickt haben.
Die Maus wird in einer Schleife erstellt und soll 5 Sekunden warten. Wenn Sie innerhalb dieser Sekunden mit der Maus klicken, wird eine entsprechende Meldung in der Konsole ausgedruckt, Jerry hat geklickt! "Else" 1 Klick ". Wenn du nicht innerhalb von 5 Sekunden auf die Maus klickst, verschwindet ein Bild und die Maus verschwindet,
Nun, was ich gerade versuche, ist, die Nachricht mit einem Klick zu drucken, wenn der Player nicht klickt Alles außer Druck 1 Klick Jerry hat geklickt, wenn der Spieler auf die Maus klickt Ich habe ein Bild des Mauselochs und dann die Maus auf das Mauseloch, also auf ein anderes Bild
Dieser Code funktioniert mit einem Bild mindestens:
pygame.init()
width=350;
height=400
screen = pygame.display.set_mode((width, height))
pygame.display.set_caption('clicked on image')
redSquare = pygame.image.load("images/red-square.png").convert()
x = 20; # x coordnate of image
y = 30; # y coordinate of image
screen.blit(redSquare , (x,y)) # paint to screen
pygame.display.flip() # paint screen one time
running = True
while (running):
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
if event.type == pygame.MOUSEBUTTONDOWN:
# Set the x, y postions of the mouse click
x, y = event.pos
if redSquare.get_rect().collidepoint(x, y):
print('clicked on image')
#loop over, quite pygame
pygame.quit()
Mein Problem ist, dass, wenn ich auf der Maus klicken und dann auf mich nicht auf der Maus, die ich nicht auf der Maus wieder an einer anderen Stelle klicken.
Also was ist los? Was mache ich hier falsch?
Hier ist mein Code:
import pygame
from pygame import *
from random import *
init()
run = True
screen = (800,800)
screen = display.set_mode(screen)
xpos = 0
ypos = 0
mouseorcatxpos = 5
mouseorcatypos = 0
mousehole = image.load("mousehole.png").convert()
cat = image.load("tom.png")
jerry = image.load("jerry.png")
def makeholes():
global ypos
global xpos
for holey in range(1,9):
for holex in range(1,9):
screen.blit(mousehole,(xpos,ypos))
display.flip()
xpos += 100
ypos += 100
xpos = 0
def mouseorcat():
global xpos
mouseorcatxpos = 5
ypos = 0
for mousecaty in range(1,9):
pygame.event.pump()
for mousecatx in range(1,9):
randommouse = randint(1, 3)
randomcat = randint(1, 10)
if(randommouse == 2):
screen.blit(jerry, (mouseorcatxpos, ypos))
display.flip()
for event in pygame.event.get():
if (event.type == MOUSEBUTTONDOWN):
if jerry.get_rect().collidepoint(xpos, ypos) == False:
print("l clicked!")
x, y = event.pos
if jerry.get_rect().collidepoint(xpos, y):
print("JERRY CLICKED!!")
x, y = event.pos
print(x, y)
time.wait(5000)
#screen.blit(mousehole, (mouseorcatxpos - 5, ypos))
display.flip()
elif(randomcat == 2):
screen.blit(cat, (mouseorcatxpos, ypos))
display.flip()
time.wait(1500)
screen.blit(mousehole, (mouseorcatxpos-5, ypos))
display.flip()
mouseorcatxpos += 100
mouseorcatxpos = 0
ypos += 100
makeholes()
while run == True:
for event in pygame.event.get():
mouseorcat()
if event.type == QUIT:
run = False
Bitte erklären Sie die Regeln und die Mechanik des Spiels im Detail. Ich bin mir nicht sicher, wie es funktionieren soll. Es sieht so aus, als müsste der Code dramatisch umstrukturiert werden. Zum Beispiel sollte es nur eine Ereignisschleife und einen Aufruf von display.flip() geben. – skrx
Um den Downvoter, seien Sie nicht unhöflich und einfach ohne Erklärung, und helfen Sie eher, die Frage zu verbessern. – skrx
Ich habe eine Antwort mit einem komplett neuen Beispiel eingereicht, aber ich werde morgen noch einmal auf dein Programm schauen, um zu sehen, ob es "gerettet" werden kann. ;) Allerdings sieht es wirklich nicht gut aus. Mach dir keine Sorgen, jeder schreibt am Anfang Code wie diesen.Vielleicht wäre es auch besser, beim nächsten Mal nach einem Forum wie https://www.reddit.com/r/pygame/ zu fragen. – skrx