/**
 * \brief Set power's pictures.
 * \param index The  index of the player.
 * \param p Status of the player.
 */
void ptb::frame_play_story::update_powers
(unsigned int index, player_status& p)
{
  update_power
    (game_variables::get_persistent_air_power(index),
     "gfx/ui/air-power.png", p.air_power);
  update_power
    (game_variables::get_persistent_fire_power(index),
     "gfx/ui/fire-power.png", p.fire_power);
  update_power
    (game_variables::get_persistent_water_power(index),
     "gfx/ui/water-power.png", p.water_power);
} // frame_play_story::update_powers()
/**
 * \brief Update status of all players.
 */
void ptb::frame_play_story::update_all_players_status()
{
  update_player_status(1, m_first_player_status);

  if ( game_variables::get_players_count() == 2 )
    update_player_status(2, m_second_player_status);
  else
    {
      m_second_player_status.score_text->set_text( gettext("No player") );
      m_second_player_status.lives_text->set_text( "0" );
      m_second_player_status.stone_text->set_text( "0" );
      m_second_player_status.energy->set_length(100);
      m_second_player_status.energy->set_level(0);
      m_second_player_status.energy->set_max_level(100);

      update_power
        (false, "gfx/ui/air-power.png", m_second_player_status.air_power);
      update_power
        (false, "gfx/ui/fire-power.png", m_second_player_status.fire_power);
      update_power
        (false, "gfx/ui/water-power.png", m_second_player_status.water_power);
    }
} // frame_play_story::update_all_players_status()
Beispiel #3
0
void mipb_frac::load()
{
	int min_tone,min_user;
	FILE *lead_lag_fp;
	FILE *p_fp;
	lead_lag_fp=fopen("../data/mipb_lag_lead.txt","w");
	p_fp=fopen("../data/mipb_p_against_b.txt","w");
	if (p_fp == NULL || lead_lag_fp == NULL) {
		printf("Boom!\n");
		exit(2);
	}	
	init_cost_matrix();
	while(1) {
		min_cost(&min_tone,&min_user);
		//printf("Min tone/user was %d/%d\n",min_tone,min_user);
		//getchar();
		//if (min_tone == 115 && min_user == 1)
		//	getchar();
		if (_all_tones_full) {
			printf("All tones full\n");
			if (_graph_loading) {
				write_current_stats(min_tone,min_user);
			}	
			//for (int tone=0;tone<DMTCHANNELS;tone++) {
			//	print_vector(_F[tone],"F");
			//}
			//for (int tone=0;tone<DMTCHANNELS;tone++) {
			//	print_vector(_cost[tone],"cost");
			//}
			//print_vector(_wp,"wp");
			break;
		}
		_b[min_tone][min_user]+=_bit_inc;;        // add bit to min cos tone
                _b_total[min_user]+=_bit_inc;
                _total_bits+=_bit_inc;
		update_power(min_tone,min_user);
		if (_b[min_tone][min_user] >= MAXBITSPERTONE) {
			_F[min_tone][min_user] = 1;
		}
		//print_vector(_p[min_tone],"p on tone");
                //getchar();
		//print_vector(_b_total,"b_total");
		//printf("total bits = %d\n",_total_bits);
		//print_vector(_p_used,"p_used");
		if (!_greedy)
			update_wp();
		//print_vector(_wp,"wp");
                //getchar();
		fprintf(lead_lag_fp,"%lf\t",_total_bits);
		fprintf(p_fp,"%lf\t",_total_bits);
		for (int user=0;user<lines;user++) {
			fprintf(lead_lag_fp,"%6.4g\t",_p_used[user]-_p_ave);
			fprintf(p_fp,"%6.4g\t",_p_used[user]);
		}
		fprintf(lead_lag_fp,"\n");
		fprintf(p_fp,"\n");
		if ((int)_total_bits % 5 == 0) {
			if (_graph_loading) {
				write_current_stats(min_tone,min_user);
			}
		}
		for (int user=0;user<lines;user++) {
			calc_delta_p(min_tone,user);
		}
		for (int tone=0;tone<DMTCHANNELS;tone++) {
                	for (int user=0;user<lines;user++) {
		                _cost[tone][user] = cf(tone,user);
		                //_cost[tone][user] = var_cf(tone,user);
                	}
                }
		dump_cost_matrix();
		//print_vector(_cost[min_tone],"New costs");
		//getchar();
	}
	fclose(p_fp);
	fclose(lead_lag_fp);
	if (_graph_loading) {
		write_stats_totals();
	}
}
int multiuser_new::run()
{
        int tone,user,t_line,runs=0;
	FILE* fp[lines];
	bool last_run=false;
        reset_data();
	//fp[0]=fopen("line0_order.txt","w");
	//fp[1]=fopen("line1_order.txt","w");
        //calc_normalised_cost_matrix();
        //print_cost_matrix(0,10);
        //calc_delta_p_debug=true;
	for (int user=0;user<lines;user++) {
		printf("rate target on line %d is %d\n",user,b_target[user]);
		if (b_target[user]!=NOT_SET) {
			t_line=user;
		}
	}
	while((abs(b_target[t_line] - b_total[t_line]) > 5) || last_run) {
		reset_data();
		for (tone=0;tone<DMTCHANNELS;tone++) {
                	for(user=0;user<lines;user++) {
                        	calc_delta_p_cost(tone,user);
	                }
	        }
		//print_cost_matrix(0,DMTCHANNELS-1);
		while(1) {
			min_cost(&tone,&user);
			if(all_tones_full) {
				break;
			}
			b[tone][user]++;        // add bit to min cos tone
			b_total[user]++;
			total_bits++;
			update_power(tone,user);        //update power on tone
			//fprintf(fp[user],"%d %d\n",tone,total_bits);
			if (last_run && graph_loading)
				write_current_stats(tone,user);
			if (b[tone][user] == MAXBITSPERTONE) {
				F[tone][user]=1;
			}
			if (b_total[user] == b_target[user]) {
				freeze_user(user);
				if (last_run)
					printf("just froze user %d cos he got his target\n",user);
			}			
			for (int user=0;user<lines;user++)
				calc_delta_p_cost(tone,user);   // update delta_p on all lines for this tone
		}
		/*for (int user=0;user<lines;user++) {
			printf("b_%d = %d\n",user,b_total[user]);
		}*/
		//printf("w = %lf\n",w[t_line]);
		//getchar();
		if (last_run) {
			printf("this is the last run so setting last_run to false\n");
			last_run=false;
			break;
		}
		if (abs(b_target[t_line] - b_total[t_line]) < 5) {
			printf("Met the rate target, setting the last_run to true\n");
			last_run=true;
			continue;
		}
		if (b_total[t_line] > b_target[t_line]) {	// if rate > target_rate then this is the min weight
		//	printf("Rate is greater than target, so increase the weight and we have found the min weight\n");
			w_min[t_line]=w[t_line];		// set the min weight
			if (w_max[t_line] < 0) { 			// dont yet know the max weight
		//		printf("dont yet know the max weight so increase the weight\n");
				w[t_line]*=2;
			}
		}
		else {						// this is the max weight
		//	printf("Rate is less than target so decrease the weight and we have found the max weight\n");
			w_max[t_line]=w[t_line];
			if (w_min[t_line] < 0) {
		//		printf("dont yet know the min weight so decrease the weight\n");
				w[t_line]/=2;
			}
		}
		if (w_max[t_line] > 0 && w_min[t_line] > 0) {
			w[t_line] = (w_max[t_line]+w_min[t_line])/2;	
		//	printf("Currently bisecting, new weight is %lf\n",w[t_line]);
		}
	}
	//for (int user=0;user<lines;user++)
	//	fclose(fp[user]);
        init_lines();
        calculate_snr();
        set_loading_algo();
	return 0;
}
int multiuser_new::run_a()
{
        int tone,user,t_line,runs=0;
	FILE* fp;
	bool last_run=false;
        reset_data();
	//calc_ave_bits();
	//calc_ave_xtalk();
/*
	for (int user=0;user<lines;user++) {
		double max=0;
		int line=0;
		for (int xtalker=0;xtalker<lines;xtalker++) {
			if (xtalker==user)
				continue;
			if (ave_xtalk[user][xtalker] > max) {
				max = ave_xtalk[user][xtalker];
				line = xtalker;
			}
		}
		printf("Worst xtalker into line %d = line %d\n",user,line);
	}
*/
	//exit(0);
	//for (int user=0;user<lines;user++) {
	//	printf("rate target on line %d is %d\n",user,b_target[user]);
	//}
	do {
		iter_count++;
		reset_data();
		init_cost_matrix();
		//for (int user=0;user<lines;user++) {
		//	printf("w[%d] = %4.2lf\n",user,w[user]);
		//}
		while(1) {
			min_cost(&tone,&user);
			printf("Min tone/user was %d/%d\n",tone,user);
			//getchar();
			//if (tone == 115 && user == 1) {
			//	getchar();
			//}
			if(all_tones_full) {
				printf("All tones are full on iteration number %d\n",iter_count);
				break;
			}
			b[tone][user]++;        // add bit to min cos tone
			b_total[user]++;
			total_bits++;
			//printf("Added a bit to user %d tone %d\n",user,tone);
			//print_vector(cost[tone],"Costs on current tone");
			update_power(tone,user);        //update power on tone
			//print_vector(p[tone],"p on tone");
			//getchar();
			print_vector(b_total,"b_total");
			printf("total bits = %d\n",total_bits);
			print_vector(p_used,"p_used");
			if (!greedy) 
				update_wp();
			//print_vector(wp,"wp");
			//getchar();
			if (graph_loading)
				write_current_stats(tone,user);
			/*
			if (b[tone][user] == MAXBITSPERTONE) {
				F[tone][user]=1;
			}
			if (!rate_targets_off) {
				if (b_total[user] == b_target[user]) {
					freeze_user(user);
					printf("just froze user %d cos he got his target\n",user);
					printf("Power used by user %d when frozen = %lf\n",user,p_used[user]);
					init_cost_matrix();
					user_re_init[user]=true;
				}		
			}
			*/	
			/*for (int user=0;user<lines;user++) {
				if (user_frozen[user] == true && user_re_init[user] == false) {
					init_cost_matrix();	
					user_re_init[user]=true;
				}	
			}*/
			/*
			bool update=false;
			for (int user1=0;user1<lines;user1++) {
				if (wp[user1] > 1.1) {
					update=true;
					break;
				}
			}
			*/
			for (int user=0;user<lines;user++) {
				calc_delta_p(tone,user);   // update delta_p on all lines for this tone
				//cost[tone][user] = cf(tone,user);
			}
			//print_vector(_delta_p[tone][user],"Delta of adding another bit");
			for (int tone=0;tone<DMTCHANNELS;tone++) {
				for (int user=0;user<lines;user++) {
					cost[tone][user] = cf(tone,user);
				}
			}
			//print_vector(cost[tone],"New costs");
			//getchar();
		}
		for (int user=0;user<lines;user++) {
			printf("rate on line %d is %d\n",user,b_total[user]);
		}
		//getchar();
		calc_lost_bits();
		sort_lost_bits();
		print_lost_bits();
		if (0) {
			char tag[100];
			sprintf(tag,"iteration%d",iter_count);
			init_lines();
			calculate_snr();
			for (int user=0;user<lines;user++) {
				write_mw_stats(user,tag);
			}	
		}
		update_w();	
		//getchar();
	} while(!finished());
	if (all_rates_good()) {
		printf("All lines met their rate target\n");
	}
	else {
		double sum=0;
		for (int user=0;user<lines;user++) {
			sum+=pow(b_total[user]-b_target[user],2);
		}
		printf("Total distance from target = %lf\n",sqrt(sum));
	}
	//isb_optimise_p();
        init_lines();
        calculate_snr();
        set_loading_algo();
	printf("max lead = %6.4lf max lag = %6.4lf\n",max_lead,max_lag);
	if (graph_loading) {
		write_stats_totals();
	}
	return 0;
}
Beispiel #6
0
int main(void) {
	/* Related object data */
	system_t* system;
	player_t* player1;
	player_t* player2;

	alt_timestamp_start();
	int start_time = alt_timestamp();
	int wind;
	int restart = 0;
	/* initialize all hardware dev */
	system = system_init(VIDEO_PIXEL_BUFFER_DMA_NAME,
			"/dev/video_character_buffer_with_dma_0",
			ALTERA_UP_SD_CARD_AVALON_INTERFACE_0_NAME, PS2_0_NAME);
	if (!alt_up_sd_card_is_Present()) {
		printf("SD card not present\n");
		return -2;
	} else {
		printf("SD card detected.\n");
	}
	if (!alt_up_sd_card_is_FAT16()) {
		printf("SD card is not FAT16.\n");
		return -3;
	} else {
		printf("SD card is FAT 16.\n");
	}
	fireSound = initSoundbank("shotgun.wav");
	explosionSound = initSoundbank("big_bomb.wav");
	printf("Done Initializing\n");
	int end_time = alt_timestamp();
	srand(end_time - start_time);
	clearScreen(system);
	printf("Press enter to start game");
	restartGame(system);
	while (restart == 1) {
	/* initialize required objects */
	player1 = makePlayer(1, "Lomash");
	player2 = makePlayer(2, "TJ");

	/*
	 * Draw the screen for the first time.
	 */
	store_background_data();
	draw_background(system);
	drawPlayers(system);
	draw_ground(system);
	draw_windbox(system);
	draw_player1GUI(system);
	draw_player2GUI(system);
	update_wind(system, wind);
	draw_health(player1, system);
	draw_health(player2, system);
	update_power(player1, system);
	update_power(player2, system);
	usleep(2000000); // sleep to wait for video buffer to load
	while (TRUE) {

	printf(
	 "\n\n\n\n===========================================================\n");
	 printf("Player 1 Health = %d \t\t Player 2 Health = %d\n",
	 player1->health, player2->health);
	 wind = rand() % 11 - 5;
	 draw_windbox(system);
	 update_wind(system, wind);


//	 Player 1's turn

	 player_1_jump(system);
	 player_1_jump(system);
	 printf("Getting Player 1 Power.\n");
	 getKeyboardInput(1, player1, system); // Power
	 skipOneEnter(system);
	 printf("Getting Player 1 Angle.\n");
	 getKeyboardInput(2, player1, system); // Angle

//	 Player 1 Animation
	 printf("Starting animation\n");
	 clear_angle_drawer(system);
	 animate_cannon1(system);
	 playSound(fireSound, system->audio);
	 switch (animateShooting(system, player1, wind)) { // different value for result
	 case 1: {
	 update_health(player2, system, -DAMAGE);
	 printf(
	 "Player 1 hit player 2.\n Remaining Health for Player 2: %d\n",
	 player2->health);
	 break;
	 }
	 case 2: {
	 update_health(player1, system, -DAMAGE);
	 printf(
	 "Player 1 hit player 1.\n Remaining Health for Player 1: %d\n",
	 player1->health);
	 break;
	 }
	 default: {
	 break;
	 }
	 }
	 printf("Ended animation\n");

//	 Post-animation Calculation
	 if (player1->health <= 0 || player2->health <= 0) {
	 break;
	 }


//	 Player 2's turn


	 wind = rand() % 11 - 5;
	 draw_windbox(system);
	 update_wind(system, wind);
	 player_2_jump(system);
	 player_2_jump(system);
	 printf("Getting Player 2 Velocity.\n");
	 getKeyboardInput(1, player2, system);
//	 Player 2 Angle-Selection
	 skipOneEnter(system);
	 printf("Getting Player 2 Angle.\n");
	 getKeyboardInput(2, player2, system);

//	 Player 2 Animation
	 printf("Starting animation\n");
	 clear_angle_drawer(system);
	 animate_cannon2(system);
	 playSound(fireSound, system->audio);
//	 Post-animation Calculation
	 switch (animateShooting(system, player2, wind)) { // different value for result
	 case 1: {
	 update_health(player1, system, -DAMAGE);
	 printf(
	 "Player 2 hit player 1.\n Remaining Health for Player 1: %d\n",
	 player1->health);
	 break;
	 }
	 case 2: {
	 update_health(player2, system, -DAMAGE);
	 printf(
	 "Player 2 hit player 2.\n Remaining Health for Player 2: %d\n",
	 player2->health);
	 break;
	 }
	 default: {
	 break;
	 }
	 }

	 if (player1->health <= 0 || player2->health <= 0) {
	 break;
	 }
	};
	/*
	 * Find out who won.
	 */
		if (player1->health <= 0) {
			printf("Player 2 Wins!!! \n");
			draw_P2WIN(system);
		} else if (player2->health <= 0) {
			printf("Player 1 Wins!!!\n");
			draw_P1WIN(system);
		} else {
			printf("we shouldn't be here.\n");
		}
		restart = restartGame(system);
	}
	return 0; // FIN
}