Ich bin gerade dabei, ein Spiel ähnlich wie Clicker Heroes in Python zu erstellen, wobei ich Pygame und einige andere Module verwende. Das Problem, das ich habe, ist, dass ich keine Werte zwischen zwei verschiedenen Spielschleifen übertragen kann.
Mein Code lautet wie folgt:
import pygame
import random
from colour import Color
import multiprocessing
from pygame._sdl2 import Window
from multiprocessing import Manager
def game(stats):
pygame.init()
colours = list(Color("red").range_to(Color("green"),100)) # list of 100 colour values from red to green
screen = pygame.display.set_mode((600, 600))
stage = 1
killsleft = 5
hpord = 1+(stage*0.1)
chp = round(10**hpord)
mhp = chp
mdown = False
numFont = pygame.font.SysFont("twcen", 60)
gold = 0
dmg = 1
upgcost = 20
island = pygame.image.load("island.png")
centrex = 300
spacing = 110
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.MOUSEBUTTONDOWN:
mdown = True
if event.type == pygame.MOUSEBUTTONUP:
mdown = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
pygame.quit()
keyspressed = pygame.key.get_pressed()
#while not statsqueue.empty():
#transfer = statsqueue.get()
#gold = transfer[0]
#dmg = transfer[1]
if mdown: # click
chp -= dmg
mdown = False
if chp < 1: # monster ded
killsleft -= 1
chp = round(10**hpord)
mhp = chp
gold += round(chp/3)
if killsleft = upgcost:
#dmg += 1
#gold -= upgcost
#upgcost = round(upgcost*1.1)
screen.fill((200, 200, 200))
for i in range(-2, 3):
stagenum = stage+i
xpos = centrex + (i*spacing)
if i == 0:
fontsize = 80
islandsize = (70, 70)
else:
fontsize = 50
islandsize = (30, 30)
islandpos = (xpos-islandsize[0]//2, 60) # centre island under stg num
if stage+i-2 > -2:
screen.blit(pygame.transform.scale(island, islandsize), islandpos)
stgFont = pygame.font.SysFont("twcen", fontsize)
stgsdisplay = stgFont.render(str(stagenum), 1, (0, 0, 0))
stagerect = stgsdisplay.get_rect(center=(xpos, 80)) # centre text
screen.blit(stgsdisplay, stagerect)
healthperc = max(0, min(int((chp / mhp) * 100), 99)) # find current % of mhp that chp is
selectedcolour = colours[healthperc]
chpcolour = tuple(int(c * 255) for c in selectedcolour.rgb) # convert to rgb
pygame.draw.rect(screen, (0, 0, 0), (147, 147, 305, 27), 0, 4) # hp bar outline/back
pygame.draw.rect(screen, chpcolour, (150-(chp/mhp), 150, (chp/mhp)*300, 20), 0, 4) # hp bar
chpdisplay = numFont.render("chp:"+str(chp), 1, (0, 0, 0))
killsdisplay = numFont.render("killsleft:"+str(killsleft), 1, (0, 0, 0))
golddisplay = numFont.render("gold:"+str(gold), 1, (0, 0, 0))
upgcostdisplay = numFont.render("upgcost:"+str(upgcost), 1, (0, 0, 0))
dmgdisplay = numFont.render("dmg:"+str(dmg), 1, (0, 0, 0))
screen.blit(chpdisplay, (0, 200))
screen.blit(dmgdisplay, (0, 350))
screen.blit(killsdisplay, (0, 250))
screen.blit(golddisplay, (0, 400))
screen.blit(upgcostdisplay, (0, 300))
#statsqueue.put((gold, dmg))
pygame.display.flip()
def shop(stats): # stats window
pygame.init()
numFont = pygame.font.SysFont("twcen", 60)
shopwindow = pygame.display.set_mode((300, 200))
pygame.display.set_caption("shop")
gold = 0
shopmdown = False
Window.from_display_module().position = [1100, 200]
upgcost = 20
while True:
shopwindow.fill((255, 255, 255))
gold = stats["gold"]
dmg = stats["dmg"]
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
if event.type == pygame.MOUSEBUTTONDOWN:
shopmdown = True
if event.type == pygame.MOUSEBUTTONUP:
shopmdown = False
keyspressed = pygame.key.get_pressed()
if shopmdown:
shopmdown = False
if keyspressed[pygame.K_u]: # upg
if gold >= upgcost:
dmg += 1
gold -= upgcost
upgcost = round(upgcost*1.1)
statsqueue.put((gold, dmg))
golddisplay = numFont.render("gold:"+str(gold), 1, (0, 0, 0))
shopwindow.blit(golddisplay, (0, 0))
pygame.display.update()
def main():
multiprocessing.set_start_method("spawn")
statsqueue = multiprocessing.Queue()
manager = Manager()
stats = manager.dict({"gold": 0, "dmg": 1})
gameprocess = multiprocessing.Process(target=game, args=(statsqueue,))
shopprocess = multiprocessing.Process(target=shop, args=(statsqueue,))
gameprocess.start()
shopprocess.start()
gameprocess.join()
shopprocess.join()
if __name__ == "__main__":
main()
Ich habe versucht, eine Statistikwarteschlange zu implementieren, stellte jedoch fest, dass sie immer dann einfror, wenn ich versuchte, Werte zu übertragen. Diese Version versucht, ein Wörterbuch zu verwenden (wie von ChatGPT vorgeschlagen, bitte tun Sie mir nicht weh), aber jetzt treten nur Fehler auf, wenn ich versuche, das Wörterbuch zu verwenden. Da ich außerdem Multiprocessing verwende, werden keine Fehler mehr ausgegeben, damit ich sehen kann, wo ich einen Fehler gemacht habe.
Ich bin gerade dabei, ein Spiel ähnlich wie Clicker Heroes in Python zu erstellen, wobei ich Pygame und einige andere Module verwende. Das Problem, das ich habe, ist, dass ich keine Werte zwischen zwei verschiedenen Spielschleifen übertragen kann. Mein Code lautet wie folgt: [code]import pygame import random from colour import Color import multiprocessing from pygame._sdl2 import Window from multiprocessing import Manager
def game(stats): pygame.init() colours = list(Color("red").range_to(Color("green"),100)) # list of 100 colour values from red to green screen = pygame.display.set_mode((600, 600)) stage = 1 killsleft = 5 hpord = 1+(stage*0.1) chp = round(10**hpord) mhp = chp mdown = False numFont = pygame.font.SysFont("twcen", 60) gold = 0 dmg = 1 upgcost = 20 island = pygame.image.load("island.png") centrex = 300 spacing = 110
while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() if event.type == pygame.MOUSEBUTTONDOWN: mdown = True if event.type == pygame.MOUSEBUTTONUP: mdown = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: pygame.quit()
for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() if event.type == pygame.MOUSEBUTTONDOWN: shopmdown = True if event.type == pygame.MOUSEBUTTONUP: shopmdown = False
keyspressed = pygame.key.get_pressed()
if shopmdown: shopmdown = False
if keyspressed[pygame.K_u]: # upg if gold >= upgcost: dmg += 1 gold -= upgcost upgcost = round(upgcost*1.1) statsqueue.put((gold, dmg))
if __name__ == "__main__": main() [/code] Ich habe versucht, eine Statistikwarteschlange zu implementieren, stellte jedoch fest, dass sie immer dann einfror, wenn ich versuchte, Werte zu übertragen. Diese Version versucht, ein Wörterbuch zu verwenden (wie von ChatGPT vorgeschlagen, bitte tun Sie mir nicht weh), aber jetzt treten nur Fehler auf, wenn ich versuche, das Wörterbuch zu verwenden. Da ich außerdem Multiprocessing verwende, werden keine Fehler mehr ausgegeben, damit ich sehen kann, wo ich einen Fehler gemacht habe.
Beim Erstellen von zwei Fenstern mit sfml habe ich herausgefunden, dass nur eines der Fenster das Dreieck anzeigt, abhängig von der Funktion window.setActive(), die im folgenden Code aufgerufen wird....
Ich habe einen Set set1 und set set2 sowie 2 Funktionen getSet1ElementsCore (Zeichenfolge S) und getSet2ElementsCore (String) (Diese Rückgabezahlen) und alle Elemente aus beiden Sätzen in einen...
Ich schreibe eine Software in C#, die in der Lage sein muss, Monitore in Windows über Wiederverbindungen zu verfolgen. Es muss in der Lage sein, die Anzeigezahl der Monitore (z. B. Display1,...
Wenn ich aus dem Intellij -Ideenfenster wechsle und zurückschalte, muss ich warten, bis der Projektordner erneut importiert wird. Wenn ich Insider eine Datei bin und an etwas arbeite, schließt dies...
Wie kann ich zwei separate Befehle in zwei separaten cmd.exe Windows ausführen - nacheinander aus einer Batch -Datei unter Windows 11? Das erste CMD-Fenster ist
python host.py