Annotation of coherent/d/usr/games/moo.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  * moo -- play the game of moo,
                      3:  * also known as mastermind.
                      4:  */
                      5: 
                      6: #include <stdio.h>
                      7: #include <sys/types.h>
                      8: 
                      9: char   entdiff[] = "Please enter a string of %d digits, all different\n";
                     10: 
                     11: main(argc, argv)
                     12: char *argv[];
                     13: {
                     14:        char moo[10];
                     15:        int nmoo;
                     16:        char line[256];
                     17:        int i, j;
                     18:        int nbull, ncow;
                     19:        union {
                     20:                time_t  utime;
                     21:                int     ubuf[2];
                     22:        } un;
                     23: 
                     24:        time(&un.utime);
                     25:        srand(un.ubuf[0] + un.ubuf[1]);
                     26:        if(argc<2)
                     27:                nmoo=4;
                     28:        else
                     29:                nmoo=atoi(argv[1]);
                     30:        if(nmoo<1 || 10<nmoo){
                     31:                printf("Usage: moo [n]\n\twhere 1<=n<=10, n defaults to 4\n");
                     32:                exit(1);
                     33:        }
                     34:        for(;;){
                     35:                printf("New game.\n");
                     36:                for(i=0;i!=nmoo;i++){
                     37:                Again:
                     38:                        moo[i]=rand()/100%10+'0';
                     39:                        for(j=0;j!=i;j++)
                     40:                                if(moo[i]==moo[j])
                     41:                                        goto Again;
                     42:                }
                     43:                for(;;){
                     44:                        if(gets(line)==NULL)
                     45:                                exit(0);
                     46:                        if(badline(line, nmoo))
                     47:                                printf(entdiff, nmoo);
                     48:                        else{
                     49:                                nbull=0;
                     50:                                ncow=0;
                     51:                                for(i=0;i!=nmoo;i++)
                     52:                                        for(j=0;j!=nmoo;j++)
                     53:                                                if(line[i]==moo[j])
                     54:                                                        if(i==j)
                     55:                                                                nbull++;
                     56:                                                        else
                     57:                                                                ncow++;
                     58:                                if(nbull==nmoo){
                     59:                                        printf("Right!\n");
                     60:                                        break;
                     61:                                }
                     62:                                printf("%d bull%c, %d cow%c\n",
                     63:                                        nbull, nbull!=1?'s':'\0',
                     64:                                        ncow, ncow!=1?'s':'\0');
                     65:                        }
                     66:                }
                     67:        }
                     68: }
                     69: 
                     70: badline(s, l)
                     71: register char *s;
                     72: {
                     73:        register i, j;
                     74:        if(strlen(s)!=l)
                     75:                return(1);
                     76:        for(i=0;i!=l;i++){
                     77:                if(s[i]<'0' || '9'<s[i])
                     78:                        return(1);
                     79:                for(j=0;j!=i;j++)
                     80:                        if(s[i]==s[j])
                     81:                                return(1);
                     82:        }
                     83:        return(0);
                     84: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.