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

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

Δημοσ. (επεξεργασμένο)

Στον προγραμματισμό έχω την εξής άσκηση έως και την Τρίτη:

Στην άσκηση αυτή θα υλοποιήσετε το παιχνίδι Fiver. Το παιχνίδι παίζεται σε ένα ταμπλό 5×5. Αρχικά όλες οι θέσεις καταλαμβάνονται από λευκά κομμάτια. Ο παίκτης έχει τη δυνατότητα να επιλέξει ένα κομμάτι κάθε φορά. Με την επιλογή ενός κομματιού, το κομμάτι αυτό αλλάζει χρώμα από λευκό σε μαύρο (και το ανάποδο) . Επίσης, χρώμα αλλάζουν τα κομμάτια που βρίσκονται αριστερά, δεξιά, πάνω και κάτω από το κομμάτι που επιλέχτηκε. Σκοπός του παιχνιδιού είναι να μετατραπούν όλα τα κομμάτια του ταμπλό από άσπρα σε μαύρα.

 

Όμως, όταν κάνω compile, εμφανίζεται μόνο το εξής μήνυμα:

*********
* Fiver *
*********
Congratulations! You win!
Play again (y/n)?

 

Ωστόσο, δεν μπορώ να καταλάβω που είναι το λάθος..  :wacko:

 
 

#include <stdio.h>
 
const int board_size = 5; // Game board size
const char BLACK = 'X'; // Black Piece
const char WHITE = 'O'; // White Piece
 
void initBoard(char A[board_size][board_size], int i, int j);   // Board initialization
void playGame(char A[board_size][board_size], int i, int j); // Play the game
void displayBoard(char A[board_size][board_size], int i, int j);// Print game board
char checkEnd(char A[board_size][board_size], int i, int j, char check); // Check if game ends
void flip(char A[board_size][board_size], int i, int j); // Flip the piece to a different color
 
 
 
int main()
{
char A[board_size][board_size];
char answer;
 
do
{
initBoard();
printf("*********\n");
printf("* Fiver *\n");
printf("*********\n");
displayBoard();
do
{
playGame();
displayBoard();
}
while(0);
printf("Congratulations! You win!\n");
printf("Play again (y/n)? ");
scanf("%c", &answer);
}while(answer =='Y' || answer =='y');
return 0;
}
 
//initialize the game board content
void initBoard(char A[board_size][board_size], int i, int j)
{
 for(i=0;i<board_size;i++)
 { for(j=0;j<board_size;j++)
    {    A[i][j] = WHITE;
         printf("\t%c", A[i][j]);
    }
    printf("\n");
 }
} 
 
void playGame(char A[board_size][board_size], int i, int j)
{
 int i,j;
 checkEnd();
 do
 {
printf("Please select the piece's row and column number: ");
scanf("%d" "%d", &i,j);
flip;
 }while(0);
 displayBoard();
}
 
//check to see if all pieces have been changed to black
char checkEnd(char A[board_size][board_size], int i, int j, char check)
{
 int i,j;
 for(i=0;i<board_size;i++)
{ for(j=0;j<board_size;j++)
   {    if (A[i][j] == BLACK)
    {      check=1;
    }
    else
    {      check=0;
    } 
   }
    }
 return check;
}
 
 
//display the game board
void displayBoard(char A[board_size][board_size], int i, int j)
{
 int i,j;
 for(i=0;i<board_size;i++)
 { for(j=0;j<board_size;j++)
   { printf("%c", A[i][j]);
   }
 }
 
}
 
 
//flip a piece to a different color
void flip(char A[board_size][board_size], int i, int j)
{
int i,j;
if (A[i][j] == WHITE)
{ A[i][j] = BLACK;
   if (i-1>0)
   { if (A[i-1][j] == WHITE)
           { A[i-1][j] = BLACK;
}
           else
{       A[i-1][j] = WHITE;
}
   }
   if (j-1>0)
   {       if (A[i][j-1] == WHITE)
           {      A[i][j-1] = BLACK;
           }
           else
           {      A[i][j-1] = WHITE;
           }
   }
   if (j+1<board_size)
   {       if (A[i][j+1] == WHITE)
           {      A[i][j+1] = BLACK;
           }
           else
           {      A[i][j+1] = WHITE;
           }
   }
   if (i+1<board_size)
   {       if (A[i+1][j] == WHITE)
           {      A[i+1][j] = BLACK;
           }
           else
           {      A[i+1][j] = WHITE;
           }
   }
   
    }
else
{ A[i][j] = WHITE;
       if (i-1>0)
   { if (A[i-1][j] == WHITE)
           { A[i-1][j] = BLACK;
}
           else
{       A[i-1][j] = WHITE;
}
   }
   if (j-1>0)
   {       if (A[i][j-1] == WHITE)
           {      A[i][j-1] = BLACK;
           }
           else
           {      A[i][j-1] = WHITE;
           }
   }
   if (j+1<board_size)
   {       if (A[i][j+1] == WHITE)
           {      A[i][j+1] = BLACK;
           }
           else
           {      A[i][j+1] = WHITE;
           }
   }
   if (i+1<board_size)
   {       if (A[i+1][j] == WHITE)
           {      A[i+1][j] = BLACK;
           }
           else
           {      A[i+1][j] = WHITE;
           }
  }
}
}
Επεξ/σία από Punky29
Δημοσ.

Με μια γρήγορη ματια παρατηρω ότι

  • Σε κάθε συνάρτηση μέσα δηλώνεις int i, j παρόλου που τα δίνεις και ως παράμετρο -> syntax error
  • Καλείς συναρτήσεις, π.χ initboard() χωρίς να έχεις δώσει παραμέτρους παρόλο που στον ορισμό τους έχεις δηλώσει ότι παίρνουν.
void initBoard(char A[board_size][board_size], int i, int j)

Εδώ προσπαθείς να στείλεις πίνακα? Πρέπει να σβήσεις αυτά που έχεις μέσα στις αγκύλες. Δοκίμασε να το αλλάξεις σε
 

void initBoard(char A[][], int rows, int columns)

Οπου rows, columns ο αριθμός των γραμμών/στηλών του πίνακα.

Δημοσ.

Διόρθωσα το πρόγραμμα, ωστόσο δεν ξέρω πώς να καλέσω συνάρτηση, η οποία ουσιαστικά κάνει έλεγχο(checkEnd).  :huh:

#include <stdio.h>

const int board_size = 5;					// Game board size
const char BLACK = 'X';						// Black Piece	
const char WHITE = 'O';						// White Piece

void initBoard();   // Board initialization
void playGame();	// Play the game
void displayBoard();// Print game board
char checkEnd(char check);	// Check if game ends
void flip(); // Flip the piece to a different color



int main()
{
	char A[board_size][board_size];
	char answer;
	
	do
	{
		initBoard();
		printf("*********\n");
		printf("* Fiver *\n");
		printf("*********\n");
		displayBoard();
		do
		{
			playGame();
			displayBoard();
		}
		while(0);
		printf("Congratulations! You win!\n");
		printf("Play again (y/n)? ");
		scanf("%c", &answer);
	}while(answer =='Y' || answer =='y');
	return 0;
}

//initialize the game board content
void initBoard()
{
 char A[board_size][board_size];
 int i,j;
 for(i=0;i<board_size;i++)
 {	for(j=0;j<board_size;j++)
    {    A[i][j] = WHITE;
         printf("\t%c", A[i][j]);
    }
    printf("\n");
 }
} 

void playGame()
{
 char A[board_size][board_size];
 int i,j;
 checkEnd(A[board_size][board_size]);
 do
 {
		printf("Please select the piece's row and column number: ");
		scanf("%d" "%d", &i,j);
		flip;
 }while(0);
 displayBoard();	
}

//check to see if all pieces have been changed to black
char checkEnd(char A[board_size][board_size])
{
 char check;
 int i,j;
 for(i=0;i<board_size;i++)
	{	for(j=0;j<board_size;j++)
	    {    if (A[i][j] == BLACK)
		     {      check=1;
		     }
		     else
		     {      check=0;
		     } 
	    }
    }
 return check;
}


//display the game board
void displayBoard()
{
 char A[board_size][board_size];
 int i,j;
 for(i=0;i<board_size;i++)
 { for(j=0;j<board_size;j++)
   { printf("%c", A[i][j]);
   }
 }	
	
}


//flip a piece to a different color
void flip()
{
	char A[board_size][board_size];
    int i,j;
	if (A[i][j] == WHITE)
	{		A[i][j] = BLACK;
		    if (i-1>0)
		    {		if (A[i-1][j] == WHITE)
		            {		A[i-1][j] = BLACK;
					}
		            else
					{       A[i-1][j] = WHITE;
					}
		    }
		    if (j-1>0)
		    {       if (A[i][j-1] == WHITE)
		            {      A[i][j-1] = BLACK;
		            }
		            else
		            {      A[i][j-1] = WHITE;
		            }
		    }
		    if (j+1<board_size)
		    {       if (A[i][j+1] == WHITE)
		            {      A[i][j+1] = BLACK;
		            }
		            else
		            {      A[i][j+1] = WHITE;
		            }
		    }
		    if (i+1<board_size)
		    {       if (A[i+1][j] == WHITE)
		            {      A[i+1][j] = BLACK;
		            }
		            else
		            {      A[i+1][j] = WHITE;
		            }
		    }
		    
    }
	else
	{		A[i][j] = WHITE;
	        if (i-1>0)
		    {		if (A[i-1][j] == WHITE)
		            {		A[i-1][j] = BLACK;
					}
		            else
					{       A[i-1][j] = WHITE;
					}
		    }
		    if (j-1>0)
		    {       if (A[i][j-1] == WHITE)
		            {      A[i][j-1] = BLACK;
		            }
		            else
		            {      A[i][j-1] = WHITE;
		            }
		    }
		    if (j+1<board_size)
		    {       if (A[i][j+1] == WHITE)
		            {      A[i][j+1] = BLACK;
		            }
		            else
		            {      A[i][j+1] = WHITE;
		            }
		    }
		    if (i+1<board_size)
		    {       if (A[i+1][j] == WHITE)
		            {      A[i+1][j] = BLACK;
		            }
		            else
		            {      A[i+1][j] = WHITE;
		            }
		   }
	}
}

Δημοσ.

Κάθε μία από τις συναρτήσεις σου ορίζει τη μεταβλητή board τοπική, οπότε πώς είναι δυνατόν να "δει" η μία το ίδιο ταμπλό που βλέπουν οι άλλες;

 

Τα do...while(0) τι ρόλο παίζουν; Γιατί δεν τα βγάζεις τελείως;

 

Η function checkEnd δε φαίνεται πως επιστρέφει αποτέλεσμα λαμβάνοντας υπόψη μόνο το τελευταίο κομμάτι του ταμπλό και άρα δε λειτουργεί σωστά με την καμία;

 

Μέσα στη flip() έχεις ένα τεράστιο if/else όπου και στα δύο μέλη του έχεις ακριβώς τον ίδιο κώδικα με τα 4 if για τις παρακείμενες θέσεις -- γιατί δεν τα βγάζεις έξω από το if;

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

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

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

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

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

Σύνδεση

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

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