Курсы создания компьютерных игр на C/C++ ( Часть 2 )

Для самых-самых начинающих программистов :] Часть 1 - http://pikabu.ru/story/_3430226
Курсы создания компьютерных игр на C/C++ ( Часть 2 ) Для самых-самых начинающих программистов :]  Часть 1 - <a href="http://pikabu.ru/story/kursyi_sozdaniya_kompyuternyikh_igr_na_cc__chast_1__3430226">http://pikabu.ru/story/_3430226</a>
8
Автор поста оценил этот комментарий

С неделю назад решила начать с срр. Спасибо тебе, милчеловек, так _нормально_ для дебилов еще нигде написано не было, а самое главное - гуглить с тебя одно удовольствие - уже понимаешь, что и куда можно было бы приткнуть в другом случае.

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

раскрыть ветку (1)
5
Автор поста оценил этот комментарий
Иллюстрация к комментарию
2
Автор поста оценил этот комментарий

Нихера не понял, но чувствую, что ты его унизил.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Автор молодец! Не нашел как на этом ресурсе написать в личку (подскажите кто знает) Подписался. Совершенно не понимал программирования хотя и пытался разобраться. Сподвигла отличная и лёгкая манера изложения.  Установил среду и стал проходить все уроки. Пожалуйста не бросайте это дело! 
Теперь по существу что сподвигло написать. Прошёл урок №2. Случайно ввёл вместо цифры, буквенное значение и получил спамящую строчку (см. скрин). Можете это указать в уроке или как то предупредить начинающих об этом и рассказать почему появляется такой цикл ?
http://c2n.me/3jUkwwd

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Ввод буквы вместо числа вызывает ошибку и последующий ввод блокируется. Для того, чтобы этого избежать можно сразу проверять возникновение ошибки в scanf вот таким образом:
http://www.everfall.com/paste/id.php?7ecb0vfpsieq=
fflush(stdin) - разблокирует консольный ввод, continue - пропустит эту итерацию цикла, ну и еще напишем в консоль про ошибку :)

показать ответы
1
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: данный аккаунт был удалён
раскрыть ветку (1)
3
Автор поста оценил этот комментарий
Он просто тролль с очень хорошей базой по предмету ))) Респект таким парням :)
2
Автор поста оценил этот комментарий

автор, пили в конце листинг кода, так читать проще.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Здравая мысль, учту в будущем :)
показать ответы
Автор поста оценил этот комментарий

Подскажите, пожалуйста, как исправить проблему в программе. 

При написании числа больше заданного компьютером пишет одновременно Larger и Yeahh 

При написании числа меньше заданного компьютером пишет одновременно Larger и Less


#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void main()

{

const int numberRange = 100;

int computerNumber = 0;

int playerNumber = 0;

time_t currentTime = time(0);

srand(currentTime);

computerNumber = rand();

computerNumber = computerNumber % (numberRange + 1);

printf("Computer set some number in range from %i to %i \n", 0, numberRange);

do

{

printf( "Input your number: " );

scanf("%i", &playerNumber);

if (playerNumber < computerNumber)

{

printf("Larger!\n"); }// Проверит когда наше число меньше заданного и напишет Больше

else

{

if (playerNumber > computerNumber) // Проверит когда наше число больше заданного и напишет Меньше

{

printf("Less!\n");

}

else

{

printf("Yeahhh!!!\n"); // Если равно то победил

}

}

}

}

while (playerNumber != computerNumber);

printf("Press enter to continue...");

getchar();

getchar();

}

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Проблема в том, что ПЕРЕД строкой while (playerNumber != computerNumber); одна лишняя закрывающая фигурная скобка :)
А вообще лучше использовать выравнивание кода табами как в моих примерах, чтобы понимать какая скобка к чему относится. Это можно сделать и средствами студии, выбрав весь код, а потом нажав (Ctrl+K,F).

показать ответы
Автор поста оценил этот комментарий

Не думал, что из за одной скобки может быть такая жесть) Комбинация не работает пишет нет такой команды (They key combination (Ctrl+K,F) is not a command)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Ну более корректно это записывается как (Ctrl+K, Ctrl+F) и находится вот тут:

Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

Просто получается, что код работает с "+1" "-1" и вообще без этого. Но во всех трех случаях выдаваемое при запуске число, всегда больше предыдущего. Например при первом запуске он выдал число 4, потом будет 10, 40, 89, 99, 100, 2, 5, 9 и т.д. Рандом получается не такой уж и рандомный =)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Ну правильно :) Это же генератор ПСЕВДОСЛУЧАЙНЫХ чисел :) И его зерном стоит время в секундах :)
1
Автор поста оценил этот комментарий

условно говоря, это сделано, чтобы не выдавался 0?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

нет, чтоб выдавался numberRange, т.е 100 :)

1
Автор поста оценил этот комментарий

Блин хочется спросить, а я не разбираюсь настолько, что даже не знаю как правильно спросить... у нас псевдослучайные числа генерируются по хитрой формуле с зерном. Зерно привязано ко времени. Получается каждую минуту компьютер загадывает новое число. Получается если игрок не угадал за минуту число от 1 до 100 то есть вероятность того что он не угадает. я например ввожу 27 а задуманное 54. Пишет мне "больше " я перебираю числа вверх. но вот прошла минута и компьютер загадал число 7 ) Игрок то не знает, что тут нечестная игра )

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Нет, зерно - это только самое первое число в последовательности псевдослучайных чисел и оно задается только один раз при старте :) Поэтому загаданное значение не меняется :) Все по честному :)

Автор поста оценил этот комментарий

Начинает ругаться на все строки связанные со временем(ну, где time). И подключение библиотек тоже не работает. Что-то странное, ведь в универе с++ изучал чутка, нормально получалось. 
И еще вопрос, почему вы используете printf вместо cout? 
Заранее спасибо.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Потому что начинаю обучение с языка С, его библиотек и функций :)

Можешь попробовать подключать <ctime> вместо <time.h> и другие соответственно

показать ответы
1
Автор поста оценил этот комментарий

Ещё хуже. Авто закрытие после числа! На секунду появляется надпись и приложение закрывается! 

Код:


#include <stdio.h>


#include <stdlib.h>


#include <time.h>



void main()


{


const int numberRange = 100;


int computerNumber = 0;


int playerNumber = 0;



time_t currentTime = time(0);



srand(currentTime);


computerNumber = rand();


computerNumber = computerNumber % (numberRange + 1);



printf("Your computer choose number in range from %i to %i\n", 0, numberRange);


printf("Choose number, pls: \n");


scanf("%i", &playerNumber);



if (playerNumber < computerNumber)


{


printf("Larger!!1!!11!\n");


}


else


{


if (playerNumber > computerNumber)


{


printf("Less!!11!!\n");


}


else


{


printf("AYEAYAYEYAYE!!11!!\n");


}



while (playerNumber != computerNumber);


printf("Press something to close\n");


getchar();


getchar();


}


раскрыть ветку (1)
Автор поста оценил этот комментарий

У тебя вместо цикла
do
{
   блок_кода
}
while( playerNumber != computerNumber );

стоит одиночный цикл while:
while( playerNumber != computerNumber );

который по факту ничего не делает :)

показать ответы
1
Автор поста оценил этот комментарий

Ола, Столкнулся с той же проблемой что и чувак выше по ветке, решил проблему ренеймом гейм.ехе и последующей перезаписью файла. Но теперь фишка в другом, компилятор выдает что ошибок нет, но в консоль не выводиццо решительно ничего, от отчаяния взял код отсюда (автор коммента писал что всё работает) результат тот-же. Думаю что проблема может быть с настройкой стандартов языка (надеюсь понятно выразился), некоторое время назад менял т.к. по другому LiS отказывался работать с моей клавой.
P.S. Как же тебя наверно задолбали с вопросами 4Head.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Хм, а если простой Hello World написать?

показать ответы
1
Автор поста оценил этот комментарий

в начале поста написано что нужно подключить stlib.h библиотеку. поправьте на stdlib.h если возможно.

раскрыть ветку (1)
Автор поста оценил этот комментарий

С радостью бы, но посты править нельзя :)

показать ответы
1
Автор поста оценил этот комментарий

делаю уроки и как я понел там небольшая ошибка вот тут

чёт картинку никак не прикрепить

http://puu.sh/lZXzK/6131629eb6.jpg

вообшем там шибка в названии библиотеки генератора случайных чисел

написано stlib а VC ругается и если написать stdlib то всё ок

раскрыть ветку (1)
Автор поста оценил этот комментарий

Да, простите, опечатка :(

2
Автор поста оценил этот комментарий

Можно в референс заглянуть, например... (http://www.cplusplus.com/reference/ctime/time/)


time_t time (time_t* timer);

Функция принимает указатель на объект time_t, в который будет записано значение, т.е. разницы нет между


time_t t = time(nullptr);

и

time_t t;
time( &t ); 
раскрыть ветку (1)
Автор поста оценил этот комментарий
Да, я это объяснил чуть позже - в Части 4, после знакомства с указателями :)
показать ответы
1
Автор поста оценил этот комментарий

всё работает,правда.у меня 2 раза нужно  anykey to... кнопку жать в конце.и я удалил один гетчар и стала надпись preessanykeytocontinuepressanykeytocontinue.и я после этого удалил функцию принф (посл) и всё стало нормально. Я вот не вдупляю как остаток от деления помог сделать 0 100 число.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Внимательно разбери пример из поста с остатком деления на 4 :)
показать ответы
Автор поста оценил этот комментарий

скажите, пожалуйста, а зачем после time(0) в скобках ноль стоит? для чего он и что будет при его замене на значения? заранее спасибо

раскрыть ветку (1)
Автор поста оценил этот комментарий
Об этом рассказывается позже в Части 4 :)
Автор поста оценил этот комментарий

Error 1 error C1075: end of file found before the left brace '{' at 'c:\users\demon\desktop\my games1\game1\game1\main.cpp(9)' was matched c:\users\demon\desktop\my games1\game1\game1\main.cpp 40 1 game1
в чём проблема?

раскрыть ветку (1)
Автор поста оценил этот комментарий
Где-то пропущена фигурная скобка в коде
показать ответы
Автор поста оценил этот комментарий

У меня компилятор ругается, "путь"\main.cpp|7|error: '::main' must return 'int'|.

В Code Blocks.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Замените

void main()

{

   код

}


На:

int main()

{

   код


   return 0;

}

показать ответы
Автор поста оценил этот комментарий

Как тебя зовут?

З.Ы. Спрашиваю из-за 32167 ))

Как то мы долго ох*уевали с незнакомым на тот момент товарищем, что он прислал мне архив запароленный 32167, а я пытался узнать откуда у него мой пароль))

раскрыть ветку (1)
Автор поста оценил этот комментарий

32167 в кругах геймеров 90х не более редкое явление чем IDDQD или itisagooddaytodie :)

P.S. Зовут Димой :)

показать ответы
Автор поста оценил этот комментарий

Ну во первых не хами. Во вторых критику необходимо воспринимать всегда адекватно. Я не сказал, что это плохой пост. Я сказал, что он мало информативен и не несет самой сути. 

  ИМХО. И да я действительно считаю, что автору поста не удастся довести дело до конца. Так как программирование это все таки не простой вопрос. И в реальности у автора на сегодняшний момент больше времени уходит на то, чтобы запилить пост. И да автор не робот и не сидит постоянно на сайте. Поэтому вопрос "техподдержки" его учеников рано или поздно зависнет в воздухе.

раскрыть ветку (1)
Автор поста оценил этот комментарий
На один такой хороший пост на все продумывание, создание, рисование схем, вычитку и оформление уходит от 5ти до 7ми часов чистого времени )) Но сейчас свободное время есть, буду стараться :)
показать ответы
Автор поста оценил этот комментарий

Появилась еще одна ошибка, вот тут я совсем не в курсе из-за чего. LINK : fatal error LNK1168: не удается открыть ...\Debug\game.exe для записи

раскрыть ветку (1)
Автор поста оценил этот комментарий
Хм, возможно игра уже была запущена при попытке скомпилировать новую версию. Или ее держал какой-то процесс. Можно попробовать удалить game.exe из папки Debug :)
показать ответы
Автор поста оценил этот комментарий

Вероятнее всего на ноутбуке нет нужных библиотек.
Попробуйте скачать их отсюда
https://www.microsoft.com/ru-ru/download/details.aspx?id=407...

Файл vcredist_x86.exe.


Еще один вариант - это если на ноутбуке более старая ОС, например XP. Тогда можно попробовать изменить настройки сборки проекта на более старые. Правой кнопкой по проекту в Solution Explorer в студии, Properties, выбрать Release конфигурацию и найти в Configuration Properties/General пункт Platform Toolset. Поставить более старый, например 2010:

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

Если что-то из этого помогло - скажите пожалуйста что именно :) Возможно стоит будет создать пост с самими распространенными проблемами :)

показать ответы
Автор поста оценил этот комментарий

Автор, третья проблема:

забрал ехе-шник с папки Release но на ноутбуке програмка не идёт. Ругается что нет какой то DLL... хотя все остальное на ноуте работает нормально 

раскрыть ветку (1)
Автор поста оценил этот комментарий

Вероятнее всего на ноутбуке нет нужных библиотек.
Попробуйте скачать их отсюда
https://www.microsoft.com/ru-ru/download/details.aspx?id=407...

Файл vcredist_x86.exe.


Еще один вариант - это если на ноутбуке более старая ОС, например XP. Тогда можно попробовать изменить настройки сборки проекта на более старые. Правой кнопкой по проекту в Solution Explorer в студии, Properties, выбрать Release конфигурацию и найти в Configuration Properties/General пункт Platform Toolset. Поставить более старый, например 2010:

Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

Автор, сделал все как у вас. Но запускаю ехе-шник и в конце надо нажать не "любую клавишу" а только Enter. Если жать пробел то курсор просто сдвигается по строчке ниже и всё.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Да, это моя ошибка в уроке :) В этой задаче пока нужно жать Enter :)
В уроке 3 я рассказываю как сделать "любую клавишу" :)
Автор поста оценил этот комментарий

Больше месяца не мог дорваться до C++

Уважаемый @Dansken, разъясните, что конкретно делается вот тут:
(numberRange + 1)
Что дает нам "+1" в коде, или "-1" в примере с числами?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Результирующее число :)

Т.е. на месте (numberRange + 1) будет результат этого сложения. Если numberRange равно 100, то (numberRange + 1) будет 101

А именно ЗАЧЕМ в том примере используется увеличение диапазон на единицу рассказано в самом посте - абзац следующий после "остатка от деления"

показать ответы
Автор поста оценил этот комментарий

откуда такие ошибки могут быть? всё необходимое вроде же подключено

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий
Скинь код куда-нибудь - посмотрю :)
показать ответы
Автор поста оценил этот комментарий

Да, возможно по этому поводу возникало какое то предупреждение во время отладки ?


Warning 2 warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. d:\my_c++\game1_test\game1_test\main.cpp 22 1 game1_test


Или это относится не к этому ?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Нет, просто компилятор говорит, что в ваших библиотеках есть более новая версия функции scanf, которая называется scanf_s и рекомендует использовать ее вместо scanf :) Можете смело использовать. :)

показать ответы
Автор поста оценил этот комментарий

Я не против. Но главная проблема в том, что ты сам написал, что все это временно. Пока ты на отдыхе, а что потом? ................. И проблема все равно остается - ты рассуждаешь с точки зрения человека который знает про что пишет. А читатель у тебя разный. Именно поэтому такие комменты от меня. То что тебе кажется очевидным - некоторым темный лес. И да я уже писал: человек должен понять почему он должен писать именно этот код, нажимать именно эту кнопку и какой код писать если он хочет что то изменить.

раскрыть ветку (1)
Автор поста оценил этот комментарий
Постараюсь найти время. А рассуждать я пытаюсь именно с точки зрения читателя с самым низким уровнем знаний :) Ну и ориентируясь на фидбек в комментариях так или иначе исправляться, если что-то сделал не так :)
показать ответы