Taschenrechner Pygame

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
xAMIx
User
Beiträge: 4
Registriert: Freitag 18. März 2022, 14:21

Hallo,

ich versuche gerade ganz einfach und unkompliziert mit Pygame einen Taschenrechner zu programmieren. Mein Problem ist in der rechner() Methode. Wenn z.b nur einmal ein Button geklickt wird, so werden Strings mehrfach und hintereinander hinzugefügt. Kann man das irgendwie umgehen, dass durch einen Klick auch nur ein String hinzugefügt wird?

Und sry ich weiß gerade nicht wie ich meinen Code Übersichtlich im forum darstellen kann. Kann mir das vielleicht wer erklären?

Danke im VORAUS.

Hier mein Code:

import pygame

pygame.init()
screen = pygame.display.set_mode((580,320))
Zahl = [[50,150],[150,150],[250,150],[50,200],[150,200],[250,200],[50,250],[150,250],[250,250]]
Farbe1, Farbe2, Farbe3, Farbe4, Farbe5, Farbe6, Farbe7, Farbe8, Farbe9, Farbe10, Farbe11, Farbe12, Farbe13, Farbe14, Farbe15 = (240,248,245),(240,248,245),(240,248,245),(240,248,245),(240,248,245),(240,248,245),(240,248,245), (240,248,245), (240,248,245), (240,248,245), (240,248,245), (240,248,245), (240,248,245), (240,248,245), (240,248,245)
Feld_leiste = ""
click = True

def rechner():
global Farbe1, Farbe2, Farbe3, Farbe4, Farbe5, Farbe6, Farbe7, Farbe8, Farbe9, Farbe10, Farbe11, Farbe12, Farbe13, Farbe14, Farbe15, Feld_leiste, leer, click, a
#
pos = pygame.mouse.get_pos()
Feld = pygame.draw.rect(screen, (240, 248, 245), (50, 50, 480, 80), 5)
zahlen1 = pygame.draw.rect(screen, (Farbe1), (50, 150, 80, 35))
zahlen2 = pygame.draw.rect(screen, (Farbe2), (150, 150, 80, 35))
zahlen3 = pygame.draw.rect(screen, (Farbe3), (250, 150, 80, 35))
zahlen4 = pygame.draw.rect(screen, (Farbe4), (50, 200, 80, 35))
zahlen5 = pygame.draw.rect(screen, (Farbe5), (150, 200, 80, 35))
zahlen6 = pygame.draw.rect(screen, (Farbe6), (250, 200, 80, 35))
zahlen7 = pygame.draw.rect(screen, (Farbe7), (50, 250, 80, 35))
zahlen8 = pygame.draw.rect(screen, (Farbe8), (150, 250, 80, 35))
zahlen9 = pygame.draw.rect(screen, (Farbe9), (250, 250, 80, 35))
Mal = pygame.draw.rect(screen, (Farbe10), (350, 150, 80, 35))
geteilt = pygame.draw.rect(screen, (Farbe11), (350, 200, 80, 35))
Plus = pygame.draw.rect(screen, (Farbe12), (350, 250, 80, 35))
Minus = pygame.draw.rect(screen, (Farbe13), (450, 150, 80, 35))
Gleich = pygame.draw.rect(screen, (Farbe14), (450, 200, 80, 35))
Löschen = pygame.draw.rect(screen, (Farbe15), (450, 250, 80, 35))
#
if event.type == pygame.MOUSEBUTTONDOWN:
if click == True:
if pygame.mouse.get_pressed()[0] and zahlen1.collidepoint(pos) == True:
Farbe1 = (176, 196, 222)
Feld_leiste += "1"
if pygame.mouse.get_pressed()[0] and zahlen2.collidepoint(pos) == True:
Farbe2 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and zahlen3.collidepoint(pos) == True:
Farbe3 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and zahlen4.collidepoint(pos) == True:
Farbe4 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and zahlen5.collidepoint(pos) == True:
Farbe5 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and zahlen6.collidepoint(pos) == True:
Farbe6 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and zahlen7.collidepoint(pos) == True:
Farbe7 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and zahlen8.collidepoint(pos) == True:
Farbe8 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and zahlen9.collidepoint(pos) == True:
Farbe9 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and Mal.collidepoint(pos) == True:
Farbe10 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and geteilt.collidepoint(pos) == True:
Farbe11 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and Plus.collidepoint(pos) == True:
Farbe12 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and Minus.collidepoint(pos) == True:
Farbe13 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and Gleich.collidepoint(pos) == True:
Farbe14 = (176, 196, 222)
if pygame.mouse.get_pressed()[0] and Löschen.collidepoint(pos) == True:
Farbe15 = (176, 196, 222)
else:
Farbe1 = (240, 248, 245)
Farbe2 = (240, 248, 245)
Farbe3 = (240, 248, 245)
Farbe4 = (240, 248, 245)
Farbe5 = (240, 248, 245)
Farbe6 = (240, 248, 245)
Farbe7 = (240, 248, 245)
Farbe8 = (240, 248, 245)
Farbe9 = (240, 248, 245)
Farbe10 = (240, 248, 245)
Farbe11 = (240, 248, 245)
Farbe12 = (240, 248, 245)
Farbe13 = (240, 248, 245)
Farbe14 = (240, 248, 245)
Farbe15 = (240, 248, 245)

font = pygame.font.SysFont("OCR A Extended", 90)
img = font.render(Feld_leiste, True, pygame.Color(0, 0, 0))
screen.blit(img, (60, 43))

def text():
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("1", True, pygame.Color(0, 0, 0))
screen.blit(img, (82, 155))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("2", True, pygame.Color(0, 0, 0))
screen.blit(img, (182, 155))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("3", True, pygame.Color(0, 0, 0))
screen.blit(img, (282, 155))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("4", True, pygame.Color(0, 0, 0))
screen.blit(img, (82, 205))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("5", True, pygame.Color(0, 0, 0))
screen.blit(img, (182, 205))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("6", True, pygame.Color(0, 0, 0))
screen.blit(img, (282, 205))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("7", True, pygame.Color(0, 0, 0))
screen.blit(img, (82, 255))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("8", True, pygame.Color(0, 0, 0))
screen.blit(img, (182, 255))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("9", True, pygame.Color(0, 0, 0))
screen.blit(img, (282, 255))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("*", True, pygame.Color(0, 0, 0))
screen.blit(img, (382, 160))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("/", True, pygame.Color(0, 0, 0))
screen.blit(img, (383, 205))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("+", True, pygame.Color(0, 0, 0))
screen.blit(img, (482, 205))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("-", True, pygame.Color(0, 0, 0))
screen.blit(img, (485, 155))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("=", True, pygame.Color(0, 0, 0))
screen.blit(img, (382, 252))
font = pygame.font.SysFont("Arial Rounded MT Bold", 40)
img = font.render("C", True, pygame.Color(0, 0, 0))
screen.blit(img, (482, 255))



while True:
screen.fill((100,149,237))
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()

rechner()
text()
pygame.display.flip()
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Man benutzt kein `global`, und die Farbe ist auch kein guter Wert, um zu Speichern, ob ein Knopf gedrückt ist oder nicht. Da ja maximal ein Knopf gleichzeitig gedrückt sein kann, würde man einfach den Knopf in einer Variable speichern.
Statt immer alles 14 mal zu kopieren, benutzt man passende Datenstrukturen.
`exit` wird benutzt, ist aber nicht offiziell definiert. Das hat in einem ordentlichen Programm eh nichts zu suchen, weil das Programm einfach dann endet, wenn die Hauptfunktion verlassen wird.
Das Event MOUSEBUTTONDOWN wird auch falsch abgefragt, weil nicht innerhalb der Event-Schleife.
Variablennamen schreibt man komplett klein, `click` ist immer True.
Antworten