Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2011, 17:06   #1
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
Смех статья, как написать игру Собиралка

Я пытался написать статью для programmersforum.ru, но код вышел, потому что иногда (т.е. в некоторых его частях) кривоват (может глюки ток у меня, т.к. непонятно что у меня творится на компе, опера виснеьт, компилятор тоже...) и я просто выставляю игру и к ней код (хорошо закоментирован). тому кому не нравится пусть сделает замичание, или пусть промолчит. Сама игра банальная, собираем фрукт.

П.С пожалуйста ставьте + . и все спасиба в верхних коментариях!

воть

вот код под MinGW (переделывать под VS почти не прийдется, главное либы подключить):



вот сама игра:
Воть

вложение - это исходник, я просто заного открывал оперу
Вложения
Тип файла: rar Untitled3.rar (3.2 Кб, 37 просмотров)
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 20.07.2011, 17:22   #2
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Код ужасный.
Функция main() не должна выполнять тех действий, которые выполняет у вас.
Функции принимают слишком большое число аргументов
Имена аргументов совершенно не отражают их смысла
Половина функций работает с double, половина с float, не понятно зачем
Код:
void plods (double *x1,double *x2,double *y1,double *y2, int *v)
...
void movement (float *x1,float *x2,float *y1,float *y2, int *v, double *x, double *y, int *l)
Всюду магические числа:
Код:
float mex1 = -1.0;
float mex2 = -0.8;
float mey1 = -1.0;
float mey2 = -0.8;
Полное отсутствие констант
Ужасные логические условия
Код:
(*x1 > 1.0 || *y1 > 1.0 || *v == 1 || *x1 < - 1.0 || *y1 < - 1.0)
Отсутствие какой-либо логической структуры программы
Комментарии ни сколько не информативны.
Орфография на двойку. И те причины, которые вы описали в файле, не дают вам право на орфографические ошибки
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария

Последний раз редактировалось Blade; 20.07.2011 в 17:24.
Blade вне форума Ответить с цитированием
Старый 20.07.2011, 18:16   #3
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
но код вышел
но код вышел кривой (мышка скочила и случайно выделила слово)

Цитата:
Сообщение от Blade Посмотреть сообщение
Код ужасный.
Функция main() не должна выполнять тех действий, которые выполняет у вас.
Функции принимают слишком большое число аргументов
Имена аргументов совершенно не отражают их смысла
Половина функций работает с double, половина с float, не понятно зачем
Код:
void plods (double *x1,double *x2,double *y1,double *y2, int *v)
...
void movement (float *x1,float *x2,float *y1,float *y2, int *v, double *x, double *y, int *l)
Всюду магические числа:
Код:
float mex1 = -1.0;
float mex2 = -0.8;
float mey1 = -1.0;
float mey2 = -0.8;
Полное отсутствие констант
Ужасные логические условия
Код:
(*x1 > 1.0 || *y1 > 1.0 || *v == 1 || *x1 < - 1.0 || *y1 < - 1.0)
Отсутствие какой-либо логической структуры программы
Комментарии ни сколько не информативны.
Орфография на двойку. И те причины, которые вы описали в файле, не дают вам право на орфографические ошибки
Цитата:
Функции принимают слишком большое число аргументов
знаю... нужно исправлять, но потом
Цитата:
Имена аргументов совершенно не отражают их смысла
ну это кому как...
Цитата:
Половина функций работает с double, половина с float, не понятно зачем
просто был глюк в rand() исправить удалось, а доубле забыл убрать
Код:
float mex1 = -1.0;
float mex2 = -0.8;
float mey1 = -1.0;
float mey2 = -0.8;
из-за того же глюка.


ставь -

вот что я хотел спросить, у Вас не бывает глюков когда картинку плода не выводит?
Это ещё не конец и даже не начало конца, это возможно только конец начала.

Последний раз редактировалось pufystyj; 20.07.2011 в 18:19.
pufystyj вне форума Ответить с цитированием
Старый 20.07.2011, 18:59   #4
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от pufystyj Посмотреть сообщение
вот что я хотел спросить, у Вас не бывает глюков когда картинку плода не выводит?
Не знаю, я это не пробовал запускать
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 20.07.2011, 19:14   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

функция main должна быть примерно такой:
Код:
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitWindowSize(W, H);
    glutInitWindowPosition(0,800);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("3D Shapes");
    glutReshapeFunc(resize);
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutKeyboardFunc(key);
    glutIdleFunc(idle);    
    glutMainLoop();
    return EXIT_SUCCESS;
}
код ужасен
NiCola999 вне форума Ответить с цитированием
Старый 20.07.2011, 20:18   #6
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
функция main должна быть примерно такой:
Код:
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitWindowSize(W, H);
    glutInitWindowPosition(0,800);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
    glutCreateWindow("3D Shapes");
    glutReshapeFunc(resize);
    glutDisplayFunc(display);
    glutMouseFunc(mouse);
    glutKeyboardFunc(key);
    glutIdleFunc(idle);    
    glutMainLoop();
    return EXIT_SUCCESS;
}
код ужасен
ок буду старатся идти к лучшому

П.С я хотел как лучше, специально исходники выставил
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 20.07.2011, 22:18   #7
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
я хотел как лучше, специально исходники выставил
Это ведь хорошо! Предлагаю заняться улучшением. Сейчас я поищу, что можно изменить в коде, и составлю список.
UPD: Составил. (ссылка)
Ищете информацию по C++?
cplusplus.com

Последний раз редактировалось Сtrl; 20.07.2011 в 22:37.
Сtrl вне форума Ответить с цитированием
Старый 20.07.2011, 22:32   #8
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
Это ведь хорошо! Предлагаю заняться улучшением. Сейчас я поищу, что можно изменить в коде, и составлю список.
спасиба за поддержку... займусь обезательно.
вот часть того что нужно сделать:

переделать функцию маин;
сделать меньше аргументов в некоторых функциях (но как?);
сделать нормальные коменраии;
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 20.07.2011, 22:34   #9
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Как я понял, пишете вы на чистом C, так что, к сожалению, помощь моя вряд ли будет эффективной. Но могу однозначно предложить кое-что:
  1. Ни в коем случае не хранить координаты как число с плавающей точкой (double, float). Потому что поступая так, вы ставите себе под ноги очень больно бьющие грабли - погрешности округления.
  2. Координаты X и Y хранить в одной структуре, вроде такого:
    Код:
    struct Coord
    {
      int X;
      int Y;
    };
  3. Проверку диапазона можно поместить в функцию:
    Код:
    bool ApproximatelyEqual(int value1, int value2, int eps);
    Хотя на C++ вместо int я бы использовал шаблоны.
  4. Как уже было сказано - избавиться нужно от всех магических чисел.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 20.07.2011, 22:44   #10
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от Сtrl Посмотреть сообщение
Как я понял, пишете вы на чистом C, так что, к сожалению, помощь моя вряд ли будет эффективной. Но могу однозначно предложить кое-что:
  1. Ни в коем случае не хранить координаты как число с плавающей точкой (double, float). Потому что поступая так, вы ставите себе под ноги очень больно бьющие грабли - погрешности округления.
  2. Координаты X и Y хранить в одной структуре, вроде такого:
    Код:
    struct Coord
    {
      int X;
      int Y;
    };
  3. Проверку диапазона можно поместить в функцию:
    Код:
    bool ApproximatelyEqual(int value1, int value2, int eps);
    Хотя на C++ вместо int я бы использовал шаблоны.
  4. Как уже было сказано - избавиться нужно от всех магических чисел.
ок, где-то через час займусь этим.

с числами float и double, у меня просто из-за глюка... буду исправлять!
спасиба
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как написать простую онлайн игру Demon_2009 Gamedev - cоздание игр: Unity, OpenGL, DirectX 20 22.06.2011 09:24
Написать игру! Masyanov Gamedev - cоздание игр: Unity, OpenGL, DirectX 6 04.06.2011 16:13
Как написать простенькую игру на с++? Banner Помощь студентам 1 10.02.2011 17:07
Написать игру Сокобан Goldcoding Фриланс 5 09.04.2010 15:46
как вы думаете можно с помощью delphi написать online игру ну к примеру как muonline 0pex Свободное общение 9 28.06.2007 14:20