Ejemplo n.º 1
0
        private void bt_attacco_Click(object sender, EventArgs e)
        {
            bt_attacco.Hide();
            bt_nascondi.Hide();

            bt_successivo.Show();

            string tipo = player.CarteInMano[cartaSelezionata].Tipo;

            if (tipo == "attacco")
            {
                CartaBase cartaTua = (CartaBase)(player.CarteInMano[cartaSelezionata]);
                cartaTua.SetBuff(player.ValBuff);

                cartaTua.UsaCarta(player);

                if (tuoTurno)
                {
                    //Il nemico sceglie una carta
                    nemico.ScegliCarta();

                    CartaBase cartaNemico = (CartaBase)(nemico.CartaUsata);

                    cartaNemico.Visualizza(img_cartaA, nomeCartaA, detA, attA, defA, elemA);

                    detA.BackColor = Color.LightGoldenrodYellow;

                    defA.BackColor = Color.LightBlue;
                    attA.BackColor = Color.LightGray;

                    //Buff a livello grafico
                    if (nemico.DebuffApplicato)
                    {
                        attA.Text += nemico.DebuffVal;
                        defA.Text += nemico.DebuffVal;

                        attA.ForeColor = Color.BlueViolet;
                        defA.ForeColor = Color.BlueViolet;
                    }
                    else
                    {
                        attA.ForeColor = Color.Black;
                        defA.ForeColor = Color.Black;
                    }

                    int dmg = Scontro(cartaTua, cartaNemico, elem0, elemA, nemico, vita_avversario);

                    if (dmg >= 3)//aggiungi determinazione quando fai un buon danno
                    {
                        cartaTua.AddDeterminazione(2);

                        det0.Text      = cartaTua.Determinazione.ToString();
                        det0.ForeColor = Color.GreenYellow;
                    }
                    else //comunque ogni turni perdi punti
                    {
                        cartaTua.DimDeterminazione(1); //perdi un punto
                        det0.Text = cartaTua.Determinazione.ToString(); //aggiorni la scritta
                    }
                }
                else
                {
                    CartaBase cartaNemico = (CartaBase)(nemico.CartaUsata);

                    cartaNemico.SetBuff(nemico.DebuffVal);
                    int dmg = Scontro(cartaNemico, cartaTua, elemA, elem0, player, vita_giocatore);
                    cartaNemico.SetBuff(0);

                    if (dmg >= 2)  //perdi determinazione quando subisci troppi danni
                    {
                        cartaTua.DimDeterminazione(2);

                        det0.Text      = cartaTua.Determinazione.ToString();
                        det0.ForeColor = Color.Crimson;
                    }
                    else //comunque ogni turni perdi punti
                    {
                        cartaTua.DimDeterminazione(1); //perdi un punto
                        det0.Text = cartaTua.Determinazione.ToString(); //aggiorni la scritta
                    }
                }
                cartaTua.SetBuff(0); //finito il turno levo il buff
            }
            else
            {
                Carta cartaTua = player.CarteInMano[cartaSelezionata];
                if (tipo == "cura")
                {
                    ((CartaCura)cartaTua).UsaCarta(player);
                }
                else if (tipo == "curaEstesa")
                {
                    ((CartaCuraEstesa)cartaTua).UsaCarta(player);

                    curaEstesa.Show();
                }
                else if (tipo == "buff")
                {
                    ((CartaBuff)cartaTua).UsaCarta(player);

                    img_buff.Show();
                }
                else if (tipo == "debuff")
                {
                    ((CartaDebuff)cartaTua).UsaCarta(nemico); //applica l'effetto sul nemico

                    img_debuff.Show();
                }
                else if (tipo == "dannoContiuno")
                {
                    ((CartaDannoContinuo)cartaTua).UsaCarta(nemico); //applica l'effetto sul nemico

                    img_dannoPerpetuo.Show();
                }

                if (!tuoTurno)
                {
                    //Per ora la determinazione non conta
                    int dmg = ((CartaBase)(nemico.CartaUsata)).Atk;

                    if (dmg < 0)
                    {
                        dmg = 0;
                    }

                    player.LessHp(dmg);

                    //Output vita

                    vita_giocatore.Text      = "HP: " + player.CurHp + "/" + player.MaxHp;
                    vita_giocatore.ForeColor = Color.Red;
                }

                //Ogni volta che usi una carta effetto perdi determinazione

                cartaTua.DimDeterminazione(1);                  //perdi un punto
                det0.Text = cartaTua.Determinazione.ToString(); //aggiorni la scritta
            }

            //icone buff/debuff

            if (tuoTurno)
            {
                if (player.CuraEstesa)
                {
                    player.ApplicaBuffCura();
                    vita_giocatore.Text      = "HP: " + player.CurHp + "/" + player.MaxHp;
                    vita_giocatore.ForeColor = Color.YellowGreen;
                    curaEstesa.Show();
                }

                if (player.BuffApplicato)
                {
                    player.ApplicaBuffStats();
                    img_buff.Show();
                }
            }
            else
            {
                if (nemico.DebuffApplicato)
                {
                    nemico.ApplicaDebuff();
                }

                if (nemico.DannoApplicato)
                {
                    nemico.ApplicaDannoPerpetuo();
                    vita_avversario.Text      = "HP: " + nemico.CurHp + "/" + nemico.MaxHp;
                    vita_avversario.ForeColor = Color.Red;
                }
            }

            //Allo scadere dei turni toglie i flags di status
            if (!player.CuraEstesa)
            {
                curaEstesa.Hide();
            }

            if (!player.BuffApplicato)
            {
                img_buff.Hide();
            }

            if (!nemico.DebuffApplicato)
            {
                img_debuff.Hide();
            }

            if (!nemico.DannoApplicato)
            {
                img_dannoPerpetuo.Hide();
            }


            //controlla vita del nemico
            if (nemico.CurHp <= 0)
            {
                MessageBox.Show("Hai vinto lo scontro!");

                /*
                 * //Pesca una nuova carta per non rompere il sistema
                 * player.PescaCarta(cartaSelezionata);
                 *
                 * player.CarteInMano[cartaSelezionata]
                 * .Visualizza(img_carta[cartaSelezionata], nomeCarta[cartaSelezionata], det[cartaSelezionata],
                 * att[cartaSelezionata], def[cartaSelezionata], elem[cartaSelezionata]);*/

                nemico.GameOver();
            }
            else if (player.CurHp <= 0)
            {
                MessageBox.Show("Hai perso lo scontro.");

                /*
                 * //Pesca una nuova carta per non rompere il sistema
                 * player.PescaCarta(cartaSelezionata);
                 *
                 * player.CarteInMano[cartaSelezionata]
                 * .Visualizza(img_carta[cartaSelezionata], nomeCarta[cartaSelezionata], det[cartaSelezionata],
                 * att[cartaSelezionata], def[cartaSelezionata], elem[cartaSelezionata]);
                 */

                player.GameOver();
            }

            //controlla determinazione
            if (player.CarteInMano[cartaSelezionata].Determinazione <= 0 &&
                player.CarteInMano[cartaSelezionata].Tipo != "morto") //ovviamente la carta non deve essere già morta
            {
                //nascondi la carta vecchia
                player.CarteInMano[cartaSelezionata].Nascondi(img_carta0, nomeCarta0, det0, att0, def0, elem0);

                //la carta viene rimpiazzata con la carta morto
                int indice = player.CarteInMano[cartaSelezionata].Indice;    //salvo il vecchio indice
                player.CarteInMano[cartaSelezionata].SetUtilizzabile(false); //la carta verrà rimossa dal mazzo

                player.CarteInMano[cartaSelezionata]        = ListaCarte.GetMorto();
                player.CarteInMano[cartaSelezionata].Indice = indice;

                player.Mazzo.MorteCarta(indice); //uccide la carta

                //mostra la carta nuova
                player.CarteInMano[cartaSelezionata].Visualizza(img_carta0, nomeCarta0, det0);
            }
        }