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

Παιχνίδι ναρκαλιευτή στην C

Ερώτηση

Γεια σας παλεύω εδώ και αρκετό διάστημα να φτιάξω το παιχνίδι του ναρκαλιευτή σε γλώσσα C.Αρχικά να πω απαγορεύονται γκλομπαλ μεταβλητές.Η άσκηση λέει: να γραφεί πρόγραμμα το οποιο θα τοποθετει Κ βομβες σε ενα χωρο Μ επι Ν θεσεων και στη συνεχεια θα υπολογιζει καθε ελευθερη απο βομβες θεση με ποσες θα συνορευει (οριζοντια,καθετα,διαγωνια κατα μια θεση).Οι διαμετροι του χωρου και το πληθος περνανε στο προγραμμα ως παραμετροι εκτελεσης. Ο αριθμος των βομβων και οι διαστασεις να πω οτι δινονται απο τον χρηστη.Οι βομβες μπαινουν σε τυχαιες θεσεις.

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

κι οπως προανεφερα τον αριθμο των βομβων με τις οποιες συνορευει μια θεση

Καντε οτι μετατροπες,αλλαγες θελετε.Απαντηστε ακομα κι αν εχει περασει αρκετο διαστημα :D

 

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
char **Field(int , int );
void BlankFill(char **, int , int );
void Bombs(char **, int , int , int );
void Fill(char **, int , int );
int CountB(char **, int , int );
void Print(char **, int , int );
int main ()
{
 
int M,N,B;
char **F1;
printf("dwse oria\n");
scanf("%d%d",&M,&N);
F1=Field(M,N);
BlankFill(F1,M,N);
    printf("dwse bombs\n");
    scanf("%d",&B);
Bombs(F1,M,N,B);
CountB(F1,M,N);
Fill(F1,M,N);
    Print(F1,M,N); 
    return 0;
 
}
 
 
 
char **Field(int M, int N)
{
char **F;
int i;
F=(char **)malloc(M*sizeof(char *));
if (F==NULL)
exit(1);
for (i=0; i<M; i++)
{
*(F+i)=(char *)malloc(N*sizeof(char));
if (*(F+i)==NULL)
exit(1);
}
return F;
}
 
 
 
void BlankFill(char **F, int M, int N)
{
int i,j;
for (i=0; i<M; i++)
for (j=0; j<N; j++)
F[j]=' ';
}
 
 
 
void Bombs(char **F, int M, int N, int B)
{
int i,x,y;
srand(time(NULL));
for (i=0; i<B; i++)
{
do
{
x=rand()%M;
y=rand()%N;
}
while (F[x][y]!=' ');
F[x][y]='*';
}
}
 
 
void Fill(char **F, int M, int N)
{
int i,j,a;
for (i=0; i<M; i++)
for (j=0; j<N; j++)
  if (CountB(F,i,j)>0)
  {
  if (F[j]=!'*')
      F[j]=CountB(F,i,j);
  else
     F[j]=' ';
  }
}
 
 
int CountB(char **F, int M, int N)
{
int i,j,count=0;
   for (i=0; i<M; i++)
     for (j=0; j<N; j++)
     if (F[j]=='*') 
     count=count+1;
    return count;
}
void Print(char **F, int M, int N)
{
int i,j;
for (i=0; i<M; i++)
{
 
for (j=0; j<N; j++)
printf("%c",F[j]);
 
    }
}

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

6 απαντήσεις σε αυτή την ερώτηση

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

  • 0

Καντε οτι μετατροπες,αλλαγες θελετε.Απαντηστε ακομα κι αν εχει περασει αρκετο διαστημα :D

Εμείς γιατί να κάνουμε αλλαγές ? Εσύ πρέπει να κάνεις αλλαγές μέχρι να υλοποιήσεις αυτά που ζητάει η άσκησή σου.

 

Αυτό που μπορούμε να κάνουμε εμείς είναι, αφού μας πεις σε ποιο σημείο δυσκολεύεσαι και τι έκανες μέχρι τώρα για να το λύσεις, να σου δώσουμε κάποιες κατευθύνσεις.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

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

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Γιατί δεν τεστάρεις τον κώδικα σου;

 

Εννοώ αν έχεις κάποιον debugger χρησιμοποιήσε αυτόν ή ακόμα χειρότερα βάλε παντού prints να δεις τι συμβαίνει με τις μεταβλητές σου.

 

Έτσι θα μπορέσεις να καταλάβεις τι συμβαίνει και κυριώς αν συμβαίνει αυτό που θέλεις!

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

Εδώ είσαι.

 

Θενκ μι λέητερ.

 

Φυσικά μελέτησε τον κώδικα, άμα κάνεις copy paste, είσαι τραγικός.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
  • 0

H CountB είναι λάθος. Πρέπει για κάθε σημείο να μετρήσεις τα 8 γύρω του. 

Π.χ. είσαι στο (x, y) πρέπει να μετρήσεις πόσα από τα [(x-1,y-1),(x-1,y) (x-1,y+1) ...] είναι βομβα.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

Εγγραφείτε για έναν νέο λογαριασμό

Σύνδεση

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

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

Χρήσιμες πληροφορίες

Με την περιήγησή σας στο insomnia.gr, αποδέχεστε τη χρήση cookies που ενισχύουν σημαντικά την εμπειρία χρήσης.