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

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

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

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

23.10.2013, 13:08. Просмотров 1423. Ответов 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 то столько сердец и отображается, тут все нормально
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2013, 13:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не исчезают сердца при потере жизни в игре (C++):

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

Зависание формы при потере фокуса при выполнении в ней фоновых операций - Visual Basic .NET
Здравствуйте, коллеги. Возник следующий вопрос, который не получается решить самостоятельно. Информации по нему найти не удалось,...

Ошибка 0x000000101 , при игре 10 минутной игре в Dota 2, CS:GO - BSOD
Имя события проблемы: BlueScreen Версия ОС: 6.1.7600.2.0.0.256.48 Код языка: 1049 Дополнительные сведения об этой проблеме: ...

Переход на страницу при потере фокуса - PHP
Привет всем. Подскажите пожалуйста следующее. Вот код: &lt;form class=&quot;forma&quot; method=&quot;post&quot; action=&quot;xxx&quot;&gt; &lt;select name=&quot;tip&quot;...

Событие при потере фокуса поля - C#
Есть ли такое событие при потере фокуса?? в visual studio s# ultimate 2012 не нашёл такого!

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
24.10.2013, 19:36  [ТС] #31
Цитата Сообщение от alsav22 Посмотреть сообщение
Отладчиком пробовали пошагово код пройти?
А как это можно сделать?
Если F5 нажать, то появляется игровое окно, нажимаю play и игра работает сама по себе, не знаю, как пошагово пройти
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 19:47 #32
Точку останова сделать в нужном месте. После F5, если программа дойдёт до этой точки, будет остановка. Дальше, шаг с обходом (функций и пр.) - F10, шаг с заходом - F11.
1
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
24.10.2013, 19:51  [ТС] #33
Получилось, в livesOfPlayerMinuse() зашло три раза, а потом отрисовалась сцена game over
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 20:30 #34
В перерисовку, после livesOfPlayerMinuse(), заходы были?
1
Max Dark
24.10.2013, 20:50
  #35

Не по теме:

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

0
alsav22
24.10.2013, 21:11
  #36

Не по теме:

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

Не по теме:

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

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

0
Max Dark
шКодер самоучка
1825 / 1627 / 592
Регистрация: 09.10.2013
Сообщений: 3,634
Записей в блоге: 6
Завершенные тесты: 2
24.10.2013, 21:37 #37

Не по теме:

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


под Ubuntu amd64 в цикл обработки кнопок совсем не попадает, совершенно нет реакции на клаву/мышку
Меню оно вообще не показывает(вернее показывает, но сразу начинается игра, задержка 0 сек)
0
alsav22
5420 / 4816 / 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;
}
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 Посмотреть сообщение
Код не для слабонервных...
А что не так с кодом? Не считая двух вышеописанный замечаний.
Правда интересно, просто как по мне - это хороший код, но
может, я не замечаю чего-либо?
0
Max Dark
шКодер самоучка
1825 / 1627 / 592
Регистрация: 09.10.2013
Сообщений: 3,634
Записей в блоге: 6
Завершенные тесты: 2
25.10.2013, 01:02 #40
Дело в привычке...
Я бы использовал массивы и циклы вместо кучи if и switch
но я нуб в программировании...
0
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
25.10.2013, 08:24  [ТС] #41
Цитата Сообщение от Cra3y Посмотреть сообщение
но я нуб в программировании...
Как и все мы
0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,061
Завершенные тесты: 1
25.10.2013, 11:15 #42
ты походу сцену не перерисовываешь вообще, залей перед рисованием все каким то цветом сначала (SDL_FillRect)
0
dimakozyr
157 / 24 / 1
Регистрация: 17.08.2013
Сообщений: 461
25.10.2013, 11:17  [ТС] #43
Цитата Сообщение от Raali Посмотреть сообщение
ты походу сцену не перерисовываешь вообще, залей перед рисованием все каким то цветом сначала
Да все, уже разобрались, надо было указатели использовать
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 13:40 #44
Цитата Сообщение от dimakozyr Посмотреть сообщение
Да все, уже разобрались, надо было указатели использовать
Дело там не в указателях, а в невнимательности и непродуманности кода.
Цитата Сообщение от dimakozyr Посмотреть сообщение
А что не так с кодом? Не считая двух вышеописанный замечаний.
Правда интересно, просто как по мне - это хороший код, но
может, я не замечаю чего-либо?
По-моему мнению, отвратительный код. Только и остаётся, что периодически костыли подставлять. Я когда-то уже предлагал его заново переписать.

Не по теме:

И таймер жалко... Такой хороший был, и столько времени на его запуск было потрачено...

0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,061
Завершенные тесты: 1
25.10.2013, 13:45 #45
Цитата Сообщение от alsav22 Посмотреть сообщение
непродуманности кода.
в DrawScene уж точно не нужно держать жизни игрока
и вообще нужно разграничивать Update и Render
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2013, 13:45
Привет! Вот еще темы с ответами:

Обработка ошибки при потере COM порта - Visual Basic .NET
Добрый день! Пока не приходилось сталкиваться с обработкой ошибок, поэтому обращаюсь к вам. Есть программа, которая работает с COM...

Закрыть форму при потере фокуса - MS Access
Простое применение Private Sub Form_LostFocus() DoCmd.Close acForm, Me.Name End Sub выдаёт ошибку. Использование Deactivate тоже...

Переключение на 3G-модем при потере соединения - CMD/BAT
Доброго времени Помогите решить вопрос. Есть компьютер, который находится в локальной сети(интернет соединение через шлюз). Нужно...

Сменить цвет при потере фокуса - jQuery
При нажатии на инпут1 к границе инпута1 применяется красный цвет,но при нажатии на инпут2, инпут1 так и остается красным. Как сделать...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.10.2013, 13:45
Ответ Создать тему
Опции темы

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