Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
2 / 1 / 1
Регистрация: 25.11.2014
Сообщений: 43

Как сделать последовательное изменение элементов (Игра на Android)

02.11.2019, 19:26. Показов 1473. Ответов 7

Студворк — интернет-сервис помощи студентам
Есть проблема, пишу игру на подобии викторина, 2 кнопки (ответили верно(true) и не верно(false)) всего 10 вопросов, и в конце выводится результат на сколько вопросов, пользователь ответил верно.
Хочу вывести мини -табличку (кружки от 1 до 10) и каждый должен соответственно окрашиваться в красный(не правильно) и зелёный (правильно)..
Проблема заключается в том, что не могу реализовать последовательно окрас кружков.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
//Добавляем вопросы для викторины и присваиваем правильность ответов. 
            private TrueFalse[] questions = new TrueFalse[]{
            new TrueFalse(R.string.quest_1, false),
            new TrueFalse(R.string.quest_2, true),
            new TrueFalse(R.string.quest_3, false),
            new TrueFalse(R.string.quest_4, true),
            new TrueFalse(R.string.quest_5, false),
            new TrueFalse(R.string.quest_6, true),
            new TrueFalse(R.string.quest_7, true),
            new TrueFalse(R.string.quest_8, false),
            new TrueFalse(R.string.quest_9, true),
            new TrueFalse(R.string.quest_10, true),
    };
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
//кнопки правильный и не правильный ответ
        btn_true.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkAnswer(true);
            }
        });
        btn_false.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkAnswer(false);
            }
        });
Проблема вот здесь, я попытался создать массив и по отдельности окрашивать каждый кружок.. но получается так, что при нажатии ответа на первый вопрос, окрашиваются сразу все кружки (как показано на скриншоте).
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//Проверяем правильный ответ или нет, и изменяем соответствующий кружок 
        private void checkAnswer ( boolean  answer_user ) {
        boolean[]answer_use = {answer_user, answer_user, answer_user, answer_user, answer_user, answer_user, answer_user, answer_user, answer_user, answer_user};
            boolean answer = questions[quest_index].isTrueQuestion();
            if (answer_user == answer){
            count++; // записываем количество правильных ответов
                btn_true.setVisibility(View.INVISIBLE);
                btn_false.setVisibility(View.INVISIBLE);
                btn_next.setVisibility(View.VISIBLE);
            }
            else {
                btn_true.setVisibility(View.INVISIBLE);
                btn_false.setVisibility(View.INVISIBLE);
                btn_next.setVisibility(View.VISIBLE);
            }
            if (questions[0].isTrueQuestion()== answer_use[0]){
                textView1.setBackgroundResource(R.drawable.btn_yes_pres_green); //если правильно в зелёный
            } else {
                textView1.setBackgroundResource(R.drawable.btn_no_pres_red);  //если не правильно в красный
            }
            if (questions[1].isTrueQuestion()== answer_use[1]){
                textView2.setBackgroundResource(R.drawable.btn_yes_pres_green);
            }else {
                textView2.setBackgroundResource(R.drawable.btn_no_pres_red);
            }
            if (questions[2].isTrueQuestion()== answer_use[2] ){
                textView3.setBackgroundResource(R.drawable.btn_yes_pres_green);
            }else  {
                textView3.setBackgroundResource(R.drawable.btn_no_pres_red);
            }
            if (questions[3].isTrueQuestion()== answer_use[3]  ){
                textView4.setBackgroundResource(R.drawable.btn_yes_pres_green);
            }else{
                textView4.setBackgroundResource(R.drawable.btn_no_pres_red);
            }
            if (questions[4].isTrueQuestion()== answer_use[4] ){
                textView5.setBackgroundResource(R.drawable.btn_yes_pres_green);
            }else  {
                textView5.setBackgroundResource(R.drawable.btn_no_pres_red);
            }
            if (questions[5].isTrueQuestion()== answer_use[5]  ){
                textView6.setBackgroundResource(R.drawable.btn_yes_pres_green);
            }else {
                textView6.setBackgroundResource(R.drawable.btn_no_pres_red);
            }
            if (questions[6].isTrueQuestion() == answer_use[6]){
                textView7.setBackgroundResource(R.drawable.btn_yes_pres_green);
            }else  {
                textView7.setBackgroundResource(R.drawable.btn_no_pres_red);
            }
            if (questions[7].isTrueQuestion()== answer_use[7] ){
                textView8.setBackgroundResource(R.drawable.btn_yes_pres_green);
            }else  {
                textView8.setBackgroundResource(R.drawable.btn_no_pres_red);
            }
            if (questions[8].isTrueQuestion()== answer_use[8]  ){
                textView9.setBackgroundResource(R.drawable.btn_yes_pres_green);
            }else {
                textView9.setBackgroundResource(R.drawable.btn_no_pres_red);
            }
            if (questions[9].isTrueQuestion() == answer_use[9]){
                textView10.setBackgroundResource(R.drawable.btn_yes_pres_green);
            }else {
                textView10.setBackgroundResource(R.drawable.btn_no_pres_red);
            }
и вот за что отвечает class TrueFalse
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class TrueFalse {
    private int question;
    private boolean isTrueQuestion;
 
    public TrueFalse(int question, boolean isTrueQuestion) {
        this.question = question;
        this.isTrueQuestion = isTrueQuestion;
    }
 
    public int getQuestion() {
        return question;
    }
 
    public void setQuestion(int question) {
        this.question = question;
    }
 
    public boolean isTrueQuestion() {
        return isTrueQuestion;
    }
 
    public void setTrueQuestion(boolean trueQuestion) {
 
        isTrueQuestion = trueQuestion;
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.11.2019, 19:26
Ответы с готовыми решениями:

Как сделать последовательное подключение пользователей к Excel?
Имеется Excel файл, в него записываются записи. Файл будет лежать в общем доступе. Если к нему подключается один пользователь, то всё...

Последовательное изменение свойства Button.Enabled
Есть пять Buttons, пять TextBox, при загрузке формы идет обработка на число из текстбокса (если >0) то Button.Enabled = true Нажимаем...

Как сделать так, чтоб программа считала последовательное нажатие кнопок, а после выполнила требуемое мной действие
У меня тут 2 вопроса: Как сделать так, чтоб программа ссчитала последовательное нажатие кнопок, а после выполнила требуемое мной...

7
3 / 2 / 1
Регистрация: 02.11.2019
Сообщений: 7
02.11.2019, 19:51
Не нашел где у тебя изменяется не статический массив answer_use, попробуй перенести его в поле класса.
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
02.11.2019, 20:14
Ну так потому что так в коде написано. При каждом нажатии кнопки дёргается checkAnswer, в котором устанавливаются цвета для всех. Самый простой вариант, если ответ ещё не был дан, класть null, и если null, то ничего не делать.
1
2 / 1 / 1
Регистрация: 25.11.2014
Сообщений: 43
02.11.2019, 20:46  [ТС]
Не подскажешь как это реализовать ? Типа присвоить изначально всем элементам массива null, ide -шка подсказала что это можно сделать так :
Java
1
2
3
4
5
6
7
8
9
10
answer_use[0] = Boolean.parseBoolean(null);
            answer_use[1] = Boolean.parseBoolean(null);
            answer_use[2] = Boolean.parseBoolean(null);
            answer_use[3] = Boolean.parseBoolean(null);
            answer_use[4] = Boolean.parseBoolean(null);
            answer_use[5] = Boolean.parseBoolean(null);
            answer_use[6] = Boolean.parseBoolean(null);
            answer_use[7] = Boolean.parseBoolean(null);
            answer_use[8] = Boolean.parseBoolean(null);
            answer_use[9] = Boolean.parseBoolean(null);
а дальше проверять так:
Java
1
if (answer_use == null)
Если пишу бред, прошу поправить =)
0
1570 / 1168 / 426
Регистрация: 08.05.2012
Сообщений: 5,219
02.11.2019, 23:11
Ну смысл такой: есть массив (лучше использовать коллекции) с изначально пустыми ответами. По клику на кнопку передавать ответ и объект текущего вопроса (как я понял TrueFalse у тебя), то есть там содержится правильный ответ и позиция вопроса. В методе проверяем ответ и красим нужную вьюху, т.к. известна позиция (вьюхи можно тоже в лист собрать, чтобы по позиции их доставать и менять цвет). А в массив с ответами заносишь текущий ответ на текущую позицию, если потом где-то нужно будет показать всё.
0
2 / 1 / 1
Регистрация: 25.11.2014
Сообщений: 43
04.11.2019, 00:45  [ТС]
Если кому не лень, напишите пример как это сделать.. пропарился кучу времени по сути над этой мелочью, и нифига не получается, относительно недавно занимаюсь андроид разработкой и в принципе программированием, еще далеко не всё понимаю, был бы рад конкретному примеру..
0
3 / 2 / 1
Регистрация: 02.11.2019
Сообщений: 7
04.11.2019, 22:34
Есть ссылка на репозиторий ?

Добавлено через 1 минуту
kisel_vlad, дай ссыль на репо попробую помочь
0
2 / 1 / 1
Регистрация: 25.11.2014
Сообщений: 43
08.12.2019, 18:12  [ТС]
В общем решение данной проблемы оказалось очень примитивным.. нужно было просто добавить в проверку "quest_index == 0;1;2;3 и т.д". quest_index по факту - это номер вопроса и нужно было просто делать проверку таким образом..
Java
1
2
3
4
5
6
7
8
    if (answer == answer_user && quest_index == 0){ // говорим, если ответ пользователя = ответу и равен 1 -ому вопросу, тогда окрашиваем ячейку в зелёный
                textView1.setBackgroundResource(R.drawable.btn_yes_pres_green);
            }if (answer!= answer_user && quest_index == 0){// и противоположное условие , если ответ пользователя не равен реальному ответу и равен первому вопросу, тогда окрашиваем в красный. 
                textView1.setBackgroundResource(R.drawable.btn_no_pres_red);
            }if (answer== answer_user && quest_index == 1){
                textView2.setBackgroundResource(R.drawable.btn_yes_pres_green);
            }if (answer!= answer_user && quest_index == 1){
                textView2.setBackgroundResource(R.drawable.btn_no_pres_red); // и так далее
Может кому-то пригодится..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.12.2019, 18:12
Помогаю со студенческими работами здесь

Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново?
Как сделать так, чтобы при нажатии на кнопку "Новая игра" игра начиналась заново? unit1.cpp void __fastcall TForm1::N1Click(TObject...

Последовательное изменение ссылок в формуле при копировании листа
Всем привет. Есть книга (Статистика 1), в первом листе формула, которая суммирует данные с первого листа других книг. В книге статистика...

Оболочка Android 4 на Android 5+. Как сделать?
Всем привет! Я собрался покупать новый телефон. Но как я в последнее время вижу, что нынешние Android оболочки выглядят довольно убого и...

Последовательное изменение цвета Canvas -> Pen -> Color каждую секунду
Здравствуйте! Есть таймер TForm1::Timer_primerTimer(TObject *Sender), который получает некое значение каждую секунду и обрабатывает...

Хочу сделать игру под Android на движке Unity. Как сделать регистрацию пользователей?
Помогите разобраться! Хочу сделать игру под Андроид на движке Unity. Как сделать регистрацию пользователей? Где хранить БД? Пожалуйста...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru