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

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


Makaveli123

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

Γεια σας παλεύω εδώ και αρκετό διάστημα να φτιάξω το παιχνίδι του ναρκαλιευτή σε γλώσσα 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]);
 
    }
}
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

 

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

 

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

 

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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