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

Δημιουργία απλής Τρίλιζας με C++


Spiroslp

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

Έχουμε αυτό:

>#include <iostream>

using namespace std;

int main()
{
   int i,x;
   char Tril[3][3] = {'1','2','3','4','5','6','7','8','9'};
   cout << "Exontas ton parakato sxediagramma pata to katallhlo noymero gia to poy theleis na baleis thn epilogh soy"<<endl << "|1|  |2|  |3|"<<endl<<"|4|  |5|  |6|"<<endl<<"|7|  |8|  |9|"<< endl;
   for (i=0;i<9;i++)
   {
       do
       {
           cout<<"Dose arithmo "<<endl;
           cin>>x;
       }
       while ( (x<1 || x>9) || (Tril[(x-1)/3] [(x-1)%3]=='X' || Tril[(x-1)/3] [(x-1)%3]=='O'));

       if (i%2==0)
           Tril[(x-1)/3] [(x-1)%3]='X';
       else
           Tril[(x-1)/3] [(x-1)%3]='O';


       for (int row=0;row<3;row++)
       {
           for (int col=0;col<3;col++)

               cout<<Tril[row][col]<<" ";
           cout<<endl;
 }
       cout<<"____________________"<<endl;
   }

 return 0;
}

Και αυτό που μας δίνεται θέλει να σημπληρώσουμε στον πάνω κώδικα που κάναμε εμείς αυτό:

1. τη συνάρτηση checkWhoWins που ελέγχει σε κάθε επανάληψη αν

υπάρχει νικητής, και ποιος είναι αυτός. Έχει σαν όρισμα τον 3x3 πίνακα

και επιστρέφει ένα ακέραιο: 1 αν κερδίζει ο παίκτης 1, 2 αν κερδίζει ο

παίκτης 2 και 0 αν δεν υπάρχει ακόμα νικητής. Η συνάρτηση θα πρέπει

να καλείται στο τέλος κάθε επανάληψης και αφού συμπληρωθεί

κατάλληλα ο πίνακας με Χ ή Ο. Όταν βρεθεί νικητής, θα πρέπει να

τερματίζει το πρόγραμμα σας προβάλλοντας σχετικό μήνυμα που να μας

πληροφορεί για τον νικητή (πχ. Kerdise o paikths 1).

2. αν ο παίκτης εισάγει μη επιτρεπτή θέση (>9 ή <1) ή αν στη θέση αυτή

υπάρχει ήδη χαρακτήρας Ο ή Χ, θα πρέπει να εμφανιστεί σχετικό μήνυμα

λάθους.

3. σε κάθε επανάληψη θα πρέπει να τυπώνετε τον πίνακα στην παρακάτω

μορφή, καλώντας τη συνάρτηση printTriliza η οποία δεν επιστρέφει

τιμή και έχει ένα όρισμα: τον πίνακα 3x3.

1 | 2 | 3

---------

4 | 5 | 6

---------

7 | 8 | 9

 

Μπορείτε να βοηθήσετε γιατί έχουν μείνει μόνο λίγες μέρες μέχρι να παραδώσουμε την άσκηση και έχω κολλήσει.

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

Και αυτό που μας δίνεται θέλει να σημπληρώσουμε στον πάνω κώδικα που κάναμε εμείς αυτό:

1. τη συνάρτηση checkWhoWins που ελέγχει σε κάθε επανάληψη αν

υπάρχει νικητής, και ποιος είναι αυτός. Έχει σαν όρισμα τον 3x3 πίνακα

και επιστρέφει ένα ακέραιο: 1 αν κερδίζει ο παίκτης 1, 2 αν κερδίζει ο

παίκτης 2 και 0 αν δεν υπάρχει ακόμα νικητής. Η συνάρτηση θα πρέπει

να καλείται στο τέλος κάθε επανάληψης και αφού συμπληρωθεί

κατάλληλα ο πίνακας με Χ ή Ο. Όταν βρεθεί νικητής, θα πρέπει να

τερματίζει το πρόγραμμα σας προβάλλοντας σχετικό μήνυμα που να μας

πληροφορεί για τον νικητή (πχ. Kerdise o paikths 1).

Έχεις να κάνεις 2 πράγματα, να γράψεις τη συνάρτηση, και να την καλέσεις στο κατάλληλο σημείο με τον κατάλληλο έλεγχο για να τερματίσεις αν χρειαστεί. Αφού δεν παίρνει σαν όρισμα και την τελευταία κίνηση, πρέπει να ελέγξεις όλους τους πιθανούς τρόπους νίκης. Ο πιο απλός τρόπος είναι με πολλά if/else που ελέγχουν όλες τις πιθανότητες. Γράψτο έτσι και μετά προσπάθησε να βρεις τρόπους να το κάνεις πιο οικονομικά. Ελπίζω το που θα την καλέσεις και πως να είναι προφανές.

2. αν ο παίκτης εισάγει μη επιτρεπτή θέση (>9 ή <1) ή αν στη θέση αυτή

υπάρχει ήδη χαρακτήρας Ο ή Χ, θα πρέπει να εμφανιστεί σχετικό μήνυμα

λάθους.

Αυτόν τον έλεγχο τον κάνει ήδη το πρόγραμμα, αλλά έτσι όπως είναι δεν έχεις περιθώρια να εκτυπώσεις κάτι όταν υπάρχει λάθος. Ένας τρόπος είναι ένα if/else μέσα στο loop, και break όταν υπάρχει σωστή τιμή για να συνεχίσει το πρόγραμμα.

3. σε κάθε επανάληψη θα πρέπει να τυπώνετε τον πίνακα στην παρακάτω

μορφή, καλώντας τη συνάρτηση printTriliza η οποία δεν επιστρέφει

τιμή και έχει ένα όρισμα: τον πίνακα 3x3.

1 | 2 | 3

---------

4 | 5 | 6

---------

7 | 8 | 9

Αυτό είναι το πιό εύκολο, το πρόγραμμα το κάνει ήδη, εσύ πρέπει απλά να βάλεις τον κώδικα σε συνάρτηση (και ενδεχομένως να τον αλλάξεις λίγο για να βγάζει και τις διαχωριστικές γραμμές)

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

σου έκανα κάποιες αλλαγές δες τις και ολοκλήρωσε την άσκηση σου.

 

>
#include <iostream>

using namespace std;
int checkWhoWins(char[3][3]);
void printTriliza(char[3][3]);
int main(){
   int i,x;
   char Tril[3][3] = {'1','2','3','4','5','6','7','8','9'};
   cout << "Exontas ton parakato sxediagramma pata to katallhlo noymero gia to poy theleis na baleis thn epilogh soy"<<endl << "|1|  |2|  |3|"<<endl<<"|4|  |5|  |6|"<<endl<<"|7|  |8|  |9|"<< endl;
   for (i=0;i<9;i++){
       x=-1;
       while ( (x<1 || x>9) || (Tril[(x-1)/3] [(x-1)%3]>'9') ){
           cout<<"Dose arithmo "<<endl;
           cin>>x;getchar();
           if ( (x<1 || x>9)  )
               cout<<"la8os ari8mos prepei na einai apo 1-9 , prospa8ise ksana!"<<endl;
           else if (Tril[(x-1)/3] [(x-1)%3]>'9')
                   cout<<"la8os ari8mos prepei to tetragono na einai adeio , prospa8ise ksana!"<<endl;
       }
       if (i%2==0)
           Tril[(x-1)/3] [(x-1)%3]='X';
       else
           Tril[(x-1)/3] [(x-1)%3]='O';


       printTriliza(Tril);
       cout<<"____________________"<<endl;
       int winner=checkWhoWins(Tril);
       if (winner>0){
           cout<<"nikitis einai o paiktis "<<winner<<endl;
           break;
       }
   }
getchar();
 return 0;
}

int checkWhoWins(char triliza[3][3]){
   int result=0;
   //elegxos
   //.....
   //.....
   return result;
}
void printTriliza(char triliza[3][3]){
   for (int row=0;row<3;row++){
       for (int col=0;col<3;col++){
           cout<<" "<<triliza[row][col];
           if (col!=2)
               cout<<"|";
       }
       cout<<endl<<"---------"<<endl;
   }
}

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

Σας ευχαριστώ πολύ και τους δύο. @virxen75 σε ευχαριστώ πολύ για τον χρόνο σου. Αυτά τα έκανα και εγώ το πιο δύσκολο σημείο βρήκες να μην κάνεις; :P

Εκεί έχω δυσκολευτεί. Σκέφτηκα όπως είπε και ο mezger να κάνω όλους τους συνδυασμούς αλλά δυσκολεύομαι λίγο να το κάνω. Σίγουρα θα το κάνω με for(i=0;i<9;i++) αλλά δεν μπορώ να σκεφτώ με τίποτα πως θα κάνω τις ισότητες για να ελέγχει κάθε σημείο στα τετράγωνα ανά τρία,πλάγια κ.τ.λ.

Νομίζω πρέπει να αλλάξεις τα βήματα στην for. Κάτι τέτοιο έχω στο μαυλό μου για να σχηματίσεις οριζόντια, κάθετα και πλάγια και να κάνεις τον έλεγχο αλλά δεν πάει άλλο το μυαλό μου. 6 μήνες C κάνω και ούτε ένα μήνα C++

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

Σας ευχαριστώ πολύ και τους δύο. @virxen75 σε ευχαριστώ πολύ για τον χρόνο σου. Αυτά τα έκανα και εγώ το πιο δύσκολο σημείο βρήκες να μην κάνεις; :P

Εκεί έχω δυσκολευτεί. Σκέφτηκα όπως είπε και ο mezger να κάνω όλους τους συνδυασμούς αλλά δυσκολεύομαι λίγο να το κάνω. Σίγουρα θα το κάνω με for(i=0;i<9;i++) αλλά δεν μπορώ να σκεφτώ με τίποτα πως θα κάνω τις ισότητες για να ελέγχει κάθε σημείο στα τετράγωνα ανά τρία,πλάγια κ.τ.λ.

Νομίζω πρέπει να αλλάξεις τα βήματα στην for. Κάτι τέτοιο έχω στο μαυλό μου για να σχηματίσεις οριζόντια, κάθετα και πλάγια και να κάνεις τον έλεγχο αλλά δεν πάει άλλο το μυαλό μου. 6 μήνες C κάνω και ούτε ένα μήνα C++

 

Νομίζω ότι πας να το σκεφτείς λίγο πολύπλοκα το πράγμα. Καταρχήν για να έχεις τρίλιζα πρέπει να υπάρχει σύμβολο σε μια από τις 12347 θέσεις. Από εκεί μπορείς να πας ως εξής: Αν έχει Χ στην 1 τότε: αν έχει και στην 2 και στην 3 είναι win, αν έχει και στην 5 και στην 9 είναι win, αν έχει και στην 4 και στην 7 είναι win, το ίδιο για το Ο, το ίδιο και για κάθε μια από τις αρχικές θέσεις εκτός από την 1. Αν τα γράψεις όλα μπορείς σιγά σιγά να εξαλείψεις τα περιττά if (π.χ. δεν χρειάζεται να ελέγξεις για το 741 αν έχεις κάνει έλεγχο για το 147) και ότι σου μείνει αν μπορέσεις να το συμπτύξεις με ένα έξυπνο for, καλώς, αν όχι, και πάλι θα δουλεύει.

Γενικά εφόσον το πρόβλημα είναι περιορισμένο στην απλή τρίλιζα του 3x3 και δεν χρειάζεται να κάνει scale σε π.χ. 256x256 board, μην ταλαιπωρείσαι άδικα να βρεις με τη μια γενικό αλγόριθμο.

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

Το παρακάτω είναι δώρο από μένα...

 

 

> /*

-----------------------------
       Tic-Tac-Toe
human against the computer
      (c) V.I.Smirnov
-----------------------------

*/



#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

const char X      = 'X',
          O      = 'O',
          EMPTY  = ' ',
          TIE    = 'T',
          NO_ONE = 'N';


void introduction();
char askYesNo(string question);
int askNumber(string question, int high, int low = 0);
char firstMoveInvitation();
char takeOpponentSymbol(char piece);
void displayBoard(const vector<char>& board);
char checkForWinner(const vector<char>& board);
bool isLegal(const vector<char>& board, int move);
int humanMove(const vector<char>& board, char human);
void displayWinner(char checkForWinner, char computer, char human);
int computerMove(vector<char> board, char computer);



int main()
{
   int move;
   const int NUM_SQUARES = 9;
   vector<char> board(NUM_SQUARES, EMPTY);

   introduction();
   char human = firstMoveInvitation();
   char computer = takeOpponentSymbol(human);
   char turn = X;
   displayBoard(board);

   while (checkForWinner(board) == NO_ONE)
   {
       if (turn == human)
       {
           move = humanMove(board, human);
           board[move] = human;
       }
       else
       {
           move = computerMove(board, computer);
           board[move] = computer;
       }
       displayBoard(board);
       turn = takeOpponentSymbol(turn);
   }

   displayWinner(checkForWinner(board), computer, human);

   return 0;
}



void introduction()
{
   cout << "-----------------------------\n";
   cout << "        Tic-Tac-Toe\n\n";
   cout << " human against the computer\n\n";
   cout << "       (c) V.I.Smirnov\n";
   cout << "-----------------------------\n\n";

   cout << "The move is given by entering a number, 0 - 8.  \n";
   cout << "The number corresponds to the desired board position as illustrated:\n\n";
   
   cout << "       1 | 2 | 3\n";
   cout << "       ---------\n";
   cout << "       4 | 5 | 6\n";
   cout << "       ---------\n";
   cout << "       7 | 8 | 9\n\n";
}



char askYesNo(string question)
{
   char response;
   do
   {
       cout << question << " (y/n): ";
       cin >> response;
   } while (response != 'y' && response != 'n');

   return response;
}



int askNumber(string question, int high, int low)
{
   int number;
   do
   {
       cout << question << " (" << low << " - " << high << "): ";
       cin >> number;
   } while (number > high || number < low);

   return number;
}



char firstMoveInvitation()
{
   char go_first = askYesNo("Do you require the first move ?");
   if (go_first == 'y')
   {
       cout << "\nOk, you play first.\n";
       return X;
   }
   else
   {
       cout << "\nOk, I 'll play first.\n";
       return O;
   }
}



inline char takeOpponentSymbol(char piece)
{ return  piece == X ? O : X ; }



void displayBoard(const vector<char>& board)
{
   cout << "\n\t" << board[0] << " | " << board[1] << " | " << board[2]
        << "\n\t" << "---------"
        << "\n\t" << board[3] << " | " << board[4] << " | " << board[5]
        << "\n\t" << "---------"
        << "\n\t" << board[6] << " | " << board[7] << " | " << board[8]
        << "\n\n";
}



void displayWinner(char checkForWinner, char computer, char human)
{
if (checkForWinner == computer)
   {
       cout << checkForWinner << "'s won!\n";
       cout << "I won !\n";
   }

else if (checkForWinner == human)
   {
       cout << checkForWinner << "'s (YOU) won !\n";
       cout << "You won !\n\n";
   }

else
       cout << "No one won !\n\n";
}



char checkForWinner(const vector<char>& board)
{
   const int WINNING_ROWS[8][3] = { {0, 1, 2},
                                    {3, 4, 5},
                                    {6, 7, 8},
                                    {0, 3, 6},
                                    {1, 4, 7},
                                    {2, 5, 8},
                                    {0, 4, 8},
                                    {2, 4, 6} };
   const int TOTAL_ROWS = 8;

   for(int row = 0; row < TOTAL_ROWS; ++row)
   {
       if ( (board[WINNING_ROWS[row][0]] != EMPTY) &&
            (board[WINNING_ROWS[row][0]] == board[WINNING_ROWS[row][1]]) &&
            (board[WINNING_ROWS[row][1]] == board[WINNING_ROWS[row][2]]) )
       { return board[WINNING_ROWS[row][0]]; }
   }

   if (count(board.begin(), board.end(), EMPTY) == 0)
      return TIE;

   return NO_ONE;
}



inline bool isLegal(int move, const vector<char>& board)
{ return (board[move] == EMPTY); }



int humanMove(const vector<char>& board, char human)
{
   int move = askNumber("Give your move : ", board.size(),1);
   while (!isLegal(move-1, board))
   {
       cout << "\nThis square is already filled.\n";
       move = askNumber("Give another move : ", board.size(),1);
   }

   return move-1;
}



int computerMove(vector<char> board, char computer)
{ 
   unsigned int move = 0;
   bool found = false;

   while (!found && move < board.size())
   {
       if (isLegal(move, board))
       {
           board[move] = computer;
           found = checkForWinner(board) == computer;   
           board[move] = EMPTY;
       }

       if (!found)
          ++move;
   }
 

   if (!found)
   {
       move = 0;
       char human = takeOpponentSymbol(computer);

       while (!found && move < board.size())
       {
           if (isLegal(move, board))
           {
			   board[move] = human;  
              found = checkForWinner(board) == human;     
			   board[move] = EMPTY;        
           }

           if (!found)
               ++move;
       }
   }


   if (!found)
   {
       move = 0;
       unsigned int i = 0;
       const int BEST_MOVES[] = {4, 0, 2, 6, 8, 1, 3, 5, 7};

       while (!found && i <  board.size())
       {
           move = BEST_MOVES[i];
           if (isLegal(move, board))
           { found = true; }

           ++i;
       }
   }

   cout << "I 'll move at " << move+1 << endl;
 return move;
}

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

@V.I.Smirnov

 

Αυτό

>
      if (turn == human)
       {
           move = humanMove(board, human);
           board[move] = human;
       }
       else
       {
           move = computerMove(board, computer);
           board[move] = computer;
       }

 

δεν θα ηταν καλύτερο έτσι

>
   move = humanMove(board, turn);
   board[move] = turn;

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

@Spiroslp

 

Δεν το έγραψα για σένα, ούτε για να σου λύσω την άσκηση. (Εξάλλου αφορά άνθρωπο vs υπολογιστή).

Για μένα το έγραψα.

 

Είναι απλούστατο και πολύ καλογραμμένο. Αν το μελετήσεις θα μάθεις πολλά.

 

Και παρεμπιπτόντως, στο δικό σου πρόγραμμα ο τρόπος που χειρίζεσαι τις κινήσεις είναι (για να το πω επειικώς) άκομψος....

 

 

 

@bnvdarklord

 

Καλησπέρα.

Ναι, πολλές βελτιώσεις μπορούν να γίνουν ακόμη.

Και αν το έγραφα σε fortran - με δυσκολία αντιστάθηκα - ο κώδικας θα ήταν πιο ευδιάκριτος και περιεκτικός λόγω

της υποστήριξης πινάκων που έχει.

 

-

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

Τελικά την έκανα έτσι και την τέλειωσα. Άμα έχει κάνεις κάτι πιο οικονομικό ας το πει:

>int checkWhoWins(char triliza[3][3])
{
   int i,j,result=0;
   for(i=0; i<3; i++)
   {
       for(j=0; j<3; j++)
       {
           if (triliza[i] [j]=='X')
           {
               if ((triliza[i+1][j]=='X') && (triliza[i+2][j]=='X'))
                   result=1;
               else if ((triliza[i][j+1]=='X') && (triliza[i][j+2]=='X'))
                   result=1;
               else if ((triliza[i+1][j+1]=='X') && (triliza[i+2][j+2]=='X'))
                   result=1;


           }
       }
   }

   for(i=0; i<3; i++)
   {
       for(j=0; j<3; j++)
       {
           if (triliza[i] [j]=='O')
           {
               if ((triliza[i+1][j]=='O') && (triliza[i+2][j]=='O'))
                   result=2;
               else if ((triliza[i][j+1]=='O') && (triliza[i][j+2]=='O'))
                   result=2;
               else if ((triliza[i+1][j+1]=='O') && (triliza[i+2][j+2]=='O'))
                   result=2;
           }
       }
   }

   for(i=0; i<3; i++)
   {
       for(j=0; j<3; j++)
       {
           if (triliza[i] [j+1]=='X')
           {
               if ((triliza[i+1][j+1]=='X') && (triliza[i+2][j+1]=='X'))
                   result=1;

           }
       }
   }

     for(i=0; i<3; i++)
   {
       for(j=0; j<3; j++)
       {
           if (triliza[i] [j+1]=='O')
           {
               if ((triliza[i+1][j+1]=='O') && (triliza[i+2][j+1]=='O'))
                   result=2;

           }
       }
   }

   for(i=0; i<3; i++)
   {
       for(j=0; j<3; j++)
       {
           if (triliza[i] [j+2]=='X')
           {
               if ((triliza[i+1][j+2]=='X') && (triliza[i+2][j+2]=='X'))
                   result=1;
               else if ((triliza[i+1][j+1]=='X') && (triliza[i+2][j]=='X'))
                   result=1;

           }
       }
   }

for(i=0; i<3; i++)
   {
       for(j=0; j<3; j++)
       {
           if (triliza[i] [j+2]=='O')
           {
               if ((triliza[i+1][j+2]=='O') && (triliza[i+2][j+2]=='O'))
                   result=2;
               else if ((triliza[i+1][j+1]=='O') && (triliza[i+2][j]=='O'))
                   result=2;

           }
       }
   }

    for(i=0; i<3; i++)
   {
       for(j=0; j<3; j++)
       {
           if (triliza[i+1] [j+1]=='X')
           {
               if ((triliza[i+1][j]=='X') && (triliza[i+1][j+2]=='X'))
                   result=1;

           }
       }
   }

for(i=0; i<3; i++)
   {
       for(j=0; j<3; j++)
       {
           if (triliza[i+1] [j+1]=='O')
           {
               if ((triliza[i+1][j]=='O') && (triliza[i+1][j+2]=='O'))
                   result=2;

           }
       }
   }

    for(i=0; i<3; i++)
   {
       for(j=0; j<3; j++)
       {
           if (triliza[i+2] [j]=='X')
           {
               if ((triliza[i+2][j+1]=='X') && (triliza[i+2][j+2]=='X'))
                   result=1;

           }
       }
   }

    for(i=0; i<3; i++)
   {
       for(j=0; j<3; j++)
       {
           if (triliza[i+2] [j]=='O')
           {
               if ((triliza[i+2][j+1]=='O') && (triliza[i+2][j+2]=='O'))
                   result=2;

           }
       }
   }


   return result;
}

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

[..] Άμα έχει κάνεις κάτι πιο οικονομικό ας το πει [..]

 

To οικονομικό και κομψό είναι αυτό που έκανα εγώ στην ρουτίνα checkForWinner

Ο πίνακας των κινήσεων ανιχνεύεται σε αντιπαραβολή με έναν βοηθητικό πίνακα που περιέχει τις νικήτριες στήλες.

Έτσι υπάρχει μόνον ένα for.

Ξαναγύρνα να δεις τι έκανα και μετά μου λες πιο είναι οικονομικότερο και απλούστερο...

 

-

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

@V.I.Smirnov πραγματικά πολύ εντυπωσιακό αυτό που έκανες και φυσικά πάρα πολύ πιο απλούστερο και οικονομικό αλλά δεν έχουμε προχωρήσει ακόμα τόσο πολύ και δεν θέλω να αντιγράψω κάτι και να το δώσω έτσι όπως είναι. Θέλω να το καταλάβω καλά και να το κάνω μόνος μου. Για επιπλέον γνώσεις θα κάτσω να το διαβάσω και να το μελετήσω για να το καταλάβω πλήρως. Σε ευχαριστώ πολύ :)

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

@Spiroslp

 

Δεν το έγραψα για σένα [...]

Για μένα το έγραψα.

 

 

 

Το παρακάτω είναι δώρο από μένα...

 

 

Δώρο από μένα για εμένα, που εάν το μελετήσετε θα μάθετε πολλά, γιατί απλά δεν κρατήθηκα.

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

Δώρο από μένα για εμένα, που εάν το μελετήσετε θα μάθετε πολλά, γιατί απλά δεν κρατήθηκα.

 

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

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

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...