This commit is contained in:
Waylon Walker 2025-11-23 11:30:10 -06:00
parent cedb02e77e
commit b9573deb75
5 changed files with 198 additions and 0 deletions

93
game.py Normal file
View file

@ -0,0 +1,93 @@
import sys
import pygame
from map import generate_map
pygame.init()
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
clock = pygame.time.Clock()
player_skin = pygame.image.load("player.png")
# load the player image
player_image = pygame.image.load("player.png").convert_alpha()
# set the size of the hitbox
hitbox_width = 16
hitbox_height = 32
# create a surface to draw the hitbox on
hitbox_surface = pygame.Surface((hitbox_width, hitbox_height), pygame.SRCALPHA)
# draw the hitbox outline
outline_color = (255, 0, 0) # red outline color
outline_width = 5 # outline width in pixels
pygame.draw.rect(
hitbox_surface, outline_color, hitbox_surface.get_rect(), outline_width
)
# scale the player image to the size of the hitbox
player_skin = pygame.transform.scale(player_image, (hitbox_width, hitbox_height))
player_x = 0
player_y = 0
player_speed = 5
player_direction = "right"
map_data = generate_map(screen_width * 5, screen_height)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_x -= player_speed
if keys[pygame.K_RIGHT]:
player_x += player_speed
if keys[pygame.K_DOWN]:
# Handle crouching
...
if keys[pygame.K_SPACE]:
# Handle jumping
...
if keys[pygame.K_LSHIFT]:
# Handle running
...
# Handle aiming and firing the grapple hook using Pygame's mouse functions
screen.fill((255, 255, 255))
# Draw the map using the map_data generated with perlin noise
tile_size = 16
for y, row in enumerate(map_data):
for x, noise_value in enumerate(row):
if noise_value > 0.3:
pygame.draw.rect(
screen,
(0, 0, 0),
(x * tile_size, y * tile_size, tile_size, tile_size),
)
# Draw the player's skin and hitbox on the screen
screen.blit(player_skin, (player_x, player_y))
# pygame.draw.rect(
# screen, (255, 0, 0, 128), (player_x, player_y, hitbox_width, hitbox_height)
# )
# blit the hitbox surface onto the player surface
player_surface = pygame.Surface((hitbox_width, hitbox_height), pygame.SRCALPHA)
player_surface.blit(hitbox_surface, (0, 0))
pygame.display.update()
clock.tick(60)

24
map.py Normal file
View file

@ -0,0 +1,24 @@
import noise
def generate_map(width, height):
scale = 20.0
octaves = 3
persistence = 0.5
lacunarity = 2.0
map_data = []
for i in range(width):
column = []
for j in range(height):
noise_value = 0
frequency = 1.0
amplitude = 1.0
for k in range(octaves):
noise_value += amplitude * noise.snoise2(
i / scale * frequency, j / scale * frequency
)
frequency *= lacunarity
amplitude *= persistence
column.append(noise_value)
map_data.append(column)
return map_data

View file

@ -26,6 +26,7 @@ classifiers = [
dependencies = [
"debugpy",
"pygame",
"pyopengl",
"typer",
"rich",
"pydantic",

28
requirements.txt Normal file
View file

@ -0,0 +1,28 @@
#
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# pip-compile pyproject.toml
#
click==8.1.3
# via typer
debugpy==1.6.6
# via cave-survival (pyproject.toml)
markdown-it-py==2.2.0
# via rich
mdurl==0.1.2
# via markdown-it-py
noise==1.2.2
# via cave-survival (pyproject.toml)
pydantic==1.10.6
# via cave-survival (pyproject.toml)
pygame==2.3.0
# via cave-survival (pyproject.toml)
pygments==2.14.0
# via rich
rich==13.3.2
# via cave-survival (pyproject.toml)
typer==0.7.0
# via cave-survival (pyproject.toml)
typing-extensions==4.5.0
# via pydantic

52
voxels.py Normal file
View file

@ -0,0 +1,52 @@
import pygame
from pygame.locals import *
from OpenGL.GL import *
from OpenGL.GLU import *
# Set up the dimensions of the window
window_width, window_height = 800, 600
# Initialize Pygame
pygame.init()
pygame.display.set_mode((window_width, window_height), DOUBLEBUF | OPENGL)
# Set up the perspective view
gluPerspective(45, (window_width / window_height), 0.1, 50.0)
# Move the camera backward to view the scene
glTranslatef(0.0, 0.0, -5)
# Main game loop
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
# Keyboard input
keys = pygame.key.get_pressed()
if keys[pygame.K_s]:
glRotatef(1, 0, 1, 0)
if keys[pygame.K_d]:
glRotatef(-1, 0, 1, 0)
if keys[pygame.K_w]:
glRotatef(1, 1, 0, 0)
if keys[pygame.K_d]:
glRotatef(-1, 1, 0, 0)
# Clear the screen and draw the cubes
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
# Draw your 3D voxel grid here
glBegin(GL_QUADS)
# Example: Draw a simple 1x1x1 cube at (0, 0, 0)
glColor3f(1, 0, 0)
glVertex3f(-0.5, -0.5, -0.5)
glVertex3f(0.5, -0.5, -0.5)
glVertex3f(0.5, 0.5, -0.5)
glVertex3f(-0.5, 0.5, -0.5)
glEnd()
# Update the display
pygame.display.flip()
pygame.time.wait(10)