Browse Source

Add parameter poweruprate

Make the rate powerups spawn a local variable in main(), assigned by
setup_level() and setup_level_bossrush() according to the difficulty
level. Make interactions() accept it as a parameter instead of
calculating it manually.
Matteo Zeccoli Marazzini 4 years ago
parent
commit
225e4de43e
4 changed files with 20 additions and 14 deletions
  1. 4 3
      bossrush.cpp
  2. 9 5
      functions.cpp
  3. 3 3
      functions.hpp
  4. 4 3
      invaders.cpp

+ 4 - 3
bossrush.cpp

@@ -76,6 +76,7 @@ int main(int argc,char** argv)
 	
 	//PARAMETERS/UTILITIES
 	double shootrate;				  	//probability of an enemy shooting a bomb 
+	double poweruprate;					//probability of a powerup being dropped
 	int command;						//keyboard input
 	int score=0;					   	//score: gain +100 when an enemy is destroyed and +50 when a bomb is destroyed
 	int level=1;						//difficulty level
@@ -143,7 +144,7 @@ int main(int argc,char** argv)
 		it->create((i+1)*(C/(3*WALLS_NUM+1))+i*(2*C/(3*WALLS_NUM+1)),2*R/3,(int)min(6,2*C/(3*WALLS_NUM+1)),2,3);
 
 	level = choose_level_bossrush(commands);
-	setup_level_bossrush(level, shootrate, refresh_time);
+	setup_level_bossrush(level, shootrate, poweruprate, refresh_time);
 	
 	player1.set_commands(commands);
 	
@@ -234,7 +235,7 @@ int main(int argc,char** argv)
 				
 		powerups.unique(); 	 //FIXME: THIS ONLY WORKS ON CONSECUTIVE ELEMENTS OF THE LIST!! we should at least sort powerups before calling unique()
 
-		interactions(player1,bullets,bombs,enemies,walls,powerups,rockets,boss1,score);
+		interactions(player1,bullets,bombs,enemies,walls,powerups,rockets,boss1,score,poweruprate);
 		
 		
 		if(boss1.health<=0)
@@ -292,7 +293,7 @@ int main(int argc,char** argv)
 					refresh();
 					if(choice=='n')
 						level = choose_level_bossrush(commands);
-					setup_level_bossrush(level, shootrate, refresh_time);
+					setup_level_bossrush(level, shootrate, poweruprate, refresh_time);
 					reset(player1, enemies, boss1, bullets, bombs, walls, powerups,rockets, level,chflag); // reset box, player, enemy and deletes all bullets and bombs
 					resetbosses(bosses,boss1,player1);
 					num=0;

+ 9 - 5
functions.cpp

@@ -294,7 +294,7 @@ int choose_level(int* commands)
 	return input - '0';
 }
 
-void setup_level(int level, double& shootr, int& refresh_t, boss& boss1, int& enemy_num, int* commands)
+void setup_level(int level, double& shootr, double& poweruprate, int& refresh_t, boss& boss1, int& enemy_num, int* commands)
 {
 	switch(level)        //setting game parameters
 	{
@@ -347,6 +347,7 @@ void setup_level(int level, double& shootr, int& refresh_t, boss& boss1, int& en
 			break;
 		}
 	}
+	poweruprate = (double)AVERAGE_DROP/enemy_num;
 }
 
 void change_commands(int* commands){
@@ -921,7 +922,7 @@ void drop_powerup(int x,int y,b_list& powerups)
 }
 
 
-void interactions(player& player1,b_list& bullets,b_list& bombs,e_list& enemies,w_vec& walls,b_list& powerups,r_list& rockets,boss& boss1,int& score){
+void interactions(player& player1,b_list& bullets,b_list& bombs,e_list& enemies,w_vec& walls,b_list& powerups,r_list& rockets,boss& boss1,int& score, double poweruprate){
 	bool should_continue;
 	
 	b_list::iterator it1=bullets.begin();
@@ -955,7 +956,7 @@ void interactions(player& player1,b_list& bullets,b_list& bombs,e_list& enemies,
 				it1=bullets.erase(it1);
 				should_continue = true;
 				it3->alive=false;
-				if((double)rand()/RAND_MAX<(double)AVERAGE_DROP/ENEMY_NUM)	//a powerup is dropped (AVERAGE_DROP is the mean number of powerups dropped per play in Normal mode)		
+				if((double)rand()/RAND_MAX<poweruprate)	//a powerup is dropped
 					drop_powerup(it3->x,it3->y+1,powerups);
 				score+=100;
 				break;
@@ -1438,7 +1439,7 @@ int choose_level_bossrush(int* commands)
 	return input - '0';
 }
 
-void setup_level_bossrush(int level, double& shootr, int& refresh_t)
+void setup_level_bossrush(int level, double& shootr, double& poweruprate, int& refresh_t)
 {
 	switch(level)        //setting game parameters
 	{
@@ -1446,24 +1447,27 @@ void setup_level_bossrush(int level, double& shootr, int& refresh_t)
 		{
 			shootr = 0.006;
 			refresh_t = (int)(0.09*1E3);
+			poweruprate = 0.066;
 		}
 		case 2:
 		{
 			shootr = 0.009;
 			refresh_t = (int)(0.085*1E3);
+			poweruprate = 0.05;
 		}
 		case 3:
 		{
 			shootr = 0.015;
 			refresh_t = (int)(0.08*1E3);
+			poweruprate = 0.044;
 		}
 		case 4:
 		{
 			shootr = 0.020;
 			refresh_t = (int)(0.07*1E3);
+			poweruprate = 0.01;
 		}
 	}
-	
 }
 
 void resetbosses(boss* Bosses,boss& boss1,player& player1){

+ 3 - 3
functions.hpp

@@ -64,7 +64,7 @@ void print_scores();
 
 int choose_level(int* commands);
 
-void setup_level(int level, double& shootr, int& refresh_t, boss& boss1, int& enemy_num, int* commands);
+void setup_level(int level, double& shootr, double& poweruprate, int& refresh_t, boss& boss1, int& enemy_num, int* commands);
 
 void change_commands(int* commands);
 
@@ -92,7 +92,7 @@ void Defeat(int);
 
 int choose_level_bossrush(int* commands);
 
-void setup_level_bossrush(int level, double& shootr,int& refresh_t);
+void setup_level_bossrush(int level, double& shootr, double& poweruprate, int& refresh_t);
 
 void resetbosses(boss* Bosses,boss& boss1,player& player1);
 
@@ -112,7 +112,7 @@ void activate_combo(boss&,e_list&,b_list&,b_list&,b_list&,r_list&);
 
 void drop_powerup(int x,int y,b_list& powerups);
 
-void interactions(player& player1,b_list& bullets,b_list& bombs,e_list& enemies,w_vec& walls,b_list& powerups,r_list& rockets,boss& boss1,int& score);
+void interactions(player& player1,b_list& bullets,b_list& bombs,e_list& enemies,w_vec& walls,b_list& powerups,r_list& rockets,boss& boss1,int& score, double poweruprate);
 
 void draw(player& player1,b_list& bullets,b_list& bombs,e_list& enemies,w_vec& walls,b_list& powerups,r_list& rockets,boss& boss1);
 

+ 4 - 3
invaders.cpp

@@ -60,6 +60,7 @@ int main(int argc,char** argv)
 	
 	//PARAMETERS/UTILITIES
 	double shootrate;				  	//probability of an enemy shooting a bomb 
+	double poweruprate;					//probability of a powerup being dropped
 	int command;						//keyboard input
 	int score=0;					   	//score: gain +100 when an enemy is destroyed and +50 when a bomb is destroyed
 	int level=1;						//difficulty level
@@ -106,7 +107,7 @@ int main(int argc,char** argv)
 	WALLS_NUM=2;
 	
 	level = choose_level(commands);     	// get desired level
-	setup_level(level, shootrate, refresh_time, boss1, ENEMY_NUM, commands);     	// set game parameters and boss
+	setup_level(level, shootrate, poweruprate, refresh_time, boss1, ENEMY_NUM, commands);     	// set game parameters and boss
 	load_enemies(enemies,ENEMY_NUM);
 	player1.set_commands(commands);
 	erase();
@@ -246,7 +247,7 @@ int main(int argc,char** argv)
 				
 		powerups.unique(); 	 //FIXME: THIS ONLY WORKS ON CONSECUTIVE ELEMENTS OF THE LIST!! we should at least sort powerups before calling unique()
 		
-		interactions(player1,bullets,bombs,enemies,walls,powerups,rockets,boss1,score);
+		interactions(player1,bullets,bombs,enemies,walls,powerups,rockets,boss1,score,poweruprate);
 
 		///////ENDGAME CHECKS               
 		if(boss1.health<1 || gameover(player1,bombs))
@@ -279,7 +280,7 @@ int main(int argc,char** argv)
 					refresh();
 					if(choice=='n')
 						level = choose_level(commands);     	// get desired level
-					setup_level(level, shootrate, refresh_time, boss1, ENEMY_NUM, commands);     	// set game parameters and boss
+					setup_level(level, shootrate, poweruprate, refresh_time, boss1, ENEMY_NUM, commands);     	// set game parameters and boss
 					load_enemies(enemies,ENEMY_NUM);
 					reset(player1, enemies, boss1, bullets, bombs, walls, powerups,rockets, level,chflag); // reset box, player, enemy and deletes all bullets and bombs
 					erase();