Пятница, 03 Мая 2024, 21:48

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Вопрос-Ответ (C++)
KornivalДата: Воскресенье, 04 Сентября 2011, 19:10 | Сообщение # 1
The Witcher
Сейчас нет на сайте
Чтобы не создавать отдельную тему на каждый глупый вопрос, предлагаю задавать их здесь.

Saitei: все вопросы по С задаём в теме Вопрос-Ответ (С). Благодарю за внимание!
MrSmithДата: Понедельник, 19 Марта 2012, 21:26 | Сообщение # 161
EG Development
Сейчас нет на сайте
Нет, реализация в отдельном cpp файле с включенным заголовочным. Пример:
//myclass.h

class myclass{

void myfunc();
}

//myclass.cpp

#include "myclass.h"

void myclass::myfunc(){

}


Учу С++, рисую пиксельарты, использую D, Lua с LOVE
Skype: mrsmith333
AgentToxaДата: Вторник, 20 Марта 2012, 11:53 | Сообщение # 162
был не раз
Сейчас нет на сайте
Большое спасибо всем за помощь.

Учусь программировать на C++)
goldsphereДата: Вторник, 20 Марта 2012, 12:09 | Сообщение # 163
заслуженный участник
Сейчас нет на сайте
Привет всем...через дня два после установки glut у меня при входе в браузер стала выскакивать такая ошибка

Браузер то открывается, но ошибка мне не нравится!
Надеюсь в тему!Как мне избавиться от неё?


FinderX - Android Аркада

Сообщение отредактировал goldsphere - Вторник, 20 Марта 2012, 12:10
_-AndruxA-_Дата: Вторник, 20 Марта 2012, 12:17 | Сообщение # 164
почетный гость
Сейчас нет на сайте
goldsphere,
А у меня при включении компьютера такая фигня:((


За помощь можно и "+" поставить!
Лёха2008Дата: Среда, 21 Марта 2012, 09:59 | Сообщение # 165
изучаю c++
Сейчас нет на сайте
Quote (goldsphere)
через дня два после установки glut у меня при входе в браузер стала выскакивать такая ошибка

Хм... Как glut может быть связан с браузером? Ищи проблему в другом. Попробуй скачать visual c++ 2010 redistributable
goldsphereДата: Среда, 21 Марта 2012, 11:16 | Сообщение # 166
заслуженный участник
Сейчас нет на сайте
Лёха2008, Cпасибо, довольно странно, но оно прошло само.Я тоже скорее знал, что глут тут не причём тем более раз ошибка возникла через пару дней..

FinderX - Android Аркада
Programmist001Дата: Четверг, 22 Марта 2012, 18:47 | Сообщение # 167
был не раз
Сейчас нет на сайте
Всем привет кто-бы посоветовал мне учителя по С++
Разумеется бесплатно у меня с финансами плоховата
Чем я могу платить только "БОЛЬШОЙ БЛАГОДАРНОСТЬЮ"
Писать в ЛС. help


Модераторы гандоны ((
НохчиДата: Четверг, 22 Марта 2012, 18:57 | Сообщение # 168
заслуженный участник
Сейчас нет на сайте
Quote (Programmist001)
Всем привет кто-бы посоветовал мне учителя по С++

Спорим, он его не выучит? cool


Многие вопросы по Windows отпадут, если посмотреть тут

Сообщение отредактировал Нохчи - Четверг, 22 Марта 2012, 18:57
warzesДата: Четверг, 22 Марта 2012, 18:58 | Сообщение # 169
участник
Сейчас нет на сайте
suspect берешь книгу по c++, читаешь, что не понятно спрашиваешь.

Мой блог
Вики DirectX
DirolДата: Четверг, 22 Марта 2012, 23:57 | Сообщение # 170
был не раз
Сейчас нет на сайте
Quote (Programmist001)
кто-бы посоветовал мне учителя по С++

Твои усидчивость и терпение - твои учителя. Лекции, уроки, учебники, видео-обучалки - всего этого хлама полно. Конечно это не значит, что проблем с обучением возникнуть не должно, нужно много читать. Если возникают вопросы, спрашиваешь у других, но главное - никогда не проси кого-то сделать что-нибудь за тебя. Только подсказки или объяснения. Так с лету никто тебя не научит, даже если бы взялся.


Science is interesting! If you don't agree, you can f*ck off.
goldsphereДата: Суббота, 24 Марта 2012, 12:51 | Сообщение # 171
заслуженный участник
Сейчас нет на сайте
Подскажите пожалуйста : до какого уровня необходимо выучить С++, чтобы можно было начинать работать с движком?

FinderX - Android Аркада
warzesДата: Суббота, 24 Марта 2012, 13:21 | Сообщение # 172
участник
Сейчас нет на сайте
goldsphere, работать с готовым? среднего достаточно. То есть синтаксис, более-менее хорошее понимание ООП, и желательно знание паттернов (хотя бы потому что это позволит быстрее понять как и что работает в движке - синглтоны, фабрики, наблюдатели - это минимум который почти во всех движках есть)

Написать свой - нужно такое знание, когда понимаешь что больше нечего изучать по книгам (не в смысле что ты мастер :D, а тогда когда понимаешь что сколько бы книги не читал - знаний не прибавляется)


Мой блог
Вики DirectX
goldsphereДата: Суббота, 24 Марта 2012, 15:01 | Сообщение # 173
заслуженный участник
Сейчас нет на сайте
warzes, Спасибо буду стремиться!

FinderX - Android Аркада
SnuuxДата: Суббота, 24 Марта 2012, 18:15 | Сообщение # 174
постоянный участник
Сейчас нет на сайте
Quote (warzes)
синглтоны, фабрики, наблюдатели - это минимум который почти во всех движках есть)

Почитал об этом и сильно расстроился. Это же сколько нужно учить язык программирования и теорию информатики, чтоб начать пользоваться движком?
Неужели все настолько сложно и не реально начать делать "нормальные" (не консольные) игры без этого?

P.S. В общем теперь вопрос по теме (но предыдущие вопросы тоже меня волнуют):
Как сделать управление "со стрелок" в консоли? Все перепробовал get(); getchar(); kbhit(); но не помогает, и главное гугл - молчит по этому поводу. Я уверен - это точно есть, но найти что-то - совсем не могу.

За помощь - заслуженный плюс, как всегда)

Добавлено (24.03.2012, 18:15)
---------------------------------------------
Вот мне друг помог (насчет вопроса со стрелками):

Code
#include <iostream> // cin, cout
#include <clocale>  // поддержка русского языка
#include <conio.h>  // _getch()
#include <stdlib.h> // поддержка функции очистки экрана system("cls")

using namespace std;

int main()
{

setlocale(LC_CTYPE,"Russian"); // установка русского языка

char act;    // переменная для хранения ввода пользователя
int ch;      // ввод пользователя приведённый к типу int
int x = 0;   // две переменные для хранения координат пользователя
int y = 0;
char map[15][20]; // двумерный массив для хранения игровой карты

// блок инициализации массива
// внешний цикл отвечает за строки
for (int i = 0; i< 15; i++)
{
  // внутренний цикл отвечает за столбцы
  for (int j = 0; j< 20; j++)
  {
   map[i][j] = ' ';
  }
}

map[0][0] = 'Т'; // помещаем игровой персонаж в начало координат
while (1)
{
  system("cls"); // вызов функции очистки экрана

  for (int i = 0; i < 15; i++)
  {
   for (int j = 0; j < 20; j++)
   {
    cout << map[i][j]; // в циклах поэлементно выводится массив
   }
   cout << "\n"; // переход на новую строку после каждого "ряда"
  }

  act = _getch();
  ch = static_cast<int>(act);

  switch (static_cast<int>(act))
  {
   case -32:
   break;
   case 27:
    exit(0);
   break;
   case 75:
    map[x][y] = ' '; // "Убираем" объект со старой координаты
    y--;             // изменяем координаты
    map[x][y] = 'Т'; // "рисуем" объект на новом месте
   break;
   case 77:
    map[x][y] = ' ';
    y++;
    map[x][y] = 'Т';
   break;
   case 80:
    map[x][y] = ' ';
    x++;
    map[x][y] = 'Т';
   break;
   case 72:
    map[x][y] = ' ';
    x--;
    map[x][y] = 'Т';
   break;
  }
} // конец цикла while

  _getch();
  return 0;
}


Он сказал, что это не его, так что если найдется автор, то пусть напишет в тему или в ЛС, я поставлю плюсик и напишу, что это его код.
goldsphereДата: Понедельник, 26 Марта 2012, 08:10 | Сообщение # 175
заслуженный участник
Сейчас нет на сайте
Народ, кто может попроще объяснить мне, что такое прототип функции и зачем он нужен, а то из книги никак не могу понять...(

FinderX - Android Аркада
НохчиДата: Понедельник, 26 Марта 2012, 09:23 | Сообщение # 176
заслуженный участник
Сейчас нет на сайте
goldsphere, представь, что у тебя очень много кода и он разнесен по нескольким .cpp файлам. В одном из этих файлов реализуется некая кошерная функция, которую тебе понадобилось вызвать из кода в другом файле. Что будешь делать?

Многие вопросы по Windows отпадут, если посмотреть тут

Сообщение отредактировал Нохчи - Понедельник, 26 Марта 2012, 09:23
goldsphereДата: Понедельник, 26 Марта 2012, 10:13 | Сообщение # 177
заслуженный участник
Сейчас нет на сайте
возможно эту функцию можно записать в .h?И вызвать помощью #include?Или я так понимаю вы намекаете, что именно для этого нужен прототип?Странно, но в книге, код не разносили по разным файлам...А каково применение прототипов, если у нас код только в 1 cpp файле?

FinderX - Android Аркада
НохчиДата: Понедельник, 26 Марта 2012, 10:23 | Сообщение # 178
заслуженный участник
Сейчас нет на сайте
Quote (goldsphere)
возможно эту функцию можно записать в .h?

Если запихнуть реализацию функции в .h и подключить этот хедер к нескольким .cpp, то компилер начнет орать о multiple definition, поэтому нормальные люди в хедерах пишут прототип и подключают его везде, где функция используется. А реализация может быть только в одном .cpp.

Quote (goldsphere)
Странно, но в книге, код не разносили по разным файлам...

Короткие примеры из книг разносить смысла нет, вот когда размер кода переваливает за несколько сотен строк, приходит понимание, что все это г* нужно как-то структуризировать.

Quote (goldsphere)
А каково применение прототипов, если у нас код только в 1 cpp файле?

Вообще-то в таком случае оно не нужно, но можно сделать так:
Code

int add(int a, int b);
int main()
{
     printf("%d",add(10,2));
     return 0;
}

int add(int a, int b)
{
     return a+b;
}

Ну ты понял happy


Многие вопросы по Windows отпадут, если посмотреть тут
goldsphereДата: Понедельник, 26 Марта 2012, 10:33 | Сообщение # 179
заслуженный участник
Сейчас нет на сайте
Ясно, более-менее понял, спасибо)

Добавлено (26.03.2012, 10:33)
---------------------------------------------
Всё таки хорошо бы ещё пример, когда код разделён в нескольких файлах


FinderX - Android Аркада
НохчиДата: Понедельник, 26 Марта 2012, 10:50 | Сообщение # 180
заслуженный участник
Сейчас нет на сайте
Ок. У меня есть файл main.cpp, в котором прописывается вся игровая логика и есть файл utils.cpp, в которым находятся некоторые полезные функции, которые при необходимости я без каких-либо изменений могу использовать в следующем своем проекте. Вот их урезанные варианты:

utils.h
Code

#ifdef _DEBUG
#define    CheckPtr(ptr, msg, needExit)      \
   do                    \
   {        \
    if(NULL == ptr){      \
    printf("'%s' returned null pointer\n",msg);   \
    if(needExit)      \
    ExitProcess(1);      \
    }       \
   }while(0)   

#else   
#define CheckPtr(fname)
#endif   

VOID MakeColorKey(HGE *hge,HTEXTURE tex, DWORD color);


utils.cpp
Code

/*
   Функция делает участки с цветом color в текстуре tex прозрачными
*/
VOID MakeColorKey(HTEXTURE tex, DWORD color)
{
   HTEXTURE hTex = tex;
     
   DWORD texWidth = Texture_GetWidth(hTex);
   DWORD texHeight = Texture_GetHeight(hTex);

   DWORD *Bitmap = Texture_Lock(hTex,FALSE);
   CheckPtr(Bitmap,"'Bitmap' in 'MakeColorKey'",1);

   for(DWORD i = 0; i<texWidth*texHeight; i++)
   {
    if(Bitmap[i] == color)   
     Bitmap[i] = 0;
   }
                return;
}


main.cpp
Code

include "utils.h"
int main()
{
        HTEXTURE tex = new Sprite("img.png");
        MakeColorKey(tex,0xFFFFFFFF);
        Sprite *spr = new Sprite(tex);
        CheckPtr(spr,'spr in main()',true);
        spr->render()
}

Пример с классами был бы лучше, но тебе насколько я понял до них еще далеко.


Многие вопросы по Windows отпадут, если посмотреть тут

Сообщение отредактировал Нохчи - Понедельник, 26 Марта 2012, 10:53
Форум игроделов » Программирование » C/C++ » Вопрос-Ответ (C++) (Вопросы по С++ задаём здесь.)
Поиск:

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