nikos134 Δημοσ. 6 Ιανουαρίου 2014 Δημοσ. 6 Ιανουαρίου 2014 λοιπον οπως λεει το θεμα..εγω χρησιμοποιω την rand() για να δημιουργησω τυχαιους αριθμους...το προβλημα ειναι οτι το ευρος που χρησιμοποιω εγω απο 1 μεχρι το 40 καθε φορα ειναι προβλεψιμο...υπαρχει καποιος τροπος να μην ειναι??
geomagas Δημοσ. 6 Ιανουαρίου 2014 Δημοσ. 6 Ιανουαρίου 2014 Τι εννοείς "το εύρος είναι προβλέψιμο"; Το εύρος το ορίζεις εσύ. Μήπως τα αποτελέσματα; Αν ναι, τι σου βγάζει; Χρησιμοποιείς την srand(); Ο κώδικάς σου ποιος είναι;
nikos134 Δημοσ. 6 Ιανουαρίου 2014 Μέλος Δημοσ. 6 Ιανουαρίου 2014 προσπαθω να φιταξω ενα μικρο παιχνιδακι....το προβλημα ειναι οτι καθε φορα οι παγιδες και οι περιοχεσ που πρεπει να παει ο παικτης ειναι τα ιδια....να ο κωδικας ** ερωτηση εαν εχω δυο λοοοπς το ενα μεσα στο αλλο πχfor(i=0; i<=5; i++){ for(j=0; j<=10; j++){ πως μπορω να βγω νωριτερα απο το 2τερο χωρις να βγω ταυτοχρονα και απο το πρωτο?? int main() { int moves=0; int win=4; char epilogi; float z,z1; int epipedo=1; int i,j;//metrites int x1,x2,y1,y2,x5,y5,x6,y6;//thesi gramhs to x kai thesi stilis to y gia tis pagides int x3,x4,y3,y4,x7,y7,x8,y8;//thesi gia tis pagides int thesix=15;//thei paikti int thesiy=20;//thesi paikti char table[32][42];//tamlpo megalwmeno kata 1 gt alliws dn emfanizete swsta sthn othoni printf("You are the O...\n In order to win the game you must go in all the mark spots (x)\n"); printf("Beware!!the game has traps that you cant see if you fall you loose\n"); printf("Try to win the game...Less moves the better\n"); for(i=0; i<=31; i++){//gemisma tou tablo me keno for(j=0; j<=41; j++){ table[i][j]= ' '; } } table[15][20]= 'O';//arxikopoisi tis thesis tou paikti x1= rand() % 30 + 0;// sintetagmenes opou prepei apo ekei na peraseis o pektis x2= rand() % 30 + 0; y1= rand() % 40 + 0; y2= rand() % 40 + 0; x5= rand() % 30 + 0; x6= rand() % 30 + 0; y5= rand() % 40 + 0; y6= rand() % 40 + 0; x3= rand() % 30 + 0;// sintetagmenes pagidwn x4= rand() % 30 + 0; y3= rand() % 40 + 0; y4= rand() % 40 + 0; table[x1][y1]= 'x';//topothetisi simeiwn p prepei na perasei o paiktis table[x2][y2]= 'x'; table[x5][y5]= 'x'; table[x6][y6]= 'x'; table[x3][y3]= 'a'; table[x4][y4]= 'a'; for(i=0; i<=41; i++){ table[0][i]= '-'; table[31][i]= '-'; } for(i=0; i<=31; i++){ table[i][0]='|'; table[i][41]='|'; } printf("The game has 4 levels try winning them all!!...\n"); win=4; while(1){//olo to paixnidi tha ginete mesa sthn epanalipsi for (i=0; i<=31; i++){ for(j=0; j<=41; j++){ printf("%c",table[i][j]); } printf("\n"); } printf("In order to move you have to enter a for left, w for up d for right and s for down...\n"); printf("If you want to exit the game press q\n"); z1=(((thesix-x4)*(thesix-x4))+((thesiy-y4)*(thesiy-y4))-4);//xrisopoiw thn eksiswsi tou kiklou gia na brw ta shmeia z=(((thesix-x3)*(thesix-x3))+((thesiy-y3)*(thesiy-y3))-4);//ta opoia briskonte konta sthn pagida if((z<=2 && z>=-2)||(z1<=2 && z1>=-2)){ printf("Prosoxi briskese kotna se pagida!!\n"); } printf("Please enter your choise now : "); scanf("%c",&epilogi); printf("\n"); if(epilogi=='q'){//eksodos an to epithimei o paiktis fflush(stdin); printf("Are you sure that you want to quit the game?? y/n "); scanf("%c",&epilogi); printf("\n"); if(epilogi=='y'){ printf("Game over...You exit the game before winning it\n"); break; } else if(epilogi=='n'){ fflush(stdin); printf("pliktrologise tin kinisi s: "); scanf("%c",&epilogi); printf("\n"); } } if(epilogi=='a'){//h epilogi tou pakti simfwna me t p thelei na paei if((thesiy-1)>0){//gia na mn bgei ektos tambpo table[thesix][thesiy-1]='O';//metakinisi tou paikti table[thesix][thesiy]=' ';//kai afairesi to proigoumenou shmeiou thesiy-=1; moves+=1;//metritis kinisewn } } else if(epilogi=='d'){ if((thesiy+1)<40){//gia na mn bgei ektos tambpo table[thesix][thesiy+1]='O'; table[thesix][thesiy]=' '; thesiy+=1; moves+=1; } } else if(epilogi=='s'){ if((thesix+1)<30){//gia na mn bgei ektos tambpo table[thesix+1][thesiy]='O'; table[thesix][thesiy]=' '; thesix+=1; moves+=1; } } else if(epilogi=='w'){ if((thesix-1)>0){ table[thesix-1][thesiy]='O'; table[thesix][thesiy]=' '; thesix-=1; moves+=1; }} if(thesix==x1 && thesiy==y1 ){//ean o paiktis pesei sto x meiwnete kata ena h stathera x win-=1; x1=99;//allazoume tis sintetagmenes tou x k y dhaladi tou enws shmeiou etsi wste o paiktis na mn mporei na klepsei peftwntas poles forres se ena shmeio y1=99; } if( thesix==x2 && thesiy==y2 ){//ean o paiktis pesei sto x meiwnete kata ena h stathera x win-=1; x2=99;//allazoume tis sintetagmenes tou x k y dhaladi tou enws shmeiou etsi wste o paiktis na mn mporei na klepsei peftwntas poles forres se ena shmeio y2=99; } if( thesix==x5 && thesiy==y5 ){//ean o paiktis pesei sto x meiwnete kata ena h stathera x win-=1; x5=99;//allazoume tis sintetagmenes tou x k y dhaladi tou enws shmeiou etsi wste o paiktis na mn mporei na klepsei peftwntas poles forres se ena shmeio y5=99; } if( thesix==x6 && thesiy==y6 ){//ean o paiktis pesei sto x meiwnete kata ena h stathera x win-=1; x6=99;//allazoume tis sintetagmenes tou x k y dhaladi tou enws shmeiou etsi wste o paiktis na mn mporei na klepsei peftwntas poles forres se ena shmeio y6=99; } if((thesix==x3 || thesix==x4)&&(thesiy==y3 || thesiy==y4)){ printf("MouXaMouxa...You fall into my trapp...\n"); printf("Game over..\n"); printf("Total moves: %d\n",moves); break; } if(win==0){ printf("Well done you win the game!!\n"); printf("Total moves: %d\n",moves); break; }
gon1332 Δημοσ. 6 Ιανουαρίου 2014 Δημοσ. 6 Ιανουαρίου 2014 Μήπως εννοείς "ο αριθμός που εμφανίζεται είναι κάθε φορά προβλέψιμος"; Μήπως χρησιμοποιείς κάποιο συγκεκριμένο seed σε όλα τα πειράματα; Αν είναι έτσι, τότε όλα εξηγούνται. Αν θέλεις σε κάθε εκτέλεση να σου εμφανίζεται ένας νέος αριθμός, τότε μπορείς να χρησιμοποιήσεις την time() από το time.h. #include <time.h> #include <stdlib.h> srand(time(NULL)); int r = rand(); Με αυτό τον τρόπο, κάθε εκτέλεση του προγράμματός σου θα δείνει ένα νέο, εντελώς τυχαίο αριθμό βασισμένο σε χρόνο (πιο συγκεκριμένα στα δευτερό- λεπτα που πέρασαν από την 1η Ιανουαρίου του 1970 00:00 UTC). ΠΡΟΣΟΧΗ: Πολύ γρήγορη επανεκτέλεση του προγράμματος ή της εντολής είναι πιθανό (σίγουρο) να σου εμφανίσει τον ίδιο αριθμό. Δοκίμασε κάτι τέτοιο: #include <time.h> #include <stdlib.h> int r; srand(time(NULL)); while (1) r = rand(); Για να πετύχεις κάτι τέτοιο, αν είναι αναγκαίο, πρέπει να εισάγεις ένα είδος καθυστέρησης μέσα στο loop. Για δες λίγο αυτά και ξανατσέκαρε τον κώδικά σου.
bird Δημοσ. 6 Ιανουαρίου 2014 Δημοσ. 6 Ιανουαρίου 2014 Χρησιμοποίησε στην αρχή του προγράμματός σου την srand() για να αρχικοποιήσεις την γενήτρια αριθμών όπως σου είπε κι ο geomagas
nikos134 Δημοσ. 6 Ιανουαρίου 2014 Μέλος Δημοσ. 6 Ιανουαρίου 2014 ευχαριστω..κατι θα κανω οσο για αυτο? ** ερωτηση εαν εχω δυο λοοοπς το ενα μεσα στο αλλο πχfor(i=0; i<=5; i++){ for(j=0; j<=10; j++){ πως μπορω να βγω νωριτερα απο το 2τερο χωρις να βγω ταυτοχρονα και απο το πρωτο??
bird Δημοσ. 6 Ιανουαρίου 2014 Δημοσ. 6 Ιανουαρίου 2014 ευχαριστω..κατι θα κανω οσο για αυτο? Αν κάνεις break όσο είσαι μέσα στο 2ο loop θα βγείς μόνο από αυτό κι όχι κι από το 1ο...
gon1332 Δημοσ. 6 Ιανουαρίου 2014 Δημοσ. 6 Ιανουαρίου 2014 Επίσης όσον αφορά τη γεννήτρια τυχαίων αριθμών, καλή τακτική για να κάνεις debugging προγράμματα που χρησιμοποιούν τυχαίους αριθμούς είναι σε πρώτο στάδιο να χρησιμοποιείς ένα συγκεκριμένο seed, ώστε να πετύχεις μία "μόναδική τυχαία" εκτέλεση του προγράμματός σου και να ελέγξεις πάνω σε αυτή όλες τις πιθανές περιπτώσεις, επιλογές που υποστηρίζει. Έτσι θα βρεις πιθανά λογικά λάθη πιο εύκολα, σε σχέση με τη διαρκή επιστροφή διαφορετικών τυχαίων αριθμών. Στην τελευταία περι- πτωση, θα εκτελείς το πρόγραμμα, θα εντοπίζεις λαθάκι στην εκτέλεση, αλλά δε θα ξέρεις από πού προήλθε γιατί είναι πολύ πιθανό η επόμενη εκτέλεση να δουλέψει απροβλημάτιστα κι άρα η ορθή λειτουργία της εφαρ- μογής σου είναι εντελώς τυχαία. EDIT: Η srand() πρέπει να καλείται μόνο μία φορά!
nikos134 Δημοσ. 6 Ιανουαρίου 2014 Μέλος Δημοσ. 6 Ιανουαρίου 2014 Αν κάνεις break όσο είσαι μέσα στο 2ο loop θα βγείς μόνο από αυτό κι όχι κι από το 1ο... και ναι εγω εκανα χαζομαρα.. ευχαριστω
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα