Actionscript 3,0 για αρχάριους: μάθημα # 3

Κυριακή, 28 Σεπτεμβρίου 2008

Συνεχίζουμε αναλύοντας το παράδειγμα του παιχνιδιού Tic Toe TAC, σε Actionscript 3,0 για αρχάριους: μάθημα # 2. Είχαμε φτάσει σε λειτουργία που δημιουργεί το δίκτυο του παιχνιδιού:

Actionscript:
  1. / **
  2. * Σχέδιο γράφημα του δικτύου (3x3) στην οθόνη
  3. *
  4. * @ Παράμ άκυρη
  5. * @ Επιστροφή κενό
  6. * @ Ιδιωτικός Τομέας
  7. * /
  8. createGrid ( ) : void { λειτουργία ιδιωτικών createGrid (): άκυρη (
  9. / / Δείκτης για την προσωρινή αντικείμενο movieclip
  10. / / Σημείωση: εδώ μπορείτε επίσης να χρησιμοποιήσετε ένα αντικείμενο Sprite
  11. / / Ωστόσο, στην περίπτωση αυτή πρέπει να επεκταθεί το αντικείμενο
  12. / / Προσθήκη ορισμένες προσωπικές proproetà. Το αντικείμενο Sprite
  13. / / Α κατηγορίας είναι κλειστή και να μην επεκτείνεται το χρόνο εκτέλεσης, ενώ
  14. / / Movieclip τάξη είναι μια τάξη δυναμική, και κατά τον τρόπο αυτό
  15. / / Πιθανό να προσθέσετε runtime ιδιότητες
  16. , i:uint = 0 ; var tm: movieclip, i: uint = 0?
  17. / / Προσθήκη στο βασικό 3x3 movieclip
  18. ; i < 9 ; i++ ) { (i <9? i + +) (
  19. ( ) ; tm = νέα movieclip ()?
  20. ; addChild (tm)?
  21. i% 3 ) * ( PLAYER_WIDTH+PLAYER_OFFSET ) ) tm. offsetx x = + ((i% 3) * (PLAYER_WIDTH + PLAYER_OFFSET))
  22. . floor ( i/ 3 ) * ( PLAYER_HEIGHT+PLAYER_OFFSET ) tm. OFFSETY + y = Math. πάτωμα (i / 3) * (PLAYER_HEIGHT + PLAYER_OFFSET)
  23. tm._index = i?
  24. ) ; drawPlayer (tm, 0)?
  25. )
  26. / / Σχέδιο veriticali των 2 γραμμών και 2 οριζόντια
  27. this . graphics ) { με (this. γραφικά) (
  28. 6 ,0x666666 ) ; LineStyle (6, 0x666666)?
  29. OFFSETX,OFFSETY+ ( PLAYER_HEIGHT+ 15 ) ) ; moveTo (offsetx, OFFSETY + (PLAYER_HEIGHT + 15))?
  30. OFFSETX+ ( ( PLAYER_WIDTH+ 20 ) * 3 ) ,OFFSETY+ ( PLAYER_HEIGHT+ 15 ) ) ; lineTo (offsetx + ((PLAYER_WIDTH + 20) * 3), OFFSETY + (PLAYER_HEIGHT + 15))?
  31. OFFSETX,OFFSETY+ ( PLAYER_HEIGHT+ 20 ) * 2 ) ; moveTo (offsetx, OFFSETY + (PLAYER_HEIGHT + 20) * 2)?
  32. OFFSETX+ ( ( PLAYER_WIDTH+ 20 ) * 3 ) ,OFFSETY+ ( PLAYER_HEIGHT+ 20 ) * 2 ) ; lineTo (offsetx + ((PLAYER_WIDTH + 20) * 3), OFFSETY + (PLAYER_HEIGHT + 20) * 2)?
  33. OFFSETX+ ( PLAYER_WIDTH+ 15 ) ,OFFSETY ) ; moveTo (offsetx + (PLAYER_WIDTH + 15), OFFSETY)?
  34. OFFSETX+ ( PLAYER_WIDTH+ 15 ) ,OFFSETY+ ( ( PLAYER_HEIGHT+ 20 ) * 3 ) ) ; lineTo (offsetx + (PLAYER_WIDTH + 15), OFFSETY + ((PLAYER_HEIGHT + 20) * 3))?
  35. OFFSETX+ ( PLAYER_WIDTH+ 20 ) * 2 ,OFFSETY ) ; moveTo (offsetx + (PLAYER_WIDTH + 20) * 2, OFFSETY)?
  36. OFFSETX+ ( PLAYER_WIDTH+ 20 ) * 2 ,OFFSETY+ ( ( PLAYER_HEIGHT+ 20 ) * 3 ) ) ; lineTo (offsetx + (PLAYER_WIDTH + 20) * 2, OFFSETY + ((PLAYER_HEIGHT + 20) * 3))?
  37. )
  38. )

Αυτό meotdo ασκεί δύο καθήκοντα: Προσθέτει ένα MovieClip που χρησιμοποιείται για να αναχαιτίσουν τα κλικ του ποντικιού (το κουτί "κύκλο" ή "cross") και λαμβάνει δύο γραμμές, και οι δύο κάθετες και οριζόντιες εκπροσώπηση των Graglia (κλασική stanghezza αν το κάνουμε με το μολύβι ). Όπως αναφέρεται στις παρατηρήσεις της μεθόδου που επιλέχθηκε αντικείμενο MovieClip αντί της πιο απλής Sprite διότι δεν επιτρέπει την προσθήκη των ιδιοτήτων ή μεθόδων κατά την εκτέλεση.
Μετά τη δημιουργία του MovieClip ονομάζεται μια ειδική λειτουργία drawPlayer() η οποία έχει το καθήκον να σχεδιάσει το MovieClip κενό μόλις δημιουργήθηκε ένας από τους παίκτες (η θέση "κύκλο" ή "cross"), σύμφωνα με τη δεύτερη παράμετρο στο παρελθόν Εισροές.

Actionscript:
  1. / **
  2. * Σχεδιάστε ένα κύκλο ή ένα σταυρό σύμφωνα με τον παίκτη
  3. *
  4. * @ Παράμ (movieclip) p = movieclip να επιστήσω
  5. * @ Παράμ (uint) pl = αριθμός παικτών: 1 ή 2 - 0 καταρτίσει ένα ορθογώνιο να αναχαιτίσουν τα κλικ περίπτωση
  6. * /
  7. drawPlayer ( p: MovieClip , pl:uint ) : void { λειτουργία ιδιωτικών drawPlayer (p: movieclip, PL: uint): άκυρη (
  8. pl ) { διακόπτη (pl) (
  9. / / Αυτή είναι μια ειδική περίπτωση: ένα ορθογώνιο που είναι
  10. / / Που χρησιμοποιούνται για την ανίχνευση το πάτημα ενός κουμπιού στο ποντίκι
  11. : 0 περίπτωση:
  12. p. graphics ) { με (για γραφικά) (
  13. ; σαφής ()?
  14. CELL_EVENT_COLOR, CELL_EVENT_ALPHA ) ; beginFill (CELL_EVENT_COLOR, CELL_EVENT_ALPHA)?
  15. , 0 , 60 , 60 ) ; drawRect (0, 0, 60, 60)?
  16. ; endFill ()?
  17. )
  18. = true ; σ. useHandCursor = σ. buttonMode = αλήθεια?
  19. / / Προσθήκη περίπτωση κλικ σε αυτό το κουτί
  20. MouseEvent. CLICK , onCellClick ) ; σ. addEventListener (MouseEvent. ΚΛΙΚ, onCellClick)?
  21. διάλειμμα?
  22. / / Player 1 (o)
  23. : περίπτωση 1:
  24. p. graphics ) { με (για γραφικά) (
  25. ; σαφής ()?
  26. PLAYER_LINE_WIDTH, PLAYER_1_COLOR ) ; LineStyle (PLAYER_LINE_WIDTH, PLAYER_1_COLOR)?
  27. , 30 , 30 ) ; drawCircle (30, 30, 30)?
  28. )
  29. = false ; σ. useHandCursor = σ. buttonMode = false?
  30. / / Απομακρύνεται η περίπτωση κλικ σε αυτό το κουτί
  31. MouseEvent. CLICK , onCellClick ) ; σ. removeEventListener (MouseEvent. ΚΛΙΚ, onCellClick)?
  32. διάλειμμα?
  33. / / Player 2 (x)
  34. : περίπτωση 2:
  35. p. graphics ) { με (για γραφικά) (
  36. ; σαφής ()?
  37. PLAYER_LINE_WIDTH, PLAYER_2_COLOR ) ; LineStyle (PLAYER_LINE_WIDTH, PLAYER_2_COLOR)?
  38. 0 , 0 ) ; moveTo (0, 0)?
  39. 60 , 60 ) ; lineTo (60, 60)?
  40. 60 , 0 ) ; moveTo (60, 0)?
  41. 0 , 60 ) ; lineTo (0, 60)?
  42. )
  43. = false ; σ. useHandCursor = σ. buttonMode = false?
  44. / / Απομακρύνεται η περίπτωση κλικ σε αυτό το κουτί
  45. MouseEvent. CLICK , onCellClick ) ; σ. removeEventListener (MouseEvent. ΚΛΙΚ, onCellClick)?
  46. διάλειμμα?
  47. )
  48. )

Η case 0 αντιστοιχεί στο άδειο κουτί. Αυτό το στοιχείο παρουσιάζεται all'inizializzazione του παιχνιδιού: στην πραγματικότητα, για να δείτε την πρόσκληση drawPlayer() μέθοδος createGrid()

Actionscript:
  1. ) ; drawPlayer (tm, 0)?

Σε αυτήν την περίπτωση, το κουτί είναι έτοιμο να ανταποκριθεί σε χρήστη. Αντίθετα, η προσθήκη ενός ακροατή να αναχαιτίσουν τα κλικ του ποντικιού περίπτωση. Σημειώστε ότι όταν σχεδιαστεί μία από δύο παίκτες (περίπτωση 1 και 2 player "κύκλος" και "cross"), ο ακροατής είναι απλώς αφαιρεθεί, ώστε να αποφευχθεί το "διπλό παιχνίδι"!

Εκδηλώσεις

Όπως είδαμε παραπάνω, η θέση "κενό" απαντήσεις στο πάτημα ενός κουμπιού στο ποντίκι:

Actionscript:
  1. / **
  2. * Η εκδήλωση αυτή αποδεσμεύεται όταν κάνετε κλικ σε ένα κελί παιχνίδι
  3. * /
  4. onCellClick ( e :MouseEvent = null ) : void { λειτουργία ιδιωτικών onCellClick (ε: MouseEvent = null): άκυρη (
  5. / / Έλεγχος ότι το παιχνίδι δεν έχει ανασταλεί ή διακοπεί
  6. !__stop ) { if (! __stop) (
  7. / / Αύξηση του μετρητή κλικ
  8. __clickNumber + +?
  9. / / Σκαπάνες μέχρι το δείκτη στο παίκτη "κλικ"
  10. = e . currentTarget as MovieClip ; var p: = e movieclip. currentTarget ως movieclip?
  11. / / Σχέδιο (α) ή (x)
  12. ; drawPlayer (p, __player)?
  13. / / Αντικατοπτρίζει την ποικιλία παιχνιδιών ευθεία
  14. = ( __player== 1 ) ?PLAYER_1_WIN:PLAYER_2_WIN; __cell [p._index] = (__player == 1); PLAYER_1_WIN: PLAYER_2_WIN?
  15. / / Έλεγχος αν κάποιος έχει κερδίσει
  16. checkCell ()?
  17. / / Αλλαγή δασμός: αν ο παίκτης που έχει παίξει 1 επέβαλε 2 player και το αντίστροφο
  18. ) ? 2 : 1 ; __player = (__player == 1); 2: 1?
  19. / / Η έκθεση βίντεο του νέου γύρου παίκτη
  20. +__player; turno_txt. κείμενο = Player + __player?
  21. )
  22. )

Η σημαία __stop που αντιστοιχεί σε μια global μεταβλητή στην τάξη μας, είναι μια τυποποιημένη τεχνική που σας επιτρέπει να ελέγξετε την κατάσταση του παιχνιδιού. Στην περίπτωσή μας, Ι χρησιμοποιούνται για τη διάκριση των "παιχνίδι" __stop = false και το "διάλειμμα" __stop = true Κατά την εκδήλωση onCellClick() το ποντίκι κλικ στο κουτί, απλά βεβαιωθείτε ότι το παιχνίδι είναι "παύση". Αν παίζουμε το μεταβλητό αύξηση __clickNumber λαμβάνοντας υπόψη τον αριθμό των κλικ (ή παίζουν) που εκτελούνται. Αυτό το "αντιπαραγωγική" να μας βοηθήσει να επανέλθω αργότερα για να δείτε εάν το σύνολο των κιβωτίων που έχουν επιλεγεί.
Μέσα από την ιδιοκτησία e.currentTarget ανάκτηση pointer στο πεδίο για το οποίο γίνεται και κάντε κλικ για αυτή την εικόνα μία από τις δύο πιθανές ενδείξεις ( "κύκλο" ή "cross"), σύμφωνα με την ενεργό παίκτη αναφέρεται __player Χρησιμοποιώντας το meotdo drawPlayer() Η γραμμή:

Actionscript:
  1. = ( __player== 1 ) ?PLAYER_1_WIN:PLAYER_2_WIN; __cell [p._index] = (__player == 1); PLAYER_1_WIN: PLAYER_2_WIN?

είναι σημαντική διότι αντικατοπτρίζει το παιχνίδι με τον πίνακα που χρησιμοποιείται γραμμική λογική - όπως θα δούμε αργότερα - να καθοριστεί η κούρσα για έναν από τους δύο παίκτες. Οι σταθερές PLAYER_1_WIN (τιμή 1) και PLAYER_2_WIN (αξίας 10) δείχνει την γραμμική συστοιχία που έκανε το παιχνίδι.

Για περισσότερες πληροφορίες δείτε: Undolibrary MatrixArray: η επέκταση της κλάσης Array

checkCell (): τα βασικά

Deichar μια παράγραφο με τη μέθοδο αυτή, διότι, στο πλαίσιο αυτό το παράδειγμα, η πραγματική καρδιά του παιχνιδιού. Η μέθοδος checkCell() θα ελέγχει εάν υπήρχε κερδίσει με μία από δύο παίκτες:

Actionscript:
  1. / **
  2. * Αυτή η λειτουργία της συστοιχίας ελέγχους για να δείτε αν κάποια
  3. * Ο παίκτης έχει κερδίσει. Λέγεται όταν ένας παίκτης
  4. * Σήματα ένα πλαίσιο με ένα (x) ή (ξ).
  5. * Επίσης, εάν η μεταβλητή __clickNumber είναι ίσο με 9, σημαίνει
  6. * Το σύνολο των κιβωτίων που είχαν πληρωθεί και εφόσον δεν υπάρχει
  7. * Νικητής, κανείς δεν κέρδισε!
  8. *
  9. * @ Ιδιωτικός Τομέας
  10. * /
  11. checkCell ( ) : void { λειτουργία ιδιωτικών checkCell (): άκυρη (
  12. / / Με βάση την αξία των __player που είναι
  13. / / Αξία της ελέγχοντας κερδίσει
  14. __player== 1 ) ? 3 *PLAYER_1_WIN: 3 *PLAYER_2_WIN; var winValue: uint = (__player == 1); 3 PLAYER_1_WIN: 3 * PLAYER_2_WIN?
  15. / / Έλεγχος όλων σειρές, στήλες και των δύο διαγωνίων
  16. = __cell; var c: Array = __cell?
  17. / / Έλεγχος των 3 πρώτων γραμμών
  18. c [ 0 ] + c [ 1 ] + c [ 2 ] == winValue || εάν [0] + γ [1] + γ [2] == winValue | |
  19. ] + c [ 4 ] + c [ 5 ] == winValue || γ [3] + γ [4] + γ [5] == winValue | |
  20. ] + c [ 7 ] + c [ 8 ] == winValue || γ [6] + γ [7] + γ [8] == winValue | |
  21. / / 3 στήλες
  22. ] + c [ 3 ] + c [ 6 ] == winValue || γ [0] + γ [3] γ + [6] == winValue | |
  23. ] + c [ 4 ] + c [ 7 ] == winValue || γ [1] + γ [4] + γ [7] == winValue | |
  24. ] + c [ 5 ] + c [ 8 ] == winValue || γ [2] + γ [5] + γ [8] == winValue | |
  25. / / 2 διαγωνίων
  26. ] + c [ 4 ] + c [ 8 ] == winValue || γ [0] + γ [4] + γ [8] == winValue | |
  27. ] + c [ 4 ] + c [ 6 ] == winValue ) { γ [2] + γ [4] + γ [6] == winValue) (
  28. / / Σε περίπτωση που κάποια από αυτές τις συνθήκες είναι επαληθευμένα
  29. / / Κάποιος έχει κερδίσει και στη συνέχεια να δείτε τα πάνελ
  30. / / Από "νίκη" (1)
  31. ) ; showPanel (1)?
  32. { Else ()
  33. / / Σε περίπτωση που κανείς δεν κέρδισε, ο έλεγχος του αν όλες οι θέσεις
  34. / / Είναι πλήρη. Αν ναι, η ειδική ομάδα τέρας
  35. / / Τέλος του παιχνιδιού και "δεν νικητή" (0)
  36. __clickNumber == 9 ) { εάν (__clickNumber == 9) (
  37. ) ; showPanel (0)?
  38. )
  39. )
  40. )

Η μέθοδος, με την απλότητα, τα σχόλια και μόνο. Είναι σε κάθε επίκληση κλικ στο συμβούλιο απόφαση για τη μοίρα του παιχνιδιού! Η λογική σειρά χρησιμοποιείται για την "προσθήκη" σειρές, στήλες και διαγώνιες στην αναζήτηση μιας πιθανής "τρεις" από το σημερινό παίκτη, λόγω του μεταβλητού __player Επιπλέον, όπως μπορεί να συμβεί, __clickNumber λαμβάνει υπόψη το κλικ γίνεται. Η μεταβλητή αυτή δεν πρέπει ποτέ να φθάσει την τιμή 9, εκτός αν ένα από τα δύο παίκτες έχουν κερδίσει.

Την επόμενη φορά που επανεξετάζει ορισμένες ιδιαιτερότητες της γλώσσας Actionscript 3,0 χρησιμοποιούνται σε αυτό το demo.

Σχετικές Post

Αφήστε ένα σχόλιο

TAG XHTML επιτρέπεται: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Χρησιμοποίησε <pre> να επισυνάψουν κωδικός