annotate weather.c @ 9:ac67f688ed2e

switched from gamename to database for identifing we have one db per game now
author meillo@marmaro.de
date Wed, 23 Jul 2008 11:39:15 +0200
parents 9bd0a2100694
children 176ee28e7464
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
1 #include <stdio.h>
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
2 #include <stdlib.h>
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
3 #include <mysql.h>
8
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
4 #include <time.h>
3
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
5
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
6 #include "db.h"
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
7 #include "game.h"
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
8
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
9
8
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
10 enum {
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
11 Nlast = 2,
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
12 };
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
13
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
14 enum { Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec };
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
15
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
16 struct weather {
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
17 float temp;
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
18 float sun;
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
19 float rain;
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
20 float wind;
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
21 float hum;
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
22 };
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
23
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
24 float mean_temp[12] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0};
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
25 float mean_sun[12] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0};
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
26 float mean_rain[12] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0};
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
27 float mean_wind[12] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0};
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
28 float mean_hum[12] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0};
3
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
29
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
30
8
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
31 float rand_limit(float limit) {
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
32 /* generates random number between -limit and +limit */
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
33 int r;
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
34
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
35 r = rand() / ( ((float) RAND_MAX + 1) / (2*limit) );
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
36 return r - limit;
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
37 }
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
38
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
39
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
40
3
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
41
8
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
42 void getlastweather(struct weather lastw[], int nlast) {
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
43 char query[512];
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
44 int i;
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
45
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
46 sprintf(query,
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
47 " select temp, sun, rain, wind, hum from weather "
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
48 " where game_id = '%d' "
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
49 " order by tick desc "
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
50 " limit %d "
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
51 , gameid, nlast);
3
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
52 db_query(query);
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
53 result = mysql_store_result(conn);
8
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
54 for (i = 0; i < nlast && (row = mysql_fetch_row(result)); i++) {
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
55 lastw[i].temp = atof(row[0]);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
56 lastw[i].sun = atof(row[1]);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
57 lastw[i].rain = atof(row[2]);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
58 lastw[i].wind = atof(row[3]);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
59 lastw[i].hum = atof(row[4]);
3
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
60 }
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
61 mysql_free_result(result);
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
62
8
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
63 }
3
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
64
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
65
8
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
66 void genweather(struct weather* w, struct weather lastw[], int nlast, int month) {
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
67 w->temp = 0.2 * mean_temp[month] + 0.4 * lastw[0].temp + 0.2 * lastw[1].temp + 0.08 * rand_limit(10); // + 0.02 * rand_limit(100);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
68 w->sun = 0.2 * mean_sun[month] + 0.4 * lastw[0].sun + 0.2 * lastw[1].sun + 0.08 * rand_limit(10); // + 0.02 * rand_limit(100);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
69 w->rain = 0.2 * mean_rain[month] + 0.4 * lastw[0].rain + 0.2 * lastw[1].rain + 0.08 * rand_limit(10); // + 0.02 * rand_limit(100);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
70 w->wind = 0.2 * mean_wind[month] + 0.4 * lastw[0].wind + 0.2 * lastw[1].wind + 0.08 * rand_limit(10); // + 0.02 * rand_limit(100);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
71 w->hum = 0.2 * mean_hum[month] + 0.4 * lastw[0].hum + 0.2 * lastw[1].hum + 0.08 * rand_limit(10); // + 0.02 * rand_limit(100);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
72 }
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
73
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
74
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
75 int setweather(struct weather* w) {
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
76 char query[512];
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
77 sprintf(query,
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
78 " insert into weather "
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
79 " (tick, game_id, temp, sun, rain, wind, hum) "
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
80 " values ('%d', '%d', '%f', '%f', '%f', '%f', '%f') "
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
81 , gametime, gameid, w->temp, w->sun, w->rain, w->wind, w->hum);
3
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
82 db_query(query);
8
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
83 puts(query);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
84 return mysql_affected_rows(conn);
3
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
85 }
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
86
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
87
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
88 int main(int argc, char* argv[]) {
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
89 printf(" --> weather\n");
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
90
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
91 /* init */
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
92 if (argc != 2) {
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
93 printf("usage: %s <game>\n", argv[0]);
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
94 exit(1);
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
95 }
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
96 gamename = argv[1];
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
97
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
98 db_connect();
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
99 check_game();
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
100
8
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
101 srand((unsigned int) time(NULL));
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
102
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
103
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
104 struct weather w;
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
105 struct weather lastn[Nlast];
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
106
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
107 getlastweather(lastn, Nlast);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
108
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
109 genweather(&w, lastn, Nlast, May);
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
110
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
111 if (setweather(&w) > 0) {
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
112 printf("weather successful inserted\n");
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
113 } else {
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
114 printf("E: weather insertion failed\n");
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
115 }
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
116
9bd0a2100694 new weather implementation
meillo@marmaro.de
parents: 3
diff changeset
117 /* set_weather(); */
3
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
118
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
119
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
120 db_close();
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
121
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
122 printf(" --< weather\n");
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
123 return 0;
0c19ad487f02 first weather implementation (static values)
meillo@marmaro.de
parents:
diff changeset
124 }