pinto9 Δημοσ. 23 Απριλίου 2012 Δημοσ. 23 Απριλίου 2012 Καλησπέρα παιδία…… Είμαι καινούργιος στο site και θα ήθελα την βοήθεια σας σε ένα πρόβλημα πάνω στη γλώσσα c… Έχω ένα ταμπλό τυχαίων διαστάσεων(χ,ψ όπου δίνονται από το χρήστη) και μέσα του υπάρχουν κελία….. έχω 2 βασιλιάδες(είναι πιόνια απλώς τα παρουσιάζω έτσι γιατί κάνουν την ίδια κίνηση πχ δεν πάνε διαγώνια)ας υποθέσουμε ότι ο ένας τοποθετείται τυχαία στο ταμπλό και ο άλλος ξεκινάει σε μία από τις 4 γωνίες…. Εμείς μπορούμε και κινούμαι αυτό που ξεκινάει στη γωνία ανά ένα τετράγωνο… Πώς μπορώ με ένα κομμάτι κώδικα ο άλλος βασιλιάς να τον πλησιάζει κάθε στιγμή(που ο άλλος θα κινείται) ή ακόμα και να τον πιάσει(δηλαδή να κινείται ανάλογα);;;
migf1 Δημοσ. 23 Απριλίου 2012 Δημοσ. 23 Απριλίου 2012 Καλησπέρα παιδία…… Είμαι καινούργιος στο site και θα ήθελα την βοήθεια σας σε ένα πρόβλημα πάνω στη γλώσσα c… Έχω ένα ταμπλό τυχαίων διαστάσεων(χ,ψ όπου δίνονται από το χρήστη) και μέσα του υπάρχουν κελία….. έχω 2 βασιλιάδες(είναι πιόνια απλώς τα παρουσιάζω έτσι γιατί κάνουν την ίδια κίνηση πχ δεν πάνε διαγώνια)ας υποθέσουμε ότι ο ένας τοποθετείται τυχαία στο ταμπλό και ο άλλος ξεκινάει σε μία από τις 4 γωνίες…. Εμείς μπορούμε και κινούμαι αυτό που ξεκινάει στη γωνία ανά ένα τετράγωνο… Πώς μπορώ με ένα κομμάτι κώδικα ο άλλος βασιλιάς να τον πλησιάζει κάθε στιγμή(που ο άλλος θα κινείται) ή ακόμα και να τον πιάσει(δηλαδή να κινείται ανάλογα);;; Ένας τρόπος είναι να φτιάξεις μια ρουτίνα κίνησης του πιονιού, ανεξάρτητα από το ποιος το κουνάει. Δηλαδή μπορείς να του περνάς σαν παράμετρο το αν θα κινηθεί αυτόματα ή όχι. Εναλλακτικά και σαφώς πιο εύκολο, είναι να φτιάξεις 2 ρουτίνες κίνησης, μια για αυτόματη κίνηση και μια για χειροκίνητη κίνηση. Κάθε φορά που καλείς την χειροκίνητη, αμέσως μετά θα καλείς και την αυτόματη.
pinto9 Δημοσ. 23 Απριλίου 2012 Μέλος Δημοσ. 23 Απριλίου 2012 Το δεύτερο μου ακούγεται καλύτερα αλλά δε μπορώ να καταλάβω τις ρουτίνες κίνησης.
migf1 Δημοσ. 23 Απριλίου 2012 Δημοσ. 23 Απριλίου 2012 Το δεύτερο μου ακούγεται καλύτερα αλλά δε μπορώ να καταλάβω τις ρουτίνες κίνησης. Άρα το πρόβλημά σου δεν έχει να κάνει με την C που λες στον τίτλο, αλλά με τον γενικότερο αλγόριθμο του προβλήματος που θες να λύσεις (ανεξαρτήτως γλώσσας δηλαδή). Ένας τρόπος είναι να έχεις μια ρουτίνα που θα παίρνει ως παράμετρο το ταμπλό (με όλη του την τρέχουσα κατάσταση) και το πιόνι. Βάση της θέσης του πιονιού θα βρίσκει σε ποια τετράγωνα μπορεί να κινηθεί. Αν είναι περισσότερα το ενός, θα διαλέγει ένα στην τύχη (εκτός αν θέλεις να βάλεις κι άλλους περιορισμούς, π.χ. best-move) και θα επιστρέφει τη θέση του τετραγώνου. Αν ας πούμε αυτή η ρουτίνα ονομάζεται pawn_calc_move() και σου επιστρέφει τη θέση του ταμπλό που βρήκε, κι έχεις κι άλλη μια ρουτίνα ας την πούμε pawn_move() που δέχεται ως παράμετρο έναν δείκτη σε θέση του ταμπλό και μετακινεί εκεί το πιόνι, τότε ο κώδικάς σου μπορεί να είναι κάπως έτσι... > typedef struct Pos Pos { int row, col; } typedef struct Pawn Pawn { int kind Square pos; ... }; typedef struct Square Square { Pawn pawn; ... } ... Pos pawn_calc_move( Pawn *pawn, Square board[8][8] ); void pawn_move( Pawn *pawn, Pos pos, Square board[8][8] ); ... int main( void ) { Square board[8][8] = { {0,0,...} }; Pawn pawn = { {0,0, ..} .}; Pos nextmove; ... /* initialize board & pawn here */ ... nextmove = pawn_calc_move( &pawn, board ); pawn_move( &pawn, nextmove, board ); ... return 0; }.
pinto9 Δημοσ. 23 Απριλίου 2012 Μέλος Δημοσ. 23 Απριλίου 2012 (επεξεργασμένο) Aν και με μπερδεύει λίγο....Το ταμπλό το ξεκίνησα με πίνακα....Πάντως ευχαριστώ!!! Επεξ/σία 23 Απριλίου 2012 από pinto9
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα