working on making game lobbies and joining them

This commit is contained in:
2026-01-31 18:42:43 -06:00
parent 89c9a7681b
commit 47987ca439
14 changed files with 227 additions and 280 deletions

208
host.c
View File

@@ -17,27 +17,148 @@
int over_object;
char player_names[MAX_PLAYERS][MAX_NAMESZ];
char last_sent_name[MAX_NAMESZ];
char temp_name[MAX_NAMESZ];
char lobby_name[MAX_NAMESZ];
char lobby_name_perm[MAX_NAMESZ];
int num_players = 1;
int lobby_has_name = 0;
SDL_Rect set_name_rect, name_rect, player_name_rect;
SDL_Rect player_rects[MAX_PLAYERS];
SDL_Rect player_name_rects[MAX_PLAYERS];
SDL_Rect start_rect;
TTF_Font* font;
SDL_Color white = {255, 255, 255, 0};
SDL_Surface *set_name_surf;
SDL_Surface *start_surf;
SDL_Surface *lobby_name_surf;
SDL_Texture *set_name_tex;
SDL_Texture *lobby_name_tex;
SDL_Texture *start_tex;
SDL_Surface *player_name_surfs[MAX_PLAYERS];
SDL_Surface *player_tempname_surf;
SDL_Texture *player_name_texs[MAX_PLAYERS];
SDL_Texture *player_tempname_tex;
char *get_this_name(int i)
{
if(i >= 0 && i < MAX_PLAYERS){ return player_names[i]; }
if(!lobby_has_name) {
if(i == -1){return lobby_name; }
if(i == 0) { return lobby_name_perm; }
}
else{
if(i == -1) { return temp_name; }
if(i >= 0 && i < MAX_PLAYERS){
return player_names[i];
}
}
return NULL;
}
void render_lobby()
{
int i;
player_tempname_surf= TTF_RenderText_Solid(font, temp_name, white);
player_tempname_tex = SDL_CreateTextureFromSurface(renderer, player_tempname_surf);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
//set name button
SDL_SetRenderDrawColor(renderer, 64, 64, 64,255);
SDL_RenderFillRect(renderer, &set_name_rect);
SDL_RenderCopy(renderer, set_name_tex, NULL, &(set_name_rect));
//player fields
for(i = 0; i < MAX_PLAYERS; i++)
{
player_name_rects[i].w = (player_rects[0].w / MAX_NAMESZ) * strlen(player_names[i]);
player_name_surfs[i] = TTF_RenderText_Solid(font, player_names[i], white);
player_name_texs[i] = SDL_CreateTextureFromSurface(renderer, player_name_surfs[i]);
SDL_RenderFillRect(renderer, &(player_rects[i]));
SDL_RenderCopy(renderer, player_name_texs[i], NULL, &(player_name_rects[i]));
}
//name field
player_name_rect.w = (name_rect.w / MAX_NAMESZ) * strlen(temp_name);
SDL_RenderFillRect(renderer, &name_rect);
SDL_RenderCopy(renderer, player_tempname_tex, NULL, &player_name_rect);
//start game button
SDL_RenderFillRect(renderer, &start_rect);
SDL_RenderCopy(renderer, start_tex, NULL, &(start_rect));
SDL_RenderPresent(renderer);
player_tempname_surf= TTF_RenderText_Solid(font, temp_name, white);
player_tempname_tex = SDL_CreateTextureFromSurface(renderer, player_tempname_surf);
SDL_FreeSurface(player_tempname_surf);
SDL_DestroyTexture(player_tempname_tex);
for(i = 0; i < MAX_PLAYERS; i++)
{
SDL_FreeSurface(player_name_surfs[i]);
SDL_DestroyTexture(player_name_texs[i]);
}
}
void render_lobby_name()
{
lobby_name_surf = TTF_RenderText_Solid(font, lobby_name, white);
lobby_name_tex = SDL_CreateTextureFromSurface(renderer, lobby_name_surf);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
//set lobby name button
SDL_SetRenderDrawColor(renderer, 64, 64, 64,255);
SDL_RenderFillRect(renderer, &set_name_rect);
SDL_RenderCopy(renderer, set_name_tex, NULL, &(set_name_rect));
//name field
player_name_rect.w = (name_rect.w / MAX_NAMESZ) * strlen(lobby_name);
SDL_RenderFillRect(renderer, &name_rect);
SDL_RenderCopy(renderer, lobby_name_tex, NULL, &player_name_rect);
//start game button
SDL_RenderFillRect(renderer, &start_rect);
SDL_RenderCopy(renderer, start_tex, NULL, &(start_rect));
SDL_RenderPresent(renderer);
}
void render_main()
{
SDL_GetMouseState(&(mouse_pos.x), &(mouse_pos.y));
if(SDL_PointInRect(&mouse_pos, &start_rect)){
over_object = START_GAME_BUTTON;
}
else if(SDL_PointInRect(&mouse_pos, &set_name_rect)){
over_object = SET_NAME_BUTTON;
}
handle_event(&event);
if(lobby_has_name){ render_lobby(); }
else{ render_lobby_name(); }
}
void host_game(){
int i;
PRINT_M(HOST state)
SDL_Point mouse_pos;
SDL_Rect set_name_rect, name_rect, player_name_rect;
SDL_Rect player_rects[MAX_PLAYERS];
SDL_Rect player_name_rects[MAX_PLAYERS];
SDL_Rect start_rect;
over_object = NO_OBJECT;
strcpy(player_names[0], "player_1");
@@ -45,14 +166,13 @@ void host_game(){
strcpy(player_names[2], "no_player_3");
strcpy(player_names[3], "no_player_4");
TTF_Font* font = TTF_OpenFont("assets/font.ttf", 24);
SDL_Color white = {255, 255, 255, 0};
SDL_Surface *set_name_surf = TTF_RenderText_Solid(font, "set name", white);
SDL_Surface *start_surf = TTF_RenderText_Solid(font, "start game", white);
font = TTF_OpenFont("assets/font.ttf", 24);
set_name_surf = TTF_RenderText_Solid(font, "set name", white);
start_surf = TTF_RenderText_Solid(font, "start game", white);
lobby_name_surf = TTF_RenderText_Solid(font, lobby_name, white);
SDL_Texture *set_name_tex = SDL_CreateTextureFromSurface(renderer, set_name_surf);
SDL_Texture *start_tex = SDL_CreateTextureFromSurface(renderer, start_surf);
set_name_tex = SDL_CreateTextureFromSurface(renderer, set_name_surf);
start_tex = SDL_CreateTextureFromSurface(renderer, start_surf);
set_name_rect.w = DEF_WINDOW_WIDTH >> 3;
@@ -99,61 +219,11 @@ void host_game(){
SDL_StartTextInput();
SDL_SetTextInputRect(&name_rect);
SDL_Surface *player_name_surfs[MAX_PLAYERS];
SDL_Texture *player_name_texs[MAX_PLAYERS];
while(running)
{
SDL_GetMouseState(&(mouse_pos.x), &(mouse_pos.y));
if(SDL_PointInRect(&mouse_pos, &start_rect))
{
over_object = START_GAME_BUTTON;
}
else if(SDL_PointInRect(&mouse_pos, &set_name_rect))
{
over_object = SET_NAME_BUTTON;
}
handle_event(&event);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
//set name button
SDL_SetRenderDrawColor(renderer, 64, 64, 64,255);
SDL_RenderFillRect(renderer, &set_name_rect);
SDL_RenderCopy(renderer, set_name_tex, NULL, &(set_name_rect));
//player fields
for(i = 0; i < MAX_PLAYERS; i++)
{
player_name_rects[i].w = (player_rects[0].w / MAX_NAMESZ) * strlen(player_names[i]);
player_name_surfs[i] = TTF_RenderText_Solid(font, player_names[i], white);
player_name_texs[i] = SDL_CreateTextureFromSurface(renderer, player_name_surfs[i]);
SDL_RenderFillRect(renderer, &(player_rects[i]));
SDL_RenderCopy(renderer, player_name_texs[i], NULL, &(player_name_rects[i]));
}
//name field
player_name_rect.w = (name_rect.w / MAX_NAMESZ) * strlen(player_names[0]);
SDL_RenderFillRect(renderer, &name_rect);
SDL_RenderCopy(renderer, player_name_texs[0], NULL, &player_name_rect);
//start game button
SDL_RenderFillRect(renderer, &start_rect);
SDL_RenderCopy(renderer, start_tex, NULL, &(start_rect));
SDL_RenderPresent(renderer);
for(i = 0; i < MAX_PLAYERS; i++)
{
SDL_FreeSurface(player_name_surfs[i]);
SDL_DestroyTexture(player_name_texs[i]);
}
}
render_main();
}
return;
}