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

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

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

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

23.10.2013, 13:08. Просмотров 1514. Ответов 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
Всем привет. Пишу программу-тесты на С++. Для того, чтобы отвечали на вопросы честно, появилась идея сделать следующее: сделать форму...

46
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 479
24.10.2013, 19:36  [ТС] #31
Цитата Сообщение от alsav22 Посмотреть сообщение
Отладчиком пробовали пошагово код пройти?
А как это можно сделать?
Если F5 нажать, то появляется игровое окно, нажимаю play и игра работает сама по себе, не знаю, как пошагово пройти
0
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.10.2013, 19:47 #32
Точку останова сделать в нужном месте. После F5, если программа дойдёт до этой точки, будет остановка. Дальше, шаг с обходом (функций и пр.) - F10, шаг с заходом - F11.
1
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 479
24.10.2013, 19:51  [ТС] #33
Получилось, в livesOfPlayerMinuse() зашло три раза, а потом отрисовалась сцена game over
0
alsav22
5437 / 4832 / 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
шКодер самоучка
1874 / 1674 / 608
Регистрация: 09.10.2013
Сообщений: 3,719
Записей в блоге: 6
Завершенные тесты: 2
24.10.2013, 21:37 #37

Не по теме:

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


под Ubuntu amd64 в цикл обработки кнопок совсем не попадает, совершенно нет реакции на клаву/мышку
Меню оно вообще не показывает(вернее показывает, но сразу начинается игра, задержка 0 сек)
0
alsav22
5437 / 4832 / 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
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 479
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
шКодер самоучка
1874 / 1674 / 608
Регистрация: 09.10.2013
Сообщений: 3,719
Записей в блоге: 6
Завершенные тесты: 2
25.10.2013, 01:02 #40
Дело в привычке...
Я бы использовал массивы и циклы вместо кучи if и switch
но я нуб в программировании...
0
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 479
25.10.2013, 08:24  [ТС] #41
Цитата Сообщение от Cra3y Посмотреть сообщение
но я нуб в программировании...
Как и все мы
0
Raali
639 / 343 / 42
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
25.10.2013, 11:15 #42
ты походу сцену не перерисовываешь вообще, залей перед рисованием все каким то цветом сначала (SDL_FillRect)
0
dimakozyr
158 / 25 / 1
Регистрация: 17.08.2013
Сообщений: 479
25.10.2013, 11:17  [ТС] #43
Цитата Сообщение от Raali Посмотреть сообщение
ты походу сцену не перерисовываешь вообще, залей перед рисованием все каким то цветом сначала
Да все, уже разобрались, надо было указатели использовать
0
alsav22
5437 / 4832 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.10.2013, 13:40 #44
Цитата Сообщение от dimakozyr Посмотреть сообщение
Да все, уже разобрались, надо было указатели использовать
Дело там не в указателях, а в невнимательности и непродуманности кода.
Цитата Сообщение от dimakozyr Посмотреть сообщение
А что не так с кодом? Не считая двух вышеописанный замечаний.
Правда интересно, просто как по мне - это хороший код, но
может, я не замечаю чего-либо?
По-моему мнению, отвратительный код. Только и остаётся, что периодически костыли подставлять. Я когда-то уже предлагал его заново переписать.

Не по теме:

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

0
Raali
639 / 343 / 42
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
25.10.2013, 13:45 #45
Цитата Сообщение от alsav22 Посмотреть сообщение
непродуманности кода.
в DrawScene уж точно не нужно держать жизни игрока
и вообще нужно разграничивать Update и Render
0
25.10.2013, 13:45
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 так и остается красным. Как сделать...


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

Или воспользуйтесь поиском по форуму:
45
Ответ Создать тему
Опции темы

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