#include <stdlib.h> #include <string.h> #include <stdio.h> struct player { struct player *next; char name[20]; int current_hp; int max_hp; }; struct player *first_player = NULL; struct player *create_player( char *name, int chp, int mhp ) { struct player *plyr; plyr = (struct player *) malloc( sizeof(struct player) ); if ( plyr == NULL ) { printf( "Memory Error!\n\r" ); exit(1); } strncpy( plyr->name, name, 19 ); plyr->name[19] = '\0'; plyr->next = NULL; plyr->current_hp = chp; plyr->max_hp = mhp; return plyr; } void add_player( struct player *plyr ) { struct player *insert; if ( first_player == NULL ) first_player = plyr; else { insert = first_player; while ( insert->next ) insert = insert->next; insert->next = plyr; } } struct player *find_player( char *name ) { struct player *plyr; for ( plyr = first_player; plyr != NULL; plyr = plyr->next ) if ( !strcmp( plyr->name, name ) ) return plyr; return NULL; } void free_player( struct player *plyr ) { struct player *find; struct player *delete; if ( first_player == plyr ) { delete = first_player; first_player = delete->next; free(delete); return; } for ( find = first_player; find && find->next; find = find->next ) { if ( find->next == plyr ) { delete = find->next; find->next = delete->next; free(delete); return; } } } int main() { int i; char buf[20]; struct player *plyr; struct player *plyrs[5]; for ( i = 0; i < 5; i++ ) { sprintf( buf, "MudByter%d", i ); plyrs[i] = create_player( buf, i*2, i*5 ); add_player( plyrs[i] ); } for ( i = 0; i < 5; i++ ) { sprintf( buf, "MudByter%d", 4-i ); plyr = find_player( buf ); if ( !plyr ) continue; printf( "%s has %d/%d hp.\n\r", plyr->name, plyr->current_hp, plyr->max_hp ); } for ( i = 0; i < 5; i++ ) free_player( plyrs[i] ); return 0; }