Geekend/Oszi-Pong

Aus Magrathea Laboratories e.V.
Zur Navigation springen Zur Suche springen

Beschreibung

Oszi-Pong

Am ersten Abend wurde ein Pong-Spiel auf einem Oszilloskop implementiert.

Dafür wurde eine Oszilloskop an eine Soundkarten eines Notebooks gehängt. Das Oszi dient als Bildschirm für das Spiel, gesteuert wird über die Tastatur des Notebooks.

Code

Das Spiel wurde im Python gehackt. Gesteuert wird mit A und Y für Spieler eins und K und M für Spieler zwei.

import pyaudio
import array
import math
import pygame

p = pyaudio.PyAudio()

pygame.init()
pygame.display.set_mode((640, 480))

stream = p.open(rate = 44100, 
                channels = 2,
                format = pyaudio.paFloat32, 
                output = True,
                input = False)

p1 = 0.0
p2 = 0.0

bx = 0.0
by = 0.0

vx = 1.0
vy = 1.0

c1 = 0
c2 = 0

XXX = 10

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_ESCAPE: running = False
            
    keys = pygame.key.get_pressed()
    if keys[pygame.K_a]: p1 -= 0.01
    if keys[pygame.K_y]: p1 += 0.01
    if keys[pygame.K_k]: p2 -= 0.01
    if keys[pygame.K_m]: p2 += 0.01

    if p1 < -0.50: p1 = -0.50
    if p1 > 0.50: p1 = 0.50
    if p2 < -0.50: p2 = -0.50
    if p2 > 0.50: p2 = 0.50        
    
    # ball
    data = array.array('f')
    for i in range(15 * XXX):
        x = (0.05 * math.sin(i)) + bx
        y = (0.05 * math.cos(i)) + by
        data.append(x)
        data.append(y)
    stream.write(data)
    
    # player 1
    data = array.array('f')
    for i in range(20 * XXX):
        data.append(p1 - 0.25)
        data.append(1.0)
        data.append(p1)
        data.append(1.0)
        data.append(p1 + 0.25)
        data.append(1.0)
    stream.write(data)
    
    # player2
    data = array.array('f')
    for i in range(20 * XXX):
        data.append(p2 - 0.25)
        data.append(-1.0)
        data.append(p2)
        data.append(-1.0)
        data.append(p2 + 0.25)
        data.append(-1.0)
    stream.write(data)
    
    # line
    data = array.array('f')
    for i in range(10 * XXX):
        data.append(-1.0)
        data.append(0.0)
        data.append(-0.8)
        data.append(0.0)
    stream.write(data)
    
    # c1
    data = array.array('f')
    for i in range(5 * XXX):
        data.append(-0.9)
        data.append(1.0)
        data.append(-0.9)
        data.append(1.0 - c1 / 10.0)
    stream.write(data)
    
    # c2
    data = array.array('f')
    for i in range(5 * XXX):
        data.append(-0.9)
        data.append(-1.0)
        data.append(-0.9)
        data.append(-1.0 + c2 / 10.0)
    stream.write(data)
    
    bx += vx / 75.0;
    by += vy / 75.0;
    
    if (bx <= -0.75 or bx >= 0.75): vx *= -1
    if (by >= 1.0):
        if (bx >= (p1 - 0.25) and bx <= (p1 + 0.25)): vy *= -1
        else:
            bx = 0.0
            by = 0.0
            c2 += 1
    if (by <= -1.0):
        if (bx >= (p2 - 0.25) and bx <= (p2 + 0.25)): vy *= -1
        else:
            bx = 0.0
            by = 0.0
            c1 += 1
    
    if c1 >= 10 or c2 >= 10:
        break

stream.close()
p.terminate()