Geekend/Oszi-Pong
< Geekend
Zur Navigation springen
Zur Suche springen
Beschreibung
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()