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

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

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

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

Оглавление

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

Файлы: 1 файл

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

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

st->score2=st->score2+1;

}

if(gamer==1)

{

if(pa[i]==px[i])

st->score1=st->score1+1;

}

i++;

}

}

if(x==2)

{

int i=0;

char *pa=st->word0;

char *px=wrd->w3;

while(i<5)

{

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

{

st->score3=st->score3+1;

}

i++;

}

}

}

void* init_dict(char* fname)

/*Инициализирует словарь  слов из файла fname(dict1.txt)

Содержит слова длиной только 5 символов

Выходной массив содержит:

- sizeof(void) - количество слов - words

- words*sizeof(void*) - указатели на  начала слов

- слова без пропусков

*/

{

char str[100];

FILE *fp;

fp = fopen(fname, "r");

if (!fp)

{

fprintf(stderr, "Не могу открыть  файл");

return 0;

 

// Оцениваем размер словаря

int words=0, size=0;

while(fscanf(fp, "%s", str)!=EOF)

if (strlen(str)==5)

{

words++;

size+=strlen(str)+1;

}

fclose(fp);

 

// Выделяем память 

void* pdict = malloc(sizeof(void*)+words*sizeof(void*)+size);

if(pdict)

printf("Загружаем словарь из %i cлов, объем памяти - %i байт\n",words,size);

else

fprintf(stderr, "Недостаточно  памяти");  

return 0;

}

 

// Загружаем слова

fp = fopen(fname, "r");

*(int*)pdict=words;

char **ap = (char**)((int*)pdict+1);   // Указатель на массив указателей

char *aw  = (char*)((int*)pdict+1+words);  // Указатель на слова   

while(fscanf(fp, "%s", str)!=EOF) 

if (strlen(str)==5)

{   

*ap = aw;   

ap++;

strcpy(aw,str);

aw+=strlen(str)+1;   

}   

fclose(fp);

return pdict;

};

int dict_word(char **ap, int words, char* str)         //Возвращает номер слова str в массиве указателей на начало слов ap, с количеством слов words. Если слова нет возвращает -1

{

int l=0,r=words, m;

while (l<r-1)

{

m=(r+l)/2;  

if(strcmp(str,ap[m])<0)

r=m;

else

l=m;   

}

if (!strcmp(str,ap[l])) return l;

if (!strcmp(str,ap[r])) return r;

return -1;

};

void Menu()

{

printf("\nГЛАВНОЕ МЕНЮ\n");

printf("\n1.Человек против  Человека");

printf("\n2.Человек против  Компьютера");

printf("\n3.Выход");

printf("\nВыберете режим  игры:");

}

void Gamer1vsGamer2()

{ //Управляющая функция игры игрока против игрока

struct main(st);

struct word(wrd);

int game;

char m[]="     ";

st.w1=0;

st.w2=0;

st.score1=0;

st.score2=0;

strcpy(wrd.w1,m);

strcpy(wrd.w2,m);

 

void* dict = init_dict(fdict);   // Подключаем словарь

int  nwords = *(int*)dict;    // Количество слов

char **ap = (char**)((int*)dict+1); // Указатель на массив указателей    

int *pnwords=&nwords;   

void *pap=&ap;     

printf("Загружено %i слов\n\n",nwords);

 

print_main(1,&st,&wrd);

get_init(&st, ap, nwords);

while(game)

{

hint(&st, &wrd, ap, nwords);

st.score1=0;

st.score2=0;

get_word(1, &st, &wrd, ap, nwords);

check_word(1,1,&st,&wrd);

if(strcmp(st.word0, wrd.w1)==0) //Условие выйгрыша

{     

printf("\n\nСлово отгадано >>>>Игроком 1<<<< c %i попытки!\n\n",st.w1);

game=0;

break;

}

check_word(1,2,&st,&wrd);

if(strcmp(st.word0, wrd.w2)==0) //Условие выйгрыша

{    

printf("\n\nСлово отгадано >>>>Игроком 2<<<< c %i попытки!\n\n\n",st.w2);

game=0;

break;

}

else print_main(1,&st,&wrd);

}

getch();

}

void Gamer1vsComputer() 

{

//Управляющая функция игры игрока против компьюетра

struct main(st);

struct word(wrd);

int game;

char m[]="     ";

st.w1=0;

st.w3=0;

st.score1=0;

st.score3=0;

wrd.x=0;

strcpy(wrd.w1,m);

strcpy(wrd.w3,m);

 

void* dict = init_dict(fdict);  // Подключаем словарь

int  nwords = *(int*)dict;   // Количество слов

char **ap = (char**)((int*)dict+1); // Указатель на массив указателей    

int *pnwords=&nwords;   

void *pap=&ap;     

printf("Загружено %i слов\n\n",nwords); 

 

print_main(2, &st,&wrd);

get_init(&st, ap, nwords);

while(game>0)

{

hint(&st, &wrd, ap, nwords);

st.score1=0;

st.score3=0;

get_word(2, &st, &wrd, ap, nwords);

check_word(1,1,&st,&wrd);

if(strcmp(st.word0, wrd.w1)==0) //Условие выйгрыша

{     

printf("\n\nСлово отгадано >>>>Игроком 1<<<< c %i попытки!\n\n",st.w1);

game=0;

break;

}

get_comp(&st, &wrd, ap, nwords);

check_word(2,0,&st,&wrd);

if(strcmp(st.word0, wrd.w3)==0) //Условие выйгрыша

{    

printf("\n\nСлово отгадано >>>>Компьютером<<<< c %i попытки!\n\n",st.w3);

game=0;

break;

}

else print_main(2,&st,&wrd);

}

getch();

}

main()

{

system("cls");

srand(clock());

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

int chsc;

int flag=1;

while(flag)

{

Menu(); // показать меню

scanf("%d", &chsc);

switch (chsc)

{

case 1:

Gamer1vsGamer2(); // игра человек-человек

flag=0;

case 2:

Gamer1vsComputer(); // игра с компьютером

flag=0;;

case 3:

return 0;

flag=0;

default:

printf("\nНе правильный выбор!");

flag=0;

}

}

return 0;

};  
Листинг А 1, лист 15

 

 


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