// - "Talk to me like I'm a 3 year old!" Programming Lessons -
//
// $Author: Ben Humphrey digiben@gametutorials.com
//
// $Program: Functions
//
// $Description: Work with functions to create a menu.
//
// $Date: 6/5/00
//
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
#include <windows.h> // Заголовочная информация windows
#include <stdio.h> // Мы должны включить этот файл, для того, чтобы мы могли
// использовать функции, такие как printf()
void DrawMenu();
/* Так мы объявляем имя нашей функции и тип возвращаемых ей данных.
Обычно это делается в другом файле, например functions.h
Такое объявление дает компилятору знать о существовании функции и о параметрах, передаваемых
в функцию. Это точно так же, как и объявление переменной. Мы инициализируем переменную в
самом начале, затем как правило присваиваем ей значение позже. В данном случае, наша функция
ничего не возвращает, поэтому мы пишем "void", в значении "ничего".
Если вы посмотрите на "main()" ниже, вы увидите, что мы тоже используем для нее "void".
Обычно мы ничего не возвращаем из функции main().
Когда объявляется функция, мы должны поставить в конце точку с запятой.*/
void DrawMenu()
{
/* Это место, где мы определяем действия, выполняемые функцией. Мы не используем
точку с запятой, потому что функция не закончена. Мы начинаем ее с {, и заканчиваем ее }
*/
printf("\t\t ****************Game Menu**************** \n");
printf("\t\t * * \n");
printf("\t\t * 1) New Game * \n");
printf("\t\t * 2) Load Game * \n");
printf("\t\t * 3) Save Game * \n");
printf("\t\t * 4) Inventory * \n");
printf("\t\t * 5) Options * \n");
printf("\t\t * 6) Quit * \n");
printf("\t\t * * \n");
printf("\t\t ***************************************** \n");
/* Это наше игровое меню, выводимое с помощью printf() :) Красивое, не правда ли?
Безусловно, вы можете использовать другие способы отображения меню.
Символ "\t" работает так же как и "\n", но он означает табуляцию.
*/
} // Конец функции
void main()
{
BOOL StillPlaying=TRUE;
int choice=0;
/* Если подключить файл <windows.h>, то мы будем иметь возможность использовать переменные типа BOOL.
Такие переменные имеют два значения - TRUE (истинно) или FALSE (ложно). (TRUE определено с помощью
#define как 1, FALSE как 0)
В данном случае определим переменную со значением TRUE, показывающую, играем ли мы все еще в игру (StillPlaying)
Когда будет выбрана опция Quit (Выход), мы установим переменной значение FALSE, заканчивая игровой цикл.
*/
/*
Создадим цикл while, который будет продолжаться до тех пор, пока не будет нажата "6" для выхода.
*/
while (StillPlaying) // Это значит, продолжать до тех пор, пока не настанет условие StillPlaying == FALSE.
{
DrawMenu();
/* Все что нам нужно сделать, это вызвать функцию, как показано выше.
Так как мы не передаем никаких параметров, мы просто закрываем скобки () и ставим точку с запятой.
*/
// Здесь мы выбираем пункт меню.
printf("Choose from the menu: "); // Сообщение пользователю
scanf("%d", &choice); // Чтение выбора пользователя. Не забывайте, символ & позволяет изменять значение "choice".
/*
Ниже идет выражение switch. Оно обрабатывает то, что передается в него, и выполняет набор выражений
if else. Такая запись выглядит более понятно. Например, "case 1:" то же самое, что "if(choice == 1)"
*/
switch (choice)
{
case 1: printf("You chose a New Game!\n"); // if (choice == 1)
break; // break - выход из switch
case 2: printf("You chose to Load a Game!\n"); // if (choice == 2)
break; // Напечатать выбор и выйти из switch
case 3: printf("You chose to Save a Game!\n"); // if (choice == 3)
break; // Напечатать выбор и выйти из switch
case 4: printf("You chose your Inventory!\n"); // if (choice == 4)
break; // Напечатать выбор и выйти из switch
case 5: printf("You chose Options!\n"); // if (choice == 5)
break; // Напечатать выбор и выйти из switch
case 6: StillPlaying = FALSE; // if (choice == 6)
printf("Game Over Already?\n");
break;
}
/*
StillPlaying установлена в FALSE. Это означает, что когда выполнится проверка while(StillPlaying),
произойдет выход из цикла. Что интересно в выражении switch - нам не нужны фигурные скобки
для записи нескольких строк. Нам нужен только break.
*/
} // while (StillPlaying)
// Очень полезно отмечать, откуда берется закрывающая скобка.
// Когда программа большая, довольно тяжело проверять, какая скобка к чему относится.
} // void main() // Когда пользователь нажимает 6, цикл завершается, и программа заканчивается.
// © 2001 GameTutorials
// Перевод © 2004 Евгений Казеко
// www.gamecoder.kazeko.com
// evgeniy@kazeko.com
|