Experimental browser for the Atmosphere
{ "uri": "at://did:plc:tydxsfc7tumboebjgi5df2ew/li.plonk.paste/3llxweghvhk2p", "cid": "bafyreihsmqu66sd6nkuycgw3oau367a37mp6apzwvph2cvovlwksjmohs4", "value": { "code": "#include <SDL2/SDL.h>\r\n#include <stdbool.h>\r\n#include <math.h>\r\n\r\n#define SCREEN_WIDTH 800\r\n#define SCREEN_HEIGHT 600\r\n#define GRAVITY 0.5\r\n#define JUMP_FORCE -12\r\n#define MOVE_SPEED 5\r\n\r\ntypedef struct {\r\n float x, y;\r\n float dx, dy;\r\n bool on_ground;\r\n} Player;\r\n\r\ntypedef struct {\r\n SDL_EventType type;\r\n SDL_Keycode key;\r\n} EventSignal;\r\n\r\ntypedef struct {\r\n Player player;\r\n bool running;\r\n} GameState;\r\n\r\ntypedef void (*StateTransformer)(GameState*, Uint32);\r\ntypedef void (*EventHander)(GameState*, EventSignal);\r\n\r\n// FRP-style event stream processing\r\nvoid process_events(EventHander handler, GameState* state) {\r\n SDL_Event e;\r\n while (SDL_PollEvent(&e)) {\r\n EventSignal signal = {e.type, e.key.keysym.sym};\r\n handler(state, signal);\r\n }\r\n}\r\n\r\n// FRP-style state transformation\r\nvoid update_state(GameState* state, Uint32 delta_time) {\r\n Player* p = &state->player;\r\n \r\n // Apply gravity\r\n p->dy += GRAVITY;\r\n p->y += p->dy;\r\n \r\n // Ground collision\r\n if (p->y > SCREEN_HEIGHT - 40) {\r\n p->y = SCREEN_HEIGHT - 40;\r\n p->dy = 0;\r\n p->on_ground = true;\r\n }\r\n}\r\n\r\n// Event handler with FRP-style signal processing\r\nvoid handle_input(GameState* state, EventSignal signal) {\r\n Player* p = &state->player;\r\n \r\n switch (signal.type) {\r\n case SDL_QUIT:\r\n state->running = false;\r\n break;\r\n case SDL_KEYDOWN:\r\n switch (signal.key) {\r\n case SDLK_SPACE:\r\n if (p->on_ground) {\r\n p->dy = JUMP_FORCE;\r\n p->on_ground = false;\r\n }\r\n break;\r\n case SDLK_LEFT:\r\n p->dx = -MOVE_SPEED;\r\n break;\r\n case SDLK_RIGHT:\r\n p->dx = MOVE_SPEED;\r\n break;\r\n }\r\n break;\r\n case SDL_KEYUP:\r\n if (signal.key == SDLK_LEFT || signal.key == SDLK_RIGHT) {\r\n p->dx = 0;\r\n }\r\n break;\r\n }\r\n}\r\n\r\nvoid render(SDL_Renderer* renderer, const GameState* state) {\r\n SDL_SetRenderDrawColor(renderer, 30, 30, 30, 255);\r\n SDL_RenderClear(renderer);\r\n \r\n // Draw ground\r\n SDL_SetRenderDrawColor(renderer, 100, 200, 100, 255);\r\n SDL_Rect ground = {0, SCREEN_HEIGHT - 40, SCREEN_WIDTH, 40};\r\n SDL_RenderFillRect(renderer, &ground);\r\n \r\n // Draw player\r\n SDL_SetRenderDrawColor(renderer, 200, 100, 100, 255);\r\n SDL_Rect player_rect = {state->player.x, state->player.y, 40, 40};\r\n SDL_RenderFillRect(renderer, &player_rect);\r\n \r\n SDL_RenderPresent(renderer);\r\n}\r\n\r\nint main() {\r\n SDL_Init(SDL_INIT_VIDEO);\r\n SDL_Window* window = SDL_CreateWindow(\"Platformer FRP\",\r\n SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,\r\n SCREEN_WIDTH, SCREEN_HEIGHT, 0);\r\n SDL_Renderer* renderer = SDL_CreateRenderer(window, -1, 0);\r\n\r\n GameState state = {\r\n .player = {.x = 100, .y = 100, .dx = 0, .dy = 0, .on_ground = true},\r\n .running = true\r\n };\r\n\r\n Uint32 last_time = SDL_GetTicks();\r\n \r\n while (state.running) {\r\n Uint32 current_time = SDL_GetTicks();\r\n Uint32 delta_time = current_time - last_time;\r\n \r\n process_events(handle_input, &state);\r\n update_state(&state, delta_time);\r\n render(renderer, &state);\r\n \r\n // Simple frame rate limiting\r\n if (delta_time < 16) SDL_Delay(16 - delta_time);\r\n last_time = current_time;\r\n }\r\n\r\n SDL_DestroyRenderer(renderer);\r\n SDL_DestroyWindow(window);\r\n SDL_Quit();\r\n return 0;\r\n}", "lang": "c", "$type": "li.plonk.paste", "title": "deepseek generated frp platformer", "shortUrl": "w3", "createdAt": "2025-04-04T07:46:15.792Z" } }