Четверг, 28 Марта 2024, 23:11

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

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Форум игроделов » Программирование » C/C++ » Помогите пожалуйста новичку. Есть вопросы
Помогите пожалуйста новичку. Есть вопросы
SaiteiДата: Пятница, 08 Июня 2012, 14:29 | Сообщение # 21
старожил
Сейчас нет на сайте
Quote (jiumx60rus)
Saitei, молодца

Ой... Да ладно...) Я же ещё новичок. Кроме того программа иногда работает некорректно, думаю как исправить sad

Думаю, что дело в типе переменных. Но мне пока что известны лишь такие типы: int, char, double, float sad

Добавлено (07.06.2012, 23:10)
---------------------------------------------
P.S. Вообще корректно (так, как я запланировал) она должна работать вот так:


Хотелось бы узнать как исправить. Работать с большими числами мне рано или поздно придется, я думаю

Добавлено (08.06.2012, 14:29)
---------------------------------------------

Quote (Saitei)
#include <iostream>
using namespace std;
int main()  
{
setlocale( LC_ALL, "Russian" );  
cout << "Это моя первая программа на С++." << endl;
cout << "Не знаю - велик ли успех за два дня, но теперь я хотя бы что-то умею писать." << endl;
cout << "Первой моей программой будет калькулятор, умеющий складывать цифры (переменные a и b)." << endl;
int a,b;
start:
cout << endl << "Введите первое числоî:";
cin >> a;
cout << "Введите второе число:";
cin >> b;
cout << "Результат:" << a+b;
goto start;
return 0;     
}


Quote (Saitei)

Я правда вот не пойму... У переменных типа int ограничен диапазон? При вводе больших значений программа работает некорректно

Мне помогут? Хочу узнать в чём проблема
НохчиДата: Пятница, 08 Июня 2012, 14:33 | Сообщение # 22
заслуженный участник
Сейчас нет на сайте
Quote (Saitei)
Я правда вот не пойму... У переменных типа int ограничен диапазон? При вводе больших значений программа работает некорректно

Есть. Обычно unsigned int может принимать значение, чуть большее четырех миллиардов, а signed int от -2 до 2 миллиардов.


Многие вопросы по Windows отпадут, если посмотреть тут
SaiteiДата: Пятница, 08 Июня 2012, 14:45 | Сообщение # 23
старожил
Сейчас нет на сайте
Нохчи, я ещё не знаю что такое "unsigned" и "signed". Объясните пожалуйста
НохчиДата: Пятница, 08 Июня 2012, 14:48 | Сообщение # 24
заслуженный участник
Сейчас нет на сайте
unsigned - беззнаковое, signed соответсвтенно со знаком. То есть если переменную объявить как unsigned int, то она не сможет принимать отрицательное значение.
Все это легко можно найти в гугле.


Многие вопросы по Windows отпадут, если посмотреть тут
SaiteiДата: Пятница, 08 Июня 2012, 15:01 | Сообщение # 25
старожил
Сейчас нет на сайте
Quote (Нохчи)
unsigned - беззнаковое, signed соответсвтенно со знаком. То есть если переменную объявить как unsigned int, то она не сможет принимать отрицательное значение.
Все это легко можно найти в гугле.

Спасибо. А как мне дописать калькулятор, чтобы ограничений не было в количестве цифр? Ну... Калькулятор от Виндоус же умеет считать большие числа, а мой - нет

Добавлено (08.06.2012, 15:01)
---------------------------------------------
P.S. я написал программу так:

Code

#include <iostream>
using namespace std;
int main()  
{
setlocale( LC_ALL, "Russian" );  
cout << "Ýòî - ìîÿ ïåðâàÿ ïðîãðàììà íà Ñ++." << endl;
cout << "Íå çíàþ - âåëèê ëè óñïåõ çà äâà äíÿ, íî ÿ òåïåðü ÷òî-òî óìåþ." << endl;
cout << "Ïåðâîé ìîåé ïðîãðàììîé áóäåò êàëüêóëÿòîð, óìåþùèé ñêëàäûâàòü ÷èñëà." << endl;
long a,b;
start:
cout << endl << "Ââåäèòå ïåðâîå ÷èñëî:";
cin >> a;
cout << "Ââåäèòå âòîðîå ÷èñëî:";
cin >> b;
cout << "Ðåçóëüòàò:" << a+b;
goto start;
return 0;     
}

Заюзал long
НохчиДата: Пятница, 08 Июня 2012, 15:33 | Сообщение # 26
заслуженный участник
Сейчас нет на сайте
long по-моему тот же int. Попробуй long long.
Почитай еще это.


Многие вопросы по Windows отпадут, если посмотреть тут
SaiteiДата: Пятница, 08 Июня 2012, 15:52 | Сообщение # 27
старожил
Сейчас нет на сайте
Quote (Нохчи)
Почитай еще это.

Я хотел найти русскую документацию - не нашёл. У меня с английским нормально, но с переводом этого текста возникают проблемы... Выбрал Karatsuba multiplication.
Всё что я хочу - это дописать калькулятор. Ну и найти для себя много новых и интересных вещей


Сообщение отредактировал Saitei - Пятница, 08 Июня 2012, 15:54
RumataДата: Пятница, 08 Июня 2012, 16:44 | Сообщение # 28
почетный гость
Сейчас нет на сайте
Saitei, максимальный размер unsigned long - это 4294967296, думаешь, тебе придётся работать с числами больше?
Кроме того, есть русскоязычная статья по алгоритму Карацубы



SaiteiДата: Пятница, 08 Июня 2012, 17:02 | Сообщение # 29
старожил
Сейчас нет на сайте
Quote (Rumata)
Saitei, максимальный размер unsigned long - это 4294967296, думаешь, тебе придётся работать с числами больше?
Кроме того, есть русскоязычная статья по алгоритму Карацубы

Я пишу калькулятор. Хотелось бы... О, спасибо. Почитаю

Добавлено (08.06.2012, 17:02)
---------------------------------------------
Rumata, бегло глянул. Сложновато для меня, мало что понял... Можете помочь? Здесь или же в ICQ\Skype\ЛС

RumataДата: Пятница, 08 Июня 2012, 17:03 | Сообщение # 30
почетный гость
Сейчас нет на сайте
Saitei, постараюсь, лучше ЛС, наверное)


SaiteiДата: Пятница, 08 Июня 2012, 17:06 | Сообщение # 31
старожил
Сейчас нет на сайте
Rumata, хорошо, спасибо большое. Мне пока что нужно это для калькулятора (сложение чисел)
goldsphereДата: Пятница, 08 Июня 2012, 18:05 | Сообщение # 32
заслуженный участник
Сейчас нет на сайте
Можно пользоваться double - самый большой тип.К тому же можно дробные числа вбивать

FinderX - Android Аркада
SaiteiДата: Суббота, 09 Июня 2012, 17:42 | Сообщение # 33
старожил
Сейчас нет на сайте
Quote (goldsphere)
Можно пользоваться double - самый большой тип.К тому же можно дробные числа вбивать

double и float для десятичных чисел

Добавлено (09.06.2012, 16:21)
---------------------------------------------
Вот она! Вот она рыба моей мечты! Йаааааааазь!
Так... О чём это я?)))
Оказывается парень моей сестры раньше защищал диплом, он труотец в движке HGE. Попросил помочь его подключить. Немного поспрашивал теорию, он мне даже по С++ помог немножко. Понаписал коментарии, чтобы не забыть. Подключил много библиотек и заголовочных файлов, сделал окошко с размерами 800x600, сделал заголовок "My Game", программно нарисовал в окошке квадратик на таких координатах: 100, 100 с размерами 100, 100; сделал для него управление стрелочками
Вот мой код (часть - код движка (мне помогли его немного изменить + я игнорирую кое-какую либу)):

Code
#include "hge.h"
#include "hgesprite.h"  

#pragma comment(lib, "hge.lib")
#pragma comment(lib, "hgehelp.lib")

HGE *hge = 0; //Главная переменная движка
hgeSprite *spr = 0; //Указатель на спрайт
//Возвращает 1, если нужно завершить программу  
//Функция обработчика клавиш

float x = 100;
float y = 100;

bool FrameFunc()
{
  // Если нажимаем ESC, то программа завершает работу
  if (hge->Input_GetKeyState(HGEK_ESCAPE)) return true;

  if (hge->Input_GetKeyState(HGEK_LEFT))  
  {
   x-= 1;
  }
  if (hge->Input_GetKeyState(HGEK_RIGHT))  
  {
   x+= 1;
  }
  if (hge->Input_GetKeyState(HGEK_UP))  
  {
   y-= 1;
  }
  if (hge->Input_GetKeyState(HGEK_DOWN))  
  {
   y+= 1;
  }

  // Если 0 - то продолжаем работу
  return false;
}

bool RenderFunc() //Функция отображения (рисования)
{
  hge->Gfx_BeginScene(); //Начало сцены
  hge->Gfx_Clear(0);

  spr->Render(x, y); //Рисование спрайта

  hge->Gfx_EndScene(); //Конец сцены

  return false;
}

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{

  hge = hgeCreate(HGE_VERSION);
  spr = new hgeSprite(NULL, x, y, 100, 100);//Создание спрайта
  //Назначение функции обработчика клавишь  
  hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);
  hge->System_SetState(HGE_RENDERFUNC, RenderFunc);  

  //Заголовок окна
  hge->System_SetState(HGE_TITLE, "My Game");
   
  // Запуск в окнном режиме
  // Default window size is 800x600
  hge->System_SetState(HGE_WINDOWED, true);

  // Использование звука
  hge->System_SetState(HGE_USESOUND, false);

  // Tries to initiate HGE with the states set.
  // If something goes wrong, "false" is returned
  // and more specific description of what have
  // happened can be read with System_GetErrorMessage().
  if(hge->System_Initiate())
  {
   // Starts running FrameFunc().
   // Note that the execution "stops" here
   // until "true" is returned from FrameFunc().
   hge->System_Start();
  }
  else
  {  
   // If HGE initialization failed show error message
    
  }

  // Now ESC has been pressed or the user
  // has closed the window by other means.

  // Restore video mode and free
  // all allocated resources
  hge->System_Shutdown();

  // Release the HGE interface.
  // If there are no more references,
  // the HGE object will be deleted.
  hge->Release();

  delete spr;

  return 0;
}

С #pragma commen долго думал. Пришел к выводу, что с помощью этой команды подключаются lib файлы. Как видите - верно ))

Добавлено (09.06.2012, 16:23)
---------------------------------------------

Quote (Saitei)
Подключил много библиотек и заголовочных файлов, сделал окошко с размерами 800x600, сделал заголовок "My Game", программно нарисовал в окошке квадратик на таких координатах: 100, 100 с размерами 100, 100; сделал для него управление стрелочками

P.S.S. Это делал я один, не он. Он только объяснил))) Подключать двиг тоже научился

Добавлено (09.06.2012, 17:42)
---------------------------------------------
Так, ребят. Вопрос теперь обстоит с HGE! Нужно стартануть музычку в окошке
Нашел я, значит, вот что:

Quote
Функции работы с ресурсами
Resource_Load Загружает ресурс с диска в память.
Resource_Free Удаляет загруженный ресурс из памяти.
Resource_AttachPack Присоединяет архив ресурсов.
Resource_RemovePack Отсоединяет архив ресурсов.
Resource_RemoveAllPacks Отсоединяет все ранее присоединенные архивы ресурсов.
Resource_MakePath Строит абсолютный путь к файлу.
Resource_EnumFiles Перечисляет все файлы по заданному шаблону.
Resource_EnumFolders Перечисляет все директории по заданному шаблону.

Quote
Функции работы с музыкой
Music_Load Загружает с диска музыку в память.
Music_Free Удаляет загруженную музыку и ассоциированный с ней ресурс.
Music_Play Начинает воспроизведение музыки.

Как работать - ещё не врублюсь. Сейчас конечно постараюсь разобраться... Но вряд ли получится
НохчиДата: Суббота, 09 Июня 2012, 17:54 | Сообщение # 34
заслуженный участник
Сейчас нет на сайте
То есть тебе с двигом помогал лично Haafs?

Многие вопросы по Windows отпадут, если посмотреть тут
SaiteiДата: Суббота, 09 Июня 2012, 17:57 | Сообщение # 35
старожил
Сейчас нет на сайте
Написал я, значит, вот что:

Quote
HMUSIC Music_Load(
const char *mmusic,
DWORD size = 0
); //Загружаем музыку (файл)

HCHANNEL Music_Play(
HMUSIC mmusic,
bool loop
); //Проигрываем музыку

и
Quote
hge->System_SetState(HGE_USESOUND, true);

не пашет...

Добавлено (09.06.2012, 17:57)
---------------------------------------------

Quote (Нохчи)
То есть тебе с двигом помогал лично Haafs?

хд Нет конечно. Просто человек, который написал игру на этом движке и защитил диплом))
НохчиДата: Суббота, 09 Июня 2012, 18:01 | Сообщение # 36
заслуженный участник
Сейчас нет на сайте
Положи bass.dll рядом с hge.dll

Многие вопросы по Windows отпадут, если посмотреть тут
SaiteiДата: Суббота, 09 Июня 2012, 18:06 | Сообщение # 37
старожил
Сейчас нет на сайте
Quote (Нохчи)
Положи bass.dll рядом с hge.dll

лежит)) Всё подключено

Добавлено (09.06.2012, 18:06)
---------------------------------------------
Вот так выглядит моя папка с проектом:

А вот мой код (немного изменен):

Code

#include "hge.h"
#include "hgesprite.h"  

#pragma comment(lib, "hge.lib")
#pragma comment(lib, "hgehelp.lib")

HGE *hge = 0; //Главная переменная движка
hgeSprite *spr = 0; //Указатель на спрайт
hgeSprite *spr2 = 0;  
//Возвращает 1, если нужно завершить программу  
//Функция обработчика клавиш

float x = 100;
float y = 100;
float x2= 250;
float y2= 100;

bool FrameFunc()
{
  // Если нажимаем ESC, то программа завершает работу
  if (hge->Input_GetKeyState(HGEK_ESCAPE)) return true;

  if (hge->Input_GetKeyState(HGEK_LEFT))  
  {
   x-= 1;
  }
  if (hge->Input_GetKeyState(HGEK_RIGHT))  
  {
   x+= 1;
  }
  if (hge->Input_GetKeyState(HGEK_UP))  
  {
   y-= 1;
  }
  if (hge->Input_GetKeyState(HGEK_DOWN))  
  {
   y+= 1;
  }

   if (hge->Input_GetKeyState(HGEK_A))  
  {
   x2-= 1;
  }
  if (hge->Input_GetKeyState(HGEK_D))  
  {
   x2+= 1;
  }
  if (hge->Input_GetKeyState(HGEK_W))  
  {
   y2-= 1;
  }
  if (hge->Input_GetKeyState(HGEK_S))  
  {
   y2+= 1;
  }

  // Если 0 - то продолжаем работу
  return false;
}

bool RenderFunc() //Функция отображения (рисования)
{
  hge->Gfx_BeginScene(); //Начало сцены
  hge->Gfx_Clear(0);

  spr->Render(x, y); //Рисование спрайта
  spr2->Render(x2, y2); //Рисование спрайта

  hge->Gfx_EndScene(); //Конец сцены

  return false;
}

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{

  hge = hgeCreate(HGE_VERSION);
  spr = new hgeSprite(NULL, x, y, 100, 100);//Создание спрайта
  spr2 = new hgeSprite(NULL, x2, y2, 50, 50);//Создание спрайта
  //Назначение функции обработчика клавишь  
  hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);
  hge->System_SetState(HGE_RENDERFUNC, RenderFunc);  

  //Заголовок окна
  hge->System_SetState(HGE_TITLE, "My Game");
   
  // Запуск в окнном режиме
  // Default window size is 800x600
  hge->System_SetState(HGE_WINDOWED, true);

  // Использование звука
  hge->System_SetState(HGE_USESOUND, true);

  HMUSIC Music_Load(
   const char mmusic,
   DWORD size = 0
); //Загружаем музыку (файл)

HCHANNEL Music_Play(
   HMUSIC mmusic,
   bool loop
); //Проигрываем музыку  

  // Tries to initiate HGE with the states set.
  // If something goes wrong, "false" is returned
  // and more specific description of what have
  // happened can be read with System_GetErrorMessage().
  if(hge->System_Initiate())
  {
   // Starts running FrameFunc().
   // Note that the execution "stops" here
   // until "true" is returned from FrameFunc().
   hge->System_Start();
  }
  else
  {  
   // If HGE initialization failed show error message
    
  }

  // Now ESC has been pressed or the user
  // has closed the window by other means.

  // Restore video mode and free
  // all allocated resources
  hge->System_Shutdown();

  // Release the HGE interface.
  // If there are no more references,
  // the HGE object will be deleted.
  hge->Release();

  delete spr;

  return 0;
}
НохчиДата: Суббота, 09 Июня 2012, 18:10 | Сообщение # 38
заслуженный участник
Сейчас нет на сайте
Я вот что не пойму, оно реально компилируется? Выложи всю папку с проектом, я хочу поглядеть на это чудо.

Многие вопросы по Windows отпадут, если посмотреть тут
SaiteiДата: Суббота, 09 Июня 2012, 23:09 | Сообщение # 39
старожил
Сейчас нет на сайте
Quote (Нохчи)
Я вот что не пойму, оно реально компилируется? Выложи всю папку с проектом, я хочу поглядеть на это чудо.

Okay... Вот оно: Ссылка на файл

Добавлено (09.06.2012, 19:07)
---------------------------------------------
Ещё фиг его знает что за фигня с форматами:

Quote
HGE::Music_Load

Загружает музыку из памяти, архива ресурсов или диска.

HMUSIC Music_Load(
const char *filename,
DWORD size = 0
);
Параметры
filename
Имя файла с музыкой.
size
Если этот параметр не равен 0, то он означает количество блоков памяти, содержащих музыку в одном из известных форматов и параметр filename рассматривается как указатель на блок памяти.
Возвращаемое значение
В случае успеха, возвращается идентификатор музыки, который можно использовать в функции Music_Play. Otherwise returns 0.

Примечания
Поддерживаются форматы MO3, IT, XM, S3M, MTM, MOD and UMX.

Если filename определяет относительный путь, музыкальный файл сначала ищется во всех присоедененных с помощью функции Resource_AttachPack архивах ресурсов, затем в директории приложения. Если filename определяет абсолютный путь, музыкальный файл загружается напрямую с диска.

Если функция завершается аварийно, вы можете получить сообщение об ошибке при помощи функции System_GetErrorMessage. Если установлена переменная системы HGE_LOGFILE, сообщение об ошибке будет записано в файл протокола.

Если музыка больше не нужна, ее необходимо удали с помощью вызова функуии Music_Free.

Требования
Заголовок: hge.h
Библиотека импорта: hge.lib

Смотрите также
Music_Free, Music_Play

Добавлено (09.06.2012, 23:07)
---------------------------------------------
С проигрыванием музыки вопрос актуален.
И кстати... Что такое getchar()?

Добавлено (09.06.2012, 23:09)
---------------------------------------------

Quote (Saitei)
getchar()?

Неактуально.
Quote (Saitei)
С проигрыванием музыки вопрос актуален.

Вопрос актуален
Форум игроделов » Программирование » C/C++ » Помогите пожалуйста новичку. Есть вопросы
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

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