Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

λοιπον οπως λεει το θεμα..εγω χρησιμοποιω την rand() για να δημιουργησω τυχαιους αριθμους...το προβλημα ειναι οτι το ευρος που χρησιμοποιω εγω απο 1 μεχρι το 40 καθε φορα ειναι προβλεψιμο...υπαρχει καποιος τροπος να μην ειναι??

Δημοσ.

Τι εννοείς "το εύρος είναι προβλέψιμο"; Το εύρος το ορίζεις εσύ.

Μήπως τα αποτελέσματα; Αν ναι, τι σου βγάζει;

Χρησιμοποιείς την srand();

Ο κώδικάς σου ποιος είναι;

Δημοσ.

προσπαθω να φιταξω ενα μικρο παιχνιδακι....το προβλημα ειναι οτι καθε φορα οι παγιδες και οι περιοχεσ που πρεπει να παει ο παικτης ειναι τα ιδια....να ο κωδικας

 

 

** ερωτηση εαν εχω δυο λοοοπς το ενα μεσα στο αλλο πχ
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;
                    }
Δημοσ.

Μήπως εννοείς "ο αριθμός που εμφανίζεται είναι κάθε φορά προβλέψιμος";

 

Μήπως χρησιμοποιείς κάποιο συγκεκριμένο 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.

 

Για δες λίγο αυτά και ξανατσέκαρε τον κώδικά σου.

Δημοσ.

Χρησιμοποίησε στην αρχή του προγράμματός σου την srand() για να αρχικοποιήσεις την γενήτρια αριθμών όπως σου είπε κι ο geomagas

Δημοσ.

ευχαριστω..κατι θα κανω :)

οσο για αυτο?

 

 

** ερωτηση εαν εχω δυο λοοοπς το ενα μεσα στο αλλο πχ
for(i=0; i<=5; i++){
        for(j=0; j<=10; j++){
  πως μπορω να βγω νωριτερα απο το 2τερο χωρις να βγω ταυτοχρονα και απο το πρωτο??

Δημοσ.

ευχαριστω..κατι θα κανω :)

οσο για αυτο?

Αν κάνεις break όσο είσαι μέσα στο 2ο loop θα βγείς μόνο από αυτό κι όχι κι από το 1ο...

Δημοσ.

Επίσης όσον αφορά τη γεννήτρια τυχαίων αριθμών, καλή τακτική για να

κάνεις debugging προγράμματα που χρησιμοποιούν τυχαίους αριθμούς

είναι σε πρώτο στάδιο να χρησιμοποιείς ένα συγκεκριμένο seed, ώστε

να πετύχεις μία "μόναδική τυχαία" εκτέλεση του προγράμματός σου και

να ελέγξεις πάνω σε αυτή όλες τις πιθανές περιπτώσεις, επιλογές που

υποστηρίζει. Έτσι θα βρεις πιθανά λογικά λάθη πιο εύκολα, σε σχέση με

τη διαρκή επιστροφή διαφορετικών τυχαίων αριθμών. Στην τελευταία περι-

πτωση, θα εκτελείς το πρόγραμμα, θα εντοπίζεις λαθάκι στην εκτέλεση,

αλλά δε θα ξέρεις από πού προήλθε γιατί είναι πολύ πιθανό η επόμενη

εκτέλεση να δουλέψει απροβλημάτιστα κι άρα η ορθή λειτουργία της εφαρ-

μογής σου είναι εντελώς τυχαία.

 

EDIT: Η srand() πρέπει να καλείται μόνο μία φορά!

Δημοσ.

Αν κάνεις break όσο είσαι μέσα στο 2ο loop θα βγείς μόνο από αυτό κι όχι κι από το 1ο...

και ναι εγω εκανα χαζομαρα..:P ευχαριστω

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...