Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <time.h>
- #include <stdlib.h>
- #include <string.h>
- #define M 20 // מספר האיברים במערך שצריך לנחש
- enum TypeFlag {success,faild};
- void main(){
- char ARR[M+1],ABB[M+1],annoying,p; // מאכסן את המערך של המחשב
- int i, q, Bool, Pgia,count=0,N=4;
- enum TypeFlag flag;
- printf("The game is called 'Bool Pgia'\n'Pgia' means: the sum of the digits that exist, BUT NOT in the same position.\n'Bool Pgia' means: the sum of the digits that exist AND in the same position.\n");
- printf(" -The first digit can't be 0-\n\nPress M for Manual Game, R for Rndom Game: ");
- flushall();
- annoying = getchar();
- while(annoying != 'm'&& annoying != 'M' && annoying != 'r' && annoying != 'R'){
- printf("Please enter a legal input: ");
- flushall();
- annoying = getchar();
- }
- printf("0 mean 4 digits, Add more digits if you wont (up to %d): ",M-4);
- scanf("%d",&i);
- N+=i;
- if(annoying == 'm' || annoying == 'M'){ // ידני
- printf("Enter %d numbers and press ENTER: ",N);
- scanf ("%s",ARR); // להוסיף N למגבלה ///
- do{ // בדיקה שהקלט הידני של הרצף תקין
- flag = success;
- i = strlen(ARR);
- if (i<N|| i>N) flag = faild; // בדיקה שהקלט הידני באורך הנכון
- if(ARR[0]=='0') flag = faild; // הראשון אסור שיהיה 0
- for(i=0;i<N && flag == success;i++){
- if(ARR[i]>'9'|| ARR[i]<'0') {flag = faild; break; };
- for(q=i+1;q<N;q++){
- if(ARR[i]==ARR[q]) flag = faild;
- }
- }
- if(flag == faild){
- printf("Please enter legal numbers: ");
- flushall(); // לפעמים נצטרך
- gets(ARR);
- }
- else break;
- } while(1);
- } // עד כאן קיבלנו רצף תקין בצורה ידנית
- else{ // כאן המחשב ימלא את הרצף בצורה אקראית בספרות 1-9 שלא חוזרות על עצמן
- srand(time(0));
- ARR[0] = (rand()%9)+1+'0'; // עבור המקום הראשון. לא יכול להיות 0
- for (i=1;i<N;i++){
- do{ // רק בודק שאין את המספר הרנדומלי בשום מקום במערך
- p=(rand()%10)+'0';
- for(q=i;q>0 && ARR[q-1]!=p;q--);
- } while(q);
- ARR[i] = p;
- }
- ARR[N] = NULL;
- }
- while(1){ // מכאן מתחילים הניחושים
- count++;
- Bool=0;
- Pgia=0;
- printf("\n%d. Guess the %d numbers: ",count,N);
- flushall();
- gets(ABB);
- // :נבדוק שהניחוש חוקי
- do{
- flag = success;
- i = strlen(ABB);
- if (i<N|| i>N) flag = faild; // קטן ממספר הספרות הרצוי. לא נקלט בכלל מעבר לספרה הרביעית אם גדול
- if(ABB[0]=='0') flag = faild;
- for(i=0;i<N && flag == success;i++){
- if(ABB[i]>'9'|| ABB[i]<'0') {flag = faild; break; }; // התווים בתחום הרצוי
- for(q=i+1;q<N;q++){ // לא חוזרים על עצמם
- if(ABB[i]==ABB[q]) flag = faild;
- }
- }
- if(flag == faild){
- printf("Please enter legal numbers: ");
- flushall(); // לפעמים לא נצטרך
- gets(ABB);
- }
- else break;
- } while(1);
- // עד כאן הניחוש תקין
- flag = success;
- for (i=0;i<N;i++){
- for(q=0;q<N;q++){
- if (ABB[i]==ARR[q]&&q!=i) { Pgia++; break;}
- if (ABB[i]==ARR[q]&&q==i) { Bool++; break;}
- }
- if(q==N || q != i) flag = faild; // אם הגענו לסוף המערך בלי התאמה או אם ההתאמה היא לא באותו מקום
- }
- if (flag == success){printf("\nYou Won The Match!\n"); break;}
- for(i=0;i<Pgia;i++) printf("Pgia!\n");
- for(i=0;i<Bool;i++) printf("Bool Pgia!\n");
- if (Bool==0 && Pgia == 0) printf("You wrong, try again...\n");
- }
- scanf("%s",ARR);
- }
Advertisement
Add Comment
Please, Sign In to add comment