Результаты поиска
| |
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 |
был не раз
Сейчас нет на сайте
| В общем такая проблема, я хочу сделать стрельбу персонажа, но для этого мне нужно знать текущие координаты спрайта героя, чтобы нарисовать под нимм пулю и задать ей направление, но я не знаю как узнать текущие координаты спрайта, помогите пожалуйста!
|
|
| |
|