Advertisement
Guest User

State AA simulator.

a guest
Jun 12th, 2021
700
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.94 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <math.h>
  3. #include <time.h>
  4. #include <stdio.h>
  5.  
  6. #define MAX_TRIALS 1024
  7.  
  8. typedef struct {
  9.   double aa_level;
  10.   double aa_dmg_tech;
  11.   double aa_radar_tech;
  12.  
  13.   int planes;
  14.   int air_defence;
  15.  
  16.   int planes_killed;
  17.   double total_c;
  18. } stats_t;
  19.  
  20. int simulate_aa(stats_t *stats, double rfactor);
  21.  
  22. int main(const int argc, const char **argv) {
  23.  
  24.   if (argc < 6)
  25.     exit(-1);
  26.  
  27.   srand(time(NULL));
  28.  
  29.   register stats_t *stats = malloc(sizeof(stats_t));
  30.   stats->aa_level      = atof(argv[1]) / 5;
  31.   stats->aa_dmg_tech   = 1 + 0.1 * atoi(argv[2]);
  32.   stats->aa_radar_tech = 1 + 0.2 * atoi(argv[3]);
  33.   stats->total_c = 0.1 * stats->aa_radar_tech * stats->aa_level;
  34.  
  35.   int total_sim_kc = 0;
  36.  
  37.   for (int i = 0; i < MAX_TRIALS; ++i) {
  38.    
  39.     stats->planes        = atoi(argv[4]);
  40.     stats->air_defence   = atoi(argv[5]);
  41.     stats->planes_killed = 0;
  42.  
  43.     int plane_attacks = 0;
  44.     int aa_attacks = 0;
  45.  
  46.     while (plane_attacks < 90 && stats->planes > 0) { // modifiable trial condition.
  47.       printf("Day %d, %d:00 | Total kills: %d.\n", plane_attacks / 3, plane_attacks % 3 * 8, stats->planes_killed);
  48.       ++plane_attacks;
  49.       double rfactor = (double) (rand() % 1001) / 1000;
  50.       if (rfactor < stats->total_c) {
  51.         ++aa_attacks;
  52.         // simulate_aa(stats, rfactor);
  53.         printf("Day %d, %d:00 | Shot down %d planes.\n", plane_attacks / 3, plane_attacks % 3 * 8, simulate_aa(stats, rfactor));
  54.       }
  55.     }
  56.  
  57.     total_sim_kc += stats->planes_killed;
  58.   }
  59.  
  60.   printf("Finished.  Mean kills: %d\n\n", total_sim_kc / MAX_TRIALS);
  61.   free(stats);
  62.   return 0;
  63. }
  64.  
  65. int simulate_aa(stats_t *stats, double rfactor) {
  66.  
  67.   double aa_kills = (0.8 * rfactor * stats->aa_level * stats->planes * stats->aa_dmg_tech)/(stats->air_defence * stats->total_c);
  68.   int kills = aa_kills >= 1 ? round(aa_kills) : 1;
  69.   stats->planes_killed += kills;
  70.   stats->planes -= kills;
  71.   return kills;
  72. }
  73.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement