fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5.  
  6. // モンスター構造体の定義
  7. typedef struct {
  8. char name[20];
  9. int hp;
  10. int attack;
  11. int defense;
  12. } Monster;
  13.  
  14. // ランダムな名前を生成する関数
  15. void generateRandomName(char *name) {
  16. const char *names[] = {"Goblin", "Dragon", "Troll", "Ogre", "Elf"};
  17. int index = rand() % 5; // 0から4のランダムなインデックス
  18. strcpy(name, names[index]);
  19. }
  20.  
  21. // モンスターを生成する関数
  22. Monster *creMonster() {
  23. Monster *newMonster = (Monster *)malloc(sizeof(Monster));
  24. if (newMonster == NULL) {
  25. printf("メモリの確保に失敗しました\n");
  26. exit(1);
  27. }
  28. generateRandomName(newMonster->name);
  29. newMonster->hp = rand() % 100 + 50; // HPは50~149の範囲
  30. newMonster->attack = rand() % 50 + 10; // 攻撃力は10~59の範囲
  31. newMonster->defense = rand() % 50 + 10; // 防御力は10~59の範囲
  32. return newMonster;
  33. }
  34.  
  35. int main() {
  36. int n;
  37. srand(time(NULL)); // ランダムシードの初期化
  38.  
  39. // モンスターの数を入力
  40. printf("生成するモンスターの数を入力してください: ");
  41. scanf("%d", &n);
  42.  
  43. // 動的にモンスター配列を確保
  44. Monster **monsters = (Monster **)malloc(n * sizeof(Monster *));
  45. if (monsters == NULL) {
  46. printf("メモリの確保に失敗しました\n");
  47. return 1;
  48. }
  49.  
  50. // モンスターを生成して配列に格納
  51. for (int i = 0; i < n; i++) {
  52. monsters[i] = creMonster();
  53. }
  54.  
  55. // モンスターの情報を出力
  56. printf("\n生成されたモンスター:\n");
  57. for (int i = 0; i < n; i++) {
  58. printf("モンスター%d: %s (HP: %d, 攻撃力: %d, 防御力: %d)\n",
  59. i + 1, monsters[i]->name, monsters[i]->hp, monsters[i]->attack, monsters[i]->defense);
  60. }
  61.  
  62. // メモリの解放
  63. for (int i = 0; i < n; i++) {
  64. free(monsters[i]);
  65. }
  66. free(monsters);
  67.  
  68. return 0;
  69. }
  70.  
Success #stdin #stdout 0s 5288KB
stdin
3
stdout
生成するモンスターの数を入力してください: 
生成されたモンスター:
モンスター1: Ogre (HP: 113, 攻撃力: 47, 防御力: 27)
モンスター2: Ogre (HP: 149, 攻撃力: 51, 防御力: 24)
モンスター3: Troll (HP: 59, 攻撃力: 56, 防御力: 36)