Людей пытается учить человек, считающий, что по младшему адресу лежит старший байт. Вот почему читать надо не всякие гайды в интернете, а одну нормальную книжку
Листинг программы со всеми домашними заданиями:
http://www.everfall.com/paste/id.php?xs58y9ahi92f=
Если нужная Пятая Часть - то вот она:
http://pikabu.ru/story/kursyi_sozdaniya_kompyuternyikh_igr_n...
А если одиннадцатая, то будет, но хз когда, мы сейчас тут командой свою игрушку пилим, поэтому не до постов сейчас :)
а что в последнем сложного?
int main()
{m1:string i;
/здесь игра
m2:cout<<"eshe?yes/no";
if(i=="yes"){goto m1;}
if(i=="no"){;}
else {goto m2;}
return 0;
}
Ура, поздравляю автора с прорывом "3-х постов"(Синдром Гейба). Ты первый кто сделал более 3-х постов которые не просто интересные но и информативные.
Даже я взял некоторые приемы из твоих постов. Так держать.
Уважаемый @Dansken, есть небольшое замечание: по-моему не все компиляторы позволяют создавать такой код:
int count = 10;
int array[count];
По-моему много лучше будет такой код:
int count = 10;
int *array = new int[count];
/*******/
delete[] array;
Во всяком случае, насколько я знаю, такой код будет воспринят нормально всеми компиляторами
Прошу прощения, если такое замечание уже было (нет времени читать все комментарии).
И еще вопрос: каким образом можно задать цвет для очередного символа, который мы собираемся печатать в консоль?
Заранее спасибо.
Согласен, сам уже после публикации заметил, что не уточнил про разрядность приложения. В будущем поправлю. :)
Ну я никогда не был фанатом инди игр, может по той причине, что я в них не играл :) Я довольно избирателен в играх и крайне придирчив. Но очень хочется сделать что-то свое, что бы понять, что именно есть "крутая" игра в моем понимании :)
А вот этих знаний, что есть в цикле этих уроков хватает на манипуляции в каком-то популярном движке ?
Ну самым популярным движком в текущее время является Unity и для манипуляций в нем придется изучить еще как минимум язык C#, хотя бы поверхностно ознакомиться с некоторыми современными архитектурными решениями( вроде компонентной системы сущностей ), а также пройти цикл уроков по этому движку :)
Что касается менее популярного, то цикла этих уроков хватит для написания полноценной компьютерной игры, используя мультимедийную библиотеку SFML и язык C++. :)
На большее пока сил и времени нет ) Тут базовый минимум для того, чтобы понять как вообще писать компьютерные игры :)
Вот мой код:
// game3.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <stdio.h>
#include "stdlib.h"
#include "time.h"
#include "Windows.h"
#include "conio.h"
int _tmain(int argc, _TCHAR* argv[])
{
const int lettersCount = 20;
char letters [ lettersCount ];
int shag = 0;
int errors = 0;
// System setup
time_t currentTime;
time (¤tTime);
srand(currentTime);
//Initialization
shag = 0;
for( int i = 0; i < lettersCount; i++)
{
letters[i] = 'a' + rand() % ( ('z' - 'a') +1);
}
system("cls");
printf("\n\tReady?\n");
_getch();
printf("\t");
for( int i = 0; i < 5; ++i)
{
printf(".");
Sleep(175);
printf("\n\tGo!");
Sleep(350);
}
do {
system("cls");
printf("\n\t");
for(int i =0; i<lettersCount; i++)
{
if (i<shag)
{
printf("%c ", 176);
}
else
{
printf("%c ", letters[i]);
}
char inputChar=_getch();
if ( inputChar == letters[shag])
{
shag++;
}
else{
errors++;
}
}
}
while(shag<lettersCount);
system("cls");
printf("\tErrors: %i\n", errors);
printf("\n\tPress any key to continue...");
_getch();
return 0;
}
Вот это блок не должен быть внесен под for:
printf("\n\tGo!");
Sleep(350);
А вот этот соответственно не должен быть внесен под второй for:
char inputChar=_getch();
if ( inputChar == letters[shag])
{
shag++;
}
else{
errors++;
}
Ну у меня сначала пишет ряд букв, а потом после окончания целого ряда букв - можно уже писать. Надеюсь понятно объяснил xD
Там же используется функция _getch() которая сразу отлавливает код нажатого символа :)
скажи пожалуйста, если я сделал твоё дз с помощью goto, это хуже чем твой способ или лучше?
ЧАААВООО ? средний ДЗ легче тяжелого - что там в типах данных разбератся? явное приведение проще простого. А вот грёбанные события это зашквар. Где почерпнуть инфу про события ? или как по другому можно отследить нажата ли кнопка капс лок ?
В данном случае интересует лишь результат ввода - символ в верхнем или нижнем регистре :) И нужно просто привести его к единому регистру - тому, по которому работает логика программы :)
Например, чтобы и 'a', и 'A' превращалось в 'a'
а можно одним глазком на код поглядеть, я так понимаю вы через Git это делаете? Люблю просто сам себе задавать вопросы и на них отвечать, а гайды и ютуб трудно даются.
Все минусы и минусы тыкают, а я не могу понять почему. Мне бы год назад такие статьи и я был бы самым счастливым человеком на земле. Автору огромное спасибо. Отдельная благодарочка за картиночки. Реально всё намного понятнее выглядит, чем на пальцах. Пытался младшую сестру ввести в программирование, не знал как правильно переступить порог, дабы не отпугнуть, а наоборот зажечь желание. Теперь знаю как. Надеюсь ты не будешь против, если я буду пользоваться твоими статьями. Ещё раз спасибо.
Ахах, неправильно поставленный вопрос создает больше вопросов)
Я имел ввиду, как можно это реализовать?)
И еще вопрос, проблема с выводом float, выдает только целочисленные значения
if( rand()%2 )
{
letters[i] = 'a' + rand() % (('z' - 'a') +1 );
}
else
{
letters[i] = 'A' + rand() % (('Z' - 'A') +1 );
}
Для float нужен спецификатор формата - %f
Думаю, что сразу после ООП :)
После?
Т.е. сначала ты расскажешь им про ООП с примерами на С?
Про случайные числа и остаток от деления было рассказано в Части 2.
'a' + rand() % (('z' - 'a') +1 );
97 + rand() % ( (122 - 97) + 1 )
97 + rand() % 26;
Получим тут случайное число от 97 до 122 включительно. Про то, что это коды символов от 'a' до 'z' было рассказано в Части 3. :)
Листинг программы со всеми домашними заданиями:
http://www.everfall.com/paste/id.php?xs58y9ahi92f=
Людей пытается учить человек, считающий, что по младшему адресу лежит старший байт. Вот почему читать надо не всякие гайды в интернете, а одну нормальную книжку
Да, пардон, что-то я заработался, описал порядок для Big Endian. :)
В любом случае его чуть проще понять чем Little Endian :)
P.S. Сделаю заметку на будущее для исправления, спасибо :)
Возьми какой нибудь движок попроще и опиши использование с примерами для продвинутых программеров
Автор, подскажи... на с++ можно будет сделать бродилку - файтинг?
Или мб подскажи бесплатную программу в которой проще такое сделать.
А если можно, напиши заодно, дойдёт ли до чего-то подобного уровня сложности в твоих уроках
Да неважно. У меня знакомый хочет немного раздуплится в C++, если интересно пообщаться с земляком, скинь свои контакты на webcodekeeper@yandex.ru я ему передам.
Да будет путаница в виде "тут мы подключали одни либы, а теперь другие, и что за cout/cin" :D
Автор, скажи, у меня в папке Release висит два файла с названиями проектов, один экзешник и один .pdb
Так вот, для чего нужен этот .pdb и с чем его едят?
Это файл с отладочными символами, чтобы можно было дебажить экзешник (даже релизный) при запуске в студии и он находил что к какой строке кода относится. В будущем для продакшена он не нужен. :)
@Dansken, привет. Я немного отстал от постов, и пока только разбираюсь в этой части, но уже хотел спросить. Как добавить поддержку кириллицы? Видел в уроках js <meta charset="utf-8"> такое, а тут как реализовать? И ещё вопрос, почему функция(?) main указывается как int? Спасибо за посты, очень полезно. Смотрел другие уроки, но там в основном логика, циклы и т.д., а как это всё в программу связать здесь лучше всего видно.
Привет :)
Поддержку кириллицы проще всего реализовать с помощью Юникод UCS-2 - это использование двухбайтовых символов вместо однобайтовых, перед строками будет большая буква L, а все функции заменятся на соответствующие, но работающие с двухбайтовыми символами:
http://www.everfall.com/paste/id.php?id=js3rh5jcbx92&v=0Функция main согласно стандарту языка должна возвращать код ошибки, который указывает насколько корректно завершена программа. Возврат нуля означает, что ошибок нет и программа завершена успешно :) Но в геймдеве я ни разу не видел, чтобы кто-то возвращал что-то кроме нуля :)
У меня все уроки связаны последовательно и если не выполять предыдущие уроки, то хотя бы прочитать их полностью стоит :)
Я часто во время код ревью и менторства новичков замечаю, что большинство не понимает как на самом деле работает const. Более того, Си и С++ содержат синтактический сахар, позволяющий писать const перед объявлением переменной - это только путает.
const - указывает, что выражением перед ним - константно. То есть правильная запись выглядит вот так:
int a = 42;
int const b = a; // переменная b неизменяемого типа int, с значением a;
int const * const c = &a; // неизменяемый указатель с незменяемым значением;
c = &b; // ошибка компиляции! указатель запрещено менять.
*c = 99; // ошибка компиляции! значение по адресу запрещено менять.
Именно из-за того, что const действует на впередистоящее выражение, константные методы класса объявляются с констом в конце объявления, а не в начале:
int getSomeProperty() const;
А объявления перменных с констом в начале это всего лишь синтактический сахар и он довольно часто путает новичков
const int ** ppbuffer; // Спроси новичка что из этого константно, и он не сможет дать уверенного ответа.
Автор, если можешь, используй const без сахара, так молодые программисты будут делать меньше ошибок и нам будет легче на код-ревью.
Переделал игру для того, чтобы можно было вписывать ещё и сложность т.е. количество букв в массиве.
printf("Введите сложность: ");
scanf("%d", &letterscount);
char *letters;
letters=new char[letterscount];
Или к этому по курсу приступать рановато?
Автор, подскажи... на с++ можно будет сделать бродилку - файтинг?
Или мб подскажи бесплатную программу в которой проще такое сделать.
А если можно, напиши заодно, дойдёт ли до чего-то подобного уровня сложности в твоих уроках
Согласен, сам уже после публикации заметил, что не уточнил про разрядность приложения. В будущем поправлю. :)
Конкретно тут - часть спрайты из игры Project Zomboid, часть - из моего персонального проекта.