示例#1
0
        static public void GameLoop()
        {
            var qMax = 0;
            var exit = false;

            foreach (DataRow r in Dificuldades.Rows)
            {
                qMax += int.Parse(r["NUM_Q"].ToString());
            }

            for (int i = 0; i < Dificuldades.Rows.Count; i++)
            {
                if (exit)
                {
                    break;
                }
                for (int j = 0; j < int.Parse(Dificuldades.Rows[i]["NUM_Q"].ToString()); j++)
                {
                    q++;
                    MateriasExcluidas = new List <int>();
                    for (int x = 0; x < Materias.Rows.Count; x++)
                    {
                        if (Perguntas.Select($"DIF_ID={Dificuldades.Rows[i]["DIF_ID"]} AND Q_TOPICO_ID={Materias.Rows[x]["T_ID"]} AND Q_ENABLED='True'").Count() < 1)
                        {
                            MateriasExcluidas.Add(x);
                        }
                    }
                    frmRoleta fR = new frmRoleta();
                    fR.Controls["label3"].Text = "Dificuldade: " + Dificuldades.Rows[i]["DIF_NOME"].ToString();
                    fR.Controls["label4"].Text = $"Rodada {i + 1} de {Dificuldades.Rows.Count}";
                    fR.Controls["label5"].Text = $"Questão {j + 1} de {Dificuldades.Rows[i]["NUM_Q"]}";
                    fR.ShowDialog();
                    var materia = fR.materia;
                    fR.Dispose();
                    var rgen     = new Random();
                    var qstIndex = new int();
                    while (true)
                    {
                        var pergs = Perguntas.Select($"DIF_ID = {Dificuldades.Rows[i]["DIF_ID"]} AND Q_TOPICO_ID = {Materias.Rows[materia]["T_ID"]}");
                        qstIndex = Perguntas.Rows.IndexOf(pergs[rgen.Next(0, pergs.Count())]);
                        if (Perguntas.Rows[qstIndex]["Q_ENABLED"].ToString() == "True")
                        {
                            break;
                        }
                    }
                    Perguntas.Rows[qstIndex]["Q_ENABLED"] = false;

                    QuestionType qt = QuestionType.Title;
                    if (Perguntas.Rows[qstIndex]["Q_TEXTO"].ToString() != "")
                    {
                        qt = qt | QuestionType.Txt;
                    }
                    if (Perguntas.Rows[qstIndex]["Q_ISALTERNATIVE"].ToString() == "True")
                    {
                        qt = qt | QuestionType.Alts;
                    }
                    if (!DBNull.Value.Equals(Perguntas.Rows[qstIndex]["Q_IMG_ID"]))
                    {
                        qt = qt | QuestionType.Img;
                    }

                    frmJogoPergunta preview = new frmJogoPergunta(qt);
                    preview.maxTime = TempoQuestao;
                    preview.Controls["lblTitle"].Text = Perguntas.Rows[qstIndex]["Q_TITULO"].ToString();
                    preview.Controls["lblTxt"].Text   = Perguntas.Rows[qstIndex]["Q_TEXTO"].ToString();
                    (preview.Controls["panel1"] as Panel).Controls[0].Text = Perguntas.Rows[qstIndex]["Q_DICA"].ToString();
                    if ((preview.Controls["panel1"] as Panel).Controls[0].Text == "")
                    {
                        preview.Controls["button2"].Visible = false;
                    }
                    var imgPath = "";
                    if (!DBNull.Value.Equals(Perguntas.Rows[qstIndex]["Q_IMG_ID"]))
                    {
                        Directory.CreateDirectory("temp");
                        var img = Imagens.Select($"IMG_ID = {Perguntas.Rows[qstIndex]["Q_IMG_ID"]}").CopyToDataTable();
                        File.WriteAllBytes($"temp\\{img.Rows[0]["IMG_FILENAME"]}", (byte[])img.Rows[0]["IMG_DATA"]);
                        imgPath = $"temp\\{img.Rows[0]["IMG_FILENAME"]}";
                    }
                    (preview.Controls["questionPic"] as PictureBox).ImageLocation = imgPath;
                    DataTable alt = null;
                    try
                    {
                        alt = Alternativas.Select($"ALT_Q_ID={Perguntas.Rows[qstIndex]["Q_ID"]}").CopyToDataTable();
                        (preview.Controls["altsPanel"].Controls[4] as Label).Text = "A) " + alt.Rows[0]["ALT_TEXTO"].ToString();
                        (preview.Controls["altsPanel"].Controls[3] as Label).Text = "B) " + alt.Rows[1]["ALT_TEXTO"].ToString();
                        (preview.Controls["altsPanel"].Controls[2] as Label).Text = "C) " + alt.Rows[2]["ALT_TEXTO"].ToString();
                        (preview.Controls["altsPanel"].Controls[1] as Label).Text = "D) " + alt.Rows[3]["ALT_TEXTO"].ToString();
                        (preview.Controls["altsPanel"].Controls[0] as Label).Text = "E) " + alt.Rows[4]["ALT_TEXTO"].ToString();
                    }
                    catch (Exception e)
                    {
                    }
                    if (TimerAutomatic)
                    {
                        preview.button1_Click(new object(), new EventArgs());
                    }
                    preview.ShowDialog();
                    frmJogoResposta telaRespostas = new frmJogoResposta(Perguntas.Rows[qstIndex]["Q_ISALTERNATIVE"].ToString() == "False"? frmJogoResposta.AnswerType.Text : frmJogoResposta.AnswerType.Alts);
                    if (Perguntas.Rows[qstIndex]["Q_ISALTERNATIVE"].ToString() == "True")
                    {
                        telaRespostas.Controls["txtPanel"].Visible  = false;
                        telaRespostas.Controls["altsPanel"].Visible = true;
                        for (int y = 0; y < alt.Rows.Count; y++)
                        {
                            telaRespostas.altsPanel.Controls[y].Visible = true;
                        }
                    }
                    else
                    {
                        telaRespostas.Controls["txtPanel"].Visible  = true;
                        telaRespostas.Controls["altsPanel"].Visible = false;
                    }

                    frmJogoRanking ranking = new frmJogoRanking();

                    var dic       = new Dictionary <int, bool>();
                    var respostas = new Dictionary <int, string>();
                    for (int x = 0; x < Equipes.Rows.Count; x++)
                    {
                        if (Equipes.Rows[x]["ENABLED"].ToString() == "True")
                        {
                            telaRespostas.Controls["lblTitle"].Text = $"A resposta do grupo {Equipes.Rows[x]["GP_NOME"]} (Cód {Equipes.Rows[x]["GP_ID"]}) foi:";
                            List <string> nomes = new List <string>();
                            foreach (DataRow r in Participantes.Select($"P_GP_ID = {Equipes.Rows[x]["GP_ID"]}"))
                            {
                                nomes.Add(r["P_NOME"].ToString());
                            }
                            telaRespostas.Controls["label3"].Text = $"Integrantes: {string.Join(",", nomes)}";
                            telaRespostas.ShowDialog();
                            respostas.Add(x, telaRespostas.Controls["txtPanel"].Controls["textBox1"].Text);
                            if (Perguntas.Rows[qstIndex]["Q_ISALTERNATIVE"].ToString() == "False")
                            {
                                if (telaRespostas.certa)
                                {
                                    dic.Add(x, true);
                                }
                                else
                                {
                                    dic.Add(x, false);
                                }
                            }
                            else
                            {
                                if (alt.Rows[telaRespostas.altIndex]["ALT_CERTA"].ToString() == "True")
                                {
                                    dic.Add(x, true);
                                }
                                else
                                {
                                    dic.Add(x, false);
                                }
                            }
                        }
                    }
                    if (MostrarDissertativas)
                    {
                        frmJogoMostrarResposta mr = new frmJogoMostrarResposta();
                        foreach (int x in respostas.Keys)
                        {
                            if (respostas[x] != "")
                            {
                                List <string> nomes = new List <string>();
                                foreach (DataRow r in Participantes.Select($"P_GP_ID = {Equipes.Rows[x]["GP_ID"]}"))
                                {
                                    nomes.Add(r["P_NOME"].ToString());
                                }
                                mr.Controls["lblTitle"].Text    = $"A resposta do grupo {Equipes.Rows[x]["GP_NOME"]}:";
                                mr.Controls["lblNomes"].Text    = $"Integrantes: {string.Join(",", nomes)}";
                                mr.Controls["lblResposta"].Text = respostas[x];
                                if (dic[x])
                                {
                                    mr.setErrada();
                                }
                                else
                                {
                                    mr.setCerta();
                                }
                                mr.ShowDialog();
                            }
                        }
                    }
                    var recompensa = 4;

                    if (preview.dicaMostrada)
                    {
                        recompensa /= 2;
                    }
                    if (dic.Where(x => x.Value == true).Count() > 1)
                    {
                        recompensa /= 2;
                    }
                    List <string> gruposE = new List <string>();
                    List <string> gruposA = new List <string>();
                    for (int x = 0; x < Equipes.Rows.Count; x++)
                    {
                        if (Equipes.Rows[x]["ENABLED"].ToString() == "True")
                        {
                            if (dic[x])
                            {
                                Equipes.Rows[x]["PONTOS"]  = int.Parse(Equipes.Rows[x]["PONTOS"].ToString()) + recompensa;
                                Equipes.Rows[x]["ACERTOS"] = int.Parse(Equipes.Rows[x]["ACERTOS"].ToString()) + 1;
                            }
                            else
                            {
                                Equipes.Rows[x]["ERROS"] = int.Parse(Equipes.Rows[x]["ERROS"].ToString()) + 1;
                            }
                            if (int.Parse(Equipes.Rows[x]["ERROS"].ToString()) - int.Parse(Equipes.Rows[x]["VIDAS_EXTRA"].ToString()) == ErrosPermitidos)
                            {
                                gruposA.Add(Equipes.Rows[x]["GP_NOME"].ToString());
                            }
                            else if (int.Parse(Equipes.Rows[x]["ERROS"].ToString()) - int.Parse(Equipes.Rows[x]["VIDAS_EXTRA"].ToString()) > ErrosPermitidos)
                            {
                                Equipes.Rows[x]["ENABLED"] = false;
                                gruposE.Add(Equipes.Rows[x]["GP_NOME"].ToString());
                            }
                        }
                    }

                    var orderedEqp = Equipes.Select("1=1", "PONTOS DESC");
                    for (int x = 0; x < orderedEqp.Count(); x++)
                    {
                        var lblPos     = new Label();
                        var lblNome    = new Label();
                        var lblPontos  = new Label();
                        var lblAcertos = new Label();
                        var lblErros   = new Label();

                        lblPos.BackColor = System.Drawing.ColorTranslator.FromHtml("#" + orderedEqp[x]["GP_COLOR"].ToString());
                        if (orderedEqp[x]["ENABLED"].ToString() == "False")
                        {
                            lblNome.BackColor    = Color.Gray;
                            lblPontos.BackColor  = Color.Gray;
                            lblAcertos.BackColor = Color.Gray;
                            lblErros.BackColor   = Color.Gray;
                        }

                        lblPos.Font = ranking.label4.Font;
                        lblPos.Text = (x + 1) + "";
                        lblPos.Dock = DockStyle.Fill;
                        ranking.tableLayoutPanel1.Controls.Add(lblPos, 0, x);

                        lblNome.Font = ranking.label4.Font;
                        lblNome.Text = orderedEqp[x]["GP_NOME"].ToString();
                        lblNome.Dock = DockStyle.Fill;
                        ranking.tableLayoutPanel1.Controls.Add(lblNome, 1, x);

                        lblPontos.Font = ranking.label4.Font;
                        lblPontos.Text = orderedEqp[x]["PONTOS"].ToString() + " pts";
                        lblPontos.Dock = DockStyle.Fill;
                        ranking.tableLayoutPanel1.Controls.Add(lblPontos, 2, x);


                        lblAcertos.Font = ranking.label4.Font;
                        lblAcertos.Text = orderedEqp[x]["ACERTOS"].ToString() + " ACERTOS";
                        lblAcertos.Dock = DockStyle.Fill;
                        ranking.tableLayoutPanel1.Controls.Add(lblAcertos, 3, x);

                        lblErros.Font = ranking.label4.Font;
                        lblErros.Text = orderedEqp[x]["ERROS"].ToString() + " ERROS";
                        lblErros.Dock = DockStyle.Fill;
                        ranking.tableLayoutPanel1.Controls.Add(lblErros, 4, x);
                    }
                    if (gruposA.Count > 0)
                    {
                        ranking.Controls["lblAviso"].Text = $"CUIDADO, Grupo(s) {string.Join(", ", gruposA)}: Caso vocês não acertem a próxima questão, serão ELIMINADOS!";
                    }
                    if (gruposE.Count > 0)
                    {
                        ranking.Controls["lblElim"].Text = $"GRUPO(S) ELIMINADO(S): {string.Join(", ", gruposE)}";
                    }
                    ranking.ShowDialog();
                    if ((double)Equipes.Select("ENABLED='True'").Count() / Equipes.Rows.Count <= 0.20)
                    {
                        TopQuiz();
                        exit = true;
                        break;
                    }
                }
            }
            if (!exit)
            {
                TopQuiz();
            }
            var rankFinal          = Equipes.Select("1=1", "PONTOS DESC");
            frmJogoTelaFinal final = new frmJogoTelaFinal();

            try
            {
                final.lblTitle.Text    = $"Parabéns, {rankFinal[0]["GP_NOME"]}! Você ganhou esse ETESP Quiz!";
                final.lblResposta.Text = $"Frase do Grupo: {rankFinal[0]["GP_FRASE"]}";
                List <string> i0 = new List <string>();
                foreach (DataRow r in Participantes.Select($"P_GP_ID = {Equipes.Rows[0]["GP_ID"]}"))
                {
                    i0.Add(r["P_NOME"].ToString());
                }
                final.lblNomes.Text = $"Integrantes: {string.Join(", ", i0)}";
                final.label3.Text   = rankFinal[1]["GP_NOME"].ToString();
                final.label4.Text   = rankFinal[2]["GP_NOME"].ToString();
            }
            catch
            {
            }
            final.ShowDialog();
            Clear();
        }
示例#2
0
        private void button11_Click(object sender, EventArgs e)
        {
            frmJogoTelaFinal frmQC = new frmJogoTelaFinal();

            frmQC.ShowDialog();
        }