#include #include #include struct player { int playerNumber; int beaten[64]; int stage; struct player *next; struct player *prev; }; int powerof2(int i) { int j = 0; while (i != 1) { if (i % 2 != 0) { printf("Invalid"); exit(0); } i /= 2; j++; } return j; } void stage(int roundd, struct player *head) { struct player *player1 = NULL; struct player *player2 = NULL; struct player *cur = head; printf("Stage %d:\n", roundd); while (cur != NULL) { if (cur->stage >= roundd) { if (player1 == NULL) { player1 = cur; } else if (player2 == NULL) { player2 = cur; printf("%dv%d ", player1->playerNumber, player2->playerNumber); player1 = NULL; player2 = NULL; } } cur = cur->next; } printf("\n"); } void results(struct player *head, int N) { for (int j = 0; j < N; j++) { struct player *player1 = NULL; struct player *player2 = NULL; struct player *cur = head; printf("***************\n"); while (cur != NULL) { if (cur->stage >= j) { if (player1 == NULL) { player1 = cur; } else if (player2 == NULL) { player2 = cur; printf("%dv%d ", player1->playerNumber, player2->playerNumber); player1 = NULL; player2 = NULL; } } cur = cur->next; } printf("\n"); } } struct player *get_suitable_player(struct player *head, int j) { struct player *ret = NULL; while(head != NULL) { if(head->stage >=j) { ret = head; return ret; } head = head->next; } return ret; } int main() { printf("Welcome to the Football Tournament.\n\nHow namy players are playing: (Must be a factor of 2) \n"); int temp; scanf("%d", &temp); int N = powerof2(temp); printf("Players playing: 2^%d\n\n" ,N); struct player *head = NULL; struct player *cur = NULL; for (int i = 0; i playerNumber = i + 1; if (head == NULL) { head = player; cur = player; } else { cur->next = player; player->prev = cur; cur = player; } } cur = head; for (int i = 0; i < temp; i++) { while (cur != NULL) { printf("***************\n%dv%d\n", cur->playerNumber , cur->next->playerNumber); int winner; scanf("%d", &winner); if (winner == cur->playerNumber) { cur->stage++; cur->beaten[i] = cur->next->playerNumber; } else { cur->next->stage++; cur->next->beaten[i] = cur->playerNumber; } cur = cur->next->next; } } struct player *new = NULL; for (int j = 1; j <= N; j++) { struct player *first = get_suitable_player(new, j); struct player *second = get_suitable_player(first->next, j); printf("***************\n%dv%d\n", first->playerNumber, second->playerNumber); int winner; scanf("%d", &winner); if (winner == first->playerNumber) { first->stage++; // add beaten for both cases. } else { second->stage++; } new = second->next; } int choice; do { printf("Welcome to the Football Tournament.\nPick an option:\n\n"); printf("1)Play\n2)View Stages\n3)View Player\n4)Quit\n\n"); scanf("%d", &choice); switch (choice) { case 1: results(head, N); break; case 2: int lol; printf("Stage Number: "); scanf("%d", &lol); cur = head; stage(lol, head); printf("\n"); break; case 3: // make into a function when stages function works. int player; printf("Player Number: "); scanf("%d", &player); struct player *cur = head; //add cur != NULL maybe while (cur->playerNumber != player) { cur = cur->next; } printf("Players beaten by player %d are: ", player); for (int i = 0; i stage; i++) { printf("%d ", cur->beaten[i]); } break; case 4: printf("End."); break; default: printf("Invalid"); } } while (choice != 4); return 0; }