Добавил:
yermolenkoigor9
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
#include <stdio.h>
#define N 1000
#define n 11
#define IA 16807
#define IM 2147483647
#define AM (1./IM)
#define IQ 127773
#define IR 2836
#define MASK 123456789
static long dummy;
void Seed(long dum) {dummy=dum;}
// возвращает случайное число на промежутке от 0 до 1
float unirand0(void) {
long k;
float ans;
dummy^=MASK;// избегаем dummy==0
k=dummy/IQ;
if((dummy=IA*(dummy-k*IQ)-IR*k)<0) dummy+=IM;
ans=AM*dummy;
dummy^=MASK;// восстанавливаем dummy
return(ans);
}
int X=18;
int myrand()
{
int m=2017;
int a=214013,c=2531011;
X = (a*X+c)%m;
return X;
}
int onethrow()
{
int y=0;
float x;
float Pk[n+1]={0,1./36.,3./36.,6./36.,10./36.,15./36.,21./36.,26./36.,30./36.,33./36.,35./36.,1};
//x=myrand()/(0x7FF+1.);
x = unirand0();
for(int j=0;j<n+1;j++)
if((x>Pk[j])&&(x<Pk[j+1]))y=j+2;
//printf("X = %f\n",x);
return y;
}
void testmode()
{
int r[N],flag=1;
for(int j=0;j<N;j++)
{
r[j]=onethrow();
if(r[j]==0)
{
printf("ERROR %d\n", j);
flag=0;
break;
}
//printf("====%d\n", r[j]);
}
if(flag)printf("There are no mistakes. Cycle = %d\n", repeatsearcher(r));
}
int repeatsearcher(int *x)
{
int evr=0,c;
for(int j=1;j<N;j++)
{
if(x[j]==x[0])
{
evr=j;c=0;
for(int k=j+1;k<N;k++)
if(x[k]==x[k-j]) c++;
else break;
//printf("cyyyyycle %d\n",c);
if(c==N-1-j)break;
}
}
return evr;
}
void CvsV()
{
;
}
int computerdesigion(int sc,int lmt,int sp)
{
int des = 1;
//int Bon[n]={2,3,4,5,6,7,8,9,10,11,12};
//float Pk[n]={1./36.,2./36.,3./36.,4./36.,5./36.,6./36.,5./36.,4./36.,3./36.,2./36.,1./36.};
if(sc>sp)//если комп выигрывает
if((lmt-sc)<n-2)
des=0;
if(sc<=sp)//если комп проигрывает
if((lmt-sc)<n-5)
des=0;
return des;
}
int main()
{
//int x;
//FILE *fp = fopen("secret.txt","r");
//scanf(fp,"%d",&x);
int flag = 1,sw,ct;
int item,choise,limit,scorep,scorec,turn;
while(flag){
printf("\nGame bones v0.7\n");
printf("\n Main menu\n");
printf("0 - Exit game\n");
printf("1 - Test random generator\n");
printf("2 - Start game\n");
//printf("3 - \n");
//printf("4 - \n");
scanf("%d", &item);
scorec = 0;
scorep = 0;
sw = 1;
ct = 0;//check turn
X++;
switch(item)
{
// Выход из программы
case 0:
flag = 0;
break;
case 1:
testmode();
break;
case 2:
printf("Input limit\n");
scanf("%d",&limit);
while(sw)
{
printf("\nYour score: %d\nComp score: %d\n",scorep,scorec);
printf("0 - Return to main menu\n1 - Make drop\n2 - Check turn\n");
scanf("%d",&choise);
switch(choise)
{
case 0:
sw = 0;
break;
case 1:
turn = onethrow();
scorep += turn;
printf("You dropped: %d\n",turn);
if(scorep>=limit)
{
printf("\nYou lose ('_')\n");
sw = 0;
}
break;
case 2:
ct = 1;
if(scorep>=limit)
{
printf("\nYou lose ('_')\n");
sw = 0;
}
break;
}
if(sw)
if(computerdesigion(scorec,limit,scorep))
{
turn = onethrow();
scorec+=turn;
printf("Computer dropped: %d\n",turn);
}
else
{
printf("Comp check turn\n");
ct++;
}
if(ct>=2)
if(scorep>scorec)scorec+=limit;
else scorep+=limit;
if(scorec>limit)
{
printf("\nYou win! (^0^)\n");
sw = 0;
}
}
break;
case 3:
CvsV();
break;
default:
printf("WRONG COMMAND!\n");
}
}
//fclose(fp);
printf("The end\n");
return 0;
}
/*
0.027778 2
0.083333 3
0.166667 4
0.277778 5
0.416667 6
0.583333 7
0.722222 8
0.833333 9
0.916667 10
0.972222 11
1.000000 12
*/