py-vpet/experiments/window_opengl.py
2024-12-11 18:31:41 +01:00

91 lines
2.2 KiB
Python

import pygame
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
import sys
import os
# Pet Attribute
class VirtualPet:
def __init__(self):
self.happiness = 50
self.hunger = 50
def feed(self):
self.hunger -= 10
self.happiness += 5
def pet(self):
self.happiness += 10
def update(self):
self.hunger += 0.1
self.happiness -= 0.05
# OpenGL-Setup
def init_opengl():
glEnable(GL_BLEND) # Aktiviert Transparenz
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glEnable(GL_DEPTH_TEST)
glClearColor(0.2, 0.6, 0.8, 0.0) # Himmelblau mit Transparenz (Alpha = 0.5)
gluPerspective(45, (800 / 600), 0.1, 50.0)
# Pet zeichnen (Würfel als Platzhalter)
def draw_pet():
glPushMatrix()
glColor4f(0, 0, 0, 0.2)
glTranslatef(0.0, 0.0, -5)
glRotatef(pygame.time.get_ticks() * 0.05, 0, 1, 0) # Rotation
glutWireCube(1) # Zeichnet den Würfel
glPopMatrix()
# Hauptprogramm
def main():
# Setze Umgebungsvariablen für transparentes Fenster
os.environ['SDL_VIDEODRIVER'] = 'x11'
os.environ['SDL_VIDEO_WINDOW_POS'] = '0,0'
os.environ['SDL_VIDEO_CENTERED'] = '1'
pygame.init()
display = pygame.display.set_mode((48, 48), pygame.DOUBLEBUF | pygame.OPENGL | pygame.NOFRAME | pygame.SRCALPHA)
pygame.display.set_caption("Transparent Virtual Pet")
clock = pygame.time.Clock()
display.set
pet = VirtualPet()
glutInit() # Initialisiert GLUT
init_opengl()
# Setze Transparenz für das Fenster
# pygame.display.set_mode((800, 600), pygame.OPENGL | pygame.DOUBLEBUF | pygame.NOFRAME | pygame.SRCALPHA)
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_f:
pet.feed()
elif event.key == pygame.K_p:
pet.pet()
pet.update()
# OpenGL Rendering
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
draw_pet()
pygame.display.flip()
clock.tick(60)
pygame.quit()
sys.exit()
if __name__ == "__main__":
main()