Gratis verzending vanaf €74,95 NL (€99,95 BE/DE)

Voor 16:00 besteld = morgen in huis

Express voor 11:30 besteld = vanavond in huis*

14 dagen gratis terugsturen*

Je herinnert het vast nog wel Pong! Het razend bekende spel uit de jaren 70.

Pong is een simpel spel waar je twee verticale plateaus hebt en een balletje. Het doel van het spel is om het balletje tegen de wand van je tegenstander aan te laten komen. Dit moet hij met zijn plateau proberen te voorkomen. Lukt hem dit niet krijg je een punt, het lijkt dus op een soort ping pong.

Tijdens dit project ga je leren hoe je je eigen versie ervan maakt dus lees snel verder. Het verschil bij deze variant is dat je met de tegenstander moet overspelen om een zo hoog mogelijke score te behalen. Als je hem dan per ongeluk mist dan begin je weer bij nul. Dus mis hem niet!

  • Niveau – beginner 40% 40%
  • Tijdsduur – 20/25 Min 30% 30%
  • Kosten – €60.78 euro compleet 37% 37%

Stap 1: Benodigheden

  • Raspberry Pi 3B+ of Raspberry Pi 4
  • HDMI Kabel
  • Monitor
  • Muis & Toetsenbord

Stap 2: Bouwen en Bedraden

Het bedraden van de Raspberry Pi is simpel.

De HDMI kabel gaat in de HDMI poort van het beeldscherm en in die van de Raspberry Pi. Daarna gaat de voeding in de micro USB en het toetsenboord en de muis in de USB poorten.

Nu je alles hebt aangelsoten kan je beginnen met het programmeren van je eigen pong spelletje.

Stap 3: Programmeren

Nu je gaat beginnen met het programmeren van je pong project open je eerst de Thonny Python IDE.

Daar schrijf je dan de code in die hieronder staat en als je dat hebt opgeschreven dan sla je het project op. Zorg dat je dat doet met een naam die je makkelijke weer kan vinden want: “je wil je code toch niet kwijtraken!”

Nu je code af is kan je hem open en kan je pong gaan spelen, wat is jouw highscore?

import pygame,
sys from pygame.locals import *
fps = 200
WINDOWWIDTH = 1200
WINDOWHEIGTH = 800
LINETHICKNESS = 10
PADDLESIZE = 50
PADDLEOFFSET = 20
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

#hier tekenen we het speelgebied
def drawArena():
DISPLAYSURF.fill((0, 0, 0))
pygame.draw.rect(DISPLAYSURF, WHITE,((0,0),(WINDOWWIDTH,WINDOWHEIGTH)),LINETHICKNESS*2)

#hier tekenen we de plateaus
def drawPaddle(paddle):
if paddle.bottom > WINDOWHEIGTH –
LINETHICKNESS: paddle.bottom = WINDOWHEIGTH –
LINETHICKNESS elif paddle.top <
LINETHICKNESS: paddle.top =
LINETHICKNESS pygame.draw.rect(DISPLAYSURF, WHITE, paddle)

#hier tekenen we de ball
def drawBall(ball): pygame.draw.rect(DISPLAYSURF, WHITE, paddle)

#hier laten we de ball bewegen
def moveBall(ball, ballDirX, ballDirY): ball.x += ballDirX ball.y += ballDirY
return ball

#hier kijken we of de ball een wand raakt
def checkEdgeCollision(ball, ballDirX, ballDirY):
if ball.top == (LINETHICKNESS)
or ball.bottom == (WINDOWHEIGTH – LINETHICKNESS):
ballDirY = ballDirY * -1
if ball.left == (LINETHICKNESS)
or ball.right == (WINDOWWIDTH – LINETHICKNESS):
ballDirX = ballDirX * -1 return ballDirX, ballDirY

#hier kijken we of de ball een plateau raakt
def checkHitBall(ball, paddle1, paddle2, ballDirX):
if ballDirX == -1
and paddle1.right == ball.left
and paddle1.top < ball.top
and paddle1.bottom > ball.bottom:
return -1 elif ballDirX == 1
and paddle2.left == ball.right
and paddle2.top < ball.top and paddle2.bottom > ball.bottom:
return -1
else:
return 1
#hier kijken we of ons plateau de ball raakt of dat hij hem mist
def checkPointScored(paddle1, ball, score, ballDirX):
if ball.left == LINETHICKNESS:
return 0
elif ballDirX == -1
and paddle1.rigth == ball.left
and paddle1.top < ball.top
and paddle1.bootom > ball.bottom: score += 1
return score
else:
return score
#hier maken we de AI
def artificialIntelligence(ball, ballDirX, paddle2):
if ballDirX == -1:
if paddle2.centery < (WINDOWHEIGTH/2): paddle2.y += 1
elif paddle2.centery > (WINDOWHEIGTH/2): paddle2.y -= 1
elif ballDirX == 1:
if paddle2.centery < ball.centery: paddle2.y += 1
else: paddle2.y -= 1
return paddle2
#hier zorgen we dat het programma de score op het beeld laat zien
def displayScore(score): resultsurf = BASICFONT.render(‘Score= %s’ %(score),
True, White)
resultRect = resultSurf.get_rect()
resultRect.topleft = (WINDOWWODTH – 150, 25)
DISPLAYSURF.blit(resultSurf, resultRect)
#hier zetten we alles in elkaar
def main(): pygame.init()
global DISPLAYSURF
global BASICFONT, BASICFONTSIZE
BASICFONTSIZE = 20
BASICFONT = pygame.font.Font(‘freesansbold.ttf’, BASICFONTSIZE)
FPSCLOCK = pygame.time.Clock()
DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGTH))
pygame.display.set_caption(‘pong’)
ballX = WINDOWWIDTH/2 – LINETHICKNESS/2 ballY = WINDOWHEIGTH/2 – LINETHICKNESS/2
playerOnePosition = (WINDOWHEIGTH – PADDLESIZE) /2
playerTwoPosition = (WINDOWHEIGTH – PADDLESIZE) /2
score = 0 ballDirX = -1 ballDirY = -1 paddle1 =
pygame.Rect(PADDLEOFFSET, playerOnePosition, LINETHICKNESS, PADDLESIZE)
paddle2 = pygame.Rect(WINDOWWIDTH – PADDLEOFFSET – LINETHICKNESS,
playerTwoPosition, LINETHICKNESS, PADDLESIZE)
ball = pygame.Rect(ballX, ballY, LINETHICKNESS, LINETHICKNESS) aaaa drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2)
drawBall(ball)
pygame.mouse.set_visible(0)
#hier zorgen we ervoor dat jouw plateau de muis volgt
while True:
for event in pygame.event.get():
if event.type == QUIT: pygame.quit() sys.exit()
elif event.type == MOUSEMOTION: mousex, mousey = event.pos
paddle1.y = mousey drawArena()
drawPaddle(paddle1)
drawPaddle(paddle2) drawBall(ball)
ball = moveBall(ball, ballDirX, ballDirY)
ballDirX, ballDirY = checkEdgeCollision(ball, ballDirX, ballDirY)
score = checkPointScored(paddle1, ball, score, ballDirX)
ballDirX = ballDirX * checkHitBall(ball, paddle1, paddle2, ballDirX)
paddle2 = artificialIntelligence (ball, ballDirX, paddle2)
displayScore(score) pygame.display.update() FPSCLOCK.tick(FPS)
if __name__==’__main__’: main()

Wordt nu lid van onze nieuwsbrief!
AANMELDEN

Wil je op de hoogte blijven van dit soort projecten?

Ontvang informatie over:
  • Projecten
  • Nieuwtjes
  • Aanbiedingen
  • Evenementen
  • Nieuwe producten
close-link
De waardering van www.elektronicavoorjou.nl bij Webwinkel Keurmerk Klantbeoordelingen is 9.1/10 gebaseerd op 785 reviews.