derrendevil Δημοσ. 7 Ιανουαρίου 2012 Μέλος Share Δημοσ. 7 Ιανουαρίου 2012 Ναι με συντεταγμενες δινεται η τοποθεσια των πλοιων... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
migf1 Δημοσ. 7 Ιανουαρίου 2012 Share Δημοσ. 7 Ιανουαρίου 2012 Εννοώ τις συντεταγμένες του κάθε κουμπιού. Από ότι καταλαβαίνω από τα σχόλια, το κάθε κουμπί κρατάει τη σειρά που κατέχει μέσα στον πίνακα στο: button.TabIndex. Αυτό που δεν καταλαβαίνω είναι πως μετατρέπει το κλικ ενός κουμπιού στον btnGame σε index numbers του Game. Αυτή η δουλειά κανονικά γίνεται μέσα στον κώδικα της MyClickHandler, αλλά αδυνατώ να εντοπίσω στον κώδικα εάν και πως το κάνει. Αντίθετα βλέπω πως σε κάθε μεμονωμένο κλικ πάει και σκανάρει όλο τον πίνακα Game, θεωρώντας πως είναι ήδη ενημερωμένος ως προς τις τιμές που περιέχουν τα κελιά του, και καταλαβαίνω πως όσα κελιά του Game έχουν την τιμή 2 θεωρούνται βομβαρδισμένα και τα χρωματίζει κόκκινα, αλλιώς μπλε. Να υποθέσω πως περιμένει από εσάς να γράψετε τα κομμάτια που λείπουν, ε; Λοιπόν, αν το button.TabIndex λειτουργεί όντως ως ID, περιέχοντας δηλαδή τον αύξοντα αριθμό του κάθε κουμπιού σε μια συνεχόμενη, αυξητικά συνεχόμενη σειρά από κουμπιά (ξεκινώντας από το 0), τότε ο τύπος για να το μετατρέψεις σε i,,j είναι ο παρακάτω: > i = TabIndex / NCOLS j = TabIndex % NCOLS όπου NCOLS το πλήθος των στηλών στον πίνακά σου (11 για σένα σε αυτή την εργασία). Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
derrendevil Δημοσ. 7 Ιανουαρίου 2012 Μέλος Share Δημοσ. 7 Ιανουαρίου 2012 Σ αυτο εχω κολλησει κι εγω, αυτο δεν εχω καταλαβει...θα το δοκιμασω κι αυτο . Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
migf1 Δημοσ. 7 Ιανουαρίου 2012 Share Δημοσ. 7 Ιανουαρίου 2012 Καταρχήν, βάλε να σου τυπώνει το TabIndex του κουμπιού που κάνεις κλικ για να δεις αν όντως αντιστοιχεί σε ID (0 για το 1ο κουμπί, 1 για το 2ο, κλπ). Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
virxen75 Δημοσ. 7 Ιανουαρίου 2012 Share Δημοσ. 7 Ιανουαρίου 2012 (επεξεργασμένο) Εννοώ τις συντεταγμένες του κάθε κουμπιού. Από ότι καταλαβαίνω από τα σχόλια, το κάθε κουμπί κρατάει τη σειρά που κατέχει μέσα στον πίνακα στο: button.TabIndex. Αυτό που δεν καταλαβαίνω είναι πως μετατρέπει το κλικ ενός κουμπιού στον btnGame σε index numbers του Game. Αυτή η δουλειά κανονικά γίνεται μέσα στον κώδικα της MyClickHandler, αλλά αδυνατώ να εντοπίσω στον κώδικα εάν και πως το κάνει. Αντίθετα βλέπω πως σε κάθε μεμονωμένο κλικ πάει και σκανάρει όλο τον πίνακα Game, θεωρώντας πως είναι ήδη ενημερωμένος ως προς τις τιμές που περιέχουν τα κελιά του, και καταλαβαίνω πως όσα κελιά του Game έχουν την τιμή 2 θεωρούνται βομβαρδισμένα και τα χρωματίζει κόκκινα, αλλιώς μπλε. Να υποθέσω πως περιμένει από εσάς να γράψετε τα κομμάτια που λείπουν, ε; Λοιπόν, αν το button.TabIndex λειτουργεί όντως ως ID, περιέχοντας δηλαδή τον αύξοντα αριθμό του κάθε κουμπιού σε μια συνεχόμενη, αυξητικά συνεχόμενη σειρά από κουμπιά (ξεκινώντας από το 0), τότε ο τύπος για να το μετατρέψεις σε i,,j είναι ο παρακάτω: > i = TabIndex / NCOLS j = TabIndex % NCOLS όπου NCOLS το πλήθος των στηλών στον πίνακά σου (11 για σένα σε αυτή την εργασία). το tabindex δεν δουλευει ως ID δίνει την θέση του κάθε κουμπιού στην γραμμή που ανήκει (τιμές 0-10) και όχι στον πίνακα συνολικά αν θες να λειτουργήσει σαν index κάνε την πιο κάτω αλλαγή EDIT(απλούστερα) > ........ Private Sub generateButton(ByVal x As Byte, ByVal y As Byte) 'Δημιουργούμε ένα αντικείμενο τύπου button στη θέση btnGame(x, y) του πίνακα btnGame btnGame(x, y) = New Button 'Δίνουμε (αυθαίρετα) πλάτος και ύψος 50 pixels btnGame(x, y).Width = 50 btnGame(x, y).Height = 50 'Το TabIndex δίνει τη σειρά που θα έχει το button οταν θα πατάμε το tab 'Με αυτό τον τρόπο κρατάμε την y συντεταγμένη στο ίδιο το button btnGame(x, y).TabIndex = x * 11 + y '<---------- αλλαγή .................. και τέλος η νέα συνάρτηση με βάση το tabindex γίνεται > Private Sub MyClickHandler(ByVal sender As System.Object, ByVal e As System.EventArgs) 'Είναι ο χειριστής του συμβάντος click όλων των buttons btnGame(i, j) 'Οταν κάνουμε click σε button το πρόγραμμα βρίσκει τις συντεταγμένες (i,j) ' για να ελέγξει την αντίστοιχη τιμή του πίνακα Game 'For i = 0 To 10 'For j = 0 To 10 Dim i, j As Integer i = Int(sender.TabIndex / 11) j = sender.TabIndex Mod 11 If Game(i, j) = 2 Then Beep() sender.backcolor = Color.Red 'δείχνουμε με κόκκινο τις εύστοχες βολές Else sender.backcolor = Color.Blue 'δείχνουμε με Blue τις άστοχεολές End If 'Next 'Next End Sub Επεξ/σία 7 Ιανουαρίου 2012 από virxen75 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
migf1 Δημοσ. 7 Ιανουαρίου 2012 Share Δημοσ. 7 Ιανουαρίου 2012 Ωραίος Πάντως παιδιά είμαι 99% σίγουρος πως σε Win32 API τα γραφικά στοιχεία έχουν ID, το οποίο το περνάς στη ρουτίνα δημιουργίας όταν δημιουργείς το στοιχείο δυναμικά (ή το ορίζεις αν φτιάχνεις τα γραφικά στοιχεία με resource editor). Αν όχι ID, τότε το λεγόμενο handle του εκάστοτε γραφικού στοιχείου (που βασικά από ότι θυμάμαι όλα είναι window-hanldes έτσι κι αλλιώς). Απλώς δεν θυμάμαι αν το ID και το handle είναι το ίδιο πράγμα ή όχι. Κάποιος με φρέσκια εμπειρία σε Win32 Programming θα είναι πολύ πιο κατατοπιστικός από μένα. Τώρα το τι γίνεται μέσω του .net δεν ξέρω... στον κώδικα πάντως δεν είδα τίποτα από αυτά. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
virxen75 Δημοσ. 7 Ιανουαρίου 2012 Share Δημοσ. 7 Ιανουαρίου 2012 Ωραίος Πάντως παιδιά είμαι 99% σίγουρος πως σε Win32 API τα γραφικά στοιχεία έχουν ID, το οποίο το περνάς στη ρουτίνα δημιουργίας όταν δημιουργείς το στοιχείο δυναμικά (ή το ορίζεις αν φτιάχνεις τα γραφικά στοιχεία με resource editor). Αν όχι ID, τότε το λεγόμενο handle του εκάστοτε γραφικού στοιχείου (που βασικά από ότι θυμάμαι όλα είναι window-hanldes έτσι κι αλλιώς). Απλώς δεν θυμάμαι αν το ID και το handle είναι το ίδιο πράγμα ή όχι. Κάποιος με φρέσκια εμπειρία σε Win32 Programming θα είναι πολύ πιο κατατοπιστικός από μένα. Τώρα το τι γίνεται μέσω του .net δεν ξέρω... στον κώδικα πάντως δεν είδα τίποτα από αυτά. > Private Sub MyClickHandler(ByVal sender As System.Object, ByVal e As System.EventArgs) 'Είναι ο χειριστής του συμβάντος click όλων των buttons btnGame(i, j) 'Οταν κάνουμε click σε button το πρόγραμμα βρίσκει τις συντεταγμένες (i,j) ' για να ελέγξει την αντίστοιχη τιμή του πίνακα Game 'For i = 0 To 10 'For j = 0 To 10 Dim a As Button a = sender MsgBox(a.Handle)' <-----------------------εδώ σου τυπώνει το handle Dim i, j As Integer i = Int(sender.TabIndex / 11) j = sender.TabIndex Mod 11 If Game(i, j) = 2 Then Beep() sender.backcolor = Color.Red 'δείχνουμε με κόκκινο τις εύστοχες βολές Else sender.backcolor = Color.Blue 'δείχνουμε με Blue τις άστοχεολές End If 'Next 'Next End Sub με την πιο πάνω αλλαγή πατώντας σε ένα κουμπί σου δίνει το handle που αναφέρεις αλλά είναι μία ιδιότητα readonly. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
migf1 Δημοσ. 7 Ιανουαρίου 2012 Share Δημοσ. 7 Ιανουαρίου 2012 Λοιπόν, ως συνήθως "google is our firiend": http://msdn.microsof...v=vs.85%29.aspx Το παραπάνω είναι η ρουτίνα δημιουργίας ενός παραθύρου (και τα buttons παράθυρα είναι)... το όρισμα HMENU είναι βασικά το ID που λέγαμε. Ακολουθεί κι ένα ακόμα παράδειγμα (τα enum στην αρχή είναι όλα ID γραφικών στοιχείων που χρησιμοποιούνται στη συνέχεια): http://www.cplusplus...m/windows/3933/ EDIT: Μαζί γράφαμε φίλε hello virxen. Τελικά είναι άλλο το ID κι άλλο το handle... περνάς το ID στην ρουτίνα και σου επιστρέφει το handle Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
παπι Δημοσ. 7 Ιανουαρίου 2012 Share Δημοσ. 7 Ιανουαρίου 2012 handler ειναι το hwnd του control, μεσου αυτου στελνουμε msg στο control id ειναι το ονομα του control Γενικα το συστημα στο winapi ειναι απλο. Εχεις μια συναρτηση που λαμβανει ολα τα events (winproc) και τα χωριζεις με βαση msg->id->notify1->notify2->.. Σε .net αυτα δεν υπαρχουν (τουλαχιστον δεν τα βλεπουμε), επισης ολα τα events εχουν την δικια τους συναρτηση. Το ρολο του id παιζει το property Name, το TabIndex ειναι αυτο που λεει (με ποια σειρα θα πηδας τα controls με το πατημα του tab) Αν θελεις κατι παραπανω απο την κλαση button τοτε φτιαχνεις μια αλλη κλαση που θα εχει βαση το button και βαζεις οτι θλει η ψυχη σου. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
migf1 Δημοσ. 7 Ιανουαρίου 2012 Share Δημοσ. 7 Ιανουαρίου 2012 Ωραία, οπότε τώρα πρέπει να είναι πιο ξεκαθαρισμένα τα πράγματα για τον ts. Την κάνω από τη δουλειά για σπίτι, αλλά του έχω κι εγώ ένα... δωράκι: http://ideone.com/wNdre Είναι ένα ολοκληρωμένο πρόγραμμα σε C (υπό την έννοια ότι τρέχει όπως είναι με ένα απλό compile) το οποίο παρουσιάζει με κώδικα αυτά που του έγραφα στην 1η σελίδα. Είναι πολύ πιο απλοποιημένος ο κώδικας συγκριτικά με την κανονική Ναυμαχία στο άλλο νήμα που τον έχουμε παραπέμψει, έτσι ώστε να μπορεί να βγάλει άκρη. Ο κώδικας τοποθετεί τυχαία μια Ναυαρχίδα (μήκους 5 κελιών) κι ένα Αντιτορπιλικό (μήκους 4 κελιών) σε ένα grid 11x11, χωρίς φυσικά να επιτρέπει να πέσει το ένα πάνω στο άλλο. Δεν αφήνει όμως υποχρεωτικό κενό ανάμεσα στα 2 πλοία (μπορεί να πέσουν το ένα ακριβώς δίπλα στο άλλο)... για τέτοια μπορεί να δει τον κανονικό κώδικα (το εν λόγω βρίσκεται στο αρχείο: ship.c, και συγκεκριμένα στη συνάρτηση: shiptype_fits_at_gloc(). Το link παραπάνω παραπέμπει στον απλό κώδικα (έχω συμπεριλάβει αρκετά macros & constants στην αρχή, για βασικό error-checking, αλλά πιστεύω δεν προβληματίζουν στην ανάγνωση... ίσως διευκολύνουν κιόλας). Στο τέλος της σελίδας στο IdeOne φαίνεται ένα sample output του κώδικα. Το grid είναι ΜΟΝΟΔΙΑΣΤΑΤΟΣ πίνακας, για να διευκολύνεται η παραγωγή τυχαίων θέσεων πάνω του (διευκολύνονται κι άλλα πράγματα) και όποτε χρειάζεται να γίνει μετατροπή μιας θέσης: pos σε row, col βγαίνει από τους τύπους: > row = pos / NCOLS; col = pos % NCOLS; Το ανάποδο μπορεί να επιτευχθεί με... > pos = row * NCOLS + col; ΥΓ. Αν ο C compiler σας δεν είναι C99 aware, απλά σβήστε τα: ".field=" στην αρχικοποίηση των πλοίων, στον ορισμό τους στην main... δηλαδή αφήστε σκέτες τις τιμές της αρχικοποίησης (τα άφησα για να είναι λιγάκι πιο ευανάγνωστος ο κώδικας σε όσους δεν είναι εξοικειωμένοι με τη C ). Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Directx Δημοσ. 7 Ιανουαρίου 2012 Share Δημοσ. 7 Ιανουαρίου 2012 Σε .NET μπορείς να διασυνδέσεις εσύ αν το επιθυμείς ένα κοντρολ (για παράδειγμα ένα Button) με οποιοδήποτε αντικείμενο ή τιμή μέσο του .Tag member. Πχ: > button1.Tag = 1; MessageBox.Show(button1.Tag.ToString()); Υπό συνθήκες αυτή η δυνατότητα είναι εξαιρετικά χρήσιμη, με ανάλογο τρόπο μπορείς να κάνεις το ίδιο και στην VCL (C++ Builder/Delphi) μέσο του ομώνυμου ->Tag member. Πχ. > Button1->Tag = 1; ShowMessage(Button1->Tag); Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
derrendevil Δημοσ. 7 Ιανουαρίου 2012 Μέλος Share Δημοσ. 7 Ιανουαρίου 2012 Δεν βγαζω ακρη γαμωτο ...ειναι τοσο δυσκολο οσο μου φαινεται? Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
virxen75 Δημοσ. 7 Ιανουαρίου 2012 Share Δημοσ. 7 Ιανουαρίου 2012 οχι Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
migf1 Δημοσ. 7 Ιανουαρίου 2012 Share Δημοσ. 7 Ιανουαρίου 2012 Δεν βγαζω ακρη γαμωτο ...ειναι τοσο δυσκολο οσο μου φαινεται? Ποιο από όλα σου φαίνεται δύσκολο; Το GUI κομμάτι ή το εσωτερικό κομμάτι (ή και τα δυο ); ΥΓ. Αν δεν έχεις ασχοληθεί ξανά, όντως δεν είναι εύκολο. Σε γενικές γραμμές όμως δεν είναι δύσκολο. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
derrendevil Δημοσ. 7 Ιανουαρίου 2012 Μέλος Share Δημοσ. 7 Ιανουαρίου 2012 Ποιο από όλα σου φαίνεται δύσκολο; Το GUI κομμάτι ή το εσωτερικό κομμάτι (ή και τα δυο ); ΥΓ. Αν δεν έχεις ασχοληθεί ξανά, όντως δεν είναι εύκολο. Σε γενικές γραμμές όμως δεν είναι δύσκολο. Για αυτο μου φαινεται δυσκολο ...δεν εχω ασχοληθει πολυ με προγραμματισμο... Ποιο από όλα σου φαίνεται δύσκολο; Το GUI κομμάτι ή το εσωτερικό κομμάτι (ή και τα δυο ); ΥΓ. Αν δεν έχεις ασχοληθεί ξανά, όντως δεν είναι εύκολο. Σε γενικές γραμμές όμως δεν είναι δύσκολο. Για αυτο μου φαινεται δυσκολο ...δεν εχω ασχοληθει πολυ με προγραμματισμο... Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα