SlideShare une entreprise Scribd logo
1  sur  9
Télécharger pour lire hors ligne
2014
Ενσωματωμένα
Συστήματα
Μικροεπεξεργαστών
Στέλιος Μπαλαμπάνης
2008030083
Αλέξανδρος Πιαλόγλου
2008030097
[SUDOKU SOLVER (ANDROID APPLICATION)]
Αναφορά εργασίας
 Σκοπός
Η εργασία αυτή είχε ως στόχο την δημιουργία μιας android εφαρμογής. Πιο
συγκεκριμένα την επίλυση Sudoku.Ο χρήστης έχει την δυνατότητα να επιλέγει
αριθμούς που αρχικά θα υπάρχουν στο Sudoku και πατώντας ένα συγκεκριμένο
button να του επιστρέφεται αυτό λυμένο.
 Εργαλεία
Η υλοποίηση της εργασίας πραγματοποιήθηκε στην πλατφόρμα eclipse,σε
γλώσσα προγραμματισμού JAVA σε συνδυασμό με XML. Ακόμα προστέθηκε το
Android SDK το οποίο παρέχει βιβλιοθήκες και εργαλεία για την ανάπτυξη
εφαρμογών που ήταν απαραίτητα.
 Περιγραφή υλοποίησης
Διάγραμμα Υλοποίησης
Αρχικά δημιουργήσαμε την κλάση ΜainActivity η όποια περιέχει το
κεντρικό Menu της εφαρμογής. Στην συνάρτηση onCreate() η όποια εκτελείτε
με την εκκίνηση του activity, συνδέουμε με setContentView() το XML αρχείο
activity_main που περιέχει τα γραφικά που εμφανίζονται στην οθόνη καθώς
και τα buttons που δίνουν κάποιες επιλογές στον χρηστή :
 Lets solve
 Help
 Exit
Η κάθε μια επιλογή δημιουργεί- ξεκινά ένα καινούργιο activity. Πιο
συγκεκριμένα :
Πατώντας ο χρήστης το button Lets Solve το πρόγραμμα μεταφέρεται στην
κλάση Draw, η οποία είναι ένα νέο activity. Το κύριο μέρος της εφαρμογής
ώστε να υλοποιηθεί η εφαρμογή βρίσκεται σε αυτή την κλάση. Κατά την
εκκίνηση αυτού του activity δημιουργούμε ένα αντικείμενο της κλάσης
SudokuBoardCreate στην όποια γίνεται η σχεδίαση του πίνακα και τον
αριθμών πάνω σε έναν καμβά (οθόνη). Ειδικότερα έγινε χρήση της κλάσης
View κάνοντας την extend στην SudokuBoardCreate. Αυτό μας έδωσε την
δυνατότητα χρήσης της συνάρτησης onDraw η όποια είναι υπεύθυνη για να
ζωγραφίσει πάνω στον καμβά.
Για την σχεδίαση του πίνακα δημιουργήσαμε
τις κάθετες και τις οριζόντιες γραμμές με την
βοήθεια της drawLine() δίνοντας σαν ορίσματα
το χρώμα και τη θέση που θα χρωματίσει. Στο
Sudoku όμως ο πινάκας πρέπει να χωρίζεται σε
εννέα κουτιά 3x3 των εννέα θέσεων. Για να γίνει
αυτό σχεδιαστήκαν οι βασικές γραμμές και ανά
τρία κάθετα και οριζόντια προσθέσαμε ένα pixel
πριν και ένα pixel μετά άλλη μια γραμμή
πετυχαίνοντας έτσι πιο έντονη γραμμή.
Στη συνεχεία αυτόν τον πίνακα που δημιουργήσαμε τον κάναμε ενεργό.
Δηλαδή ο χρήστης επιλέγει κάθε κουτί ,το όποιο και χρωματίζεται, αγγίζοντας
την οθόνη. Αυτό έγινε με την συνάρτηση onTouchEvent(). Επιπλέον κρατάμε
τις συντεταγμένες του σημείου που έχει πατήσει ώστε επιλέγοντας κάποιον
αριθμό (η επιλογή γίνεται και χρησιμοποιείτε listener ώστε να καθοριστεί η
συμπεριφορά του κουμπιού) να σχηματίζεται στη σωστή θέση του πίνακα. Ο
αριθμός αυτός αποθηκεύεται σε έναν πίνακα 81 θέσεων ο όποιος έχει
αρχικοποιηθεί με μηδενικά και δηλωθεί στην κλάση Draw. Η αποθήκευση
αυτή μας βοηθάει ώστε να γνωρίζουμε σε ποιο κουτί του πίνακα βρίσκεται
κάθε αριθμός που έχει εισαχθεί. Η drawText() μας επιτρέπει να ζωγραφίζουμε
πάνω στον καμβά κείμενο (strings) . Παράλληλα με την σχεδίαση και την
εισαγωγή των αριθμών γίνεται και έλεγχος για το αν μπορεί ο αριθμός που
έχει επιλεγεί να μπει στην συγκεκριμένη θέση του πίνακα. Ελέγχουμε κάθε
γραμμή, κάθε στήλη και κάθε κουτί 3x3 αν περιέχει τον αριθμό που θέλουμε
να εισάγουμε. Αν βρίσκεται στην ίδια γραμμή ή στήλη ή στο ίδιο κουτί τότε ο
χρήστης λαμβάνει μήνυμα (toast) που τον ενημερώνει πως η επιλογή κελίου
είναι λανθασμένη. Αν στη συνεχεία ο χρήστης επιλέξει να λυθεί το Sudoku
έχοντας λάθος, αυτό δεν λύνεται και του εμφανίζει εκ νέου γραπτό και
ηχητικό μήνυμα λάθους.
Εφόσον ο χρήστης έχει εισάγει κάποια
νούμερα μπορεί να επιλέξει την λύση του
Sudoku με το button Solve. Από τη στιγμή που
πατηθεί ενεργοποιείται ο αλγόριθμος και
αναλαμβάνει να λύσει το Sudoku.
Ο αλγόριθμος αυτός είναι backtracking.
Δηλαδή καθώς ο αλγόριθμος προχωρεί
μπορεί να βρεθεί σε κάποιο αδιέξοδο και να
μην μπορεί να γεμίσει κάποια κουτιά γιατί
έχει προσθέσει κάποιους αριθμούς χωρίς να
γνωρίζει τι θα πρέπει να προσθέσει αργότερα.
Γι’ αυτό το λόγο χρειαστήκαμε έναν backtrack
αλγόριθμο ώστε να υπάρχει η δυνατότητα αν
βρεθεί σε αυτό το αδιέξοδο να μπορεί να
ξανατρέξει από παλιότερο σημείο.
Λειτουργία Αλγορίθμου
Αναλυτικότερα, η εφαρμογή του αλγορίθμου ξεκινά από το πρώτο κελί του
πίνακα.
Ελέγχει οριζόντιες, κάθετες και τα κουτιά 3x3 αν περιέχουν τον ίδιο αριθμό.
Τοποθετεί τον αριθμό και προχωράει στο επόμενο κελί κάνοντας τους ίδιους
ελέγχους. Αν βρεθεί σε αδιέξοδο όπως είπαμε και παραπάνω επιστρέφει στο
επόμενο κελί και ξαναεκτελεί τους ελέγχους δοκιμάζοντας άλλο αριθμό.
Επειδή ο χρόνος επίλυσης κάθε Sudoku διαφέρει ανάλογα με το επίπεδο
δυσκολίας, προσθέσαμε ένα παράθυρο(ProgressDialog) που μας ενημερώνει ότι
η επίλυση του παζλ είναι σε εξέλιξη. Αυτό θέτει την επίλυση του αλγορίθμου στο
παρασκήνιο και μας φέρνοντας στο προσκήνιο το παράθυρο που αναφέραμε
νωρίτερα.
Μόλις η διαδικασία επίλυσης ολοκληρωθεί το λυμένο Sudoku βρίσκετε πλέον
στην οθόνη μας και αντίστοιχο γραπτό μήνυμα(Toast) εμφανίζεται στην οθόνη
μας.
Ακόμα ο χρήστης έχει την δυνατότητα από το αρχικό menu πατώντας το
button Help να πάρει κάποια βοήθεια για το πώς παίζεται το παιχνίδι Sudoku σε
περίπτωση που κάποιος δεν γνωρίζει.
Τέλος με βάση τον κύκλο ζωής μιας εφαρμογής-activity θα πρέπει να
καταστρέφεται και να κλείνει ώστε να μην δεσμεύει μνήμη, έτσι προστέθηκε ένα
Button Exit το οποίο τερματίζει και την εφαρμογή μας ελευθερώνοντας όλους
τους δεσμευμένους πόρους.
 Προβλήματα
Τα προβλήματα που αντιμετωπίσαμε ήταν κυρίως προγραμματιστικά
και όχι τόσο θέματα μνήμης. Δηλαδή, πρόβληματα στο πως θα κάνουμε τον
πίνακα να ‘’ακούει’’ και να παίρνει σωστές τιμές ώστε να επιλεγεί το σωστό
κελί και να βάζει τους αριθμούς.
Ακόμα τρέχοντας και δοκιμάζοντας αλγορίθμους είδαμε ότι το σύστημα
αργεί χωρίς να κάνουμε μεγάλες αλλαγές. Προσθέταμε ένα for-loop και αυτό
αρκούσε για να το καθυστερήσει για κάποιο μικρό χρονικό διάστημα. Κατά
την δόκιμη επίσης συναντήσαμε το πρόβλημα ότι ο αλγόριθμος έφτανε συχνά
σε αδιέξοδο. Αυτό λύθηκε με την χρήση backtrack αλγορίθμου.
 Σημειώσεις-Παρατηρήσεις
Η εφαρμογή δημιουργήθηκε βάση της έκδοσης Jelly Bean 4.0 επειδή το
μεγαλύτερο ποσοστό των κινητών Android που κυκλοφορούν έχουν αυτή ή
νεότερη έκδοση του κινητού.
Επιπλέον δόκιμες έγιναν σε όσο των δυνατόν περισσότερες οθόνες και
tablet.

Contenu connexe

En vedette

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

En vedette (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

SudokuSolver anafora

  • 2.  Σκοπός Η εργασία αυτή είχε ως στόχο την δημιουργία μιας android εφαρμογής. Πιο συγκεκριμένα την επίλυση Sudoku.Ο χρήστης έχει την δυνατότητα να επιλέγει αριθμούς που αρχικά θα υπάρχουν στο Sudoku και πατώντας ένα συγκεκριμένο button να του επιστρέφεται αυτό λυμένο.  Εργαλεία Η υλοποίηση της εργασίας πραγματοποιήθηκε στην πλατφόρμα eclipse,σε γλώσσα προγραμματισμού JAVA σε συνδυασμό με XML. Ακόμα προστέθηκε το Android SDK το οποίο παρέχει βιβλιοθήκες και εργαλεία για την ανάπτυξη εφαρμογών που ήταν απαραίτητα.  Περιγραφή υλοποίησης Διάγραμμα Υλοποίησης
  • 3. Αρχικά δημιουργήσαμε την κλάση ΜainActivity η όποια περιέχει το κεντρικό Menu της εφαρμογής. Στην συνάρτηση onCreate() η όποια εκτελείτε με την εκκίνηση του activity, συνδέουμε με setContentView() το XML αρχείο activity_main που περιέχει τα γραφικά που εμφανίζονται στην οθόνη καθώς και τα buttons που δίνουν κάποιες επιλογές στον χρηστή :  Lets solve  Help  Exit Η κάθε μια επιλογή δημιουργεί- ξεκινά ένα καινούργιο activity. Πιο συγκεκριμένα : Πατώντας ο χρήστης το button Lets Solve το πρόγραμμα μεταφέρεται στην κλάση Draw, η οποία είναι ένα νέο activity. Το κύριο μέρος της εφαρμογής ώστε να υλοποιηθεί η εφαρμογή βρίσκεται σε αυτή την κλάση. Κατά την εκκίνηση αυτού του activity δημιουργούμε ένα αντικείμενο της κλάσης SudokuBoardCreate στην όποια γίνεται η σχεδίαση του πίνακα και τον αριθμών πάνω σε έναν καμβά (οθόνη). Ειδικότερα έγινε χρήση της κλάσης View κάνοντας την extend στην SudokuBoardCreate. Αυτό μας έδωσε την δυνατότητα χρήσης της συνάρτησης onDraw η όποια είναι υπεύθυνη για να ζωγραφίσει πάνω στον καμβά.
  • 4. Για την σχεδίαση του πίνακα δημιουργήσαμε τις κάθετες και τις οριζόντιες γραμμές με την βοήθεια της drawLine() δίνοντας σαν ορίσματα το χρώμα και τη θέση που θα χρωματίσει. Στο Sudoku όμως ο πινάκας πρέπει να χωρίζεται σε εννέα κουτιά 3x3 των εννέα θέσεων. Για να γίνει αυτό σχεδιαστήκαν οι βασικές γραμμές και ανά τρία κάθετα και οριζόντια προσθέσαμε ένα pixel πριν και ένα pixel μετά άλλη μια γραμμή πετυχαίνοντας έτσι πιο έντονη γραμμή. Στη συνεχεία αυτόν τον πίνακα που δημιουργήσαμε τον κάναμε ενεργό. Δηλαδή ο χρήστης επιλέγει κάθε κουτί ,το όποιο και χρωματίζεται, αγγίζοντας την οθόνη. Αυτό έγινε με την συνάρτηση onTouchEvent(). Επιπλέον κρατάμε τις συντεταγμένες του σημείου που έχει πατήσει ώστε επιλέγοντας κάποιον αριθμό (η επιλογή γίνεται και χρησιμοποιείτε listener ώστε να καθοριστεί η συμπεριφορά του κουμπιού) να σχηματίζεται στη σωστή θέση του πίνακα. Ο αριθμός αυτός αποθηκεύεται σε έναν πίνακα 81 θέσεων ο όποιος έχει αρχικοποιηθεί με μηδενικά και δηλωθεί στην κλάση Draw. Η αποθήκευση αυτή μας βοηθάει ώστε να γνωρίζουμε σε ποιο κουτί του πίνακα βρίσκεται κάθε αριθμός που έχει εισαχθεί. Η drawText() μας επιτρέπει να ζωγραφίζουμε πάνω στον καμβά κείμενο (strings) . Παράλληλα με την σχεδίαση και την εισαγωγή των αριθμών γίνεται και έλεγχος για το αν μπορεί ο αριθμός που έχει επιλεγεί να μπει στην συγκεκριμένη θέση του πίνακα. Ελέγχουμε κάθε γραμμή, κάθε στήλη και κάθε κουτί 3x3 αν περιέχει τον αριθμό που θέλουμε να εισάγουμε. Αν βρίσκεται στην ίδια γραμμή ή στήλη ή στο ίδιο κουτί τότε ο χρήστης λαμβάνει μήνυμα (toast) που τον ενημερώνει πως η επιλογή κελίου είναι λανθασμένη. Αν στη συνεχεία ο χρήστης επιλέξει να λυθεί το Sudoku έχοντας λάθος, αυτό δεν λύνεται και του εμφανίζει εκ νέου γραπτό και ηχητικό μήνυμα λάθους.
  • 5. Εφόσον ο χρήστης έχει εισάγει κάποια νούμερα μπορεί να επιλέξει την λύση του Sudoku με το button Solve. Από τη στιγμή που πατηθεί ενεργοποιείται ο αλγόριθμος και αναλαμβάνει να λύσει το Sudoku. Ο αλγόριθμος αυτός είναι backtracking. Δηλαδή καθώς ο αλγόριθμος προχωρεί μπορεί να βρεθεί σε κάποιο αδιέξοδο και να μην μπορεί να γεμίσει κάποια κουτιά γιατί έχει προσθέσει κάποιους αριθμούς χωρίς να γνωρίζει τι θα πρέπει να προσθέσει αργότερα. Γι’ αυτό το λόγο χρειαστήκαμε έναν backtrack αλγόριθμο ώστε να υπάρχει η δυνατότητα αν βρεθεί σε αυτό το αδιέξοδο να μπορεί να ξανατρέξει από παλιότερο σημείο. Λειτουργία Αλγορίθμου Αναλυτικότερα, η εφαρμογή του αλγορίθμου ξεκινά από το πρώτο κελί του πίνακα.
  • 6. Ελέγχει οριζόντιες, κάθετες και τα κουτιά 3x3 αν περιέχουν τον ίδιο αριθμό. Τοποθετεί τον αριθμό και προχωράει στο επόμενο κελί κάνοντας τους ίδιους ελέγχους. Αν βρεθεί σε αδιέξοδο όπως είπαμε και παραπάνω επιστρέφει στο επόμενο κελί και ξαναεκτελεί τους ελέγχους δοκιμάζοντας άλλο αριθμό.
  • 7. Επειδή ο χρόνος επίλυσης κάθε Sudoku διαφέρει ανάλογα με το επίπεδο δυσκολίας, προσθέσαμε ένα παράθυρο(ProgressDialog) που μας ενημερώνει ότι η επίλυση του παζλ είναι σε εξέλιξη. Αυτό θέτει την επίλυση του αλγορίθμου στο παρασκήνιο και μας φέρνοντας στο προσκήνιο το παράθυρο που αναφέραμε νωρίτερα. Μόλις η διαδικασία επίλυσης ολοκληρωθεί το λυμένο Sudoku βρίσκετε πλέον στην οθόνη μας και αντίστοιχο γραπτό μήνυμα(Toast) εμφανίζεται στην οθόνη μας.
  • 8. Ακόμα ο χρήστης έχει την δυνατότητα από το αρχικό menu πατώντας το button Help να πάρει κάποια βοήθεια για το πώς παίζεται το παιχνίδι Sudoku σε περίπτωση που κάποιος δεν γνωρίζει. Τέλος με βάση τον κύκλο ζωής μιας εφαρμογής-activity θα πρέπει να καταστρέφεται και να κλείνει ώστε να μην δεσμεύει μνήμη, έτσι προστέθηκε ένα Button Exit το οποίο τερματίζει και την εφαρμογή μας ελευθερώνοντας όλους τους δεσμευμένους πόρους.  Προβλήματα Τα προβλήματα που αντιμετωπίσαμε ήταν κυρίως προγραμματιστικά και όχι τόσο θέματα μνήμης. Δηλαδή, πρόβληματα στο πως θα κάνουμε τον πίνακα να ‘’ακούει’’ και να παίρνει σωστές τιμές ώστε να επιλεγεί το σωστό κελί και να βάζει τους αριθμούς.
  • 9. Ακόμα τρέχοντας και δοκιμάζοντας αλγορίθμους είδαμε ότι το σύστημα αργεί χωρίς να κάνουμε μεγάλες αλλαγές. Προσθέταμε ένα for-loop και αυτό αρκούσε για να το καθυστερήσει για κάποιο μικρό χρονικό διάστημα. Κατά την δόκιμη επίσης συναντήσαμε το πρόβλημα ότι ο αλγόριθμος έφτανε συχνά σε αδιέξοδο. Αυτό λύθηκε με την χρήση backtrack αλγορίθμου.  Σημειώσεις-Παρατηρήσεις Η εφαρμογή δημιουργήθηκε βάση της έκδοσης Jelly Bean 4.0 επειδή το μεγαλύτερο ποσοστό των κινητών Android που κυκλοφορούν έχουν αυτή ή νεότερη έκδοση του κινητού. Επιπλέον δόκιμες έγιναν σε όσο των δυνατόν περισσότερες οθόνες και tablet.