Автор: Пользователь скрыл имя, 29 Июля 2014 в 12:36, курсовая работа
Цель курсовой работы – научиться реализовывать пошаговую игру. Результатом курсовой работы является рабочая игра «Угадай слово». Игра «Угадай слово» разработана с использованием компилятора MinGW. Исходный текст программы написан на языке C. В процессе разработки игры была изучена лексика языка C. Пояснительная записка выполнена в текстовом редакторе Microsoft Word 2010.
Задание
Реферат
Введение
Основная часть
Заключение
Библиографический список
Приложение А
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*
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=≈
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=≈
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===================\
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