Πεπιγπαθή επγαζίαρ Μαθήμαηορ ΗΥ252 Χειμεπινό εξάμηνο Παράδοση Α φάσης: 10/12/2010 Παράδοση Β φάσης: 14/01/2011

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "Πεπιγπαθή επγαζίαρ Μαθήμαηορ ΗΥ252 Χειμεπινό εξάμηνο 2010-11 Παράδοση Α φάσης: 10/12/2010 Παράδοση Β φάσης: 14/01/2011"

Transcript

1 Πεπιγπαθή επγαζίαρ Μαθήμαηορ ΗΥ252 Χειμεπινό εξάμηνο Παράδοση Α φάσης: 10/12/2010 Παράδοση Β φάσης: 14/01/2011 ηελ εξγαζία απηή θαιείζηε λα ζρεδηάζεηε θαη λα πινπνηήζεηε ην επηηξαπέδην παηρλίδη Φηδάθη. Η εξγαζία ρσξίδεηαη ζε δύν θάζεηο. θνπόο ηεο πξώηεο θάζεο είλαη ε ζρεδίαζε ηεο δεηνύκελεο εθαξκνγήο κε βάζε ηηο αξρέο θαη ηνπο θαλόλεο ηνπ αληηθεηκελνζηξαθνύο πξνγξακκαηηζκνύ πνπ δηδαρζήθαηε ζην κάζεκα. ηελ δεύηεξε θάζε θαιείζηε λα πινπνηήζεηε ηελ εθαξκνγή βαζηδόκελνη ζηελ ζρεδίαζε πνπ πξνεγήζεθε. 2. Πεπιγπαθή Παισνιδιού Σν παηρλίδη παίδεηαη από δύν ή πεξηζζόηεξνπο παίθηεο. Κάζε παίθηεο αληηζηνηρίδεηαη ζε έλα πηόλη θαη θάζε πηόλη έρεη δηαθνξεηηθό ρξώκα. Αξρηθά όια ηα πηόληα θάζε παίθηε ηνπνζεηνύληαη ζην ηεηξάγσλν πνπ δειώλεη ηελ αθεηεξία. θνπόο ηνπ θάζε παίθηε είλαη δηαζρίδνληαο ηα αξηζκεκέλα ηεηξάγσλα ηνπ ηακπιό λα θζάζεη ζηνλ ηεξκαηηζκό πξηλ από ηνπο αληηπάινπο ηνπ. Η εηθόλα 1 παξαθάησ εηθνλνγξαθεί ην ηακπιό ηνπ θιαζζηθνύ επηηξαπέδηνπ παηρληδηνύ. Δηθόλα 1: ην ηακπιό ηνπ επηηξαπέδηνπ παηρληδηνύ Φηδάθη.

2 Κάζε παίθηεο παίδεη κε ηελ ζεηξά. Απηή ε ζεηξά νξίδεηαη πξηλ μεθηλήζεη ην παηρλίδη σο εμήο. Αξρηθά θάζε παίθηεο ξίρλεη ην δάξη. Οη παίθηεο δηαηάζζνληαη αλάινγα κε ηελ δαξηά πνπ έθεξε ν θαζέλαο. Η ζεηξά παημίκαηνο αθνινπζεί ηελ θζίλνπζα δηάηαμε ησλ απνηειεζκάησλ ξίςεο ηνπ δαξηνύ. Απηόο δειαδή πνπ έθεξε ηε κεγαιύηεξε δαξηά παίδεη πξώηνο, κεηά απηόο πνπ έθεξε ηελ δεύηεξε κεγαιύηεξε θ.ν.θ. Δθόζνλ έρεη πιένλ νξηζζεί ε ζεηξά παημίκαηνο, ην παηρλίδη είλαη έηνηκν πιένλ λα μεθηλήζεη. Ο παίθηεο πνπ είρε θέξεη ηελ κεγαιύηεξε δαξηά θαηά ηελ αξρηθνπνίεζε ηνπ παηρληδηνύ ξίρλεη πξώηνο ην δάξη. Σν απνηέιεζκα ηεο δαξηάο δειώλεη ηνλ αξηζκό ησλ ηεηξαγώλσλ πνπ ζα δηαζρίζεη ν ζπγθεθξηκέλνο παίθηεο. Δάλ γηα παξάδεηγκα έλαο ζπγθεθξηκέλνο παίθηεο ήηαλ ζην ηεηξάγσλν ζέζεο 14 ηνπ ηακπιό θαη ξίρηνληαο ην δάξη έθεξε 4, ηόηε ζα κεηαθηλεζεί 4 ηεηξάγσλα εκπξόο θαη ζα θαηαιήμεη ζην ηεηξάγσλν κε αξηζκό 18. Απηή ε δηαδηθαζία επαλαιακβάλεηαη γηα θάζε παίθηε μερσξηζηά. Σν ζύλνιν ησλ ηεηξαγώλσλ πνπ απνηεινύλ ην ηακπιό ρσξίδεηαη ζε απλά θαη δπάζηρ. Δάλ κηα κεηαθίλεζε θαηαιήμεη ζε έλα ηεηξάγσλν δπάζηρ, ηόηε ζα πξαγκαηνπνηεζεί ε ελέξγεηα πνπ αληηζηνηρεί ζην ζπγθεθξηκέλν ηεηξάγσλν. Γηαθνξεηηθά δελ ζπκβαίλεη ηίπνηα θαη απιώο ζπλερίδεη ν επόκελνο παίθηεο. Σα ηεηξάγσλα δξάζεο ηεο ζπγθεθξηκέλεο πινπνίεζεο ζαο ζα είλαη ηα εμήο: Φηδάθη: εάλ θάπνηα ζπγθεθξηκέλε θίλεζε θαηαιήμεη ζε ηεηξάγσλν δξάζεο θηδάθη, ηόηε ν ζπγθεθξηκέλνο παίθηεο ζα πξέπεη λα κεηαθηλεζεί ηόζα ηεηξάγσλα πίζσ όζα ππνδεηθλύεη ην ζπγθεθξηκέλν ηεηξάγσλν. θάια: εάλ θάπνηα θίλεζε θαηαιήμεη ζε ηεηξάγσλν δξάζεο ζθάια, ηόηε ν ζπγθεθξηκέλνο παίθηεο ζα κεηαθηλεζεί ηόζα ηεηξάγσλα εκπξόο όζα ππνδεηθλύεη ην ζπγθεθξηκέλν ηεηξάγσλν. 3. Πποζθεπόμενερ Λειηοςπγίερ (Υποσπεωηικέρ) ηα πιαίζηα ηεο ζπγθεθξηκέλεο εξγαζίαο θαιείζηε λα πινπνηήζεηε ην παηρλίδη πνπ πεξηγξάθεθε πξνεγνπκέλσο. Έλα ζηηγκηόηππν κηαο πηζαλήο γξαθηθήο δηεπαθήο γηα ηελ ζπγθεθξηκέλε εθαξκνγή είλαη ε παξαθάησ:

3 Δηθόλα 2. παξάδεηγκα γξαθηθήο δηεπαθήο (mockup). Σα βαζηθά θνκκάηηα ηεο γξαθηθήο δηεπαθήο ηεο εθαξκνγήο ζαο ζα πξέπεη λα είλαη ηα παξαθάησ: A. Board Panel B. Action Panel C. Log Panel D. Menu Σν Board Panel απνηππώλεη ηελ θαηάζηαζε ηνπ παηρληδηνύ κηα ζπγθεθξηκέλε ρξνληθή ζηηγκή. Δκθαλίδεη ην ζύλνιν ησλ ηεηξαγώλσλ πνπ απνηεινύλ ην ηακπιό θαζώο επίζεο θαη ηηο ζέζεηο ησλ πηνληώλ θάζε παίθηε. Ο αξηζκόο πνπ αληηζηνηρεί ζε θάζε ηεηξάγσλν εκθαλίδεηαη ζηελ πάλσ αξηζηεξή γσλία ηνπ. Γηα ιόγνπο απιόηεηαο ζην ηακπιό δελ ζα εκθαλίδνληαη σο γξαθηθά νη ζθάιεο θαη ηα θηδάθηα πνπ ππάξρνπλ ζηνλ θιαζηθό παηρλίδη. Δάλ έλα ηεηξάγσλν είλαη δξάζεο ηόηε ζα εκθαλίδεηαη θαηάιιειε θεηκεληθή πιεξνθνξία πνπ λα πεξηγξάθεη ηελ ελέξγεηα πνπ αληηζηνηρεί ζην ζπγθεθξηκέλν ηεηξάγσλν. Σεηξάγσλα πνπ αληηζηνηρνύλ ζε θηδάθη απιώο ζα πεξηέρνπλ κηα επηγξαθή πνπ λα ιέεη ζε πνηό πξνεγνύκελν ηεηξάγσλν ζα πξέπεη λα κεηαθηλεζεί ν ρξήζηεο (βι. ηεηξάγσλν 9 ζηελ εηθόλα 2). Οκνίσο ζα ζπκβαίλεη θαη γηα ηεηξάγσλα πνπ αληηζηνηρνύλ ζε ηεηξάγσλα δξάζεο ζθάια (βι. ηεηξάγσλν 31 ζηελ εηθόλα 2). Σεηξάγσλα ζηα νπνία ππάξρεη θάπνηνο παίθηεο ζα πξέπεη λα έρνπλ δηαθνξεηηθό θόλην από ηα ππόινηπα. Σν ηεηξάγσλν εθθίλεζεο ζα έρεη πξάζηλν θόλην θαη ζα πεξηέρεη ηελ επηγξαθή START. Αληίζηνηρα, ην ηεηξάγσλν ηεξκαηηζκνύ ζα έρεη θόθθηλν θόλην θαη ζα πεξηέρεη ηελ επηγξαθή FINISH. Πέξαλ ησλ δπν ηεηξαγώλσλ δξάζεο πνπ πεξηγξάθεθαλ πξνεγνπκέλσο ( θηδάθη, ζθάια ), απαηηείηε από εζάο λα επεθηείλεηε ην θιαζζηθό επηηξαπέδην παηρλίδη θαη λα πινπνηήζεηε αθόκε έλαλ ηύπν ηεηξαγώλνπ δξάζεο ( επηηάρπλζε ) πνπ ζα δίλεη έλα ζπγθξηηηθό πιενλέθηεκα ζε νπνηνλδήπνηε παίθηε βξεζεί ζην ελ ιόγσ ηεηξάγσλν. Σν πιενλέθηεκα έγθεηηαη ζηνλ ηξόπν κεηαθίλεζεο ηνπ παίθηε ζε κεηέπεηηα ζεηξέο

4 παημίκαηνο. πγθεθξηκέλα, όηαλ έλαο παίθηεο βξεζεί ζε έλα ηέηνην ηεηξάγσλν δξάζεο ηόηε γηα ηηο επόκελεο ηπείρ δαξηέο πνπ ζα ξίμεη, ν αξηζκόο ησλ ηεηξαγώλσλ πνπ ζα κεηαθηλεζεί θάζε θνξά ζα ηζνύηαη κε ηο διπλάζιο ηνπ απνηειέζκαηνο ξίςεο ηνπ δαξηνύ. Σα ηεηξάγσλα 6 θαη 17 ηνπ παξαδείγκαηνο ηεο εηθόλαο 2 παξαπάλσ απνηεινύλ ηεηξάγσλα ηέηνηνπ ηύπνπ. Σν Action Panel απνηππώλεη πιεξνθνξίεο γηα ην ζύλνιν ησλ παηθηώλ θαη πεξηέρεη ην θνπκπί πνπ εμνκνηώλεη ηελ ξίςε ελόο ακεξόιεπηνπ δαξηνύ. Γηα θάζε παίθηε μερσξηζηά απνηππώλεηαη ην όλνκα ηνπ, ην ρξώκα πνπ ρξεζηκνπνηείηαη γηα ην πηόλη πνπ ηνπ αληηζηνηρεί θαζώο θαη εάλ είλαη ε ζεηξά ηνπ λα παίμεη. ην ζηηγκηόηππν εθηέιεζεο ηεο εηθόλαο 2 γηα παξάδεηγκα ππάξρνπλ ηξείο παίθηεο. Ο πξώηνο παίθηεο αληηζηνηρεί ζην αλαγλσξηζηηθό Player 1 θαη έρεη ην κπιε πηόλη, ν δεύηεξνο παίθηεο αληηζηνηρεί ζην αλαγλσξηζηηθό Player 2 ελώ έρεη ην πξάζηλν πηόλη θαη ηέινο ν ηξίηνο ζηελ ζεηξά παίθηεο κε ην αλαγλσξηζηηθό Player 3 έρεη ην θόθθηλν πηόλη. Σν καύξν νξζνγώλην δίπια από ηνλ Player 1 ππνδεηθλύεη πσο είλαη ε ζεηξά ηνπ λα παίμεη. Σν Log Panel είλαη ππεύζπλν γηα ηελ θαηαγξαθή ηνπ ζπλόινπ ησλ ελεξγεηώλ πνπ έρνπλ πξαγκαηνπνηεζεί κέρξη ζηηγκήο. Ο νξηζκόο ηνπ ζπλόινπ ησλ ελεξγεηώλ πνπ ζα θαηαγξάθνληαη θαζώο επίζεο θαη ην πεξηερόκελν ηνπ κελύκαηνο πνπ ζα αληηζηνηρεί ζε θάζε ελέξγεηα αθήλεηαη ζηελ δηθή ζαο επρέξεηα. Δίλαη ζεκαληηθό ηέηνηνπ είδνπο απνθάζεηο λα ιακβάλνληαη θαηά ηελ θάζε ηεο ζρεδίαζεο. Η εθθίλεζε ελόο λένπ παηρληδηνύ ζα γίλεηαη από ην πηπζζόκελν menu θάησ από ηελ επηγξαθή game (π.ρ. gamenew game). ην ίδην πηπζζόκελν menu θαιείζηε λα πινπνηήζεηε θαη ηηο αθόινπζεο ιεηηνπξγίεο: a. Undo (game undo) Η επηινγή undo δίλεη ηε δπλαηόηεηα λα αλαηξεζεί ε ηειεπηαία ζε ζεηξά ελέξγεηα πνπ έγηλε ζην παηρλίδη. ηελ πεξίπησζε ηνπ παξαδείγκαηνο καο (εηθόλα 2) ε δηαδνρηθή επηινγή δπν ελεξγεηώλ undo ζα είρε ζαλ απνηέιεζκα λα κεηαθηλεζνύλ νη παίθηεο 2, 3 ζηηο ζέζεηο 17, 20 αληίζηνηρα θαη κε απηή ηε ζεηξά. ηελ πεξίπησζε πνπ ε αλαίξεζε επαλαθέξεη έλα παίθηε ζε θάπνην action square, ηόηε ζα πξέπεη λα εθηειεζηεί άιιε κηα ιεηηνπξγία αλαίξεζεο. Λεηηνπξγίεο αλαίξεζεο ζα εθηεινύληαη έσο όηνπ ν παίθηεο βξεζεί ζε έλα απιό ηεηξάγσλν. Γηα παξάδεηγκα αλ έλαο παίθηεο βξίζθεηαη ζηε ζέζε 2, θέξεη δάξη 2 θαη έπεηηα εθηειεζηεί κηα ιεηηνπξγία αλαίξεζεο ηόηε πξέπεη λα επηζηξέςεη ζηελ ζέζε 2 (όρη ζηελ 4). Η δπλαηόηεηα αλαίξεζεο είλαη ελεξγνπνηεκέλε όζν ππάξρνπλ δηαζέζηκεο πξνεγνύκελεο θηλήζεηο. θεθηείηε ηελ πιεξνθνξία πνπ πξέπεη λα έρεηε δηαζέζηκε γηα ηελ πινπνίεζε ηεο undo θαη ζπκπεξηιάβεηε ζηε ζρεδίαζε ζαο ηηο απαξαίηεηεο κεζόδνπο. b. Redo (gameredo) Η επηινγή redo δίλεη ηελ δπλαηόηεηα λα επαλαιεθζεί κηα ελέξγεηα πνπ έρεη πξνεγνπκέλσο αλαηξεζεί. Δλεξγνπνηείηαη κόιηο ππάξμεη κηα ελέξγεηα αλαίξεζεο θαη παξακέλεη ελεξγή όζν ππάξρνπλ δηαζέζηκεο πξνο επαλάιεςε αλαηξέζεηο. ηελ πεξίπησζε ηνπ παξαδείγκαηνο καο (εηθόλα 2) θαη εθόζνλ έρνπλ πξαγκαηνπνηεζεί νη αλαηξέζεηο πνπ πεξηγξάθνληαη παξαπάλσ (α) κπνξεί λα επηιεγεί ε ελέξγεηα redo δηαδνρηθά δπν θνξέο. Σελ πξώηε θνξά ν παίθηεο 3 ζα κεηαθηλεζεί μαλά ζηελ ζέζε 22, ελώ ηελ δεύηεξε θνξά ν παίθηεο 2 ζα κεηαθηλεζεί ζηελ ζέζε 19. Καηόπηλ ε επηινγή redo ζα παξακείλεη

5 αλελεξγή κέρξη ηελ επόκελε θνξά πνπ ζα εθηειεζηεί κηα αλαίξεζε. Οκνίσο κε πξνεγνπκέλσο αλ κηα ελέξγεηα redo θέξεη ηνλ παίθηε ζε έλα εηδηθό ηεηξάγσλν, ηόηε πξέπεη λα εθηειεζηεί ε ιεηηνπξγία ηνπ ηεηξαγώλνπ. θεθηείηε ηηο ελέξγεηεο undo/redo σο κηα ζηνίβα επηινγώλ από όπνπ αθαηξείηαη κηα ελέξγεηα (κεηαθίλεζε παίθηε) γηα λα εθηειεζηεί ε αλαίξεζε θαη πξνζηίζεηαη κηα ελέξγεηα ζηε ζηνίβα γηα λα εθηειεζηεί ε επαλάιεςε. Ο ζπλνιηθόο αξηζκόο ησλ παηθηώλ πξνζδηνξίδεηαη θαηά ηελ εθθίλεζε ηνπ παηρληδηνύ κέζσ ελόο παξαζύξνπ δηαιόγνπ. ε απηή ηελ θάζε εθθίλεζεο, θάζε παίθηεο ζα εηζάγεη έλα επηζπκεηό αλαγλσξηζηηθό θαη ζα ξίρλεη ην δάξη γηα λα θαζνξηζηεί ε ζεηξά κε ηελ νπνία ζα παίμεη. Αλάινγα κε ηελ ζεηξά πνπ έρεη θάζε παίθηεο ζα ηνπ αληηζηνηρίδεηαη έλα πηόλη δηαθνξεηηθνύ ρξώκαηνο. Ο αξηζκόο ησλ ηεηξαγώλσλ δξάζεο ζα πξέπεη λα θαζνξίδεηαη κέζσ ελόο αξρείνπ παξακεηξνπνίεζεο (game.config). Απηό ζα δηαβάδεηαη θαηά ηελ εθθίλεζε ηνπ παηρληδηνύ θαη ζα νξίδεη ην layout ηνπ ηακπιό. Μηα πηζαλή κνξθή κπνξεί λα είλαη ε εμήο: game grid size = 5 by 8 total action squares percentage = 10 ladder squares percentage = 0.5 snake squares ercentage = 0.5 ύκθσλα κε ην ζπγθεθξηκέλν αξρείν παξακέηξσλ, ην ηακπιό ζα απνηειείηαη από 8 γξακκέο ησλ 5 ζηειώλ ε θαζεκία. Από ηα 40 ζπλνιηθά ηεηξάγσλα ηα 10 ζα είλαη ηεηξάγσλα δξάζεο. Από απηά ηα 10 ηεηξάγσλα δξάζεο, ην 50% ζα αληηζηνηρνύλ ζε ηεηξάγσλα δξάζεο ηύπνπ θηδάθη ελώ ηα άιια 50% ζε ηεηξάγσλα δξάζεο ηύπνπ ζθάια. Σν πόζα ηεηξάγσλα ζα πξέπεη λα κεηαθηλεζεί έλαο παίθηεο ζα νξίδεηαη γηα θάζε ηεηξάγσλν δξάζεο ηπραία κε νκνηόκνξθν ηξόπν. 5. Επιππόζθεηερ Λειηοςπγίερ (BONUS) Μπνξείηε λα επεθηείλεηε ηελ εθαξκνγή ζαο έηζη ώζηε πξνζθέξεη κηα από ηηο δύν παξαθάησ επηπιένλ ιεηηνπξγίεο: Δπηπιένλ ηεηξάγσλν δξάζεο κε ην όλνκα Σπραία Αλαπξνζαξκνγή : εάλ θάπνηνο παίθηεο θαηαιήμεη ζε έλα ηέηνην ηεηξάγσλν δξάζεο ηόηε όια ηα πηόληα όισλ ησλ παηθηώλ αλαδηαηάζζνληαη κε ηπραίν ηξόπν πάλσ ζε ηακπιό. ΠΡΟΟΥΗ: εάλ κεηά ηελ ηπραία αλαπξνζαξκνγή ην πηόλη θάπνηνπ παίθηε θαηαιήμεη ζε λέν ηεηξάγσλν δξάζεο ζα πξέπεη ε ζπγθεθξηκέλε ελέξγεηα πνπ αληηζηνηρεί ζην λέν ηεηξάγσλν λα πξαγκαηνπνηεζεί. Γπλαηόηεηα απνζήθεπζεο παηρληδηνύ θαη κεηέπεηηα ζπλέρηζεο ηνπ ζε επόκελν ζηηγκηόηππν εθηέιεζεο ηεο εθαξκνγήο. πγθεθξηκέλα, ζα πξέπεη λα δίδεηαη ζηνλ ρξήζηε κέζσ ηνπ κελύ κηα επηινγή αποθήκεςζηρ και εξόδος από ηελ εθαξκνγή. Απηή ε επηινγή ζα έρεη σο απνηέιεζκα ηελ κόληκε απνζήθεπζε (persistent storage) ηεο θαηάζηαζεο(state) ηνπ παηρληδηνύ εθείλε ηελ δεδνκέλε ρξνληθή ζηηγκή. Αθήλεηαη ζηελ δηθή ζαο επρέξεηα, ζαλ ζρεδηαζηέο ηεο εθαξκνγήο, λα νξίζεηε ηί ζα πξέπεη λα απνζεθεύζεηε θαη πώο. Έπεηηα, δεδνκέλνπ ηνπ όηη έρεη πξνεγεζεί κηα ηέηνηα ελέξγεηα απνζήθεπζεο, ζα

6 πξέπεη ε εθαξκνγή ζαο λα είλαη ζε ζέζε πάιη κέζσ ηνπ κελύ εθηέιεζεο λα πξνζθέξεη ηελ δπλαηόηεηα ζπλέρηζεο ηνπ ζπγθεθξηκέλνπ παηρληδηνύ. 4. Σκιαγπάθηζη Απσιηεκηονικήρ Καιή ηαθηηθή ζρεδίαζεο ζεσξείηαη ε απνζύλδεζε ηνπ κνληέινπ (model) πνπ αλαπαξηζηά ηα δεδνκέλα ηεο εθαξκνγήο ζαο θαζώο επίζεο θαη ηεο ινγηθήο πνπ ηελ δηέπεη από ηελ δηαδηθαζία απεηθόληζεο ηεο (view). Βαζηθόο ζηόρνο κηαο ηέηνηαο απνζπλδεδεκέλεο πξνζέγγηζεο είλαη ε ειαρηζηνπνίεζε ησλ απαηηνύκελσλ επεκβάζεσλ ζε θώδηθα πνπ κπνξνύλ λα έρνπλ κειινληηθέο αιιαγέο είηε ζην κνληέιν είηε ζην ηξόπν/κέζν απεηθόληζεο (θαιύηεξε πνηόηεηα θώδηθα). Γηα λα γίλεη πην θαηαλνεηό απηό ζεσξήζηε ην αθόινπζν ζελάξην. Τπνζέζηε όηη αξρηθά έρεηε ζρεδηάζεη κηα εθαξκνγή πνπ γηα δηάθνξνύο ιόγνπο εθηππώλεη ηα απνηειέζκαηα ηεο ζηελ θνλζόια. Έρνληαο αθνινπζήζεη κηα ηέηνηα αξρηηεθηνληθή ραιαξήο ζύλδεζεο ε κεηάβαζε ζε έλα γξαθηθό παξαζπξηθό πεξηβάιινλ γίλεηαη νκαιά, απιώο ηξνπνπνηώληαο θαηάιιεια (επεθηείλνληαο) ηηο δηαδηθαζίεο εθείλεο πνπ ήηαλ ππεύζπλεο γηα ηελ απνηύπσζε ηνπ κνληέινπ ζηελ θνλζόια. Αθνινπζεί κηα ζθηαγξάθεζε ηεο αξρηηεθηνληθήο πνπ ζαο πξνηείλνπκε λα αθνινπζήζεηε θαηά ηελ ζρεδίαζε ηεο εθαξκνγήο. Αμίδεη λα ζεκεηώζνπκε όηη ε ζπγθεθξηκέλε ζηξαηεγηθή επίιπζεο πνπ παξαζέηνπκε δελ είλαη κνλαδηθή. Κάζε ιύζε ζεσξείηαη ζσζηή εάλ ηεθκεξησζεί θαηαιιήισο. εκαληηθό ξόιν γηα ηε ζρεδίαζε ζαο ζα παίμεη ε θιάζε SnaksAndLadders. Η θιάζε απηή ελνξρεζηξώλεη όιεο ηηο δπλαηέο ιεηηνπξγίεο ηνπ παηρληδηνύ. Απνηειεί, δειαδή, ηνλ εγθέθαιν ηεο εθαξκνγήο, θαζώο είλαη ππεύζπλε ώζηε λα επηθνηλσλεί ζσζηά ν ππξήλαο ηνπ παηρληδηνύ (ην ζύλνιν ησλ θαλόλσλ) κε ηελ γξαθηθή ηνπ αλαπαξάζηαζε. πγθεθξηκέλα, ειέγρεη γηα ηελ αξρηθνπνίεζε ηνπ, γηα ηελ νκαιή δηεμαγσγή ηνπ, ηελ ζεηξά πνπ ζα παίμνπλ νη παίθηεο, ηελ νξζόηεηα ησλ θηλήζεσλ, ηνλ ηεξκαηηζκό ηνπ παηρληδηνύ θαη ηελ αλάδεημε ηνπ ληθεηή. Σαπηόρξνλα, είλαη ππεύζπλε λα πξνζθέξεη πξνο ηα έμσ όιεο (θαη κόλν) εθείλεο ηηο ιεηηνπξγίεο πνπ είλαη απαξαίηεηεο γηα ηελ νπηηθνπνίεζε ηνπ παηρληδηνύ (είηε πξόθεηηαη γηα παηρλίδη θνλζόιαο είηε γηα παηρλίδη κε γξαθηθή δηεπαθή). Βαζηθή θιάζε ηεο εθαξκνγήο ζαο ζα είλαη ε SimpleSquareModel. Η ζπγθεθξηκέλε θιάζε κνληεινπνηεί θάζε ηεηξάγσλν ηνπ ηακπιό. Μεηαμύ άιισλ ζα πεξηέρεη πιεξνθνξίεο όπσο, ν αξηζκόο πνπ αληηζηνηρεί ζην ηεηξάγσλν, ην ρξώκα ηνπ, κηα ιίζηα κε ην ζύλνιν ησλ παηθηώλ πνπ βξίζθνληαη ζην ζπγθεθξηκέλν ηεηξάγσλν, ηηο ζπληεηαγκέλεο πνπ νξίδνπλ πνπ ζα δσγξαθηζηεί ζην ηακπιό θ.α. Θπκεζείηε πσο ζηελ ζπγθεθξηκέλε εθαξκνγή πνπ πξέπεη λα πινπνηήζεηε έρνπκε νξίζεη δπν δηαθνξεηηθνύο ηύπνπο ηεηξαγώλσλ (δξάζεο/απιά). Όπσο γίλεηαη αληηιεπηό δεκηνπξγείηαη κηα ηεξαξρία θιάζεσλ. Βξείηε ηη θνηλά ραξαθηεξηζηηθά έρνπλ, ζε ηη δηαθνξνπνηνύληαη θαη νξίζηε θαηάιιειεο ηεξαξρίεο θιάζεσλ πνπ λα αλαπαξηζηνύλ ηα δεδνκέλα πνπ ρξεηάδεηαη θάζε ηύπνο ηεηξαγώλνπ μερσξηζηά λα θξαηά (π.ρ. ActionSqaureModel πνπ λα επεθηείλεη ηελ SimpleSquareModel). Μηα από ηηο ρξήζηκεο ηδηόηεηεο ηεο θιάζεο SimpleSquareModel είλαη ε πολςμοπθική κέζνδνο action(). Η πνιπκνξθηθή κέζνδνο action πινπνηεί ηε βαζηθή ιεηηνπξγία θάζε

7 ηεηξαγώλνπ. Η πινπνίεζε ηεο δηαθέξεη αλάινγα κε ηνλ ηύπν ηνπ ηεηξαγώλνπ ζην νπνίν βξηζθόκαζηε (απιό ηεηξάγσλν ή ηεηξάγσλν δξάζεο). Η θιάζε πνπ ζα ρξεζηκνπνηήζεηε γηα λα αλαπαξαζηήζεηε ηα ηεηξάγσλα (SimpleSquareModel) δελ ζα είλαη ππεύζπλε γηα ηελ απνηύπσζε ηνπο ζηελ νζόλε. Απνηειεί θνκκάηη ηνπ κνληέινπ θαη ρξεζηκνπνηείηαη κόλν γηα λα απνζεθεύεη πιεξνθνξίεο ζρεηηθέο κε ηα ηεηξάγσλα. Θπκεζείηε πσο ζηόρνο είλαη κηα ραιαξή ζύλδεζε κεηαμύ ηνπ κνληέινπ αλαπαξάζηαζεο δεδνκέλσλ θαη ηεο δηαδηθαζίαο απεηθόληζεο. Γηα απηό ηνλ ζθνπό ε δηαδηθαζία απεηθόληζεο θαιό είλαη λα γίλεηαη ζε μερσξηζηή θιάζε. Απηόο είλαη θαη ν ξόινο ηεο θιάζεο SquareRenderer. Κάζε αληηθείκελν ηύπνπ SquareRenderer, ζα πεξηέρεη κηα αλαθνξά ζε έλα αληηθείκελν ηύπνπ SimpleSquareModel. Η θιάζε SquareRenderer ζα πεξηέρεη κηα κέζνδν draw() θαη ζα απνηππώλεη ην ηεηξάγσλν ζηελ νζόλε ρξεζηκνπνηώληαο πιεξνθνξίεο από ην αληηθείκελν ηύπνπ SimpleSquareModel πνπ πεξηέρεη (π.ρ. ζέζε, αξηζκόο ηεηξαγώλνπ, θιπ ). Δπόκελε θιάζε πνπ πξέπεη λα ιάβεη κέξνο ζηε ζρεδίαζε ζαο είλαη ε θιάζε Board. Η ελ ιόγσ θιάζε αλαπαξηζηά ην πιέγκα ηνπ παηρληδηνύ. Ρόινο ηεο είλαη λα δηαηεξεί έλα ζύλνιν από ηεηξάγσλα (SquareRenderer) θαη λα παξέρεη ηηο απαξαίηεηεο κεζόδνπο πξόζβαζεο ζε απηήλ ηελ πιεξνθνξία. Θα κπνξεί δειαδή λα απαληήζεη ζηνλ θώδηθα-πειάηε πνην ηεηξάγσλν βξίζθεηαη ζε θάπνηα ζέζε, πνίν είλαη ην ζύλνιν ησλ ηεηξαγώλσλ θαη ζα παξέρεη κεζόδνπο γηα αλαλέσζε ηνπ πιέγκαηνο. Οξίζηε ζαθώο ηελ ιεηηνπξγηθόηεηα απηήο ηεο θιάζεο, θαζώο κέξνο ησλ κεζόδσλ πνπ ζα νξίζεηε ζα θαλνύλ ρξήζηκεο ζηελ γξαθηθή απεηθόληζε ηνπ παηρληδηνύ. Πξνζνρή ώζηε λα κελ ππάξμεη ζύγρπζε κε ην Board Panel, ην νπνίν απνηειεί ηελ γξαθηθή απεηθόληζε ηνπ παηρληδηνύ θάζε ρξνληθή ζηηγκή. Η ηδέα είλαη πώο γηα ηελ γξαθηθή απεηθόληζε, ε θιάζε πνπ ζα είλαη ππεύζπλε ζα δηαηξέρεη ην ζύλνιν ησλ ηεηξαγώλσλ ηεο θιάζεο Board θαη γηα θάζε ηεηξάγσλν μερσξηζηά ζα θαιείηαη ε κέζνδνο draw(). Η εηθόλα 3 παξαθάησ ζθηαγξαθεί ηελ ζπγθεθξηκέλε πξνζέγγηζε. Δηθόλα 3. model/view decoupling. Γεδνκέλνπ όηη ην θνκκάηη ηεο γξαθηθήο δηεπαθήο απνηειεί κέξνο ηεο δεύηεξεο θάζεο δελ πεξηκέλνπκε από εζάο λα αλαιύζεηε θαηά ηελ Α θάζε ηηο ιεπηνκέξεηεο πνπ αθνξνύλ ην GUI. Λεπηνκέξεηεο γηα ην πώο ε κέζνδνο draw() ζα απνηππώλεη ηα ηεηξάγσλα ζηελ νζόλε ζε έλα παξαζπξηθό πεξηβάιινλ ζα πξέπεη λα απνζαθεληζηνύλ θαηά ηελ Β θάζε. Δληνύηνηο ζα πξέπεη λα είζηε ζε ζέζε δεδνκέλεο ηεο ζρεδίαζεο

8 ζαο λα κπνξείηε λα εμεγήζεηε πώο ε εθαξκνγή ζαο ζα απνηύπσλε ην ηακπιό ζηελ θνλζόια (π.ρ. κέζσ System.out.println()). Κάζε δξάζε ηνπ ρξήζηε έρεη σο απνηέιεζκα κηα ελεκέξσζε ζε θάπνην ζπγθεθξηκέλν κνληέιν ηεηξαγώλνπ. Παξάδεηγκα απνηειεί ε αιιαγή ζην θόλην. Θπκεζείηε πσο όηαλ έλαο παίθηεο κεηαθηλεζεί ζε θάπνην ζπγθεθξηκέλν ηεηξάγσλν ην θόλην ηνπ γίλεηαη γθξη (ην πεδίν color ηνπ SimpleSquareModel γηα παξάδεηγκα αιιάδεη). Οπνηαδήπνηε αιιαγή ζην κνληέιν ζα πξέπεη λα ελεκεξώλεη ηελ θιάζε πνπ είλαη ππεύζπλε γηα ηελ απεηθόληζε ηνπ ηακπιό ζηελ νζόλε ώζηε λα θαιεζηεί ε θαηάιιειε δηαδηθαζία. Έλαο ηξόπνο πινπνίεζεο ηνπ κεραληζκνύ ελεκέξσζεο είλαη κέζσ αθξναηώλ (listeners) 1. Θα πξέπεη λα νξίζεηε κηα θαηάιιειε δηεπαθή ModelListener. Βαζηθή κέζνδνο ηεο δηεπαθήο ζα είλαη ε modelchanged(). Αληηθείκελα πνπ ζέινπλ λα ελεκεξώλνληαη γηα ηπρόλ αιιαγέο (observer objects) ζα πξέπεη λα πινπνηνύλ ηελ ζπγθεθξηκέλε δηεπαθή. Έζησ έλα αληηθείκελν A πνπ ελδηαθέξεηαη λα ελεκεξσζεί όπνηε αιιάδεη θαηάζηαζε έλα άιιν αληηθείκελν B. Η πξάμε ηεο ελεκέξσζεο ηνπ Α κε ηύπν ModelListener γηα κηα επηθείκελε αιιαγή ζηελ θαηάζηαζε ηνπ Β ζα γίλεηαη σο εμήο: αξρηθά ζα πξέπεη λα θαηαρσξεζεί ην αληηθείκελν A σο αθξναηήο ζην αληηθείκελν B. Απηό ζα κπνξνύζε λα γίλεη γηα παξάδεηγκα κέζσ κηαο κεζόδνπ addmodellistener(modellistener ml) ηνπ αληηθεηκέλνπ B. Όηαλ αιιάμεη θαηάζηαζε ην αληηθείκελν B (π.ρ. αιιαγή ρξώκαηνο θόληνπ), ηόηε ζα θαιείηαη ε κέζνδνο notify() ηνπ Β. Η ζπγθεθξηκέλε κέζνδνο ζα ελεκεξώλεη ηνλ αθξναηή Α θαιώληαο ηελ κέζνδν Α.modelChanged(). Η κέζνδνο modelchanged() είλαη απηή δειαδή πνπ θαζνξίδεη ηελ ελέξγεηα πνπ ζα γίλεηαη θάζε θνξά πνπ ππάξρεη κηα αιιαγή θαηάζηαζεο ζην αληηθείκελν B. Μηα αθόκε ζεκαληηθή θιάζε ηνπ παηρληδηνύ είλαη ε θιάζε Player. Η θιάζε απηή πξνζνκνηώλεη έλαλ παίθηε ηνπ παηρληδηνύ. Κάζε παίθηεο ζα αληηζηνηρίδεηαη ζε έλα κνλαδηθό αλαγλσξηζηηθό, ζα έρεη έλα κνλαδηθό ρξώκα γηα ην πηόλη πνπ θαηέρεη θαη ηέινο ζα πεξηέρεη κηα ιίζηα από ζέζεηο πνπ έρεη βξεζεί πάλσ ζην ηακπιό θαηά ηελ δηάξθεηα ηνπ παηρληδηνύ (ηζηνξηθό). 4. Παπαδοηέα Α θάζηρ ε απηή ηε θάζε πξέπεη λα γίλεη ν ζρεδηαζκόο ηεο εθαξκνγήο βάζε ησλ ηδεώλ θαη ησλ αξρώλ ηνπ αληηθεηκελνζηξαθνύο πξνγξακκαηηζκνύ πνπ έρεηε δηδαρηεί. Απνηέιεζκα απηήο ηεο θάζεο είλαη ν θαζνξηζκόο ησλ αληηθείκελσλ, ησλ ραξαθηεξηζηηθώλ θαη ηεο ζπκπεξηθνξάο ηνπο πνπ απαηηνύληαη γηα λα αλαπαξαζηήζνπλ ηηο θαηαζηάζεηο θαη ηηο ιεηηνπξγίεο ηνπ παηρληδηνύ, όπσο έρνπλ πεξηγξαθεί ζηηο πξνεγνύκελεο ζειίδεο. Παξαδνηέα απηήο ηεο θάζεο είλαη : Γξαπηή αλαθνξά ε νπνία θαη πεξηγξάθεη ηα παξαπάλσ ζηνηρεία θαη ζα παξνπζηάδεη ην ζρέδην πινπνίεζεο ηεο πξνγξακκαηηζηηθήο εξγαζίαο, έηζη ώζηε λα είλαη έηνηκν ην πέξαζκα ζηελ επόκελε θάζεο ηεο πινπνίεζεο. Θα πξέπεη λα ζπκπεξηιακβάλνληαη θαη UML class diagrams. 1 Observer pattern:

9 Πεγαίνο θώδηθαο πνπ πεξηιακβάλεη ηηο επαθήο (interfaces) θαη ην πεξίγξακκα ησλ θιάζεσλ (class outline) Java ηνπ πξνγξάκκαηνο ζαο, ζπλνδεπόκελεο από ηα απαξαίηεηα javadoc ζρόιηα, ηα νπνία ζα θαζνδεγήζνπλ ηελ πινπνίεζε ηεο επόκελεο θάζεο. Δπηγξακκαηηθά, νη ζεκαληηθόηεξεο εξγαζίεο πνπ πξέπεη λα γίλνπλ ζειίδεο απηή ηε θάζεο είλαη: Αλαγλώξηζε ησλ θιάζεσλ θαη δηεπαθώλ γηα θάζε κηθξή θαη κεγάιε ζπληζηώζα ηνπ παηρληδηνύ. Αλαγλώξηζε ησλ επζπλώλ θάζε θιάζεο θαη ησλ πηζαλώλ ζρέζεσλ ηεο κε άιιεο. Δύξεζε ησλ ραξαθηεξηζηηθώλ θαη ησλ κεζόδσλ θάζε θιάζεο. Δύξεζε ηεο ζπκπεξηθνξάο (behaviour) θάζε θιάζεο θαη δηεπαθήο ηνπ παηρληδηνύ, θαζώο θαη ηεο επηθνηλσλίαο κέζσ κελπκάησλ (method calls) πνπ ρξεηάδεηαη λα έρνπλ κεηαμύ ηνπο. Οξγάλσζε ησλ θιάζεσλ ηεξαξρίεο κε ζηόρν ηελ κέγηζηε δπλαηή επαλαρξεζηκνπνίεζε ηνπ θώδηθα ζαο. Γηα θάζε θιάζε πνπ πινπνηεί κηα δηεπαθή δώζηε ηηο ππνγξαθέο (signatures) γηα όιεο ηηο κεζόδνπο θαη ηηο εθ ησλ πξνηέξσλ, εθ ησλ πζηέξσλ θαη ακεηάβιεηεο ζπλζήθεο (preconditions, postconditions, invariants) πνπ ηηο δηέπνπλ ζε κνξθή javadoc ζρνιίσλ. Σημειώζηε όηι όζο περιζζόηερη και αναλυηικόηερη δουλειά κάνεηε ζηην ζχεδίαζη ηόζο πιο ζωζηή και εύκολη θα είναι η υλοποίηζη. 5. Παπαδοηέα Β θάζηρ Σε αυτι τθ φάςθ πρζπει να γίνει θ κυρίωσ υλοποίθςθ τθσ εφαρμογισ, βάςει τθσ ςχεδίαςθσ που ζχει προθγθκεί (φάςθ Α ). Δεν επιβάλλεται να χρθςιμοποιθκεί αυτοφςια θ ςχεδίαςθ τθσ Α φάςθσ, κακώσ κάποιεσ ςχεδιαςτικζσ επιλογζσ αποδεικνφεται ςτθν πορεία ότι χρειάηονται ανακεώρθςθ. Εντοφτοισ, θ τελικι βακμολογία κα εξαρτθκεί και από τθ ςυνζπεια τθσ τελικισ υλοποίθςθσ ωσ προσ τθν αρχικι ςχεδίαςθ. Σε αυτι τθ φάςθ, παραδοτζα είναι : ο πθγαίοσ κώδικασ που υλοποιεί το παιχνίδι Φιδάκι αναλυτικζσ οδθγίεσ για το πώσ μεταγλωττίηεται και πώσ τρζχει το πρόγραμμά ςασ (README, Makefile κλπ) αναφορά, ςτθν οποία κα αναλφεται : o θ τελικι ςχεδίαςθ τθσ εφαρμογισ, o ποιζσ αλλαγζσ ζγιναν ςε ςχζςθ με τθ ςχεδίαςθ τθσ Α φάςθσ (και γιατί), o οι αλγόρικμοι που χρθςιμοποιικθκαν o τυχόν διαφοροποιιςεισ ςτουσ κανόνεσ ςε ςχζςθ με τουσ κανόνεσ που δίνονται παραπάνω, o οι ςχεδιαςτικζσ και προγραμματιςτικζσ αποφάςεισ που ελιφκθςαν και πώσ αυτό αντανακλάτε ςτον τελικό χριςτθ (π.χ. ευκολία/δυςκολία χειριςμοφ) o τα προβλιματα που αντιμετωπίςτθκαν, o τα junit tests που φτιάχτθκαν για τον ζλεγχο τθσ ορκότθτασ, o θαη γεληθά ό,ηη άιιν θξίλεηε απαξαίηεην λα αλαθεξζεί.

10 Βαθμολογία Επγαζίαρ Για τθν βακμολογία τθσ εργαςίασ ςασ κα ςυνεκτιμθκοφν: εάν (και πόςο) θ ςχεδίαςθ τθσ εφαρμογισ εφαρμόηει τισ ζννοιεσ και τεχνικζσ του αντικειμενοςτραφοφσ προγραμματιςμοφ που διδαχκικατε ςτο μάκθμα. εάν (και πόςο) υλοποιικθκαν οι υποχρεωτικζσ λειτουργίεσ τθσ εφαρμογισ θ πλθρότθτα τθσ τελικισ αναφοράσ, θ οποία κα καταγράφει και κα τεκμθριώνει τθν ςχεδίαςθ και υλοποίθςθ τθσ εφαρμογι Για διευκρινιςεισ ςχετικά με τθν παραπάνω εργαςία μπορείτε να ςτζλνετε θλεκτρονικά μθνφματα με απορίεσ ςασ ςτθν λίςτα του μακιματοσ κα παρακαλοφςαμε τα s να ζχουν ωσ subject κείμενο που να χαρακτθρίηει τισ απορίεσ ςασ (π.χ. απορία ςχετικά με το project και όχι απορία ). Πιςτεφουμε πωσ κάτι τζτοιο κα μασ βοθκιςει όλουσ. Τα θλεκτρονικά μθνφματα που αποςτζλλονται τόςο από τουσ βοθκοφσ όςο και από τουσ ςυμφοιτθτζσ ςασ αποτελοφν μζροσ τθσ διδαςκαλίεσ και για αυτό ςυνιςτάτε κερμά θ ανάγνωςθ τουσ. Καλή Δουλειά