Программа "Наборщик"
Разработка и реализация игры с использованием компилятора MinGW. Написание исходного текста программы на языке С. Создание поля для записи слов игроками и функции, проверяющая корректность введенного слова. Запись засчитанных ходов в блокнот.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 17.02.2019 |
Размер файла | 238,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
Федеральное агентство железнодорожного транспорта
Омский государственный университет путей сообщения
Кафедра «Автоматика и системы управления»
Программа «НАБОРЩИК»
Пояснительная записка
Студент гр. 23и Тимофеева С.О.
Омск 2014
Реферат
Объектом работы является игра «Наборщик».
Цель работы - научиться реализовывать пошаговую игру.
Результатом работы является рабочая игра «Наборщик».
Игра «Наборщик» разработана с использованием компилятора MinGW. Исходный текст программы написан на языке С. В процессе разработки игры была изучена лексика языка С. Пояснительная записка выполнена в текстовом редакторе Microsoft Word 2007.
Содержание
- Введение
- 1. Постановка игры
- 1.1 Задание
- 1.2 Правила игры
- 1.3 Порядок действий для выполнения задания
- 2. Реализация задания
- 2.1 Игровое поле
- 2.2 Ввод исходного слова
- 2.3 Корретность ходов
- 2.4 Запись слова в блокнот
- 2.5 Сборка всей игры
- Заключение
- Библиографический список
- Приложение
Введение
Курсовая работа является примером реализации задачи об игре «Наборщик», написанной на языке высокого уровня С.
Особенность языка С заключается в том, что будучи языком высокого уровня, он сохранил многие черты языка низкого уровня. Язык С расположен между языками высокого уровня и языками низкого уровня, и в этом его сильные и одновременно слабые стороны. Как и язык ассемблера (язык низкого уровня), язык программирования С может непосредственно управлять памятью компьютера. С другой стороны, С обладает чертами языков высокого уровня, поэтому программы на языке С читать и создавать легче, чем программы на языке ассемблера. Язык С является очень удобным для написания системных программ, но в программах на языке С для иных целей зачастую трудней разобраться, нежели в программах, написанных на других языках. Язык С также имеет меньше возможностей для автоматической проверки программ, чем некоторые другие языки высокого уровня.
1. Постановка игры
1.1 Задание
На языке С, используя знания, полученные в ходе семестра на лекциях, практиках, лабораторных занятиях, а также самостоятельно, написать игру «Наборщик».
1.2 Правила игры
Берется произвольное слово. Из букв этого слова составляются другие слова. Игроки называют слова по очереди, тот, кто не смог назвать слово проигрывает. Запрещено повторение слов. Если вы хотите пропустить ход, введите “-“ и начнётся новый раунд. Если вы хотите завершить игру, введите “--“. Если вы считаете, что компьютер походил неверно, введите “?”.
1.3 Порядок действий для выполнения задания
При запуске игры, игрок видит игровое поле с правилами игры. Иллюстрацию можно наблюдать на рисунке 1.
Рисунок1 - Игровое поле
Игрок должен ввести слово для начала игры. Иллюстрацию можно наблюдать на рисунке 2.
Рисунок 2 - Ввод исходного слова
Игрок вводит слово, компьютер проверяет его по словарю, в случае, если такого слова нет или оно написано неверно, выводит на экран сообщение об ошибке. Далее компьютер даёт шанс ввести слово заново. Иллюстрацию можно наблюдать на рисунке 3.
Рисунок 3 - Сообщение об ошибке
После того как игрок ввёл слово без ошибок, начинается игра. Компьютер делает свой ход, за ним следует ход игрока и т.д. Если игрок не знает слова, который компьютер вывел в счёт своего хода, он должен ввести «?» и компьютер подберёт другое слово. Иллюстрацию можно наблюдать на рисунке 4.
Рисунок 4 - Ход игры
Раунд продолжается до тех пор, пока у игроков не закончатся ходы, т.е. в момент, когда игрок введёт «-» раунд закончится. Появится сообщение о том, кто выиграл и начнётся новый раунд. Если игрок хочет выйти из игры, он вводит «--» и игра заканчивается с таким же подведением итогов. Выигрывает игрок, которому удается сделать последний ход, вследствие чего второму игроку невозможно сделать свой ход. Иллюстрацию можно наблюдать на рисунке 4.
Рисунок 5 - Конец игры
игра компилятор блокнот
2. Реализация задания
2.1 Игровое поле
В начале для запуска игры необходимо создать поля для записи слов игроками, а так же вывод правил игры. Для выполнения этого задания воспользуемся функцией put_header.
2.2 Ввод исходного слова
Игрок вводит исходное слово, которое компьютер должен преобразовать и проверить на правильность. Это осуществляется функциями strtoupper (преобразование строки в верхний регистр) и check_word (проверка слова по словарю). Если слово существует в словаре, то программа продолжает свою работу. В противном случае выводится сообщение об ошибке. Иллюстрация поведения программы представлена на рисунке 6.
Рисунок 6 - Ввод исходного слова
2.3 Корретность ходов
По правилам игры неверно введённое слово одного из игроков не засчитывается. Поэтому нужна функция, которая проверяет корректно ли введено слово, а так же не повторяется ли введённое слово в текущей игре. Эта функции check_note и check_simple. Если же проверка слова на корректность пройдена, программа продолжает свою работу . Иллюстрация результата на рисунке 7.
Рисунок 7 - Вывод ошибки, продолжение игры
2.4 Запись слова в блокнот
Для контроля повторения слов, подсчёта результата, требуется блокнот, в который программа будет записывать засчитанные ходы. Для этого воспользуемся функциями check_note (проверка наличия слова в блокноте), add_note (добавление в блокнот) и clear_note (очистка блокнота).
2.5 Сборка всей игры
Теперь остается собрать все функции в main для реализации нашего проекта и добавить проверку победителя, обновления игрового процесса, правила игры и выход из программы.
Заключение
В ходе работы была реализована игра «Наборщик». В ней игрок пытается опередить соперника, которым является компьютер, на ход, чтобы одержать победу. В случае, если у игрока не остается ходов, то он проигрывает.
Программа была написана на языке программирования С в текстовом редакторе «Notepad++». Игра разработана с помощью компилятора «MinGW».
В программе были использованы функции библиотек stdio.h, string.h, process.h, locale.h, а также возможности синтаксиса языка С.
Библиографический список
1 Современные языки программирования
2 Программирование игр и графики
3 Викизнание
4 Себеста Р.В. Основные концепции языков программирования 5-е изд. / Р.В. Себеста. М.: Вильямс, 2001. 672 с.
5 Джарратано Д. Экспертные системы: принципы разработки и программирование / Д. Джарратано, Г. Райни: Вильямс, 2006. 851 с.
6 Хювёнен, Э. Мир Лиспа. В 2-х т. / Э. Хювёнен, Й. Сеппянен: Мир, 1990. 471 с.
Приложение А
Листинг программы
#include <stdio.h>
#include <string.h>
#include <process.h>
#define MAX_LEN 40
#define SFORMAT "%40s"
#define MAX_STR 1000
#define END_GAME "--"
#define END_ROUND "-"
#define UNKNOWN_WORD "?"
#define IGRA_DIC "lisa.dic" // Файл словаря
main()
{
char word[MAX_LEN], simple[MAX_LEN], h_word[MAX_LEN];
int score_hum = 0;
int score_comp = 0;
put_header();
while(1){ // Главный цикл игры
printf("Ваше слово для начала игры: ");
//прочитаем, переведём в верхний регистр и проверим на конец игры
// strtoupper(simple) - из нижнего регистра в верхний
if(scanf(SFORMAT, simple)==EOF || !strcmp(strtoupper(simple),END_GAME)) // EOF - конец строки\файла
break; //если конец игры или ввода выходим из Главного цикла игры
if(check_word(simple)) //если мы знаем это слово (есть в словаре)
add_note(simple); //добавим в переменную
else // если не знаем попросим новое
{
puts("Извините, я не знаю такого слова, введите, пожалуйста, другое.");
continue; //и снова на Главный цикл
}
//начинаем раунд
start_find(); // Открывает файл словаря
while(1) //Начало Цикла раунда
{
//найдём слово word по образцу simple в словаре
if (find_word(simple, word)) // компьютер ищет слово по буквам слова simple и записывает слово в word
{
if (check_note(word)) //есть ли оно уже в переменной
continue; //если уже есть перейдём на Начало Цикла раунда для нового поиска
else //если такого ещё нет в блокноте
{
printf("Я называю: %s\n",word);
REPEAT:
printf("Исходное слово: %s\n",simple);
printf("Ваш ход: ");
// strcmp - сравнивает строки
if(scanf(SFORMAT,h_word)==EOF || !strcmp(strtoupper(h_word),END_GAME)){
score_comp++; //мы назвали слово, нам очко
puts("Завершаем игру...");
goto FINISH;
}
if(!strcmp(h_word,UNKNOWN_WORD)){ //если человек не знает наше слово
puts("Хорошо. Ищу новое...");
continue; //идём к Началу Раунда чтобы подобрать новое слово
}
if(!strcmp(h_word,END_ROUND)){ //если человек сдался
score_comp++; //очко компу
puts("Вы сдались...");
break; //и выходим из Цикла раунда
}
if (check_note(h_word))
{
puts("Такое слово уже было! Придумайте другое.");
goto REPEAT;
}
if (!check_simple(simple,h_word)){
puts("Сожалею, но в вашем слове недопустимые буквы! Предложите другое.");
goto REPEAT;
}
if(check_word(h_word))
{
add_note(h_word);
puts("Ок.");
}
else{
puts("Извините, я не знаю такого слова. Придумайте другое.");
goto REPEAT;
}
//всё проверили теперь можем записать своё слово в переменную
add_note(word);
}
}
else
{
puts("У меня нет вариантов!");
if(num_words_note()>1) //если в блокноте были слова человека
score_hum++;
break;
}
} //конец цикла Раунда
clear_note(); // Очищаем переменную
end_find(); // Закрываем файл словаря
puts("Раунд окончен.");
puts("Счёт игры:");
printf("Я - %d, Вы - %d\n",score_comp, score_hum);
puts("Новая игра.");
} //конец Главного цикла игры
FINISH:
puts("Игра окончена.");
puts("Счёт игры:");
printf("Я - %d, Вы - %d\n",score_comp, score_hum);
puts("Пока!");
}
put_header()
{
puts("Вас приветствует игра 'Наборщик'\n");
puts("--------------------------------\n");
puts("Правила игры:\n");
puts("Берется произвольное слово. Из букв этого слова составляются другие слова. ");
puts("Игроки называют слова по очереди, тот, кто не смог назвать слово проигрывает. ");
puts("Запрещено повторение слов. Если вы хотите пропустить ход, введите '-' и начнётся новый раунд. ");
puts("Если вы хотите завершить игру, введите '--'. ");
puts("Если вы не знаете слово, которое предлагает компьютер, введите '?'.\n");
puts("Удачи!\n");
}
int check_word(char *w)
{
FILE *fp;
char word[MAX_LEN];
if( (fp=fopen(IGRA_DIC,"r"))==NULL )
{
fputs("Ошибка: Не могу открыть файл словаря!\n",stderr);
exit(1);
}
while(fscanf(fp,SFORMAT,word)!=EOF)
{
if( !strcmp(w,word) ){
fclose(fp);
return(1);
}
}
fclose(fp);
return(0);
}
static FILE *fp;
int find_word(char *simple, char *w) // ЛОГИКА
/* simple - слово, содержащее буквы для проверки,
* w - в этот массив записывается найденное слово состоящее из букв simple
*/
{
char word[MAX_LEN];
while(fscanf(fp,SFORMAT,word)!=EOF)
{
if( check_simple(simple,word) )
{
strcpy(w,word);
return(1);
}
}
*w=0;
return(0);
}
void start_find()
{
if( (fp=fopen(IGRA_DIC,"r"))==NULL )
{
fputs("Ошибка: Не могу открыть файл словаря!\n",stderr);
exit(1);
}
}
void end_find()
{
fclose(fp);
}
static char note[MAX_STR][MAX_LEN]; // использованные слова
static int word_count=0;
int check_note(char *w) //проверяем наличие слова в переменной note
{
int i;
for (i=0;i<word_count;i++)
{
if (!strcmp(note[i],w))
return 1;
}
return 0;
}
int add_note(char *w) //добавление слова в переменную
{
if(check_note(w)) //если уже есть
return 1;
if( word_count+1 < MAX_STR ){
strcpy (note[word_count++],w);
return 1;
}
else{
fputs("Превышена память программы!\n",stderr);
exit(1);
}
}
void clear_note() //очистка слова, количество слов = 0
{
word_count=0;
}
int num_words_note() //возвращает количество слов в блокноте
{
return word_count;
}
char* strtoupper(char *str)
{
char *s = str;
while(*s){
*s = toupper(*s);
s++;
}
return str;
}
/*
*simple - базовое слово, содержащее буквы для проверки,
*word - проверяемое слово, состоит ли оно из букв simple
* возвращает 1 если слово состоит и букв simple
*/
int check_simple (char *simple, char *word)
{
do{
if( strchr(simple,*word)==NULL ) //strchar - поиск вхождение символа в строку
return 0;
}while(*++word);
return 1;
}
Размещено на Allbest.ru
...Подобные документы
Написание программы на языке Delphi - создание электронной записной книжки. Описание типов "запись", полей и массива, составление процедур. Создание приветствия и редактирование записи. Создание команды для вызова справки. Принцип работы программы.
контрольная работа [17,9 K], добавлен 23.09.2010Функции компилятора как системной обрабатывающей программы. Этапы компиляции: анализ и синтез. Разработка лексического анализатора. Алгоритм и программа лексического анализа. Реализация двухфазного компилятора. Описание логической структуры программы.
курсовая работа [310,4 K], добавлен 26.03.2010Последовательность работ при разработке объектно-ориентированных программ. Виды синтаксических анализаторов и способы их применения. Описание алгоритма и анализ результативности работы программы, написанной на языке С, ее константы, переменные и функции.
курсовая работа [441,7 K], добавлен 03.07.2011Запись в языке программирования – это структура данных, состоящая из фиксированного числа компонентов, называемых полями записи. Поле записи как обычная переменная. Операторы сравнения, присоединения. Программа с использованием массива структур.
реферат [11,5 K], добавлен 19.01.2009Создание программы для хранения и обработки данных о съеме/сдаче жилья. Написание программы на языке C++ с использованием библиотеки Qt; использование исходного кода для создания приложения под Windows, Linux, Mac OS X без дополнительных изменений кода.
курсовая работа [60,4 K], добавлен 07.03.2013Разработка приложения на WinAPI с реализацией логической структуры в игре "Сапер". Реализация графической части приложения. Проверка на корректность поведения интерфейса программы, работы логической части игры, корректности записи и чтения файла.
курсовая работа [1,1 M], добавлен 17.10.2012Описание принципа развивающей игры в слова "Виселица". Разработка программы, реализующей задачу данной игры на языке Delphi. Обоснование выбора среды программирования, листинг файла, результаты отладки и тестирования, руководство для пользователя.
курсовая работа [572,7 K], добавлен 14.07.2012Написание игры "Lines" на языке Object Pascal в среде Delphi. Алгоритм работы программы. Описание метода генерации поля. Используемые константы и переменные. Форма приложения после старта игрового процесса. Основные элементы формы и обработки событий.
курсовая работа [225,0 K], добавлен 12.04.2012Программный комплекс для разработки программы транслирующей программу с языка Pascal на язык С++. Построение логической и арифметической модели решения. Разработка компилятора для программы. Методы отладки программы и создание для нее документации.
курсовая работа [742,6 K], добавлен 03.07.2011Составление программы для зашифровки текста (не более 255 символов), с использованием одного перемешанного алфавита, полученного случайной перестановкой всех букв исходного алфавита. Создание меню-интерфейса для навигации пользователя по программе.
курсовая работа [496,2 K], добавлен 17.05.2015Разработка утилиты кодирования и декодирования формата Base 64 в программной среде Linux с использованием компилятора. Написание программы на языке С++. Кодирование символьной строки любого набора байт в последовательность печатных ASCII символов.
курсовая работа [1,4 M], добавлен 10.09.2013Разработка и реализация проекта информационной системы, предназначенной для хранения сведения о клиентах и недвижимости. Моделирование и реализация информационной системы. Разработка пользовательского интерфейса. Затраты на написание программы и отладку.
курсовая работа [1,0 M], добавлен 30.06.2022Написание транслятора посредством языка Си, обрабатывающего конструкции integer, if Le then, записи (record), а также реализующего обработку new для выделения динамической памяти: разработка алгоритма реализации задачи, представление листинга программы.
курсовая работа [171,7 K], добавлен 03.07.2011Разработка программы логической игры в "крестики-нолики" пять в ряд на поле размера 15х15 клеток с применением графики на языке Pascal с использованием объектно-ориентированного программирования. Структура алгоритма программы и описание ее работы.
курсовая работа [821,5 K], добавлен 13.02.2012Создание программы для вычисления значения функции на основе определённой формулы. Уточнение структуры входных и выходных данных и определение ассемблерного формата их представления. Разработка алгоритмов для реализации работы программного обеспечения.
курсовая работа [240,6 K], добавлен 17.06.2013Разработка комплекса алгоритмов. Кодирование и компиляция. Тестирование, отладка, испытание и сдача программы. Минимальные системные требования для использования Delphi 7. Написание программы с использованием инструментального языка высокого уровня.
курсовая работа [2,7 M], добавлен 21.02.2011Взаимосвязь стадий процесса проектирования сложных программных систем. Создание компилятора подмножества языка высокого уровня (Pascal) на язык Ассемблера. Структура входных и выходных данных, алгоритмы их обработки. Рабочая документация программы.
курсовая работа [256,7 K], добавлен 27.07.2014Игровая программа "шашки" для игры между человеком и компьютером. Разработка алгоритмов, историческая линия развития задач. Различные подходы к построению систем. Сокращенный листинг программы и описание алгоритма. Компоненты искусственного интеллекта.
курсовая работа [196,2 K], добавлен 26.03.2009Алгоритм и блок-схема процесса обработки в диалоговой программе, вычисляющей площадь треугольника. Описание объектов, свойств, методов программы в среде визуального программирования С++ Builder. Формы и основные модули текста разработанной программы.
курсовая работа [2,2 M], добавлен 01.06.2014Создание программы для обработки структуры данных. Возможность ввода и записи данных на персональном компьютере. Прикладное программирование на языке Turbo Pascal. Свободное редактирование записанных данных с помощью программы, написанной на Turbo Pascal.
лабораторная работа [11,4 K], добавлен 13.05.2011