public static void Salvar(ContingenciaInstrucional contingenciaInstrucional, UnidadeDoExperimento tato, int i)
 {
     using (IDbConnection cnn = new SQLiteConnection(GetConnectionString())) {
         string sqlInsert = $"INSERT INTO ContigenciaInstrucionalToTato (IdCI, IdUnidadeExperimento, Ordem) VALUES ({contingenciaInstrucional.Id}, {tato.Id}, {i})";
         cnn.Execute(sqlInsert);
     }
 }
示例#2
0
        public static void Deletar(UnidadeDoExperimento unidadeDoExperimeto)
        {
            Feedback feedback = FeedbackService.GetById(unidadeDoExperimeto.FeedbackId);

            FeedbackService.Deletar(feedback);
            AbstractService.Deletar(unidadeDoExperimeto, "UnidadeDoExperimento");

            string caiminhoImagem = ImagemService.GetFullPath(unidadeDoExperimeto.NomeImagem);

            using (IDbConnection cnn = new SQLiteConnection(GetConnectionString())) {
                IEnumerable <string> data = cnn.Query <string>("SELECT NomeImagem FROM UnidadeDoExperimento WHERE NomeImagem = @NomeImagem", unidadeDoExperimeto);
                if (data.ToList <string>().Count == 0)
                {
                    File.Delete(caiminhoImagem);
                }
            }

            if (!string.IsNullOrEmpty(unidadeDoExperimeto.NomeAudio))
            {
                string caiminhoAudio = AudioService.GetFullPath(unidadeDoExperimeto.NomeAudio);
                using (IDbConnection cnn = new SQLiteConnection(GetConnectionString())) {
                    IEnumerable <string> data = cnn.Query <string>("SELECT NomeImagem FROM UnidadeDoExperimento WHERE NomeAudio = @NomeAudio", unidadeDoExperimeto);
                    if (data.ToList <string>().Count == 0)
                    {
                        File.Delete(caiminhoAudio);
                    }
                }
            }
        }
示例#3
0
        private void FinalizarCC(string motivoFinalização, UnidadeDoExperimento SC)
        {
            EventoSC eventoEncerramento = new EventoSC(sessaoAtual, CCAtual, SC, 0);

            eventoEncerramento.MarcarComoEncerramento(motivoFinalização, sessaoAtual.NumeroTentativas.ToString());
            relatorioSessao.AdicionarEvento(eventoEncerramento);
            taskCC.TrySetResult(true);
        }
 private static void SalvarObjetosFilhos(ContingenciaInstrucional contingenciaInstrucional)
 {
     for (int i = 0; i < contingenciaInstrucional.Tatos.Count; i++)
     {
         UnidadeDoExperimento tato = contingenciaInstrucional.Tatos[i];
         UnidadeDoExperimentoService.Salvar(tato);
         ContigenciaInstrucionalToTatoService.Salvar(contingenciaInstrucional, tato, i);
     }
 }
示例#5
0
 public EventoSC(Sessao sessao, ContingenciaColateral CC, UnidadeDoExperimento SC, long pontosGanhos) : base(sessao)
 {
     this.CC        = CC;
     this.SC        = SC;
     NomeSC         = GetNomeSc();
     PontosGanhos   = pontosGanhos;
     PontosAtuais   = sessao.NumeroPontos;
     TentativaAtual = sessao.NumeroTentativas;
 }
示例#6
0
        public static UnidadeDoExperimento GetById(long id)
        {
            if (id == 0)
            {
                return(null);
            }
            UnidadeDoExperimento unidadeDoExperimeto = AbstractService.GetById <UnidadeDoExperimento>(id, "UnidadeDoExperimento");

            unidadeDoExperimeto.Feedback = FeedbackService.GetById(unidadeDoExperimeto.FeedbackId);
            return(unidadeDoExperimeto);
        }
示例#7
0
 public EventoCI(Sessao sessao, ContingenciaInstrucional CI, UnidadeDoExperimento tato) : base(sessao)
 {
     this.CI = CI;
     for (int i = 0; i < CI.Tatos.Count; i++)
     {
         if (CI.Tatos[i].Id == tato.Id)
         {
             nomeTato = "Tato " + (i + 1).ToString();
             break;
         }
     }
 }
示例#8
0
        private async void ClickSC(UnidadeDoExperimento SC, Label labelMensagem, PictureBox pictureSC)
        {
            Feedback feedback    = SC.Feedback;
            bool     positivo    = feedback.ValorClick > 0;
            Color    novaCor     = positivo ? Color.Green : Color.Red;
            string   mensagem    = feedback.Neutro ? "NEUTRO!" : positivo ? "CORRETO!" : "ERRADO!";
            string   textoEvento = $"Sessão {sessaoAtual.Nome}; MTS {CCAtual.Nome}; SC da imagem {SC.NomeImagem} {mensagem} tocado";

            sessaoAtual.NumeroTentativas++;

            if (feedback.ProbabilidadeComplementar >= random.Next(0, 101))
            {
                relatorioSessao.AdicionarEvento(sessaoAtual.Id, new Evento($"{textoEvento}, valendo {feedback.ValorClick} pontos", positivo ? 1 : 0));

                if (positivo)
                {
                    sessaoAtual.AcertosConcecutivos++;
                    CCAtual.AcertosConcecutivos++;
                }
                else
                {
                    sessaoAtual.AcertosConcecutivos = 0;
                    CCAtual.AcertosConcecutivos     = 0;
                }

                AtualizaPontos(feedback.ValorClick);

                if (!feedback.Neutro)
                {
                    SC.PlayAudio();
                    labelMensagem.Text      = mensagem;
                    labelMensagem.ForeColor = novaCor;
                    labelMensagem.Visible   = true;
                }

                if (!feedback.SemCor)
                {
                    pictureSC.BackColor = novaCor;
                }
            }
            else
            {
                relatorioSessao.AdicionarEvento(sessaoAtual.Id, new Evento($"{textoEvento}, porém não houve feedback por probabilidade", -1));
            }

            await Task.Delay(1000);

            labelMensagem.Visible = false;
            pictureSC.BackColor   = Color.Transparent;

            taskCC.TrySetResult(true);
        }
示例#9
0
        public static void Salvar(UnidadeDoExperimento unidadeDoExperimento)
        {
            if (string.IsNullOrEmpty(unidadeDoExperimento.NomeImagem))
            {
                throw new System.Exception("Toda unidade do experimento deve ter uma imagem!");
            }

            unidadeDoExperimento.NomeImagem = ImagemService.CopiaImagemParaPasta(unidadeDoExperimento.NomeImagem);
            unidadeDoExperimento.NomeAudio  = AudioService.CopiaAudioParaPasta(unidadeDoExperimento.NomeAudio);

            AbstractService.Salvar(unidadeDoExperimento,
                                   "UnidadeDoExperimento",
                                   "INSERT INTO UnidadeDoExperimento (NomeImagem, FeedbackId, NomeAudio) VALUES (@NomeImagem, @FeedbackId, @NomeAudio); SELECT CAST(last_insert_rowid() as int)",
                                   "UPDATE UnidadeDoExperimento SET NomeImagem = @NomeImagem, FeedbackId = @FeedbackId, NomeAudio = @NomeAudio WHERE Id = @Id");
        }
示例#10
0
        private ContingenciaInstrucional CriaCIPelosCampos()
        {
            List <UnidadeDoExperimento> tatos = new List <UnidadeDoExperimento>();

            foreach (ListViewItem item in listViewTatos.Items)
            {
                UnidadeDoExperimento tato = new UnidadeDoExperimento {
                    NomeImagem = item.Text
                };
                tatos.Add(tato);
            }

            string nome = textBoxNomeCI.Text;

            ContingenciaInstrucional CI = new ContingenciaInstrucional {
                Nome  = nome,
                Tatos = tatos
            };

            return(CI);
        }
示例#11
0
        private async Task ApresentarCC(ContingenciaColateral CC)
        {
            taskCC      = new TaskCompletionSource <bool>(false);
            taskSModelo = new TaskCompletionSource <bool>(false);

            CCAtual = CC;
            pictureSModelo.Visible   = true;
            pictureSModelo.Image     = ImageUtils.Resize(CC.sModelo.Imagem, imageWidth, imageHeight);
            pictureSModelo.BackColor = Color.Transparent;
            List <UnidadeDoExperimento> SCs = new List <UnidadeDoExperimento>()
            {
                CC.SC1, CC.SC2, CC.SC3
            };

            await taskSModelo.Task;
            UnidadeDoExperimento sModelo = CC.sModelo;

            relatorioSessao.AdicionarEvento(sessaoAtual.Id, new Evento($"Sessão {sessaoAtual.Nome}; MTS {CC.Nome}; SModelo da imagem {sModelo.NomeImagem} tocado"));

            if (sModelo.Feedback != null && !sModelo.Feedback.SemCor)
            {
                pictureSModelo.BackColor = Color.Green;
            }
            sModelo.PlayAudio();

            pictureSC3.Visible = true;
            if (!CC.SC1.Feedback.Neutro && !CC.SC2.Feedback.Neutro && !CC.SC3.Feedback.Neutro)
            {
                panelPontos.Visible = true;
            }
            pictureSC2.Visible = true;
            pictureSC1.Visible = true;

            EmbaralhaSCs(SCs);

            await taskCC.Task;
        }
示例#12
0
        private ContingenciaColateral CriaCCPelosCampos()
        {
            ContingenciaInstrucional CI = comboBoxCI.SelectedItem as ContingenciaInstrucional;

            Feedback feedbackSModelo = new Feedback {
                ValorClick = 0,
                Neutro     = checkBoxSemCorModelo.Checked,
                SemCor     = checkBoxSemCorModelo.Checked,
                ProbabilidadeComplementar = 100
            };

            FeedbackService.Salvar(feedbackSModelo);
            UnidadeDoExperimento sModelo = new UnidadeDoExperimento {
                Feedback   = feedbackSModelo,
                NomeImagem = ImagemService.CopiaImagemParaPasta(textBoxModelo.Text),
                NomeAudio  = AudioService.CopiaAudioParaPasta(textBoxAudioModelo.Text)
            };

            Feedback feedbackSC1 = new Feedback {
                ValorClick = Convert.ToInt32(numericSC1.Value),
                Neutro     = checkBoxNeutroSC1.Checked,
                SemCor     = checkBoxSemCorSC1.Checked,
                ProbabilidadeComplementar = Convert.ToInt32(numericProbabilidadeSC1.Value)
            };

            FeedbackService.Salvar(feedbackSC1);
            UnidadeDoExperimento SC1 = new UnidadeDoExperimento {
                Feedback   = feedbackSC1,
                NomeImagem = ImagemService.CopiaImagemParaPasta(textBoxSC1.Text),
                NomeAudio  = AudioService.CopiaAudioParaPasta(textBoxAudioSC1.Text)
            };

            Feedback feedbackSC2 = new Feedback {
                ValorClick = Convert.ToInt32(numericSC2.Value),
                Neutro     = checkBoxNeutroSC2.Checked,
                SemCor     = checkBoxSemCorSC2.Checked,
                ProbabilidadeComplementar = Convert.ToInt32(numericProbabilidadeSC2.Value)
            };

            FeedbackService.Salvar(feedbackSC2);
            UnidadeDoExperimento SC2 = new UnidadeDoExperimento {
                Feedback   = feedbackSC2,
                NomeImagem = ImagemService.CopiaImagemParaPasta(textBoxSC2.Text),
                NomeAudio  = AudioService.CopiaAudioParaPasta(textBoxAudioSC2.Text)
            };

            Feedback feedbackSC3 = new Feedback {
                ValorClick = Convert.ToInt32(numericSC3.Value),
                Neutro     = checkBoxNeutroSC3.Checked,
                SemCor     = checkBoxSemCorSC3.Checked,
                ProbabilidadeComplementar = Convert.ToInt32(numericProbabilidadeSC3.Value)
            };

            FeedbackService.Salvar(feedbackSC3);
            UnidadeDoExperimento SC3 = new UnidadeDoExperimento {
                Feedback   = feedbackSC3,
                NomeImagem = ImagemService.CopiaImagemParaPasta(textBoxSC3.Text),
                NomeAudio  = AudioService.CopiaAudioParaPasta(textBoxAudioSC3.Text)
            };


            UnidadeDoExperimentoService.Salvar(new List <UnidadeDoExperimento>()
            {
                sModelo, SC1, SC2, SC3
            });

            ContingenciaColateral CC = new ContingenciaColateral {
                Nome    = textBoxNomeCC.Text,
                CI      = CI,
                sModelo = sModelo,
                SC1     = SC1,
                SC2     = SC2,
                SC3     = SC3
            };

            return(CC);
        }
示例#13
0
        private async void ClickBotao(UnidadeDoExperimento SC, Label labelMensagem, PictureBox pictureSC)
        {
            if (SessoesFinalizadas)
            {
                return;
            }

            Feedback feedback = SC.Feedback;

            if (feedback.Neutro || feedback.ValorClick == 0)
            {
                sessaoAtual.AcertosConcecutivos = 0;
                sessaoAtual.NumeroTentativas++;
                relatorioSessao.AdicionarEvento(new EventoSC(sessaoAtual, CCAtual, SC, 0));
                await Task.Delay(1000);
            }
            else
            {
                if (feedback.ProbabilidadeComplementar > random.Next(0, 100))
                {
                    bool   positivo = feedback.ValorClick > 0;
                    Color  novaCor  = positivo ? Color.Green : Color.Red;
                    string mensagem = positivo ? "CORRETO!" : "ERRADO!";

                    sessaoAtual.NumeroTentativas++;

                    if (positivo)
                    {
                        sessaoAtual.AcertosConcecutivos++;
                        CCAtual.AcertosConcecutivos++;
                    }
                    else
                    {
                        sessaoAtual.AcertosConcecutivos = 0;
                        CCAtual.AcertosConcecutivos     = 0;
                    }

                    AtualizaPontos(feedback.ValorClick);
                    SC.PlayAudio();
                    labelMensagem.Text      = mensagem;
                    labelMensagem.ForeColor = novaCor;
                    labelMensagem.Visible   = true;

                    if (!feedback.SemCor)
                    {
                        pictureSC.BackColor = novaCor;
                    }

                    relatorioSessao.AdicionarEvento(new EventoSC(sessaoAtual, CCAtual, SC, feedback.ValorClick));
                }
                else
                {
                    relatorioSessao.AdicionarEvento(new EventoSC(sessaoAtual, CCAtual, SC, 0));
                }

                await Task.Delay(1000);

                labelMensagem.Visible = false;
                pictureSC.BackColor   = Color.White;
            }

            ultimoSC = SC;
            taskCC.TrySetResult(true);
        }
 public static List <ContigenciaInstrucionalToTato> GetByCIAndTato(ContingenciaInstrucional contingenciaInstrucional, UnidadeDoExperimento tato)
 {
     return(AbstractService.GetByObj <ContigenciaInstrucionalToTato>(
                "SELECT CiTT.* FROM UnidadeDoExperimento ue JOIN ContigenciaInstrucionalToTato CiTT ON ue.Id = CiTT.IdUnidadeExperimento WHERE CiTT.IdCI = @IdCI AND CiTT.IdUnidadeExperimento = @IdUE ORDER BY CiTT.Ordem",
                new { IdCi = contingenciaInstrucional.Id, IdUE = tato.Id }));
 }