Программа "Угадай слово"

Автор: Пользователь скрыл имя, 29 Июля 2014 в 12:36, курсовая работа

Краткое описание

Цель курсовой работы – научиться реализовывать пошаговую игру. Результатом курсовой работы является рабочая игра «Угадай слово». Игра «Угадай слово» разработана с использованием компилятора MinGW. Исходный текст программы написан на языке C. В процессе разработки игры была изучена лексика языка C. Пояснительная записка выполнена в текстовом редакторе Microsoft Word 2010.

Оглавление

Задание
Реферат
Введение
Основная часть
Заключение
Библиографический список
Приложение А

Файлы: 1 файл

Отгадай слово.doc

— 411.00 Кб (Скачать)

Федеральное агентство железнодорожного транспорта

Омский государственный университет путей сообщения

 

Кафедра «Автоматика и системы управления»

 

 

 

К ЗАЩИТЕ ДОПУСТИТЬ

 

____________Е.А. Альтман

«___»__________________2013 г

 

 

 

 

ПРОГРАММА «УГАДАЙ СЛОВО»

Пояснительная записка к курсовой работе

по дисциплине «Технология программирования»

ИНМВ.300000.000 ПЗ

 

 

 

 

 

                                  Студент гр. 22и

 

 

 

 

 

 

 

 

 

         _________И.В. Сафонов

                      «__»__________2013 г.

 

 

 

Доцент кафедры АиСУ

________Е.А. Альтман

                    «__»_________ 2013 г.                        

 

 

 

 

 

 

 

 

 

 

Омск  2013

Задание

 

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

Правила игры:

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Реферат

УДК 004.9

 

Пояснительная записка к курсовой работе содержит 22 страницы, 7 рисунков, 3 использованных источника, 1 приложение.

 

C, MinGW, NotePad++.

 

Объектом курсовой работы является игра «Угадай слово».

Цель курсовой работы – научиться реализовывать пошаговую игру.

Результатом курсовой работы является рабочая игра «Угадай слово».

Игра «Угадай слово» разработана с использованием компилятора MinGW. Исходный текст программы написан на языке C.

В процессе разработки игры была изучена лексика языка C.

Пояснительная записка выполнена в текстовом редакторе Microsoft Word 2010.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Оглавление

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение

 

Курсовая работа является примером реализации задачи об игре «Угадай слово», написанной на языке высокого уровня C.

Особенность языка C заключается в том, что, будучи языком высокого уровня, он сохранил многие черты языка низкого уровня. Язык C расположен между языками высокого уровня и языками низкого уровня, и в этом заключаются его сильные и слабые стороны. Как и язык ассемблера (или любой другой язык низкого уровня), язык программирования C может непосредственно управлять памятью компьютера. С другой стороны, C обладает чертами языков высокого уровня, поэтому программы на языке C создавать и читать легче, чем программы на языке ассемблера. Язык C является очень удобным для написания системных программ, но иной раз в программе на языке C труднее разобраться, нежели в программах, написанных на других языках. Так же язык C имеет меньше возможностей для автоматической проверки программ, чем некоторые другие языки высокого уровня.

 

Основная часть

 

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

 

 

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

 

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

 

 

 

Рисунок 2 – Процесс игры режима 1

 

Во время ввода слов игроками идет единовременная проверка на наличие слова в словаре и на длину слова (оно должно состоять из 5 символов). Если слова нет в словаре или не учтена длина слова, то выдается ошибка. Текст ошибки представлен на рисунке 3. 

 

 

Рисунок 3 – Ошибка при вводе слова

 

После того, как слова введены правильно, они, количество попыток и количество совпадений заносятся в игровое поле данных (Рисунок 4).

 

 

Рисунок 4 – Обновленное поле, после ввода слов

 

При выборе режима игры (2), принцип игры остается таким же, только лишь меняется вид игрового поля. Ну и конечно добавляется алгоритм игры компьютера. Игровое поле режима (2), а так же процесс ввода слов представлен на рисунке 5.

 

 

Рисунок 5 – Режим игры (2)

 

Ввиду сложности отгадывания слова, на каждой пятой попытке дается подсказка: выдается случайная буква из загаданного слова. Вид подсказки показан на рисунке 6.

 

 

Рисунок 6 – Подсказка

 

Если слово отгадано, то выдается сообщение о выигрыше и информация, кто и с какого раза угадал слово. Это показано на рисунке 6.

 

 

Рисунок 7 – Выигрыш

 

Описание функций:

  • void print_main – печатает общее состояние игры (поле).
  • void get_init – задает начальное (загаданное) слово (берется случайно из словаря).
  • void get_word – вводит слова игроков, все слова запрашиваются с клавиатуры.
  • void get_comp – выводит слово компьютера;
  • void check_word – проверяет слова игроков и компьютера на соответствие с загаданным.
  • void hint – выводит на экран подсказку на каждой пятой попытке.
  • void* init_dict – инициализирует словарь слов из файла dict1.txt. Содержит слова длиной только 5 символов.
  • int dict_word – возвращает номер слова в массиве указателей на начало слов, с итоговым количеством слов. Если слова нет возвращает-1.
  • void Gamer1vsGamer2 – управляющая функция игры человека против человека.
  • void Gamer1vsComputer – управляющая функция игры компьютера против человека.

 

Заключение

 

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

Программа была написана на языке программирования C в текстовом редакторе «NotePad++». Игра была разработана с помощью компилятора «MinGW».

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

 

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

  1. Керниган, Б. зык программирования Си / Б. Керниган, Д. Ритчи Издание 3-е исправленное. Перевод с английского под редакцией Вс. С. Штаркмана, Невский Диалект, СПб: 2001
  2. Методические указания к лабораторным работам / Е. А. Альтман, А. В. Александров, Н. Г. Ананьева, Н. Е. Актаев; Омский гос. ун-т путей сообщения. Омск, 2011. 31 с.
  3. Методические указания к лабораторным работам по дисциплинам «Программирование»  и «Технологии программирования» / Е. А. Альтман, А.В. Александров, Н.Г. Ананьева, Н.Е. Актаев; Омский гос. ун-т путей сообщения. Омск, 2012. 44 с.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение А

(обязательное)

Листинг программы

 

/*ИГРА: Отгадай слово.

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

Игроки называют тестовые слова.

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

Выигрывает тот, кто быстрее угадал слово.

*/

#include "stdio.h"

#include "math.h"

#include "time.h"

#include "string.h"

#include "conio.h"

#include "stdlib.h"

#define fdict "dict1.txt"

struct main                //Структура главных данных

{

int w1;   //Количество попыток игрока 1

int w2;   //Количество попыток игрока 2

int w3;   //Количество попыток компьютера

char word1[20][5]; //Слова 1 игрока

char word2[20][5]; //Слова 2 игрока

char word0[5];  //Слово, которое загадал ведущий

int score1;  //Cовпадений 1 игрока

int score2;  //Совпадений 2 игрока

int score3;  //Совпадений компьютера

};

struct word                //Структура для работы со словами

{

char w1[20];        //Введенное слово 1 игрока

char w2[20];        //Введенное слово 2 игрока

char w3[20];  //Введенное слово компьютера

int x;            //Количество совпадений с загад. словом

};

void print_main(int x,struct main *st, struct word *wrd)           //Функция печатает общее сoстояние игры

{

printf("\n===================\n   GUESS THE WORD\n===================\n");

if(x==1)

{

printf("Играют Игрок 1 и  Игрок 2\n");

printf("Игрок 1  - попыток :%2i      Игрок 2 - попыток:%2i\n",st->w1, st->w2);

printf("Игрок 1  - введенное  слово :%s     Игрок 2 - введенное слово:%s\n",wrd->w1, wrd->w2);

printf("Совпадения Игрока 1:%2i из 5     Совпадений Игрока 2:%2i из 5\n",st->score1, st->score2);

}

if(x==2)

{

printf("Играют Игрок 1 и  Компьютер\n");

printf("Игрок 1  - попыток :%2i      Компьютер - попыток:%2i\n",st->w1, st->w3);

printf("Игрок 1  - введенное  слово :%s     Компьютер - введенное слово:%s\n",wrd->w1, wrd->w3);

printf("Совпадения Игрока 1:%2i из 5     Совпадений Компьютера:%2i из 5\n",st->score1, st->score3);

}

}

void get_init(struct main *st, char **ap , int words)       //Функция задания начального состояния игры

//Заполняет структуру main, начальное слово берется случайно

{

int x=1+rand()%words;

strcpy(st->word0, ap[x]);

st->w1=0;

st->w2=0;

st->score1=0;

st->score2=0; 

}

void hint(struct main *st, struct word *wrd, char **ap , int words)   //Функция подсказки(выдается на каждой пятой попытке)

{

int z=0+rand()%4;

char *str=st->word0;

int q=dict_word(ap, words, str);

if(st->w1%5==0&&st->w1!=0)

printf("\nПодсказка! Буква №%i это:%c\n",z+1,*(ap[q]+z));

}

void get_word(int x, struct main *st, struct word *wrd, char **ap , int words)  //Вводит слова игроков и записывает их в структуру

{

char a[5];

char b[5];

st->score1=0;

st->score2=0; 

if(x==1)

{

while((strlen(a)!=5)||(dict_word(ap, words, a)==-1))  //Единовременное условие продолжения, продолжать до тех пор пока не будет введено корректное слово(длиной 5 символов и содержащеееся в словаре)

{

printf("Игрок 1. Введите слово  для проверки\n");

fflush(stdin);scanf("%s",&a);

if((strlen(a)==5)&&(dict_word(ap, words, a)!=-1))  //Единовременная проверка(на  наличие в словаре и на длину слова) введенного игроком слова

{

st->w1=st->w1+1;

strcpy(wrd->w1, a); 

}

else printf("Cлово некоректно! Должно состоять из пяти символов и существовать!\n");

}

while((strlen(b)!=5)||(dict_word(ap, words, b)==-1))  //Единовременное условие продолжения, продолжать до тех пор пока не будет введено корректное слово(длиной 5 символов и содержащеееся в словаре)

{

printf("Игрок 2. Введите слово  для проверки\n");

fflush(stdin);scanf("%s",&b);

if(strlen(b)==5&&(dict_word(ap, words, b)!=-1)) //Единовременная проверка(на наличие в словаре и на длину слова) введенного игроком слова

{

st->w2=st->w2+1;

strcpy(wrd->w2, b);

}

else printf("Cлово некоректно! Должно состоять из пяти символов и существовать!\n");

}

}

if(x==2)

{

while((strlen(a)!=5)||(dict_word(ap, words, a)==-1))  //Единовременное условие продолжения, продолжать до тех пор пока не будет введено корректное слово(длиной 5 символов и содержащееся в словаре)

{

printf("Игрок 1. Введите слово  для проверки\n");

fflush(stdin);scanf("%s",&a);

if((strlen(a)==5)&&(dict_word(ap, words, a)!=-1))  //Единовременная проверка(на  наличие в словаре и на длину слова) введенного игроком слова

{

st->w1=st->w1+1;

strcpy(wrd->w1, a); 

}

else printf("Cлово некоректно! Должно состоять из пяти символов и существовать!\n");

}

}

}

void get_comp(struct main *st, struct word *wrd, char **ap , int words)   //Функция печати слова компьютером

{

if((st->w3)<=3)

{

int j=1+rand()%4897;

printf("Слово компьютера:\n%s\n", ap[j]);

st->w3=st->w3+1;

strcpy(wrd->w3,ap[j]);

getch();

}

else

{

int q;

char *str=st->word0;

q=dict_word(ap, words, str);

if(wrd->x==0) {

printf("Слово компьютера:\n%s\n", ap[q-3]);

strcpy(wrd->w3,ap[q-3]);

st->w3=st->w3+1; }

if(wrd->x==1) {

printf("Слово компьютера:\n%s\n", ap[q-2]);

strcpy(wrd->w3,ap[q+2]);

st->w3=st->w3+1; }

if(wrd->x==2) {

printf("Слово компьютера:\n%s\n", ap[q-1]);

strcpy(wrd->w3,ap[q-1]);

st->w3=st->w3+1;}

if(wrd->x==3) {

printf("Слово компьютера:\n%s\n", ap[q]);

strcpy(wrd->w3,ap[q]);

st->w3=st->w3+1;}

wrd->x=wrd->x+1;

getch();

}

}

void check_word(int x,int gamer,struct main *st, struct word *wrd)     //Проверяет введенные слова игроков на соответсвтие с загаданным

{

if(x==1)

{

int i=0;

char *px=wrd->w1;

char *py=wrd->w2;

char *pa=st->word0;

while(i<5)

{

if(gamer==2)

{

if(pa[i]==py[i])  //если символ загаданного слова с введенным совпадает, то +1 к счету совпадений

Информация о работе Программа "Угадай слово"