Автор работы: Пользователь скрыл имя, 26 Октября 2013 в 18:57, курсовая работа
Описание игр:
"Выбери неправильное слово":
Есть несколько файлов со словами разных групп. Выпадает 3 слова из одного файла и одно из другого.
(Файлы выбираются случайно, как и слова)
У каждого слова есть номер. Пользователю предлагается выбрать номер слова, которое не соответствует тематике.
На угадывание даётся две попытки. Если слово было выбрано правильно с первого раза - 100 баллов, если со второго - 50 баллов. В одном туре 3 группы слов.
}
void SetColor(int text, int background) //Установка цвета символов, выводимых на консоль
{SetConsoleTextAttribute(
struct Zapys_in_f
{ char *str;//строка
int chislo;//числовые данные
};
void main()
{
Set1(0,1);
Set1(0,2);
srand(time(NULL));
SetConsoleCP(1251); // меняю кодировку в консоли для отображения русских букв
SetConsoleOutputCP(1251);
reg();
}
void reg() //регистрация
{
SetColor(0,11);
cout<<"ВВЕДИТЕ
ЛОГИН:\n\t(Логин не должен
\n\t\t < > : \" / \ | )\n\n";
cin>>login;
for(int i=49;i<=54;i++) //проверяем, чтобы название файла не совпало с файлами,
{ //в кот. находятся слова для использования в проге
char l=i;
if(strchr(login,l)) //49-54 - диапозон char-символов соотв 1-6(вкл)
{
cout<<"\nЭтот логин задать нельзя! ";
exit(0);
}
}
_strlwr(login); //все буквы переводим в малый регистр
strcat(login,".txt"); //добавили к логину расширение .txt
_finddata_t *fileinfo=new _finddata_t; // Объявление ук-ля fileinfo на структуру
//_finddata_t и создание динамического объекта
//структуры _finddata_t
long done = _findfirst(login,fileinfo);// Начинаем поиск
char otv;
if(done==-1)
{
// если done будет равняться -1, то
поиск вести бесмысленно,
cout<<"Такой
файл не существует.Создать?(Y/
cin>>otv;
if((otv=='Y') || (otv=='y'))
(statist=fopen(login,"a+"))?
задать нельзя. Попробуйте ещё раз\n";
else
cout<<"До свидания!";
}
else
{
cout<<"Такой файл уже существует. Перезаписать его?(Y/N)";
cin>>otv;
if((otv=='Y') || (otv=='y'))
(statist=fopen(login,"w+"))?
else
(statist=fopen(login,"a+"))?
}
if(_access(login,00))//
exit(0);
fclose(statist);//закрываем файл
Sleep(2000);
menu(); //переходим в меню
}
void menu()
{
SetColor(0,7);
system("cls");
cout<<"\nВЫБЕРИТЕ
ИГРУ:\n\t\"Выбери лишнее
"Проверка орфографии\" - 2,\n\t\"Математические чудеса\" - 3,\n\t\\
"Просмотр статистики\" - 4,\n\t Выход - 0\n->";
int otvet;
cin>>otvet;
switch(otvet)
{
case 1: slova(); break;
case 2: orfograrphy(); break;
case 3:matem() break;
case 4:stat("\nВсего:\t",bal); break;
case 0:exit(0); break;
default:cout<<"Неправильный выбор. Введите число от 0 до 4\n";
}
}
void slova()
{
char word[kol_vo_bukv]={0}; //массив для загрузки слов
FILE *f1,*f2;
//создаём указатели для
int j=0,baly1=0;
while(j<3) //3 тура
{
int f_otkr1=rand()%kol_vo_f+1,f_
do{
f_otkr2=rand()%kol_vo_f+1;
} while(f_otkr1==f_otkr2);//
f1=fopen(masFile[f_otkr1],"r")
f2=fopen(masFile[f_otkr2],"r")
if(!f1||!f2)
{
cout<<"\nПроизошла ошибка! Начните заново.\n";
Sleep(2000);
menu();
}
cout<<"\t\t\t\t"<<j+1<<"ТУР\n"
int m;
int no=rand()%4;
//определяем № лишнего слова,
//в файле(в неё возвращаем функцию)
int mr[3]={0},l,k=0;
//массив для сохранения
//их повтора на экране
for(int i=0;i<4;i++) //цикл для вывода на экран слов
{
if(i==no)
{
m=load_word(f2,word); //лишнее слово из др файла
fseek(f2, 0, 0);
}
else
{
m=load_word(f1,word); //загружаем слово
fseek(f1, 0, 0);
//возвращаем файловый
mr[k]=m;
for(l=0;l<3,mr[k]!=mr[l]&&k!=
{
//if (l==3)l=0; //обнуляем счётчик цикла,т к в массиве //всего3 элемента
if(mr[k]==mr[l]&&k!=l)
{ //загружаем слово до тех пор,пока на экране будут //все слова разные
do{
mr[k]=load_word(f1,word);
fseek(f1, 0, 0); //возвращаем файловый
//указатель в начало файла
}while(mr[k]!=mr[l]);
}
} k++;
} //end else
cout<<"\t\n\n"<<i+1<<"-е слово :\t"<<word;//<<"\n";
} //end for
int num=0,o=0;//о - счётчик попыток
cout<<"\nno="<<no<<"\n";
do{
cout<<"Введите номер лишнего слова :\n";
cin>>num;
cout<<"\n n="<<no+1;
if(num==no+1)//проверка на правильность
{
if(o==1)
{ system("cls"); //если это 2 попытка
baly1+=50;
bal+=50;
cout<<"Правильно! +5 баллов\t\t\t\t\tВсего : "<<baly1<<" баллов \n";
break;
}
else
{ system("cls");
bal+=10;
baly1+=10;
cout<<"Правильно! +10 баллов\t\t\t\t\tВсего : "<<baly1<<" баллов\n";
break;
}
} //end if
else if(num>4||num<1)cout<<"Здесь всего 4 слова!\n"; //ошибка ввода
else
{ //проверка на неправильность
if(o==1)
{ system("cls");
bal-=100;
baly1-=100;
cout<<"Неверно! -10 баллов\t\t\t\t\tВсего : "<<baly1<<" баллов\n";
break;
}
else cout<<"Неверно! 2-ая попытка\n";
}
o++;
}while(num==no||o!=2);//пока не совпадёт № слова или не кончится 2 //попытки
j++;
fclose(f1); //закрываем файлы
fclose(f2);
} //end while
char Str[]="ИГРА
: Выбери неправильное слово\n\t\
j=baly1;
stat(Str,j);
}
int load_word(FILE *file,char *word)//функция для загрузки слова
{
int kolWord=20;
char masBukv[kol_vo_bukv]={0};
int i=0;
int w = rand() % kolWord; // Случайное слово
while(i <= w) // Поиск слова
{
fgets(masBukv, kol_vo_bukv, file);
i++;
}
int wordlen = strlen(masBukv+1); // Определяем длину слова
if(masBukv[wordlen - 1] == 10) // Убираем Enter (в DOS'е 2 байта 13 10)
masBukv[wordlen - 2] = 0;
else if(masBukv[wordlen - 1] == 13)
masBukv[wordlen - 1] = 0;
strcpy(word, masBukv); // Копируем слово
return w;
}
void orfograrphy() //проверка орфографии
{
int baly1=0;
char alf[]={"аяуюэеоёыи"};//буквы,
char word[kol_vo_bukv]={0};//масс для загрузки слова из файла
int yes,m;
FILE *f;
do{
int f_otkr=rand()%5; //№ файла, кот. надо открыть
f=fopen(masFile[f_otkr],"r"); //открываем файл на чтение слова
if(!f)
{
cout<<"\nПроизошла ошибка!\n";
return;
}
m=load_word(f,word); //ф-я загрузки слова
fseek(f, 0, 0);
//возвращаем файловый
int kl=strlen(word-1);//счёт кол букв в слове
//cout<<word<<kl;
char*boof=new char[kl];
strcpy(boof,word); //записываем в буфер слово и меняем гласные на "?"
for(int i=0;i<kl;i++)
for(int j=0;j<10;j++)
if(boof[i]==alf[j])
boof[i]='?';
cout<<"\n"<<boof<<"\nЧто
это за слово? Напишите его!\n\
char *boof1=new
char[kl];//массив для ввода
cin>>boof1;
_strupr(word);
_strlwr(boof1);
//cout<<word<<boof1;
if(boof1[kl-2]!=0)//если пользователь ввёл больше или меньше //букв,чем в слове
{ cout<<"\nВ этом слове меньше букв!\n"; }
else
{
for(int i=0; i<(kl-2); i++)//kl-2-убираем "\0"
{
if(boof[i]=='?'&&word[i]!=
{ //если "?" не заменяются правильными буквами
bal-=10;
baly1-=10;
cout<<"\nНеправильно! \"- 10 баллов\"\t\tВсего: "<<baly1<<"\n";
break;
}
if(word[i]==boof1[i]&&i==kl-3)
{ bal+=10;
baly1+=10;
cout<<"\nПравильно!
+10 баллов\t\tВсего:"<<baly1<<"\n"
}
}//end for
}//end else
delete[]boof1;
delete[]boof;
cout<<"\nПродолжить игру? Да - нажмите \'1\', Нет - нажмите \'0\'\n";
cin>>yes;
}while(yes);
fclose(f); //закрываем файл,из кот брали слово
char Str[]="ИГРА
: Проверка орфографии\n\t\
int a=baly1;
stat(Str,a);
}
void stat(char* st,int a) //Статистика
{
SetColor(0,6);
Zapys_in_f ORF,ORF1;//создаём объекты типа структура для работы с файлом статистики
ORF.str=st;
//strcpy(ORF.str,st);
//ORF.str="ИГРА
: Проверка орфографии\n\t\
ORF.chislo=a;
//ORF.chislo=baly;
statist=fopen(login,"w+b");
fwrite(&ORF,sizeof(Zapys_in_f)
fclose(statist);
statist=fopen(login,"r+");
fseek(statist,
0, 0);
//возвращаем файловый
fread(&ORF1,sizeof(Zapys_in_f)
fclose(statist);
system("cls");
cout<<"\n\n\t\t"<<ORF1.str<<
int otv;
cout<<"\n\n\n\nВернуться в меню - нажмите 1\nВыход - нажмите 0\n";
cin>>otv;
if(otv)
menu();
else exit(0);
}
void matem()
{
cout<<"\n\n\tКакой
уровень сложности выбираете?\
переменными\n";
int ur,ch,is=0;
double isd=1.1;
cin>>ur;
cout<<"С
какими числами вы будете
(1, 2, 3...)\t\"2\" - с дробными(1.1, 2.2, 3.3...)\n";
cin>>ch;
//ch==1?is:isd;
if(ur==1&&ch==1)
min_uravn(is);
if(ur==1&&ch==2)
min_uravn(isd);
if(ur==2&&ch==1)
max_uravn();
}
inline int schet()
{
cout<<"\nДо скольки вы будете считать?\n";
int o;
cin>>o;
return o;
}
void min_uravn(int t)
{
int q,a1=0,a2=0,baly1=0;
q=schet();
//ввод пользователем
do{
int a=0,b=0,c=0;
int znak=rand()%4;//определяем знак действия
char zn=mr_znak[znak];
if(zn=='*'||zn=='/'){q/=3;}//
int isk=rand()%2;//определяем,что требуется вычислить
switch(isk)
{
case 0:
b=rand()%q+1; //определяем 2 операнд
c=rand()%q+1; //определяем 3 операнд
break;
case 1:
a=rand()%q+1; //определяем 1 операнд
b=rand()%q+1; //определяем 3 операнд
break;
case 2:
a=rand()%q+1; //определяем 1 операнд
c=rand()%q+1; //определяем 3 операнд
break;
default:
cout<<"\nПроизошла ошибка!\n";
}
if(a&&b)//если ищем *с*
{
if(zn=='/')//для "/" подбираем числа, чтобы "нацело"
{a=delen(b); }
if(a<b) //для всех ост. меняем местами а и б
{a2=a;a=b;b=a2;}
system("cls");
cout<<"\n"<<a<<zn<<b<<"="<<"?\
a2=reshen(a,b,zn); //правильный ответ в перем а2
}
if(a&&c)//если искомое *b* повторяем условия
{
if(zn=='/')
{ a=delen(c); }
if(zn=='*')
{ c=delen(a); }
if(a<c&&zn=='-'||a>c&&zn=='+')
{ a2=a;a=c;c=a2;}
system("cls");
cout<<"\n"<<a<<zn<<"?"<<"="<<
switch(zn)
{
case'+':
zn='-';
a2=reshen(c,a,zn); break;
case'-':
case '/':
a2=reshen(a,c,zn); break;
case'*':
zn='/';
a2=reshen(c,a,zn);break;
}
} //end if
if(b&&c)//если искомое *а*
{
if(zn=='*')
{ c=delen(b); }
if((c<b&&zn=='+'))
{a2=c;c=b;b=a2;}
system("cls");
cout<<"\n"<<'?'<<zn<<b<<"="<<
switch(zn)
{
case'+':
zn='-';
a2=reshen(c,b,zn);break;
case'-':
zn='+';
a2=reshen(b,c,zn);break;
case'*':
zn='/';
a2=reshen(c,b,zn);break;
case '/':
zn='*';
a2=reshen(b,c,zn);break;
}
} // end if
//cout<<"\nX="<<a2;
cout<<"\nНапишите число, которое должно быть вместо знака вопроса\'?\'\n";
cin>>a1;
if(a1==a2)
{
baly1+=10;
bal+=10;
cout<<"Правильно!
Вы получаете +10 баллов\t\t\t\tВсего:"<<baly1<<
}
else
{
baly1-=10;
bal-=10;
cout<<"Неправильный ответ! У тебя -10 баллов\tВсего:"<<baly1<<"\n";
}
if(zn=='*'||zn=='/')q*=3;
cout<<"Продолжаем? \'1\' - Да\t\'0\' - Нет\n";
cin>>a1;
}while(a1);
char Str[]="ИГРА
: Математические чудеса\n\t\
a1=baly1;
stat(Str,a1);
//menu();
}
template<typename T>
T delen(T b)
{
T a=rand()%11+1;
return (T)a*b;
}
template<typename T>
T reshen(T a,T b,char znak)
{
switch(znak)
{
case '+':
return (T)a+b;break;
case'-':
return (T)a-b;break;
case '*':
return (T)a*b;break;
case'/':
if(b==0)
{
cout<<"На ноль делить нельзя!\n";
return 1111111;
}
//if(a%b!=0)cout<<a<<"/"<<b;
return (T)a/b;break;
} //end switch
}
void min_uravn(double t) //перегружаем для double
{
double a1=0,a2=0;
int q=schet(),baly1=0; //ввод пользователем диапaзона значений
do{
double a=0,b=0,c=0;
int znak=rand()%4; //определяем знак действия
char zn=mr_znak[znak];
if(zn=='*'||zn=='/')
{q/=3;}//если действие"*"или"/"- уменьшаем диапозон в 2 раза
int isk=rand()%2;//определяем, что требуется вычислить
switch(isk)
{
case 0:
b=Dab(q); //определяем 2 операнд
c=Dab(q); //определяем 3 операнд
break;
case 1:
a=Dab(q); //определяем 1 операнд
b=Dab(q); //определяем 3 операнд
break;
case 2:
a=Dab(q); //определяем 1 операнд
c=Dab(q); //определяем 3 операнд
break;
default:
cout<<"\nПроизошла ошибка!\n";
} // end switch
//cout<<a<<b<<c;
if(a&&b)//если ищем *с*
{
if(zn=='/')
{a=delen(b); }
if(a<b)
{a2=a;a=b;b=a2;}
system("cls");
cout<<"\n"<<a<<zn<<b<<"="<<"?\
t=reshen(a,b,zn);
}// end if
if(a&&c)//если искомое *b*
{
if(zn=='/')
{ a=delen(c); }
if(zn=='*')
{ c=delen(a); }
if(a<c&&zn=='-'||a>c&&zn=='+')
{ a2=a;a=c;c=a2;}
system("cls");
cout<<"\n"<<a<<zn<<"?"<<"="<<
switch(zn)
{
case'+':
zn='-';
t=reshen(c,a,zn);break;
case'-':