Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
#1

Не исчезают сердца при потере жизни в игре - C++

23.10.2013, 13:08. Просмотров 1330. Ответов 46
Метки нет (Все метки)

В игре есть три жизни, соответственно, отображаются три сердца.
Если жизнь пропадает, то сердце должно пропадать.
Когда жизни заканчиваются, игра заканчивается, все нормально, но вот сердец все время отображается три

Структура со счетчиком жизни и методами для работы с ним
// file1.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct DrawScene {    
      DrawScene() : livesOfPlayer(MAXIMUM_LIVES) {}
 
        int getLivesOfPlayer()
        { return livesOfPlayer; }
 
    void livesOfPlayerMinuse()
        { livesOfPlayer--; }
 
    void setLivesOfPlayerToMax()
        { livesOfPlayer = MAXIMUM_LIVES; }
  private:
      int livesOfPlayer;
          enum { MAXIMUM_LIVES = 3 };
}
Проверка количесова жизней и отрисовка сердец
// file1.cpp
C++
1
2
3
4
5
6
7
8
9
10
someFunc1() {
        if (livesOfPlayer == 3)  // Выполняется только это условие
        // Отображение трех сердец
 
    else if (livesOfPlayer == 2)  // До сюда компилятор не доходит
        // Отображение двух сердец
 
    else if (livesOfPlayer == 1)
        // Отображение одного сердца
}
// file2.cpp
C++
1
2
3
4
5
6
7
void someFunc2() {
        if (isButtonPressed == false)  // Если на кнопку не нажали, одна жизнь пропадает
        o_DrawScene.livesOfPlayerMinuse();
 
    if (o_DrawScene.getLivesOfPlayer() <= 0)    // Если жизни закончились
        o_DrawScene.setLivesOfPlayerToMax();
}
Если в констукторе вручную задать 1,2,3 то столько сердец и отображается, тут все нормально
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 13:08     Не исчезают сердца при потере жизни в игре
Посмотрите здесь:

Почему исчезают вкладки при нажатии на Esc? - C++
Здравствуйте! Создаю вкладки с использованием Tab Control'а в VC6. Все нормально, но вот только при нажатии на Esc (или Enter) ...

Запрограммировать простейшую цепь генератора сердца - C++
Доброго времени суток! Помогите, пожалуйста! Не пойму, как можно запрограммировать простейшую цепь генератора сердца rlc. Выводы...

Падает FPS в игре на Ubuntu при зажатии клавиши - C++
Падает FPS в игре на Ubuntu при зажатии клавиши, даже если клавиша не описана в коде . Просто у меня там прыгает шарик отличный fps(все...

Учет очков, набранных каждой командой при игре в баскетбол - C++
буду благодарен! Составить программу, которая ведет учет очков, набранных каждой командой при игре в баскетбол. Количество очков,...

Программа, суммирующая штрафное время команд при игре в хоккей - C++
Составьте программу, суммирующую штрафное время команд при игре в хоккей. Выводить на экран суммарное штрафное время обеих команд после...

Составить программу, подсчитывающую число удалений в каждой команде при игре в хоккей - C++
Составить программу, подсчитывающую число удалений в каждой команде при игре в хоккей. После каждого удаления выводить на экран фамилию...

Калькулятор жизни С++ - C++
Есть ли у кого исходник данного калькулятора?(консольное приложение) Все никак не получается написать, если кого интерисует могу скинуть...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
24.10.2013, 13:44  [ТС]     Не исчезают сердца при потере жизни в игре #21
Цитата Сообщение от alsav22 Посмотреть сообщение
Заход в someFunc2() вы проверяли, а заход оттуда в livesOfPlayerMinuse() проверяли?
Да, если три раза по бобру не попасть, то появляется экран окончания игры, то есть livesOfPlayerMinuse() отрабатывает три раза
scotty
28 / 28 / 1
Регистрация: 09.09.2012
Сообщений: 131
24.10.2013, 13:50     Не исчезают сердца при потере жизни в игре #22
Ну смотри если игровая логика работает хорошо, значит проблема в отрисовке. Там тебе же писали по этому поводу
Цитата Сообщение от Cra3y Посмотреть сообщение
А очищать место где выводятся "сердечки" пробовали?
Если перерисовка кадра не затрагивает это место, то они могут оставаться.
Может реально глюк в том что ты рисуешь поверх и не очищаешь картинку?
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,054
Завершенные тесты: 1
24.10.2013, 13:50     Не исчезают сердца при потере жизни в игре #23
каким образом проверяются жизни перед тем как игра проигрывается?(может там каким то боком другая переменная используется?)

я вижу только это - но тут нет геймовера о котором говорится ранее
Цитата Сообщение от dimakozyr Посмотреть сообщение
C++
1
2
if (o_DrawScene.getLivesOfPlayer() <= 0) // Если жизни закончились
o_DrawScene.setLivesOfPlayerToMax();
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 13:53     Не исчезают сердца при потере жизни в игре #24
Цитата Сообщение от dimakozyr Посмотреть сообщение
Да, если три раза по бобру не попасть, то появляется экран окончания игры, то есть livesOfPlayerMinuse() отрабатывает три раза
Сам заход непосредственно проверяли (не по косвенным признакам, типа окончания игры)?
Как тогда у вас это сочетается с окнчанием игры?
C++
1
2
    if (o_DrawScene.getLivesOfPlayer() <= 0)    // Если жизни закончились
        o_DrawScene.setLivesOfPlayerToMax();
При третьем заходе количество жизней опять три.

Добавлено через 1 минуту
Цитата Сообщение от Raali Посмотреть сообщение
каким образом проверяются жизни перед тем как игра проигрывается?
1 пост, второй код.
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,054
Завершенные тесты: 1
24.10.2013, 13:57     Не исчезают сердца при потере жизни в игре #25
Вообще кинул бы исходники полностью лучше) если не сверхсекретные
alsav22
24.10.2013, 14:02
  #26

Не по теме:

Цитата Сообщение от Raali Посмотреть сообщение
Вообще кинул бы исходники полностью лучше) если не сверхсекретные
Не сверхсекретные. Для меня, Бобры, уже как родные...

dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
24.10.2013, 18:44  [ТС]     Не исчезают сердца при потере жизни в игре #27
Цитата Сообщение от scotty Посмотреть сообщение
Может реально глюк в том что ты рисуешь поверх и не очищаешь картинку?
Может быть, но это делается с SDL_Lock/SDL_Unlock, а мне способ заново отрисовывать всю сцену полностью показался проще. Но надо будет посмотреть

Цитата Сообщение от alsav22 Посмотреть сообщение
Как тогда у вас это сочетается с окончанием игры?
Код C++
if (o_DrawScene.getLivesOfPlayer() <= 0) * *// Если жизни закончились
* * * * o_DrawScene.setLivesOfPlayerToMax();
При третьем заходе количество жизней опять три.
Когда жизней ноль, появляется сцена GameOver, после чего вызывается данный метод.
И после нажатия на кнопку новой игры получается, что жизней опять три

Цитата Сообщение от Raali Посмотреть сообщение
Вообще кинул бы исходники полностью лучше) если не сверхсекретные
Не, кидаю самую свежую версию

Цитата Сообщение от alsav22 Посмотреть сообщение
Не сверхсекретные. Для меня, Бобры, уже как родные...
Да уж, тут не поспоришь
Вложения
Тип файла: 7z Beaver.7z (4.59 Мб, 6 просмотров)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 18:55     Не исчезают сердца при потере жизни в игре #28
На вопрос не ответили:
Цитата Сообщение от alsav22 Посмотреть сообщение
Сам заход непосредственно проверяли (не по косвенным признакам, типа окончания игры)?
Из someFunc2() в livesOfPlayerMinuse().
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
24.10.2013, 19:04  [ТС]     Не исчезают сердца при потере жизни в игре #29
Цитата Сообщение от alsav22 Посмотреть сообщение
Сам заход непосредственно проверяли (не по косвенным признакам, типа окончания игры)?
Да, таким образом:
C++
1
2
3
4
inline void livesOfPlayerMinuse() {
    SDL_WM_SetCaption("minuse", NULL);
        livesOfPlayer--;
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 19:30     Не исчезают сердца при потере жизни в игре #30
Цитата Сообщение от dimakozyr Посмотреть сообщение
Да, таким образом:
Отладчиком пробовали пошагово код пройти?
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
24.10.2013, 19:36  [ТС]     Не исчезают сердца при потере жизни в игре #31
Цитата Сообщение от alsav22 Посмотреть сообщение
Отладчиком пробовали пошагово код пройти?
А как это можно сделать?
Если F5 нажать, то появляется игровое окно, нажимаю play и игра работает сама по себе, не знаю, как пошагово пройти
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 19:47     Не исчезают сердца при потере жизни в игре #32
Точку останова сделать в нужном месте. После F5, если программа дойдёт до этой точки, будет остановка. Дальше, шаг с обходом (функций и пр.) - F10, шаг с заходом - F11.
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
24.10.2013, 19:51  [ТС]     Не исчезают сердца при потере жизни в игре #33
Получилось, в livesOfPlayerMinuse() зашло три раза, а потом отрисовалась сцена game over
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 20:30     Не исчезают сердца при потере жизни в игре #34
В перерисовку, после livesOfPlayerMinuse(), заходы были?
Max Dark
24.10.2013, 20:50
  #35

Не по теме:

посмотрел исходники...
код ппс.
все мзги сломал

alsav22
24.10.2013, 21:11
  #36

Не по теме:

Цитата Сообщение от Cra3y Посмотреть сообщение

Не по теме:

посмотрел исходники...
код ппс.
все мзги сломал

Код не для слабонервных...

Max Dark
шКодер самоучка
1784 / 1585 / 576
Регистрация: 09.10.2013
Сообщений: 3,546
Записей в блоге: 6
Завершенные тесты: 2
24.10.2013, 21:37     Не исчезают сердца при потере жизни в игре #37

Не по теме:

1й шаблон порван тем, что вместо классов исползованы структуры
2й шаблон порван тем, что вместо флага выхода из цикла использовано exit(1)


под Ubuntu amd64 в цикл обработки кнопок совсем не попадает, совершенно нет реакции на клаву/мышку
Меню оно вообще не показывает(вернее показывает, но сразу начинается игра, задержка 0 сек)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 22:25     Не исчезают сердца при потере жизни в игре #38
C++
1
2
3
4
5
6
7
8
9
10
11
12
if (isButtonPressed == false)
        //o_DrawScene.livesOfPlayerMinuse();
        draw ->livesOfPlayerMinuse();
 
if (draw ->getLivesOfPlayer() <= 0 /*o_DrawScene.getLivesOfPlayer() <= 0*/) 
{   
    //SDL_RemoveTimer(timer_id);
    timeToDisplayBeaverInSeconds = MAX_TIME_TO_DISPLAY_BEAVER;  
    draw ->setLivesOfPlayerToMax(); // o_DrawScene.setLivesOfPlayerToMax();
    isItTimeForScene_4 = true;      
    return 0;
}
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
25.10.2013, 00:52  [ТС]     Не исчезают сердца при потере жизни в игре #39
Цитата Сообщение от Cra3y Посмотреть сообщение
1й шаблон порван тем, что вместо классов исползованы структуры
2й шаблон порван тем, что вместо флага выхода из цикла использовано exit(1)
да уж, нашли к чему придраться..

Добавлено через 6 минут
Цитата Сообщение от alsav22 Посмотреть сообщение
if (isButtonPressed == false)
* * * * //o_DrawScene.livesOfPlayerMinuse();
* * * * draw ->livesOfPlayerMinuse();
if (draw ->getLivesOfPlayer() <= 0 /*o_DrawScene.getLivesOfPlayer() <= 0*/)
{ *
* * //SDL_RemoveTimer(timer_id);
* * timeToDisplayBeaverInSeconds = MAX_TIME_TO_DISPLAY_BEAVER;*
* * draw ->setLivesOfPlayerToMax(); // o_DrawScene.setLivesOfPlayerToMax();
* * isItTimeForScene_4 = true;* * *
* * return 0;
Спасибо, теперь заработало

Цитата Сообщение от Cra3y Посмотреть сообщение
посмотрел исходники...
код ппс.
все мзги сломал
Цитата Сообщение от alsav22 Посмотреть сообщение
Код не для слабонервных...
А что не так с кодом? Не считая двух вышеописанный замечаний.
Правда интересно, просто как по мне - это хороший код, но
может, я не замечаю чего-либо?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 01:02     Не исчезают сердца при потере жизни в игре
Еще ссылки по теме:

Из жизни студента C++ - C++
требуться ли начинающему программисту C++ самому писать сортировку массивов(полностью понимать чтобы аж с закрытыми глазами писать) или же...

Матан в жизни программиста - C++
Добрый день уважаемые коллеги. Поделитесь опытом, на сколько вам реально пригодилась матем из вышки. Как часто сталкиваетесь с...

Время жизни объектов - C++
Вроде простая вещь, а не могу понять почему так. #include &lt;iostream&gt; using namespace std; int* f() { int a = 7; int...

C++11 время жизни переменных - C++
После долгого перерыва в программирование вновь спохватился и тут наткнулся на такую не ожиданность #include &lt;iostream&gt; using...

Вопрос жизни и смерти.. - C++
Парни помогите кто хорошо знает С++ просто если я к понидельнику не сдам ету програму мне прийдет писец... Вот собственно задание: ...


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

Или воспользуйтесь поиском по форуму:
Max Dark
шКодер самоучка
1784 / 1585 / 576
Регистрация: 09.10.2013
Сообщений: 3,546
Записей в блоге: 6
Завершенные тесты: 2
25.10.2013, 01:02     Не исчезают сердца при потере жизни в игре #40
Дело в привычке...
Я бы использовал массивы и циклы вместо кучи if и switch
но я нуб в программировании...
Yandex
Объявления
25.10.2013, 01:02     Не исчезают сердца при потере жизни в игре
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru