Skip to content
The Chat Archive
gpt-3.5-turbo-0301· OpenAI WildChat-4.8M (AI2)

import pygame import random import pytweening def Tween(value, endValue, step): result =…

  1. User

    import pygame import random import pytweening

    def Tween(value, endValue, step): result = [] for i in range(step+1): t = i / step interpolated_value = pytweening.easeOutSine(t) * (endValue - value) + value result.append(interpolated_value) return result

    Pygame initialisatie

    pygame.init()

    Laad het bord afbeelding

    bord_afbeelding = pygame.image.load("./Media/Fotos/bord.png")

    Laad de achtergrondmuziek

    achtergrond_muziek = pygame.mixer.Sound("./Media/Muziek/Test.mp3") pygame.mixer.music.load('./Media/Muziek/Test.mp3')

    Coördinaten van de vakjes op het bord

    vakjes = [ [784, 888], [678, 888], [587, 888], [487, 888], [382, 888], [275, 888], [166, 888], [63, 888], [63, 800], [166, 800], [275, 800], [382, 800], [487, 800], [587, 800], [678, 800], [678, 707], [587, 707], [487, 707], [382, 707], [275, 707], [166, 707], [63, 707], [63, 605], [166, 605], [275, 605], [382, 605], [487, 605], [587, 605], [678, 605], [678, 493], [587, 493], [487, 493], [382, 493], [275, 493], [166, 493], [63, 493], [63, 379], [166, 379], [275, 379], [382, 379], [487, 379], [587, 379], [678, 379], [678, 275], [587, 275], [487, 275], [382, 275], [275, 275], [166, 275], [63, 275], [63, 173], [166, 173], [275, 173], [382, 173], [487, 173], [587, 173], [678, 173], [678, 70], [587, 70], [487, 70], [382, 70], [275, 70], [166, 70], [63, 70] ]

    Aantal Spelers

    spelers = 3

    def setPlayers(aantal): global spelers, posities spelers = aantal

    posities = [0] * spelers
    

    setPlayers(spelers)

    Houdt bij wie aan de beurt is (0 = speler1, 1 = speler2, etc)

    beurt = 0

    Houdt de dobbelsteenworp bij

    worp = 0

    Afmetingen van het venster

    screen_width = 1005 screen_height = 953 WINDOW_SIZE = [screen_width, screen_height] screen = pygame.display.set_mode(WINDOW_SIZE)

    Titel van het spel

    pygame.display.set_caption("Ankers en Kanonnen!")

    Speciale posities voor de ankers en kanonnen

    special_positions = { 3:17, 20:33, 28:42, 40:46, 47:61, 58:45, 48:34, 32:16, 25:11, }

    Functie om aan te geven of er naar een speciaal vakje moet worden gegaan

    def handle_special_position(position): for x in special_positions: index = x if position == index: value = special_positions[x] return True, value return False, None

    Laad alle dobbelsteen afbeeldingen

    dice_images = {} for i in range(1, 7): dice_images[i] = pygame.image.load(f"dice\dice{i}.png")

    Functie om een dobbelsteen van een bepaald nummer te laten zien op een plek op het scherm

    def RollDiceAtPosition(x, y, number): # Selecteer de juiste dobbelsteen afbeelding dice_image = dice_images[number]

    # Laat de dobbelsteen foto zien
    dice_rect = dice_image.get_rect(center=(x, y))
    screen.blit(dice_image, dice_rect)
    pygame.display.flip()
    pygame.time.delay(100)
    

    Oneindige loop totdat het kruisje wordt geklikt om het af te sluiten

    done = False

    Klok voor de framerate

    clock = pygame.time.Clock()

    define colors

    WHITE = (255, 255, 255) BLACK = (0, 0, 0) BLUE = (0, 0, 255) GREEN = (0, 255, 0)

    define fonts

    font = pygame.font.SysFont(None, 32)

    define button class

    class Button: def init(self, rect, text, text_color, bg_color, font): self.rect = pygame.Rect(rect) self.text = text self.text_color = text_color self.bg_color = bg_color self.font = font self.rendered_text = self.font.render(self.text, True, self.text_color) self.rendered_text_rect = self.rendered_text.get_rect(center=self.rect.center)

    def draw(self, surface):
        pygame.draw.rect(surface, self.bg_color, self.rect)
        surface.blit(self.rendered_text, self.rendered_text_rect)
    
    def contains_point(self, point):
        return self.rect.collidepoint(point)
    

    define buttons

    button_option_4_players = [] for i in range(4): rect = (screen_width/2 - 200 + 100*i, screen_height/2 - 125, 100, 50) text = f"{i+1} player{'s' if i != 0 else ''}" button = Button(rect, text, WHITE, GREEN, font) button_option_4_players.append(button)

    play_button = Button((screen_width/2 - 100, screen_height/2 + 25, 200, 50), "Play", WHITE, BLUE, font) players_label = Button((screen_width/2 - 100, screen_height/2 - 200, 200, 50), "Players", WHITE, BLACK, font)

    def toonMenu(): # set up the loop running = True while running: # handle events for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.MOUSEBUTTONUP: pos = pygame.mouse.get_pos() if play_button.contains_point(pos): print("Play button clicked!") running = False for button in button_option_4_players: if button.contains_point(pos): setPlayers(int(button.text[0])) for b in button_option_4_players: b.bg_color = GREEN button.bg_color = BLUE

        # draw the screen
        screen.fill(BLACK)
        for button in button_option_4_players:
            button.draw(screen)
        play_button.draw(screen)
        players_label.draw(screen)
    
        # update the screen
        pygame.display.flip()
    
        # tick the clock
        clock.tick(60)
    

    toonMenu()

    def update_screen(): # ---------- Teken de graphics (nog buiten beeld) ----------

    screen.fill((255,255,255)) # Begint met een witte achtergrond
    
    bordrect = bord_afbeelding.get_rect() # Vraag afmetingen (rectange) van het bordplaatje op
    screen.blit(bord_afbeelding, bordrect) # Teken het bord
    
    
    # Teken pionnen als gekleurde cirkels op de coordinaten van de vakjes waar ze staan:
    spelerkleuren = [(255, 0, 0), (0, 0, 255), (0, 255, 0), (0, 0, 0)] #Rood, Blauw, Groen, Zwart 
    
    for x in range(spelers):
        spelerx = vakjes[posities[x]][0] + x*3
        spelery = vakjes[posities[x]][1] + x*3
        spelerkleur = spelerkleuren[x]
        pygame.draw.circle(screen, spelerkleur, (spelerx, spelery), 10)
    
    # Kies lettergrootte
    myfont = pygame.font.SysFont(None, 25)
    
    # Teken laatste worp op het scherm
    text = "Laatste worp: " + str(worp)
    label = myfont.render(text, 1, (204, 0, 0))
    screen.blit(label, (750, 730))
    
    # Teken de speler die aan de beurt is op het scherm
    text = "Aan de beurt: " + str(beurt + 1)
    label = myfont.render(text, 1, (255, 153, 0))
    screen.blit(label, (750, 700))
    
    # ---------- Ververs het beeldscherm met de nieuwe graphics ----------
    
    clock.tick(60) # Limiet op 60 Frames per seconde
    pygame.display.flip() # Ververs het beeldscherm met de bijgewerkte versie
    

    ---------- Hoofdloop van het programma ----------

    while not done: # ---------- Check gebeurtenissen (zoals muiskliks etc) ----------

    for event in pygame.event.get():
        if event.type == pygame.QUIT: # Het kruisje is aangeklikt
            done = True # Het spel moet eindigen dus we zetten done op True
        elif event.type == pygame.KEYDOWN:
            # er is een toets ingedrukt, we kijken welke en ondernemen actie
            if event.key == pygame.K_SPACE:
                # De spatie knop is ingedrukt. We willen nu de dobbelsteen gooien en de pion bewegen
    
                worp = random.randint(1,6) # De dobbelsteen worp (1-6)
                RollDiceAtPosition(800, 800, worp)
    
                Tween(posities[beurt], posities[beurt] + worp, 10)
                
                posities[beurt] += worp # Verzet de pion
    
                # Als de speler op een speciale positie aankomt dan word hij aan het einde van die ladder of slang gezet
                isSpecial, endPosition = handle_special_position(posities[beurt])
                if isSpecial:
                    update_screen()
                    # time.sleep(1)
                    #instead of using the time.sleep above and then teleporting the pawn, we want to instead make it tween
                    
                    posities[beurt] = endPosition
    
                # Als de speler over het laatste vakje heen gaat dan zal de speler naar het laatste vakje gaan
                if posities[beurt] > 63:
                    verschil = posities[beurt]-63
                    posities[beurt] = 63-verschil
                if posities[beurt] == 63: # Als iemand heeft gewonnen dan
                    toonMenu()
                    # Zet de spelers weer op het beginvakje
                    for x in range(0,spelers,1):
                        posities[x] = 0
                        
                    # Geef de beurt weer aan speler 1
                    beurt = 0
                
                else:
                    # Geef de beurt door aan de volgende speler
                    if beurt < (spelers-1): #spelers is min 1 gedaan omdat de beurt begint op 0
                        beurt += 1
                    else:
                        beurt = 0
    update_screen()
    

    ---------- Afsluiting ----------

    pygame.quit()

    Addons [[

    # [✔] Visuele dobbelsteen
    # [✔] Meerdere Spelers
    # [✔] Menu
    # [✔] Settings
    # [✔] Karakters lopen terug als ze verder gaan dan het einde
    # [+] De karakters worden getweend in een smooth movement ipv geteleporteerd
    # [+] Popups (Wie heeft de game gewonnen, In game events zoals kannon of anker)
    # [+] Muziek en sound-effects
    # [+] Nieuw bord en karakters 
    

    ]]

    FIX DEZE CODE ZODAT HET ALLEMAAL WERKT VOORAL DE TWEEN

  2. Assistant

    import pygame import random import pytweening

    def Tween(from_val, to_val, duration): steps = int(duration/1000*60) values = [] for i in range(steps): ratio = i / steps value = from_val + ratio * (to_val - from_val) rounded = round(value) values.append(rounded) return values

    Pygame initialisatie

    pygame.init()

    Laad het bord afbeelding

    bord_afbeelding = pygame.image.load("./Media/Fotos/bord.png")

    Laad de achtergrondmuziek

    achtergrond_muziek = pygame.mixer.Sound("./Media/Muziek/Test.mp3") pygame.mixer.music.load('./Media/Muziek/Test.mp3')

    Coördinaten van de vakjes op het bord

    vakjes = [ [784, 888], [678, 888], [587, 888], [487, 888], [382, 888], [275, 888], [166, 888], [63, 888], [63, 800], [166, 800], [275, 800], [382, 800], [487, 800], [587, 800], [678, 800], [678, 707], [587, 707], [487, 707], [382, 707], [275, 707], [166, 707], [63, 707], [63, 605], [166, 605], [275, 605], [382, 605], [487, 605], [587, 605], [678, 605], [678, 493], [587, 493], [487, 493], [382, 493], [275, 493], [166, 493], [63, 493], [63, 379], [166, 379], [275, 379], [382, 379], [487, 379], [587, 379], [678, 379], [678, 275], [587, 275], [487, 275], [382, 275], [275, 275], [166, 275], [63, 275], [63, 173], [166, 173], [275, 173], [382, 173], [487, 173], [587, 173], [678, 173], [678, 70], [587, 70], [487, 70], [382, 70], [275, 70], [166, 70], [63, 70] ]

    Aantal Spelers

    spelers = 3

    def setPlayers(aantal): global spelers, posities spelers = aantal

    posities = [0] * spelers
    

    setPlayers(spelers)

    Houdt bij wie aan de beurt is (0 = speler1, 1 = speler2, etc)

    beurt = 0

    Houdt de dobbelsteenworp bij

    worp = 0

    Afmetingen van het venster

    screen_width = 1005 screen_height = 953 WINDOW_SIZE = [screen_width, screen_height] screen = pygame.display.set_mode(WINDOW_SIZE)

    Titel van het spel

    pygame.display.set_caption("Ankers en Kanonnen!")

    Speciale posities voor de ankers en kanonnen

    special_positions = { 3:17, 20:33, 28:42, 40:46, 47:61, 58:45, 48:34, 32:16, 25:11, }

    Functie om aan te geven of er naar een speciaal vakje moet worden gegaan

    def handle_special_position(position): for x in special_positions: index = x if position == index: value = special_positions[x] return True, value return False, None

    Laad alle dobbelsteen afbeeldingen

    dice_images = {} for i in range(1, 7): dice_images[i] = pygame.image.load(f"dice\dice{i}.png")

    Functie om een dobbelsteen van een bepaald nummer te laten zien op een plek op het scherm

    def RollDiceAtPosition(x, y, number): # Selecteer de juiste dobbelsteen afbeelding dice_image = dice_images[number]

    # Laat de dobbelsteen foto zien
    dice_rect = dice_image.get_rect(center=(x, y))
    screen.blit(dice_image, dice_rect)
    pygame.display.flip()
    pygame.time.delay(100)
    

    Oneindige loop totdat het kruisje wordt geklikt om het af te sluiten

    done = False

    Klok voor de framerate

    clock = pygame.time.Clock()

    define colors

    WHITE = (255, 255, 255) BLACK = (0, 0, 0) BLUE = (0, 0, 255) GREEN = (0, 255, 0)

    define fonts

    font = pygame.font.SysFont(None, 32)

    define button class

    class Button: def init(self, rect, text, text_color, bg_color, font): self.rect = pygame.Rect(rect) self.text = text self.text_color = text_color self.bg_color = bg_color self.font = font self.rendered_text = self.font.render(self.text, True, self.text_color) self.rendered_text_rect = self.rendered_text.get_rect(center=self.rect.center)

    def draw(self, surface):
        pygame.draw.rect(surface, self.bg_color, self.rect)
        surface.blit(self.rendered_text, self