int main ()
{
	int res;
	struct manapool_t pool = { 1 };
	struct card_t card = {"name_of_card", 3,5,3};
	
	add_mana(&pool, 3);
	printf("pool  = %d\n", pool.mana);
		
	res = can_put_card(&card, &pool);
	printf("res can_put_card = %d\n", res);
	
	res = remove_mana(&pool, 2);
	printf("res remove_mana = %d\n", res);
	printf("pool = %d\n", pool.mana);
	
	res = can_put_card(&card, &pool);
	printf("res can_put_card = %d\n", res);
	
	res = remove_mana(&pool, 3);
	printf("res remove_mana= %d\n", res);
	printf("pool = %d\n", pool.mana);
		
	return 0;
}
Exemplo n.º 2
0
void put_card(card_t card_to_put, manapool_t *pool, struct deck_t *player_deck){
	switch(can_put_card(card_to_put, *pool)){
		case 0:printf("You don't have enough mana to put this card\n");
			break;
		case 1:{pool->current_mana-=card_to_put.cost;
			push_card(card_to_put, player_deck);
			break;
		}
	}
}
Exemplo n.º 3
0
// put card on lane
void play_card(board_t *board, int turn, card_t card_to_put, int num_lane) {
    if(can_put_card(card_to_put, board->p[turn].manapool)) // checks for mana
    {
        memcpy(board->lanes[turn][num_lane].name, card_to_put.name, strlen(card_to_put.name) + 1);
        board->lanes[turn][num_lane].life = card_to_put.life;
        board->lanes[turn][num_lane].force = card_to_put.force;
        board->lanes[turn][num_lane].cost = card_to_put.cost;
        delete_card_from_hand(&(board->p[turn]), card_to_put.name);
        board->p[turn].manapool.current_mana -= card_to_put.cost;
    }
}
int main() {
	struct manapool_t pool;
	struct card_t card = {"Hineca", 6, 7, 7};

	init_manapool(&pool);
	printf("mana: %d / %d\n", pool.current_mp, pool.max_mp); //test init_manapool
	pool.max_mp = 10;
	gain_mana(&pool, 100);
	printf("mana: %d / %d\n", pool.current_mp, pool.max_mp);
	if( can_put_card(card, pool) ) {
		use_mana(&pool, card.mana_cost);
		printf("mana: %d / %d\n", pool.current_mp, pool.max_mp);
	} else {
		printf("Not enough mana\n");
	}
	if( can_put_card(card, pool) ) {
		use_mana(&pool, card.mana_cost);
		printf("mana: %d / %d\n", pool.current_mp, pool.max_mp);
	} else {
		printf("Not enough mana\n");
	}

	return 0;
}
Exemplo n.º 5
0
int can_play_card(board_t *board, int turn, card_t card_to_put, int num_lane){
	switch(can_put_card(card_to_put, board->p[turn].manapool)){
		case 0:
			printf("You don't have enough mana to put this card.\n");
			return 0;
		case 1:
			if(is_card_empty(board->lanes[turn][num_lane])){
				return 1;
			}else {
				print_card(board->lanes[turn][num_lane]);
				printf("This line is taken.\n");
				return 0;
			}
	}
}
Exemplo n.º 6
0
int handle_player_input(void* param){
    if(param){
        render_data_t data = *((render_data_t*)param);
        int i;
        SDL_Rect mouse_rect = {data.board->cursor.rectangle.x,data.board->cursor.rectangle.y,1,1};
        for(i = 0; i < sizeof(data.board->players[data.board->player_id].hand.cards)/sizeof(card_t); i++){
            //If mouse intersects with card
            if(SDL_HasIntersection(&mouse_rect,&data.board->players[data.board->player_id].hand.cards[i].layout.rectangle)){
                data.board->players[data.board->player_id].hand.cards[i].layout.focused = true;
                //If there was a left mouse click on card, begin drag
                if(data.event->button.state == SDL_PRESSED){
                    data.board->players[data.board->player_id].hand.cards[i].layout.dragged = true;
                    //Set drag offset
                    data.board->cursor.offset_x = data.board->cursor.rectangle.x - data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.x;
                    data.board->cursor.offset_y = data.board->cursor.rectangle.y - data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.y;
                    //Get initial coordinates
                    data.board->cursor.old_x = data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.x;
                    data.board->cursor.old_y = data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.y;
                    data.board->players[data.board->player_id].hand.cards[i].layout.focused = false;
                }
                if(data.event->type == SDL_MOUSEBUTTONUP){
                    //Check if the card is being placed on the board
                    int b;
                    for(b = 5; b < 10; b++){
                        if(SDL_HasIntersection(&mouse_rect,&data.board->cards_on_board[b].layout.rectangle) && can_put_card(data.board->players[data.board->player_id].hand.cards[i],data.board->players[data.board->player_id].pool_of_mana)){
                            //Redesign the card to unlink the original texture from the target one (i.e. hand card texture, board card texture)
                            card_t* temp_card = play_card_from_hand(&data.board->players[data.board->player_id],i);
                            data.board->cards_on_board[b].attack_points = temp_card->attack_points;
                            data.board->cards_on_board[b].health_points = temp_card->health_points;
                            data.board->cards_on_board[b].mana_cost = temp_card->mana_cost;
                            data.board->cards_on_board[b].layout.cache_index = temp_card->layout.cache_index;
                            data.board->cards_on_board[b].layout.texture = temp_card->layout.texture;
                            memset(temp_card,0,sizeof(card_t));
                            temp_card->layout.texture = NULL;
                        }
                    }

                    data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.x = data.board->cursor.old_x;
                    data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.y = data.board->cursor.old_y;
                    data.board->players[data.board->player_id].hand.cards[i].layout.dragged = false;
                }
            }
            else{
                SDL_SetTextureBlendMode(data.board->players[data.board->player_id].hand.cards[i].layout.texture,SDL_BLENDMODE_NONE);
                data.board->players[data.board->player_id].hand.cards[i].layout.focused = false;
            }
            //If card has focus
            if(data.board->players[data.board->player_id].hand.cards[i].layout.focused == true){
                data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.y = data.board->display_mode.h - data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.h;
                SDL_SetTextureColorMod(data.board->players[data.board->player_id].hand.cards[i].layout.texture,255,255,255);
            }
            else{
                //If card lost focus
                SDL_SetTextureColorMod(data.board->players[data.board->player_id].hand.cards[i].layout.texture,128,128,128);
                //If the card was released outside the left bound of the screen
                if(data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.x < 0){
                    data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.x = 0;
                }
                //If the card was released outside the right bound of the screen
                else if(data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.x > data.board->display_mode.w - data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.w){
                    data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.x = data.board->display_mode.w - data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.w;
                }

                data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.y = data.board->display_mode.h - (data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.h / 2);
            }

            if(data.board->players[data.board->player_id].hand.cards[i].layout.dragged == true){
                SDL_SetTextureBlendMode(data.board->players[data.board->player_id].hand.cards[i].layout.texture,SDL_BLENDMODE_ADD);
                data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.x = data.board->cursor.rectangle.x - data.board->cursor.offset_x;
                data.board->players[data.board->player_id].hand.cards[i].layout.rectangle.y = data.board->cursor.rectangle.y - data.board->cursor.offset_y;
            }
        }
    }
    return 0;
}
Exemplo n.º 7
0
void play(board_t *player_to_play_board, board_t *other_player_board, player_t *player_to_play, player_t *other_player, int turn) {
    int card_to_attack;
    int what_to_do;
    int which_card_to_play;
    int save_current_mana;
    int attack_result;
    
    printf("\nWhat do you want to do?\n");
    printf("1: Play card\n");
    printf("2: Attack\n");
    printf("3:Skip move\n");
    printf("Your option: ");
    scanf("%d", &what_to_do);
    switch (what_to_do) {
        case 1:
            printf("Chose a card: ");
            scanf("%d", &which_card_to_play);
            if(which_card_to_play > player_to_play->player_hand.hand_top){
                while(1){
                    printf("You don't have this card in your hand\n");
                    printf("Chose a card: ");
                    scanf("%d", &which_card_to_play);
                    
                    if(which_card_to_play <= player_to_play->player_hand.hand_top){
                        break;
                    }
                }
            }
            if (player_to_play_board->lane1 == 0) {
                save_current_mana = player_to_play->player_mana.current_mana;
                if (can_put_card(player_to_play->player_hand.hand_cards[player_to_play->player_hand.hand_top], &player_to_play->player_mana)) {
                    player_to_play->player_mana.current_mana = save_current_mana;
                    play_card_from_hand(player_to_play, which_card_to_play);
                    player_to_play_board->lane1_card = player_to_play->player_hand.hand_cards[player_to_play->player_hand.hand_top];
                    player_to_play_board->lane1 = 1;
                    --player_to_play->player_hand.hand_top;
                } else {
                    printf("No mana to summon the card");
                }
                special_card(player_to_play_board, other_player_board, player_to_play, other_player, &player_to_play_board->lane1_card);
            } else if (player_to_play_board->lane2 == 0) {
                save_current_mana = player_to_play->player_mana.current_mana;
                save_current_mana = player_to_play->player_mana.current_mana;
                if (can_put_card(player_to_play->player_hand.hand_cards[player_to_play->player_hand.hand_top], &player_to_play->player_mana)) {
                    player_to_play->player_mana.current_mana = save_current_mana;
                    play_card_from_hand(player_to_play, which_card_to_play);
                    player_to_play_board->lane2_card = player_to_play->player_hand.hand_cards[player_to_play->player_hand.hand_top];
                    player_to_play_board->lane2 = 1;
                    --player_to_play->player_hand.hand_top;
                } else {
                    printf("No mana to summon the card");
                }
                special_card(player_to_play_board, other_player_board, player_to_play, other_player, &player_to_play_board->lane2_card);
            } else if (player_to_play_board->lane3 == 0) {
                save_current_mana = player_to_play->player_mana.current_mana;
                if (can_put_card(player_to_play->player_hand.hand_cards[player_to_play->player_hand.hand_top], &player_to_play->player_mana)) {
                    player_to_play->player_mana.current_mana = save_current_mana;
                    play_card_from_hand(player_to_play, which_card_to_play);
                    player_to_play_board->lane3_card = player_to_play->player_hand.hand_cards[player_to_play->player_hand.hand_top];
                    player_to_play_board->lane3 = 1;
                    --player_to_play->player_hand.hand_top;
                } else {
                    printf("No mana to summon the card");
                }
                special_card(player_to_play_board, other_player_board, player_to_play, other_player, &player_to_play_board->lane3_card);
            } else if (player_to_play_board->lane4 == 0) {
                save_current_mana = player_to_play->player_mana.current_mana;
                if (can_put_card(player_to_play->player_hand.hand_cards[player_to_play->player_hand.hand_top], &player_to_play->player_mana)) {
                    player_to_play->player_mana.current_mana = save_current_mana;
                    play_card_from_hand(player_to_play, which_card_to_play);
                    player_to_play_board->lane4_card = player_to_play->player_hand.hand_cards[player_to_play->player_hand.hand_top];
                    player_to_play_board->lane4 = 1;
                    --player_to_play->player_hand.hand_top;
                } else {
                    printf("No mana to summon the card");
                }
                special_card(player_to_play_board, other_player_board, player_to_play, other_player, &player_to_play_board->lane4_card);
            } else if (player_to_play_board->lane5 == 0) {
                save_current_mana = player_to_play->player_mana.current_mana;
                if (can_put_card(player_to_play->player_hand.hand_cards[player_to_play->player_hand.hand_top], &player_to_play->player_mana)) {
                    player_to_play->player_mana.current_mana = save_current_mana;
                    play_card_from_hand(player_to_play, which_card_to_play);
                    player_to_play_board->lane5_card = player_to_play->player_hand.hand_cards[player_to_play->player_hand.hand_top];
                    player_to_play_board->lane5 = 1;
                    --player_to_play->player_hand.hand_top;
                } else {
                    printf("No mana to summon the card");
                }
                special_card(player_to_play_board, other_player_board, player_to_play, other_player, &player_to_play_board->lane5_card);
            }
            
            printf("\n");
            
            ;
    }
}