Permalänk
Medlem

Pac man i Python

Gör ett pac man-spel i programmering 1 på gymnasiet i Pyhon. Håller för närvarande på med att göra spökernas rörelser, så att de tar den kortaste vägen till pac man och undviker att fastna eller inte röra sig pga. väggar. Här är koden som jag gjort fram tills nu:

import pygame, sys, time pygame.init() # Set up the window screen = pygame.display.set_mode((800, 800)) pygame.display.set_caption('Pacman') fiende_time = 0 listx = [] listy = [] def walls(): global listx, listy, original_X, original_Y listx = [680, 700, 720, 740, 640,640,640,640,640, 640, 660, 680, 700, 720, 740, 760, 780, 800, 660, 680, 700, 720, 740, 760, 780, 800, 640, 640, 640, 640, 640, 660, 680, 700, 720, 740, 0, 20, 40, 60, 80, 100, 120, 140, 140, 140, 140, 140, 140, 40, 60, 80, 100, 120, 140, 0, 20, 40, 60, 80, 100, 120, 140, 140, 140, 140, 40, 60, 80, 100, 120, 140, 20, 20, 20, 20, 20, 20, 20, 20, 20, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 760, 20, 20, 20, 20, 20, 20, 40, 40, 40, 40, 40, 40, 480, 400, 400, 700, 220, 220 ,140, 400, 400, 400, 400, 400, 720, 740, 760, 780, 80, 60, 40, 20, 640, 300, 320, 340, 300, 300, 300, 300, 320, 340, 360, 380, 400, 420, 440, 460, 480, 480, 480, 480, 480, 480, 460, 440, 480, 400, 400, 400, 400, 320, 340, 360, 380, 400, 420, 440, 460, 480, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 240, 260, 280, 300, 320, 480, 500, 520, 540, 560, 220, 220, 220, 220, 220, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 240, 80, 100, 260, 280, 300, 320, 480, 500, 520, 540, 560, 400, 400, 400, 400, 400, 400, 320, 340, 360, 380, 400, 420, 440, 460, 480, 560, 560, 560, 560, 560, 480, 500, 520, 540, 560, 580, 600, 620, 640, 660, 680, 700, 100, 120, 140, 160, 180, 200, 220, 220, 220, 240, 260, 280, 300, 220, 220, 320, 340, 360, 380, 400, 420, 440, 460, 400, 400, 400, 400, 140, 140, 140, 140, 140, 120, 640, 640, 640, 640, 640, 640, 660, 680, 700, 80, 100, 120, 140, 640, 660, 680, 700, 220, 240, 260, 280, 300, 220, 220, 260, 280, 300, 80, 100, 120, 140, 80, 100, 120, 140, 480, 240, 500, 520, 540, 500, 520, 540, 660, 680, 700, 660, 660, 680, 700, 480, 480, 500, 640, 640, 560, 560 ] listy = [240, 240, 240, 240, 240, 260, 280, 300, 320, 340, 340,340,340,340,340,340,340,340,400, 400, 400, 400, 400, 400, 400, 400, 400, 420, 440, 460, 480, 480, 480, 480, 480, 480, 340, 340, 340, 340, 340, 340, 340, 340, 260, 280, 300, 320, 340, 240, 240, 240, 240, 240, 240, 400, 400, 400, 400, 400, 400, 400, 400, 420, 440, 460, 480, 480, 480, 480, 480, 480, 60, 80, 100, 120, 140, 160, 180, 200, 220, 60, 80, 100, 120, 140, 160, 180, 200, 220, 660, 680, 700, 720, 740, 500, 520, 540, 560, 580, 600, 500, 520, 540, 560, 580, 600, 640, 660, 680, 700, 720, 740, 620, 640, 260, 560, 640, 680 , 100, 100, 80, 60, 40, 20, 620, 620, 620, 620, 620, 620, 620, 620, 80, 320, 320, 320, 340, 360, 380, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400, 380, 400, 380, 360, 340, 320, 320, 320, 240, 220, 200, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 200, 220, 240, 260, 280, 300, 320, 340, 400, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 420, 440, 460, 480, 560, 420, 440, 460, 480, 340, 320, 300, 280, 260, 240, 220, 200, 180, 400, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 480, 500, 520, 540, 560, 480, 480, 480, 480, 480, 480, 480, 480, 480, 480, 620, 640, 660, 680, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 700, 620, 700, 700, 700, 700, 700, 660, 620, 620, 620, 620, 620, 620, 620, 620, 620, 660, 680, 700, 560, 580, 600, 620, 640, 560, 560, 560, 580, 600, 620, 640, 560, 560, 560, 180, 180, 180, 180, 180, 180, 180, 180, 100, 100, 100, 100, 100, 80, 80, 80, 80, 80, 100, 100, 100, 100, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 100, 100, 100, 100, 100, 100, 80, 80, 80, 80, 100, 100, 100, 100, 100, 80, 100, 80 ] for i in range(len(listx)): pygame.draw.rect(screen, (127, 127, 127), (listx[i], listy[i], 20, 20)) # Add yellow walls on the top and bottom for i in range(0, 800, 20): pygame.draw.rect(screen, (127, 127, 127), (i, 0, 20, 20)) pygame.draw.rect(screen, (127, 127, 127), (i, 780, 20, 20)) # pygame.draw.rect(screen, (127, 127, 127), (i, Y, 20, 20)), (X, i, 20, 20) for i in range(0, 240, 20): pygame.draw.rect(screen, (127, 127, 127), (780, i, 20, 20)) pygame.draw.rect(screen, (127, 127, 127), (0, i, 20, 20)) for i in range(780, 460, -20): pygame.draw.rect(screen, (127, 127, 127), (780, i, 20, 20)) pygame.draw.rect(screen, (127, 127, 127), (0, i, 20, 20)) for i in range(0, 160, 20): pygame.draw.rect(screen, (127, 127, 127), (i, 480, 20, 20)) for i in range(780, 620, -20): pygame.draw.rect(screen, (127, 127, 127), (i, 480, 20, 20)) for i in range(400, 480, 20): pygame.draw.rect(screen, (127, 127, 127), (140, i, 20, 20)) pygame.draw.rect(screen, (127, 127, 127), (640, i, 20, 20)) for i in range(0, 140, 20): pygame.draw.rect(screen, (127, 127, 127), (i, 400, 20, 20)) for i in range(640, 800, 20): pygame.draw.rect(screen, (127, 127, 127), (i, 400, 20, 20)) for i in range(0,160, 20): pygame.draw.rect(screen, (127, 127, 127), (i, 240, 20, 20)) for i in range(640, 800, 20): pygame.draw.rect(screen, (127, 127, 127), (i, 240, 20, 20)) for i in range(240, 340, 20): pygame.draw.rect(screen, (127, 127, 127), (140, i, 20, 20)) pygame.draw.rect(screen, (127, 127, 127), (640, i, 20, 20)) for i in range(0, 160, 20): pygame.draw.rect(screen, (127, 127, 127), (i, 340, 20, 20)) pygame.draw.rect(screen, (127, 127, 127), (i, 340, 20, 20)) for i in range(640, 800, 20): pygame.draw.rect(screen, (127, 127, 127), (i, 340, 20, 20)) for i in range(20, 780, 20): pygame.draw.rect(screen, (127, 127, 127), (i, 760, 20, 20)) for i in range(20, 780, 20): pygame.draw.rect(screen, (127, 127, 127), (i, 20, 20, 20)) for i in range(40,240,20): pygame.draw.rect(screen, (127, 127, 127), (20, i, 20, 20)) for i in range(640, 760, 20): pygame.draw.rect(screen, (127, 127, 127), (760, i, 20, 20)) pygame.draw.rect(screen, (127, 127, 127), (20, i, 20, 20)) pygame.draw.rect(screen, (127, 127, 127), (40, i, 20, 20)) for i in range(40, 240,20): pygame.draw.rect(screen, (127, 127, 127), (760, i, 20, 20)) for i in range(480, 620,20): pygame.draw.rect(screen, (127, 127, 127), (760, i, 20, 20)) pygame.draw.rect(screen, (127, 127, 127), (20, i, 20, 20)) #kolla igenom dessa - förmodligen såna som kan skriva tillsammans #fixa teleportör - har vägg i sig positionX = 400 positionY = 300 positionFX = 400 positionFY = 380 def enemy(): global positionFX, positionFY if abs(positionX-positionFX) > abs(positionY-positionFY): if positionX > positionFX: positionFX += 20 else: positionFX -= 20 else: if positionY > positionFY: positionFY += 20 else: positionFY -= 20 clock = pygame.time.Clock() GAME_SPEED = 10 last_pressed_1 = None while True: fiende_time += 1 original_FX = positionFX original_FY = positionFY original_X = positionX original_Y = positionY for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_q: game_over = True elif event.key == pygame.K_d or event.key == pygame.K_RIGHT: last_pressed_1 = "right" elif event.key == pygame.K_a or event.key == pygame.K_LEFT: last_pressed_1 = "left" elif event.key == pygame.K_w or event.key == pygame.K_UP: last_pressed_1 = "up" elif event.key == pygame.K_s or event.key == pygame.K_DOWN: last_pressed_1 = "down" elif event.key == pygame.K_l: last_pressed2 = "right" elif event.key == pygame.K_j: last_pressed2 = "left" elif event.key == pygame.K_i: last_pressed2 = "up" elif event.key == pygame.K_k: last_pressed2 = "down" #Kolla ifall och vilken tangent som är nedtryckt och uppdatera positionen if last_pressed_1 is not None: # Spellogik if last_pressed_1 == "right": positionX += 20 if last_pressed_1 == "left": positionX -= 20 if last_pressed_1 == "up": positionY -= 20 if last_pressed_1 == "down": positionY += 20 if fiende_time >= 2: enemy() fiende_time = 0 # Check for collisions with walls for i in range(len(listx)): if positionX + 15 >= listx[i] and positionX - 15 <= listx[i] + 20 and positionY + 15 >= listy[i] and positionY - 15 <= listy[i] + 20: print("Collision detected") positionX = original_X positionY = original_Y if positionY >= 760 or positionY <= 40: positionY = original_Y for i in range(len(listx)): if positionFX + 15 >= listx[i] and positionFX - 15 <= listx[i] + 20 and positionFY + 15 >= listy[i] and positionFY - 15 <= listy[i] + 20: print("Collision detected") positionFX = original_FX positionFY = original_FY if positionY >= 760 or positionY <= 40: positionFY = original_FY screen.fill((0, 0, 0)) walls() pygame.draw.circle(screen, (255,255, 0), (positionX, positionY), 20) pygame.draw.circle(screen, (255, 0, 0), (positionFX, positionFY), 20) pygame.display.update() clock.tick(GAME_SPEED) print(positionX, positionY)

(använder bara en fiende/spöke för att lättare kunna arbeta med koden)
Är detta någonting som jag behöver lösa med pathfinding eller finns det några enklare lösningar för att fixa spökenas rörelser?

Permalänk
Medlem

Redigera ditt inlägg och lägg koden inom kodtaggar för att göra det mer läsbart. https://www.sweclockers.com/forum/trad/1700230