Программа "Виселица"

Общее описание и правила "Виселицы" как онлайн-игры в слова, основные этапы и принципы создания соответствующей программы с помощью языка программирования Си. Реализация программного кода с комментариями. Разработка и содержание инструкции пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид статья
Язык русский
Дата добавления 18.02.2019
Размер файла 168,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Программа «Виселица»

Введение

Главной отличительной особенностью языка программирования Си является минимализм. Си создавался с одной важной целью: сделать более простым написание больших программ с минимумом ошибок по правилам процедурного программирования, не добавляя на итоговый код программы лишних накладных расходов для компилятора.

Си предлагает следующие важные особенности: простую языковую базу, из которой вынесены в библиотеки многие существенные возможности; ориентацию на процедурное программирование, обеспечивающую удобство применения структурного стиля программирования; систему типов; использование препроцессора; непосредственный доступ к памяти компьютера через использование указателей; минимальное число ключевых слов; передачу параметров в функцию по значению, а не по ссылке; указатели на функции и статические переменные, структуры и объединения; средства объектно-ориентированного программирования.

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

Язык Си остаётся языком, реализованным на максимальном количестве аппаратных платформ, и одним из самых популярных языков программирования, особенно в мире свободного программного обеспечения.

Курсовая работа является примером использования языка Си.

1. Правила игры

программа игра виселица пользователь

Виселица - онлайн игра в слова. Игрокам загадывается слово, которое они должны угадать, используя буквы алфавита и возможность совершить ограниченное количество ошибок (10 ошибок). Вторым игроком и противником для пользователя является сам компьютер.

На экран выводится количество букв, задачей первого игрока (пользователя) не только угадать слово, но и сделать это раньше второго игрока (компьютера). В зависимости от выбранного уровня сложности игрокам может быть предоставлена подсказка (открытие первой буквы).

2. Реализация программного кода с комментариями

В программе используются библиотеки:

– #include<stdio.h> // библиотека ввода-вывода

– #include<time.h> // библиотека, содержащая типы и функции для работы с датой и временем

– #include<math.h> // библиотека, предназначенная для выполнения простых математических операций

– #include<stdlib.h> // библиотека функций общего назначения

– #include<Windows.h> // совокупность различных библиотек ОС Windows

– #include «string.h» // библиотека функций для работы со строками и с памятью

В начале кода игры приведены различные функции для упрощения реализации работы.

Функция вывода игрового меню и перехода к уровням сложности игры:

Vh() {

HANDLE hConsole=GetStdHandle (STD_OUTPUT_HANDLE);

char i;

system («cls»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|4));

printf («\n\n Виселица\n»);

printf («\n\n»);

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения нажмите enter\n»);

getchar();

printf («\n\n\n»);

printf («*|1. Играть|*\n»);

printf («*|2. Выход |*\n»);

i=getch(); //getch в i записывает символ который вводят с клавиатуры не печатает его

while (i<49 || i>51)

{

printf («Некорректное число\n»);

i=getch();

}

if (i=='1') // Выбор игрока

{

system («cls»);

printf («*|1. Легкий|*\n»);

printf («*|2. Усложненный |*\n»);

printf («*|3. Выход |*\n»);

i=getch(); //getch в i записывает символ который вводят с клавиатуры не печатает его

while (i<49 || i>51)

{

printf («Некорректное число\n»);

i=getch();

}

if (i=='1')

{

system («cls»);

Vh1 ();

}

if (i=='2')

{

system («cls»);

Vh2 ();

}

if (i=='3')

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|8));

exit(0);

}

}

if (i=='2')

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|8));

exit(0);

}

}

Листинг 1 - Вывод игрового меню и выбор уровня сложности

Функция, которая реализует 1 вариант сложности игры (легкий уровень):

Vh1 () {

int l, l1, i, k, j;

int n[20], regp=0, regr=0, letind[32];

char word[20]={0}, word_g[20]={0}, c;

char *c1=&c;

InitWords(); // Загрузка словоря

int nwords = ar_l; // Количество слов

DigitClean(n);

DigitClean(letind);

RandWord(word); // выбор произвольного слова

l=Length(word);

c=word[0];

j=Srav (word, c1, l, 1, n, letind); // открытие 1 буквы, если она еще раз встречается в слове, то она открывается на всех позициях

search (letind, n, word, word_g);

j=0;

while (j!=1)

{

printf («Слово:»);

printf («\t\t\tИспользованные буквы:»);

for (i=0; i<32; i++)

if (letind[i]==1)

printf («%c;», Alfav[i]);

printf («\n»);

for (i=0; i<l; i++) // вывод открытых букв и угадываемых позиций

{

if (n[i]==1)

printf («%c», word[i]);

else

printf («_»);

}

printf («\nВведите букву или слово целиком:»);

scanf («%1s»,&word_g); // ввод буквы или слова

l1=Length (word_g);

j=Srav (word, word_g, l, l1, n, letind); // проверка вводимого(ых) символа(ов)

search (letind, n, word, word_g);

 //printf («\nj=%i», j);

if (j==0) // буква не угадана

{

printf («\nВаша виселица \n»);

regp++; // функция рисовки виселицы и ход робота

hang(regp);

regr=robot (letind, word, l, n, regr);

system («cls»);

search (letind, n, word, word_g);

}

else

if (j==-1) // буква угадана

{

printf («\n\n»); // функция хода робота

regr=robot (letind, word, l, n, regr);

system («cls»);

search (letind, n, word, word_g);

}

else

if (j==3) // введен некорректный символ

printf («\nПожалуйста используйте строчные буквы русского алфавита\n»);

else

printf («\nЭта буква уже была использована\n»);

}

for (k=0; k<=l; k++)

printf («\n Угаданное слово:%c», word[k]);

printf («\nВы выиграли!!!»);

}

Листинг 2 - Реализация 1-го уровня сложности

Функция, которая реализует 2 вариант сложности игры (сложный уровень):

Vh2 () {

int l, l1, i, k, j=0;

int n[20], regp=0, regr=0, letind[32];

char word[20]={0}, word_g[20]={0};

InitWords(); // Загрузка словоря

int nwords = ar_l; // Количество слов

 // Проверяем словарь

DigitClean(n);

DigitClean(letind);

RandWord(word); // выбор произвольного слова

l=Length(word);

while (j!=1)

{

printf («Слово:\n»);

printf («\t\t\tИспользованные буквы:»);

for (i=0; i<32; i++)

if (letind[i]==1)

printf («%c;», Alfav[i]);

printf («\n»);

for (i=0; i<l; i++) // вывод открытых букв и угадываемых позиций

{

if (n[i]==1)

printf («%c», word[i]);

else

printf («_»);

}

printf («\nВведите букву или слово целиком:»);

scanf («%1s»,&word_g); // ввод буквы или слова

l1=Length (word_g);

j=Srav (word, word_g, l, l1, n, letind); // проверка вводимого(ых) символа(ов)

search (letind, n, word, word_g);

 //printf («\nj=%i», j);

if (j==0) // буква не угадана

{

printf («\nВаша виселица \n»);

regp++; // функция рисовки виселицы и ход робота

hang(regp);

regr=robot (letind, word, l, n, regr);

system («cls»);

search (letind, n, word, word_g);

}

else

{

if (j==-1) // буква угадана

{

printf («\n\n»); // функция хода робота

regr=robot (letind, word, l, n, regr);

system («cls»);

search (letind, n, word, word_g);

}

else

{

if (j==3) // введен некорректный символ

printf («\nПожалуйста используйте строчные буквы русского алфавита\n»);

else

printf («\nЭта буква уже была использована\n»);

}

}

}

for (k=0; k<=l; k++)

printf («\n Угаданное слово:%c», word[k]);

printf («\nВы выиграли!!!»);

}

Листинг 3 - Реализация 2-го уровня сложности

Функция загрузки словаря:

void InitWords()

{

FILE *f;

ar_l = 0;

f = fopen (fdict, «r»); // открываем файл

while((fscanf (f, «%s», ArrayFName [ar_l])!= EOF) && (ar_l < 10000))

ar_l++; // переписываем слова в массив и считаем их количество

 //printf («Загружено слов:%i», ar_l);

fclose(f);

}

Листинг 4 - Загрузка словаря

Функция определения количества символов в строке (длины слова):

int Length (char *str)

{

int l = -1;

while (str [l + 1]) l++;

l++;

return l;

}

Листинг 5 - Определение длины слова

Функция очистки массива (заполнение массива «0»):

void DigitClean (int* m)

{

int i;

if (m) // пока указатель m существует, каждому i элементу присваивается значение = 0

for (i = 0; i < 20; i++)

m[i] =0;

}

Листинг 6 - Очистка массива

Функция генератора случайных чисел с задаваемыми границами:

int randomize (int a, int b)

{

int ran;

ran=rand(); // присваиваем переменной случайное значение

while (ran<a || ran>b) // пока ran не принадлежит заданному промежутку, мы присваиваем ему случайные значения

ran =rand();

return ran;

}

Листинг 7 - Выбор случайного числа из заданного промежутка

Функция выбора произвольного слова из загруженного словаря:

void RandWord (char *word)

{

int l, j, a;

int k=0;

a=randomize (0,10000)+1; // выбираем произвольный номер слова, не превышающий количество загруженных

char *uk=&ArrayFName [a-1] [0]; // заводим указатель на слово под этим номером

l=Length (ArrayFName[a-1]); // находим его длину

for (j=0; j<l; j++)

word[j]=ArrayFName [a-1] [j]++; // переписываем его в отдельный массив

}

Листинг 8 - Выбор случайного слова

Функция, накапливающая использованные буквы:

void search (int *letind, int *n, char *a, char *b) {

int i, j; // letind-хранит информацию об использованных буквах алфавита, n-хранит информацию об открытых буквах в слове, a-угадываемое слово, b-ход игрока (если одна буква, то идет проверка на использование ранее)

for (i=0; i<32; i++)

if (n[i]==1)

for (j=0; j<32; j++)

if (Alfav[j]==a[i])

letind[j]=1; // если ранее не использовалось, то теперь оказывается, что теперь использовалась

if (Length(b)==1)

for (j=0; j<32; j++)

if (Alfav[j]==*b)

letind[j]=1; // если ранее не использовалось, то теперь оказывается, что теперь использовалась

}

Листинг 9 - Накопление использованных букв

Функция, рисующая виселицу:

void hang (int reg) // передается номер ошибки, и исходя из него рисуется виселица

{

HANDLE hConsole=GetStdHandle (STD_OUTPUT_HANDLE);

if (reg==10)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|4));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

printf («\n\t\tПРОИГРЫШ!!!»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для выхода в главное меню нажмите enter\n»);

getchar();

system («cls»);

Vh();

}

else

if (reg==9)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|1));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==8)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|13));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==7)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|9));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==6)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|11));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==5)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|10));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==4)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|6));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==3)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|14));

printf («\t\t ********* \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==2)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|7));

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==1)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|15));

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

}

Листинг 10 - Рисование виселицы

Функция хода второго игрока(компьютера):

int robot (int *letind, char *a, int l, int *n, int regr)

{ // letind-хранит информацию об использованных буквах алфавита, n-хранит информацию об открытых буквах в слове, a-угадываемое слово, l-длинна угадываемого слова, regr-количество ошибок робота

int i=0, j, x;

char c; // переменная, в которую записывается ход робота

char *c1=&c;

if(letind)

{

while (i==0)

{x=randomize (0,31); // поиск и выбор не использованной

if (letind[x]==0) // буквы

{

c=Alfav[x];

j=Srav (a, c1, l, 1, n, letind); // нашли букву проверяем ее н наличие в слове

if (j==1)

printf («\nПобедил робот!!!»); // если робот угадал последнюю не угаданную букву в слове

else

{

if (j==0)

{

letind[x]=1;

printf («\nИспользуемая роботом буква:%c\n», c); // робот не угадал букву

printf («\nВиселица робота \n»);

regr++;

hang(regr);

}

else

if (j==-1)

{

letind[x]=1; // робот не угадал букву

printf («\nУгаданная роботом буква:%c\n», c);

}

}

i++;

}

}

}

return regr; // результат-учет количества ошибок робота

}

Листинг 11 - Ход второго игрока

Функция сравнения введенных данных (Результаты: 3-введен некорректный символ, 2-такая буква уже использовалась, 1-угадано слово, 0-ничего не угаданно, - 1 - угадана буква):

int Srav (char *a, char *b, int l, int l1, int *n, int *letind) // letind-хранит информацию об использованных буквах алфавита, n-хранит информацию об открытых буквах в слове, a-угадываемое слово, b-ход игрока, l-длинна угадываемого слова, l1-длина хода игрока

{

char c;

int t, i, j, k, x=0, y=0;

if (b && a && n && letind)

{

if (l1==1) // если введен 1 символ

{

for (t=0; t<32; t++)

if (Alfav[t]==*b) // если символ уже был

{ // использован, возвращаем результат-2

if (letind[t]==1)

return 2;

else

{

for (i=0; i<l; i++) // иначе проверяем на наличие

if (a[i]==*b) // символа в искомом слове

{

n[i]=1;

x++;

}

for (i = 0; i<l; i++) // символ есть и все символы теперь

if (n[i]==1) // отгаданы, возвращаем-1 y++;

if (y==l)

return 1;

else

{

if (x==0) // символ не найден, возвращаем-0

return 0;

else

return -1; // символ найден, возвращаем - -1

}

}

}

if (t==32) // символ не найден в алфавите, возвращаем-3

return 3;

}

else // если введен не один символ

{

if (l1==l) // если длинна искомого и введенного слов совпадают

{ // проверяем на совпадение символов

for (i = 0; ((a[i] == b[i]) && (i < l)); i++);

if (i < l) return 0; // не совпали-0

return 1; // совпали-1

}

else

{ // если длинна искомого и введенного слов не совпадают, возвращаем-0

printf («\nВведено некоректное выражение»);

return 0;

}

}

}

}

Листинг 12 - Сравнение введенных данных

3. Инструкция пользователя

Игра начинается таким образом: игроку предлагается выбрать начать игру или покинуть ее.

Рисунок 1. Начало игры

После этого игроку предлагается выбрать уровень сложности или выйти из игры. При вводе 1, вы переходите на легкий уровень сложности. При вводе 2, вы переходите на усложненный уровень. При вводе 3, вы покинете игру.

Рисунок 2. Выбор уровня сложности

Если игрок ввел 1, то начинается процесс игры между компьютером и игроком. В качестве подсказки уже известна первая буква угадываемого слова. Первый ход совершает игрок. На экране появляется слово, каждая неизвестная буква которого обозначена штрихами, и использованные буквы. Ниже игроку предлагается ввести букву или слово целиком.

Рисунок 3. Угадывание слова

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

Рисунок 4. Угадывание слова

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

Рисунок 5. Отображение ходов игроков

Игра продолжается до тех пор, пока кто-то из игроков не угадает слово или не совершит 10 ошибок. В этом случае на экране отображается соответствующее сообщение об окончании игры.

Рисунок 6. Конец игры

Заключение

Во время выполнения курсовой работы были изучены принципы программирования на языке Си, были освоены основные концепции и стратегии по созданию консольного приложения «Виселица», которое является результатом выполнения курсовой работы.

Библиографический список

1 Керниган Б. Язык программирования Си 2-е издание / Б. Керниган Д. Ричи М.: Издательский дом «Вильямс», 2012. 272 с.

2 Википедия. Свободная энциклопедия [Электронный ресурс] / Режим доступа: https://ru.wikipedia.org/wiki/Виселица_(игра)

3 Википедия. Свободная энциклопедия [Электронный ресурс] / Режим доступа: https://ru.wikipedia.org/wiki/Си_(язык_программирования)

Приложение

Код программы

#include «Windows.h»

#include «stdio.h»

#include «string.h»

#include «stdlib.h»

#include «time.h»

#include «math.h»

#define fdict «dict1.txt»

 //

 // Функции и переменные

 //

char ArrayFName[10000] [20]; // массив, в который переписывается словарь

int ar_l = 0;

char Alfav[] ={'а', ' б', 'в', 'г', 'д', 'е', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ь', 'ъ', 'ы', 'э', 'ю', 'я'};

void DigitClean (int* m) // заполнение массива «0»

{

int i;

if (m)

for (i = 0; i < 20; i++)

m[i] =0;

}

void InitWords() // Загрузка словаря

{

FILE *f;

ar_l = 0;

f = fopen (fdict, «r»);

while((fscanf (f, «%s», ArrayFName [ar_l])!= EOF) && (ar_l < 10000))

ar_l++;

 //printf («Загружено слов:%i», ar_l);

fclose(f);

}

 // функция генератора случайных чисел с задаваемыми границами

int randomize (int a, int b)

{

int ran;

ran=rand();

while (ran<a || ran>b)

{

Листинг А.1, лист 1

ran=rand();

 //printf («rand=%i\n», ran);

}

return ran;

}

 // функция определения количества символов в строке

int Length (char *str)

{

int l = -1;

while (str[l + 1]) l++;

l++;

return l;

}

 // функция, выбирающая случайное слово

void RandWord (char *word)

{

int l, j, a;

int k=0;

a=randomize (0,10000)+1;

char *uk=&ArrayFName [a-1] [0];

l=Length (ArrayFName[a-1]);

for (j=0; j<l; j++)

word[j]=ArrayFName [a-1] [j]++;

}

 // функция накопления использованных букв

void search (int *letind, int *n, char *a, char *b)

{

int i, j;

for (i=0; i<32; i++)

if (n[i]==1)

for (j=0; j<32; j++)

if (Alfav[j]==a[i])

letind[j]=1;

if (Length(b)==1)

for (j=0; j<32; j++)

if (Alfav[j]==*b)

letind[j]=1;

}

 // функция рисовки виселицы

void hang (int reg)

{

HANDLE hConsole=GetStdHandle (STD_OUTPUT_HANDLE);

Листинг А.1, лист 2

if (reg==10)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|4));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

printf («\n\t\tПРОИГРЫШ!!!»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\n\t\t Для выхода в главное меню нажмите двойной enter\n»);

getchar();

getchar();

system («cls»);

Vh();

}

else

if (reg==9) {

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|1));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

Листинг А.1, лист 3

else

if (reg==8)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|13));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==7)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|9));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==6) {

Листинг А.1, лист 4

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|11));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==5)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|10));

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==4)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|6));

printf («\t\t ********* \n»);

Листинг А.1, лист 5

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==3)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|14));

printf («\t\t ********* \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==2)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|7));

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

Листинг А.1, лист 6

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

else

if (reg==1)

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|15));

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения игры нажмите enter\n»);

getchar();

}

}

int robot (int *letind, char *a, int l, int *n, int regr)

{

int i=0, j, x;

char c;

char *c1=&c;

if(letind)

{

while (i==0)

Листинг А.1, лист 7

{x=randomize (0,31);

if (letind[x]==0)

{

c=Alfav[x];

j=Srav (a, c1, l, 1, n, letind);

if (j==1)

printf («\nПобедил робот!!!»);

else

{

if (j==0)

{

letind[x]=1;

printf («\nИспользуемая роботом буква:%c\n», c);

printf («\nВиселица робота \n»);

regr++;

hang(regr);

}

else

if (j==-1)

{

letind[x]=1;

printf («\nУгаданная роботом буква:%c\n», c);

}

}

i++;

}

}

}

return regr;

}

int Srav (char *a, char *b, int l, int l1, int *n, int *letind) // функция сравнения введенных данных (2-такая буква уже использовалась, 1-угадано слово, 0-ничего не угаданно, - 1 - угадана буква, 3-введен некорректный символ)

{

char c;

int t, i, j, k, x=0, y=0;

if (b && a && n && letind)

{

if (l1==1)

{

for (t=0; t<32; t++)

if (Alfav[t]==*b)

Листинг А.1, лист 8

{

if (letind[t]==1)

return 2;

else

{

for (i=0; i<l; i++)

if (a[i]==*b)

{

n[i]=1;

x++;

}

for (i = 0; i<l; i++)

if (n[i]==1)

y++;

if (y==l)

return 1;

else

{

if (x==0)

return 0;

else

return -1;

}

}

}

if (t==32)

return 3;

}

else

{

if (l1==l)

{

for (i = 0; ((a[i] == b[i]) && (i < l)); i++);

if (i < l) return 0;

return 1;

}

else

{

printf («\nВведено некоректное выражение»);

return 0;

}

}

}

Листинг А.1, лист 9

}

 //

 // Варианты сложности игры

 //

Vh1 () {

int l, l1, i, k, j;

int n[20], regp=0, regr=0, letind[32];

char word[20]={0}, word_g[20]={0}, c;

char *c1=&c;

InitWords(); // Загрузка словоря

int nwords = ar_l; // Количество слов

DigitClean(n);

DigitClean(letind);

RandWord(word); // выбор произвольного слова

l=Length(word);

c=word[0];

j=Srav (word, c1, l, 1, n, letind);

search (letind, n, word, word_g);

j=0;

while (j!=1)

{

printf («Слово:»);

printf («\t\t\tИспользованные буквы:»);

for (i=0; i<32; i++)

if (letind[i]==1)

printf («%c;», Alfav[i]);

printf («\n»);

for (i=0; i<l; i++)

{

if (n[i]==1)

printf («%c», word[i]);

else

printf («_»);

}

printf («\nВведите букву или слово целиком:»);

scanf («%1s»,&word_g);

l1=Length (word_g);

j=Srav (word, word_g, l, l1, n, letind);

search (letind, n, word, word_g);

 //printf («\nj=%i», j);

if (j==0)

{

printf («\nВаша виселица \n»);

Листинг А.1, лист 10

regp++; // функция рисовки виселицы и ход робота

hang(regp);

regr=robot (letind, word, l, n, regr);

system («cls»);

search (letind, n, word, word_g);

}

else

if (j==-1)

{

printf («\n\n»);

regr=robot (letind, word, l, n, regr);

system («cls»);

search (letind, n, word, word_g);

}

else

if (j==3)

printf («\nПожалуйста используйте строчные буквы русского алфавита\n»);

else

printf («\nЭта буква уже была использована\n»);

}

for (k=0; k<=l; k++)

printf («\n Угаданное слово:%c», word[k]);

printf («\nВы выиграли!!!»);

}

Vh2 () {

int l, l1, i, k, j=0;

int n[20], regp=0, regr=0, letind[32];

char word[20]={0}, word_g[20]={0};

InitWords(); // Загрузка словоря

int nwords = ar_l; // Количество слов

 // Проверяем словарь

DigitClean(n);

DigitClean(letind);

RandWord(word);

l=Length(word);

while (j!=1)

{

printf («Слово:\n»);

printf («\t\t\tИспользованные буквы:»);

for (i=0; i<32; i++)

if (letind[i]==1)

printf («%c;», Alfav[i]);

Листинг А.1, лист 11

printf («\n»);

for (i=0; i<l; i++)

{

if (n[i]==1)

printf («%c», word[i]);

else

printf («_»);

}

printf («\nВведите букву или слово целиком:»);

scanf («%1s»,&word_g);

l1=Length (word_g);

j=Srav (word, word_g, l, l1, n, letind);

search (letind, n, word, word_g);

 //printf («\nj=%i», j);

if (j==0)

{

printf («\nВаша виселица \n»);

regp++; // функция рисовки виселицы и ход робота

hang(regp);

regr=robot (letind, word, l, n, regr);

system («cls»);

search (letind, n, word, word_g);

}

else

{

if (j==-1)

{

printf («\n\n»);

regr=robot (letind, word, l, n, regr);

system («cls»);

search (letind, n, word, word_g);

}

else

{

if (j==3)

printf («\nПожалуйста используйте строчные буквы русского алфавита\n»);

else

printf («\nЭта буква уже была использована\n»);

}

}

}

for (k=0; k<=l; k++)

Листинг А.1, лист 12

printf («\n Угаданное слово:%c», word[k]);

printf («\nВы выиграли!!!»);

}

 // Игровое меню

Vh() {

HANDLE hConsole=GetStdHandle (STD_OUTPUT_HANDLE);

char i;

system («cls»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|4));

printf («\n\n Виселица\n»);

printf («\n\n»);

printf («\t\t ********* \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * * * \n»);

printf («\t\t ** * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** * * \n»);

printf («\t\t ** \n»);

printf («\t\t ** \n»);

printf («\t\t********** \n»);

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|2));

printf («\t\t Для продолжения нажмите enter\n»);

getchar();

printf («\n\n\n»);

printf («*|1. Играть|*\n»);

printf («*|2. Выход |*\n»);

i=getch(); //getch в i записывает символ который вводят с клавиатуры не печатает его

while (i<49 || i>51)

{

printf («Некорректное число\n»);

i=getch();

}

if (i=='1') // Выбор игрока

{

system («cls»);

printf («*|1. Легкий|*\n»);

printf («*|2. Усложненный |*\n»);

printf («*|3. Выход |*\n»);

i=getch();

Листинг А.1, лист 13

 //getch в i записывает символ, который вводят с клавиатуры не печатает его

while (i<49 || i>51)

{

printf («Некорректное число\n»);

i=getch();

}

if (i=='1')

{

system («cls»);

Vh1 ();

}

if (i=='2')

{

system («cls»);

Vh2 ();

}

if (i=='3')

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|8));

exit(0);

}

}

if (i=='2')

{

SetConsoleTextAttribute (hConsole, (WORD) ((0<<4)|8));

exit(0);

}

Vh();

}

Листинг А.1, лист 14

Размещено на Allbest.ru


Подобные документы

  • Особенности визуальной среды программирования Microsoft Visual Studio 2015 Enterprise. Средства объектно-ориентированного программирования. Этапы проектирования программного комплекса. Отладка и тестирование программы игры "Виселица".

    курсовая работа [2,4 M], добавлен 31.01.2016

  • Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.

    курсовая работа [572,7 K], добавлен 14.07.2012

  • Приемы программирования в Delphi. Алгоритм поиска альфа-бета отсечения, преимущества. Описание программного средства. Разработка программы, реализующая алгоритм игры "реверси". Руководство пользователя. Листинг программы. Навыки реализации алгоритмов.

    курсовая работа [357,1 K], добавлен 28.02.2011

  • Разработка программы "Виселица" с использованием программной среды Visual Basic и средств объектно-ориентированного программирования: программные требования, описание алгоритма, блок-схема программы и дополнительной процедуры. Листинг программы.

    курсовая работа [188,2 K], добавлен 28.06.2009

  • Порядок описание процесса разработки модели для разрешения задачи программирования с помощью средств языка программирования. Структуры данных и основные принципы их построения. Этапы компьютерного моделирования. Этапы и значение написания программы.

    курсовая работа [19,5 K], добавлен 19.05.2011

  • Обоснование необходимости разработки программы для игры "Тетрис". Математическая и графическая части алгоритма. Выбор языка и среды программирования. Отладка текста программы, разработка интерфейса пользователя. Тестирование, руководство пользователя.

    курсовая работа [1,5 M], добавлен 17.01.2011

  • Входные и выходные данные программы. Выбор языка программирования. Рабочая среда Delphi 7. Правила игры "Кости". Разработка пользовательского интерфейса. Экономическое обоснование программного продукта. Расчет расходов на содержание и эксплуатацию.

    дипломная работа [960,6 K], добавлен 07.02.2016

  • Разработка программы, реализующей построение объемной гистограммы с использованием свойств языка программирования Java. Возможность графически отобразить статистические данные урожайности как основное требование к программе. Реализация кода программы.

    курсовая работа [333,5 K], добавлен 21.01.2013

  • Разработка программного продукта с помощью языка программирования Visual Basic. Описание интерфейса пользователя и возможностей программы. Исходный код основных модулей. Программа, демонстрирующая основные возможности диаграмм и среды Visual Basic.

    контрольная работа [989,9 K], добавлен 29.03.2011

  • Особенности программирования аркадных игр в среде Python. Краткая характеристика языка программирования Python, его особенности и синтаксис. Описание компьютерной игры "Танчики" - правила игры, пояснение ключевых строк кода. Демонстрация работы программы.

    курсовая работа [160,3 K], добавлен 03.12.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.