Untitled
unknown
plain_text
a year ago
7.6 kB
11
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define MAX_NAME_LENGTH 50
typedef struct CharacterNode {
int health_point;
int attack_point;
char name_char[MAX_NAME_LENGTH];
int def_point;
int mana_point;
int experience;
bool isAlive;
struct CharacterNode* next;
} Node;
Node* head = NULL;
void addCharacter(char name[], int level, int hp, int mp, int ap, int dp, int exp, bool status) {
Node* newNode = (Node*)malloc(sizeof(Node));
strcpy(newNode->name_char, name);
newNode->health_point = hp;
newNode->mana_point = mp;
newNode->attack_point = ap;
newNode->def_point = dp;
newNode->experience = exp;
newNode->isAlive = status;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
} else {
Node* current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = newNode;
}
}
Node* searchCharacter(char name[]) {
Node* current = head;
while (current != NULL) {
if (strcmp(current->name_char, name) == 0) {
return current;
}
current = current->next;
}
return NULL;
}
void deleteCharacter(char name[]) {
Node* current = head;
Node* prev = NULL;
if (current != NULL && strcmp(current->name_char, name) == 0) {
head = current->next;
free(current);
return;
}
while (current != NULL && strcmp(current->name_char, name) != 0) {
prev = current;
current = current->next;
}
if (current == NULL) {
return;
}
prev->next = current->next;
free(current);
}
void sortCharacterbyHP() {
int swapped, i;
Node* ptr1;
Node* lptr = NULL;
if (head == NULL) {
return;
}
do {
swapped = 0;
ptr1 = head;
while (ptr1->next != lptr) {
if (ptr1->health_point < ptr1->next->health_point) {
// Menukar data dalam node
int temp_hp = ptr1->health_point;
ptr1->health_point = ptr1->next->health_point;
ptr1->next->health_point = temp_hp;
int temp_ap = ptr1->attack_point;
ptr1->attack_point = ptr1->next->attack_point;
ptr1->next->attack_point = temp_ap;
int temp_dp = ptr1->def_point;
ptr1->def_point = ptr1->next->def_point;
ptr1->next->def_point = temp_dp;
int temp_mp = ptr1->mana_point;
ptr1->mana_point = ptr1->next->mana_point;
ptr1->next->mana_point = temp_mp;
int temp_exp = ptr1->experience;
ptr1->experience = ptr1->next->experience;
ptr1->next->experience = temp_exp;
bool temp_status = ptr1->isAlive;
ptr1->isAlive = ptr1->next->isAlive;
ptr1->next->isAlive = temp_status;
char temp_name[MAX_NAME_LENGTH];
strcpy(temp_name, ptr1->name_char);
strcpy(ptr1->name_char, ptr1->next->name_char);
strcpy(ptr1->next->name_char, temp_name);
swapped = 1;
}
ptr1 = ptr1->next;
}
lptr = ptr1;
} while (swapped);
}
void updateCharacterStatus(char name[], bool newStatus) {
Node* current = searchCharacter(name);
if (current != NULL) {
current->isAlive = newStatus;
}
}
void displayCharacters() {
Node* current = head;
while (current != NULL) {
printf("Nama: %s\n", current->name_char);
printf("Health Point: %d\n", current->health_point);
printf("Mana Point: %d\n", current->mana_point);
printf("Attack Point: %d\n", current->attack_point);
printf("Defense Point: %d\n", current->def_point);
printf("Experience: %d\n", current->experience);
printf("Status: %s\n", current->isAlive ? "Hidup" : "Mati");
printf("-------------------\n");
current = current->next;
}
}
void displayMenu() {
printf("Menu:\n");
printf("1. Tambah Karakter\n");
printf("2. Cari Karakter\n");
printf("3. Hapus Karakter\n");
printf("4. Urutkan Karakter berdasarkan Health Point\n");
printf("5. Perbarui Status Karakter\n");
printf("6. Tampilkan Semua Karakter\n");
printf("7. Keluar\n");
printf("Pilihan: ");
}
int main() {
int choice;
char name[MAX_NAME_LENGTH];
int level, hp, mp, ap, dp, exp;
bool status;
do {
displayMenu();
scanf("%d", &choice);
switch (choice) {
case 1:
printf("Masukkan nama karakter: ");
scanf("%s", name);
printf("Masukkan level: ");
scanf("%d", &level);
printf("Masukkan health point: ");
scanf("%d", &hp);
printf("Masukkan mana point: ");
scanf("%d", &mp);
printf("Masukkan attack point: ");
scanf("%d", &ap);
printf("Masukkan defense point: ");
scanf("%d", &dp);
printf("Masukkan experience: ");
scanf("%d", &exp);
printf("Masukkan status (0 untuk mati, 1 untuk hidup): ");
scanf("%d", &status);
addCharacter(name, level, hp, mp, ap, dp, exp, status);
break;
case 2:
printf("Masukkan nama karakter: ");
scanf("%s", name);
Node* found = searchCharacter(name);
if (found != NULL) {
printf("Karakter ditemukan:\n");
printf("Nama: %s\n", found->name_char);
printf("Health Point: %d\n", found->health_point);
printf("Mana Point: %d\n", found->mana_point);
printf("Attack Point: %d\n", found->attack_point);
printf("Defense Point: %d\n", found->def_point);
printf("Experience: %d\n", found->experience);
printf("Status: %s\n", found->isAlive ? "Hidup" : "Mati");
} else {
printf("Karakter tidak ditemukan.\n");
}
break;
case 3:
printf("Masukkan nama karakter: ");
scanf("%s", name);
deleteCharacter(name);
break;
case 4:
sortCharacterbyHP();
printf("Karakter telah diurutkan berdasarkan Health Point.\n");
break;
case 5:
printf("Masukkan nama karakter: ");
scanf("%s", name);
printf("Masukkan status baru (0 untuk mati, 1 untuk hidup): ");
scanf("%d", &status);
updateCharacterStatus(name, status);
break;
case 6:
displayCharacters();
break;
case 7:
printf("Terima kasih telah menggunakan program ini.\n");
break;
default:
printf("Pilihan tidak valid. Silakan coba lagi.\n");
break;
}
} while (choice != 7);
return 0;
}Editor is loading...
Leave a Comment