Вторник, 19 Ноября 2019, 19:35

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Записи участника » Raf_Tank [19]
Результаты поиска
Raf_TankДата: Пятница, 17 Февраля 2017, 12:59 | Сообщение # 1 | Тема: LIST iterator
был не раз
Сейчас нет на сайте
Цитата Gudleifr ()
Конец бесконечного цикла - это круто!

Я имел ввиду, что этот кусочек находится внутри некоторого бесконечно повторяющегося цикла.

Цитата Gudleifr ()
Впрочем, я Вам уже посоветовал все, что мог.

За это, конечно, спасибо!
Raf_TankДата: Пятница, 17 Февраля 2017, 12:39 | Сообщение # 2 | Тема: LIST iterator
был не раз
Сейчас нет на сайте
Всем доброго времени суток. Как понятно из названия вопрос будет по спискам. Я уже знаю как работать с одним списком, например:
Код

int main(){

list<chisla*> CH;
list<chisla*>::iterator it1;

//начало бесконечного цикла

for (it1 = CH.begin(); it1 != CH.end();){
   chisla *c = *it1;
   c->setRand();;
   if (c->randomedcount==0) { it1 = CH.erase(it1); delete c; }
   else it1++;
  }

//конец бесконечного цикла

return 0;
}

т.е. в коде выше я создаю список CH , который включает в себя объекты класса chisla, и указатель (итератор) к этому листу. Далее в цикле прохожусь по всем объектам списка и реализую для них функцию getRand, которая генерирует рандомное число и присваивает его переменной randomedcount. И если у какого-то элемента списка это число равно нулю, то этот элемент удаляется.

Но как работать одновременно с двумя списками? Например я прохожусь по всем элементам списка1 и сравниваю его с ПЕРВЫМ элементом списка2, если совпадений нет, то начинаю опять сравнивать ВСЕ элемента списка1 со ВТОРЫМ элементом списка2, если есть совпадение, то например вывожу на экран: the same и так далее пока не кончатся элементы списка2. Пробовал цикл в цикле, но либо не работает, либо вообще вылетает. Нужна помощь...
Raf_TankДата: Понедельник, 13 Февраля 2017, 22:02 | Сообщение # 3 | Тема: SFML проект
был не раз
Сейчас нет на сайте
Всем привет! На этот раз пришёл порадовать вас ( а может и огорчить) своим проектом. Игра в стиле танчиков 90-х, пока много недоработок т.к. поджимают сроки. Прошу оценить эту игру, оставив свой отзыв, как о геймплее, так и о содержании кода в целом. Для меня очень важно мнение каждого, заранее спасибо
https://yadi.sk/d/5WQZ81ii3E3D5C
p.s. распаковать, и в папке Debug найти exe файл и запустить его.
Raf_TankДата: Понедельник, 13 Февраля 2017, 14:38 | Сообщение # 4 | Тема: SFML
был не раз
Сейчас нет на сайте
Да, я писал на скорую руку, так что не смог правильно выразиться, в общем проблему я уже сам решил, так что спасибо за внимание)
Raf_TankДата: Среда, 08 Февраля 2017, 14:20 | Сообщение # 5 | Тема: SFML
был не раз
Сейчас нет на сайте
Нихао. Давно меня тут не было, т.к. не имел доступ в интернет. И вот получив его сразу бегу сюда. Делаю игру, рисую карту из тайлов. Собственно вот код
map.h
Код

#include <SFML/Graphics.hpp>
using namespace sf;
const int W1 = 5;
const int H1 = 5;
String map[H1] = {
    "WWWWW",
        "W        W",
        "W        W",
        "W        W",
        "WWWWW",


main.cpp
Код


//элемент прорисовки карты
for (int i = 0; i < H1; i++)
    for (int j = 0; j < W1; j++){

     if (map[i][j] == 'W') map1.setTextureRect(IntRect(64, 0, 32, 32));
     if (map[i][j] == ' ') map1.setTextureRect(IntRect(0, 0, 32, 32));
     map1.setPosition(j * 32, i * 32);
     window.draw(map1);
    }

Проблема такая: как поменять карту, не меняя её название, т.е. как было String map так и осталось, а содержание поменялось. Внутри int main() если менять map? Я помню как-то пытался, карта прорисовывалась как надо, но взаимодействие было как со старой. (p.s. код утрачен:(( )
Raf_TankДата: Воскресенье, 05 Февраля 2017, 12:16 | Сообщение # 6 | Тема: Как сделать релиз версию проекта?
был не раз
Сейчас нет на сайте
Скинул папку с проектом на другой ПК, без VS. Не запускает, постоянно требует различные DLL файлы, например: MSVCR120D.dll. Где-то читал что это из-за Debug версии или как-то так, мол надо делать Release. И собственно как её сделать, и сделает ли запуск на другом ПК возможным. + использую доп.библиотеку SFML, т.е. ещё и с ней как-то шаманить надо... Чесал различные форумы так и не нашёл чёткого ответа, или какой-либо инструкции. Если кто знает как это делать поделитесь пожалуйста опытом, было бы вообще отлично если бы ещё и про SFML Release рассказали. Всем добра!
p.s. (по началу пытался устанавливать всякие пакеты от Microsoft, потом искал отдельно каждую DLL-ку, но ни к чему так и не привело)
з.ы. на другом ПК запускал exe файл из папки Debug


Сообщение отредактировал Raf_Tank - Воскресенье, 05 Февраля 2017, 12:17
Raf_TankДата: Суббота, 04 Февраля 2017, 17:02 | Сообщение # 7 | Тема: опять ООП
был не раз
Сейчас нет на сайте
Цитата Gudleifr ()
В этом и проблема. Давайте по порядку:
1. move получает на вход ...
2. Считает ...., обращаясь к методу ..., который делает ...
3. Если ...
и. т.д.

АА, понял, вот:
move на вход получает время, которое постоянно сбрасывается
дальше инициализирую переменную, которая будет хранить в себе время таймера dir_clock в миллисекундах, т.е. если прошло 2 секунды то change_time eltn hfdyj 2000 миллисекунд.
Дальше проверяется прошли ли эти самые 2 секунды , и если да то переменная cdir (change dir скор.) становится true.
Далее идёт генерация случ. числа, я не понимаю как он работает, просто скопипастил его, и после того как мы перерандомим dir мы перезапускаем таймер, т.е. те самые 2 секунды сбрасываются и переменная cdir снова становится false чтобы дальше не поменять dir раньше времени.
P.S. почему-то этот генератор у меня работает только в цикле while при условии не катит, а выбрал его потому, что в интернете читал что обычная команда rand зависит от чего-то на компьютере, поэтому она будет одну и ту же цифру выдавать, а этот генератор зависит от этого неизвестного time(NULL) и поэтому каждый раз разные значения.
Raf_TankДата: Суббота, 04 Февраля 2017, 16:39 | Сообщение # 8 | Тема: опять ООП
был не раз
Сейчас нет на сайте
Цитата Gudleifr ()
Попробуйте перечислить то, что делает move, обычными человеческими словами.

Что-то я вообще ни одного слова не понял...
Raf_TankДата: Суббота, 04 Февраля 2017, 16:21 | Сообщение # 9 | Тема: опять ООП
был не раз
Сейчас нет на сайте
А вот и я. Новый день - новая проблема. Думал что уже почти доделал свой проект, но не тут то было. В общем есть класс врага, на основе которого создаются, собственно, сами враги. И логика их движения такова, что каждые 2 секунды меняется их направление, от 1 до 4 включительно. А проблема такая: есть несколько объектов e1 e2 e3 класса Enemy , и когда проходит 2 секунды (p.s. время отсчитываю через sfml таймер) то переменной, которая отвечает за направление задаётся значение которое одинаково для всех объектов данного класса, из-за чего мои мобы ходят так синхронно, как-будто занимались строевой подготовкой 20+ лет. Как сделать чтобы для каждого объекта класса рандомилось своё значение, а не общее для всех. Обрезанный кусочек кода:
Код

class Enemy{
private:
    
    
public:
    bool cdir = 0;
    Clock dir_clock;
    float change_time;
    int dir;
    int *ptrdir = &dir;
Enemy(...... int dir){....}
void move(float game_time){
  change_time = dir_clock.getElapsedTime().asMilliseconds();
  if (change_time >= 2000) cdir = 1;
  srand(time(NULL));
  while (cdir == 1){
   dir = 1 + rand() % 4;
   dir_clock.restart();
   cdir = 0;
  }
  
  if (dir == 1){}
  if (dir == 2){}
  if (dir == 3){}
  if (dir == 4){}
  
    }
int main() {
Enemy e1(....,   2); // как видно я им даже изначально задаю разные направления, с которыми они появятся
Enemy e2(......, 1);
Enemy e3(......, 4);
e1.move(game_time);
e2.move(game_time);
e3.move(game_time);

return 0;
}


Как-то так, надеюсь всё понятно
p.s. все нужные библиотеки подключены
Код
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <ctime>


Сообщение отредактировал Raf_Tank - Суббота, 04 Февраля 2017, 16:22
Raf_TankДата: Пятница, 03 Февраля 2017, 14:47 | Сообщение # 10 | Тема: ООП и сфмл
был не раз
Сейчас нет на сайте
Цитата Gudleifr ()
Надо передавать по указателю (*)

вот про указатель у меня была мысль, но я не особо понял как реализовать, можно поподробней, или желательно кусочек кода. p.s. почему ты так хейтишь С и плюсы?
Raf_TankДата: Пятница, 03 Февраля 2017, 14:22 | Сообщение # 11 | Тема: ООП и сфмл
был не раз
Сейчас нет на сайте
Всем здравия. Захотел я в качестве школьного проекта написать игру (кстати норм ли для 10 класса?) и такой прикол. Есть два класса (стула), один выше другой ниже (но в этом наверное нет разницы, но всё-же), во втором классе есть функция которая при выполнении определённого условия меняет переменную в первом, вышестоящем, классе. Но она почему-то не меняется... вот кусочек кода:
Код

class Enemy{
private:.... //другие ненужные в этом вопросе переменные
public:
    int dir;
    int hp;
    float x, y;
    Sprite sprite;
    Enemy(String F,float X, float Y, const int W, const int H, int dir){//кусочек конструктора}
void move(float game_time){
                if (dir == 1){ sprite.setTextureRect(IntRect(0, 0, w, h)); sprite.move(0, -0.1*game_time); }
  if (dir == 2){ sprite.setTextureRect(IntRect(58, 0, w, h)); sprite.move(0,0.1*game_time); }
  if (dir == 3){ sprite.setTextureRect(IntRect(58, 58, w, h)); sprite.move(0.1*game_time,0); }
  if (dir == 4){ sprite.setTextureRect(IntRect(0, 58, w, h)); sprite.move(-0.1*game_time, 0); }
  }
///////////
class bot_shoot{
private:\\\\\\
public:
    bot_shoot(String F, String F2){опять конструктор}
void shoot_bot(float game_time, Enemy espr){ //вот и сама функция
   reload_time = reload.getElapsedTime().asMilliseconds();
   x = espr.sprite.getPosition().x;//с этими двумя строками проблем нет, т.к. на сколько я понял я лишь беру переменные из другого класса, а не меняю их.
   y = espr.sprite.getPosition().y;//
                 if (ysl) { espr.dir = 1; reload.restart(); } // ysl- некоторое условие.
   if (ysl) { espr.dir = 2; reload.restart(); }
   if (ysl) { espr.dir = 3; reload.restart(); }
   if (ysl) { espr.dir = 4; reload.restart(); }
    }
};
int main(){
Enemy e1(parametri_constructora);
bot_shoot bot1(game_time, e1);
bot1.shoot_bot(game_time, e1);

return 0;
}


собственно ошибки никакой нет, компилятор это всё запускает, но! Переменная dir в классе enemy так и не меняется, и соответственно спрайт не двигается так, как мне надо, как мне изменить эту переменную? p.s. простите за возможно корявое сокращение и изуродование кода, но старался чтобы было без лишнего и максимум понятно.
Raf_TankДата: Четверг, 02 Февраля 2017, 09:50 | Сообщение # 12 | Тема: нужна помощь с классами
был не раз
Сейчас нет на сайте
Цитата Raf_Tank ()
Так:

main.cpp

---

или так:

enemy.hpp

bullet.hpp

player.hpp

main.cpp

---

а еще лучше так

enemy.hpp

enemy.cpp

bullet.hpp

bullet.cpp

player.hpp

player.cpp

main.cpp


Спасибо большое! Получилось!
Raf_TankДата: Четверг, 02 Февраля 2017, 05:39 | Сообщение # 13 | Тема: нужна помощь с классами
был не раз
Сейчас нет на сайте
Цитата Gudleifr ()
Размер же "Bullet" на этот момент не известен, известно только, что это класс

компилятор даже не знает что это класс, о чём говорит вторая ошибка...

Добавлено (02 февраля 2017, 05:39)
---------------------------------------------
Код

#include <iostream>
using namespace std;

class Enemy{
public:
float ex;
Enemy(float e){
ex = e;
}
};
class Bullet;
class Player{
public: float xx;
void sum(Enemy e, Bullet b){
xx = e.ex + b.bx;
cout << xx;
}

};
class Bullet{
public:
float bx;

Bullet(float b){
bx = b;
}
};

int main()
{
bool a = 1;
Enemy e1(1.25);
Bullet b1(1.75);
Player p1;
p1.sum(e1, b1);
return 0;
}

Ошибка    1    error C2027: использование неопределенного типа "Bullet"    c:\проект1\проект1\main.cpp    18    1    Проект1
Ошибка    2    error C2228: выражение слева от ".bx" должно представлять класс, структуру или объединение    c:\проект1\проект1\main.cpp    18    1    Проект1


Сообщение отредактировал Raf_Tank - Четверг, 02 Февраля 2017, 05:39
Raf_TankДата: Среда, 01 Февраля 2017, 17:06 | Сообщение # 14 | Тема: нужна помощь с классами
был не раз
Сейчас нет на сайте
Цитата Saitei ()

Проблема в том, что реализация Bullet находится снизу. Очевидно же: использование неопределённого типа

Это я вижу, я не совсем корректно поставил вопрос. Правильнее будет спросить как решить эту проблему без сдвига классов? Я вообще не изучал с++ ни в школе, ни где-либо ещё, учусь по видеоурокам. Так вот в одном из таких уроков была похожая ситуация с двумя классами, и данную проблему решили таким простым путём, как своего рода "переопределение" класса выше. Как я и сделал, над классом Player есть строка, которая якобы должна дать понять компилятору, что где-то в коде есть этот самый класс Bullet, но почему-то не работает...
Raf_TankДата: Среда, 01 Февраля 2017, 15:58 | Сообщение # 15 | Тема: нужна помощь с классами
был не раз
Сейчас нет на сайте
Столкнулся с такой проблемой, что ниже стоящий класс не может использовать выше стоящий класс как тип данных, хотя я и прописал перед ним
class UpperClassName; Вот скрин для понимания.
http://s1.uploadpics.ru/images/-yCmgfdmlf.png
Подскажите пожалуйста что не так.
Raf_TankДата: Среда, 18 Января 2017, 15:21 | Сообщение # 16 | Тема: нужна помощь по SFML
был не раз
Сейчас нет на сайте
я хочу настроить стрельбу, код выглядит вот так:
if(Keyboard::isKeyPressed(Keyboard::Space)) bullet.move(-2,0);
проблема в том, что спрайт bullet двигается только когда зажат пробел, а мне надо чтобы программа учитывала сам факт был ли нажат пробел, как это сделать и желательно попроще? Вообще есть идея сделать это с помощью sf::Event, но я в этом не разбираюсь, так что прошу помощи
Raf_TankДата: Пятница, 13 Января 2017, 13:12 | Сообщение # 17 | Тема: проблема со временем в sfml;
был не раз
Сейчас нет на сайте
если скорость при движении спрайта его скорость не привязывать ко времени, то картинка идёт гладко (как я понял зависит от процессора), а если я начинаю умножать скорость движения на время, то спрайт двигается какими-то разными отрывками иногда замедляясь и ускоряясь, сам код времени:
Clock clock;
float time = clock.getElapsedTime().asMicroseconds();
clock.restart();
time = time / 800;
в чём проблема? Сам код по объёму пока не большой, так что на перегрузку списать нельзя ;) Как сделать привязку ко времени, чтобы спрайт двигался нормально?

Добавлено (13 января 2017, 13:12)
---------------------------------------------
Всё, проблема решена, загвоздка была в том, что я писал Clock clock; внутри бесконечного цикла

Raf_TankДата: Пятница, 13 Января 2017, 04:15 | Сообщение # 18 | Тема: нужна помощь по SFML
был не раз
Сейчас нет на сайте
Спасибо!! Я уже потерял всякую надежду, но ты меня спас!
Цитата Arcanis ()
Код

sf::Sprite sprite;
float x, y;

//можно так
x = sprite.getPosition().x;
y = sprite.getPosition().y;

//или так
sf::Vector2f vector;
vector = sprite.getPosition();

x = vector.x;
y = vector.y;
Raf_TankДата: Четверг, 12 Января 2017, 15:53 | Сообщение # 19 | Тема: нужна помощь по SFML
был не раз
Сейчас нет на сайте
В общем такая проблема, я хочу сделать стрельбу персонажа, но для этого мне нужно знать текущие координаты спрайта героя, чтобы нарисовать под нимм пулю и задать ей направление, но я не знаю как узнать текущие координаты спрайта, помогите пожалуйста!
Форум игроделов » Записи участника » Raf_Tank [19]
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2019 Рейтинг