Σάββατο 29 Ιανουαρίου 2011

Pick of the week - NEWS RSS Ticker


Σε μία παλιότερη διανομή linux, είχα βρεί ενα προγραμματάκι που διάβαζε Rss feeds και τα εμφάνιζε στην οθόνη σε scroll. Αν έχετε δεί ειδήσεις σε διάφορα κανάλια, θα έχετε προσέξει οτι περνάνε απο κάτω scroll με τις κυριότερες ειδήσεις ή μετοχές ή οτιδήποτε άλλο.

Άρχισα να το γράφω για windows, αλλά το παράτησα στην μέση.Χθές βρήκα ένα πρόγραμμα που είναι πολύ κοντά σε αυτό που ήθελα. Λέγεται News (Rss ticker) και υπάρχει σε εκδόσεις για windows και linux.To πρόγραμμα δέχεται τα rss feed που θέλουμε και τα εμφανίζει.Μπορούμε να του αλλάξουμε θέση, χρώματα και διαφάνεια και κάνοντας κλίκ πάνω σε μια είδηση, να την εμφανίσουμε στον browser μας.
Το μεγάλο μειονέκτημα του προγράμματος είναι οτι εμφανίζει ειδήσεις μόνο από ένα feed την φορά, μέχρι να διαλέξουμε το επόμενο και όχι απο όλα μαζί.Επικοινώνησα με τους developers του προγράμματος, για να σιγουρευτώ οτι είναι έτσι και μου απάντησαν οτι προς το παρών διαβάζει μόνο από ένα feed.Για περισσότερα feeds μπορούμε να τρέξουμε το πρόγραμμα πολλές φορές παράλληλα.

Μόλις το εγκαταστήσετε μην ξεχάσετε να γράψετε ποιό browser χρησιμοποιείτε. Εγώ το δοκίμασα σε ubuntu και το πρόγραμμα έβγαλε ένα λάθος στην αρχή ότι δέν μπορούσε να βρεί το αρχείο news_url_list. Οπότε δημιουργήστε ένα αρχείο κειμένου με αυτό το όνομα.

Περισσότερα ...

Κυριακή 23 Ιανουαρίου 2011

Pick of the week - Opera 11.0


Όλοι έχουν άποψη για τους internet browsers.Ανεξάρτητα απο τις γνώσεις που έχουν γύρω απο τους υπολογιστές, οι browsers είναι ίσως τα πιο πολύ συζητημένα προγράμματα.Κι ας μήν καταλαβαίνουμε ή χρειαζόμαστε τον ταχύτερο browser, σίγουρα θα είναι ένα απο τα κριτήρια που οι περισσότεροι απο μάς επιλέγουμε ένα τέτοιο πρόγραμμα.

Μου αρέσει πάρα πολύ ο Chrome της Google και τον χρησιμοποιώ εδώ και αρκετό χρόνο.Είναι απλός και περιέχει αυτά που χρειάζομαι, χωρίς πολλά εξτρά που βαραίνουν το σύστημα.Όμως σήμερα θα μιλήσουμε για έναν άλλο αξιόλογο browser, που ίσως δεν είναι και τόσο δημοφιλής όσο ο Chrome ή ο Firefox, αλλά είναι εξίσου καλός.Στην πραγματικότητα έχει περισσότερες δυνατότητες απο οποιοδήποτε browser αυτή την στιγμή.Δυνατότητες που απευθύνονται στην ανάγκη του χρήστη για ευκολία και λειτουργικότητα και όχι στο να έχει απλά τον ταχύτερο browser.


Ο Opera βέβαια είναι ένας πολύ γρήγορος browser, αλλά παράλληλα προσφέρει δυνατότητες που κάνουν τις online εργασίες μας, πολύ πιο εύκολες.Η μεγαλύτερη καινοτομία του Opera ακούει στο όνομα Opera Unite.To Opera Unite μετατρέπει τον υπολογιστή μας σε web server, μέσω του browser μας.Αυτό σημαίνει οτι μπορούμε να μοιραστούμε αρχεία αποθηκευμένα στον δίσκο με άλλους,χωρίς να χρειαστεί να τα ανεβάσουμε σε κάποια σελίδα. Μπορούμε να μοιραστούμε αρχεία ήχου και βίντεο όπου παίζουν σε streaming, χωρίς ο παραλήπτης να χρειαστεί να κατεβάσει τίποτα.Να κάνουμε ένα stream με την κάμερα μας ή να φτιάξουμε την δική μας σελίδα,που θα φιλοξενείται στον υπολογιστή μας.Όλα αυτά ο παραλήπτης μπορεί να τα δεί απο οποιονδήποτε browser θέλει, χωρίς να υπάρχει υποχρέωση να κατεβάσει το παραμικρό.

Το Unite αλλάζει πολύ τον τρόπο και τον λόγο που χρησιμοποιούμε έναν browser και είναι το επόμενο βήμα στην ανάπτυξη τέτοιων προγραμμάτων.Το μόνο άσχημο της υπόθεσης είναι οτι αυτές οι έξυπνες ιδέες έρχονται από τον Opera και όχι απο κάποιον άλλο πιο γνωστό browser και έτσι δεν έχουν γίνει ακόμα πολύ γνωστές.Ειλικρινά αυτή την περίοδο, αν κάποιος είναι απλός χρήστης του ίντερνετ και δέν έχει κάποιο σοβαρό λόγο να χρησιμοποιεί κάποιον συγκεκριμένο browser, ο Opera είναι μακράν η καλύτερη επιλογή.

Η επόμενη λειτουργία είναι ο συγχρονισμός που προσφέρει το πρόγραμμα.Δέν μένει μόνο στα bookmarks, αλλά επεκτείνετε και στο ιστορικό σας,στις σελίδες που έχετε στο speed dial,στις σημειώσεις σας αλλά και στους κανόνες που βάζετε στον browser για τον αποκλεισμό κάποιου περιεχομένου.

Μια ακόμα αξιόλογη προσθήκη είναι η ομαδοποίηση τών tab σε groups όπως και τα pin tabs.Η ομαδοποίηση είναι χρήσιμη συνήθως όταν έχετε για παράδειγμα πέντε ανοιχτές σελίδες για ένα συγκεκριμένο θέμα.Μπορείτε να τις ομαδοποιήσετε κάτω απο ένα tab, έτσι ώστε να τα έχετε όλα οργανωμένα και με λιγότερα tabs ανοιχτά.Με τo pin tab, έχουμε την δυνατότητα να "καρφιτσώσουμε" μια σελίδα,συνήθως αν θέλουμε να την διαβάσουμε αργότερα, η απλά να την κρατήσουμε για λίγο στην άκρη, χωρίς να πιάνει χώρο στα ανοιχτά μας tabs.

Ειλικρινά θέλω πολλά άρθρα για να γράψω όλα αυτα που προσφέρει ο Opera.Υπάρχει μια μεγάλη συλλογή απο widgets και extentions για όσους ενδιαφέρονται.Δεν είχα χρόνο να κοιτάξω πολλές εφαρμογές απο εκεί οπότε ίσως σε κάποιο άλλο άρθρο θα τα δούμε κάποιες απο αυτές.Σε αυτό που στάθηκα όμως είναι το άλλο κομμάτι του Unite.To κομμάτι που δέν κάθετε στον υπολογιστή μας, αλλά το κομμάτι που υπάρχει στους servers της Opera Software.Εκεί λοιπόν υπάρχει μια μορφή κοινωνικού δικτύου, απο χρήστες του προγράμματος .Οπότε ξέρετε τι να περιμένετε αν χρησιμοποιείτε κοινωνικά δίκτυα.Επίσης μπορείτε να αρχίσετε το δικό σας blog,να ανεβάσετε φωτογραφίες ή αρχεία για αποθήκευση (αν και δεν γνωρίζω πόσο όριο υπάρχει), να φτιάξετε την δική σας start up page ή portal, με τις ειδήσεις σας και rss feeds που σας ενδιαφέρουν.

Όπως έχετε καταλάβει οι άνθρωποι της Opera, έχουν κάνει απίστευτη δουλεία και κατάφεραν να παραδώσουν όλες αυτές τις υπηρεσίες σε ένα και μόνο μέρος.Το μόνο που θα πώ είναι αυτό που είπα και πιο πάνω.Αν δεν είστε web developer, όπου δουλεύετε με πολλούς browsers γιατί σας ενδιαφέρει το πώς δείχνουν οι δουλείες σας στον καθένα browser, τότε δέν υπάρχει λόγος να χρησιμοποιείτε κάτι άλλο εκτός απο τον Οpera.Ειλικρινά χάνετε την ευκαιρία να έχετε ένα πρόγραμμα με πάρα πολλές επιλογές που σίγουρα θα σας διευκολύνει, ότι και να κάνετε.



Περισσότερα ...

Πέμπτη 20 Ιανουαρίου 2011

Pick of the week - Free Studio Manager.


Αν ψάχνετε τρόπο για να κατεβάζετε βίντεο ή τραγούδια από το youtube ρίξτε μια ματιά σε αυτή την συλλογή προγραμμάτων που εκτός από αυτό μπορεί να κάνει και πολλά άλλα πράγματα.Λέγεται Free Studio Manager και μπορείτε να το κατεβάσετε από το http://www.dvdvideosoft.com/ .Το καλό είναι οτι μπορείτε να διαλέξετε ποια προγράμματα από την συλλογή σας ενδιαφέρουν και να κατεβάσετε μόνο αυτά.


Η συλλογή έχει πολλά προγράμματα για διάφορα σενάρια μετατροπών ήχου και βίντεο σε διάφορα φορμάτ.Επίσης διαθέτει και προγράμματα για εγγραφή cd/dvd και επεξεργασία βίντεο.Αυτό που νομίζω οτι ενδιαφέρει πιο πολύ, είναι το πρόγραμμα που κατεβάζει και μετατρέπει βίντεο απο το youtube, καθώς και το πρόγραμμα που κατεβάζει και μετατρέπει τα βίντεο του youtube σε mp3. Μπορούμε να φτιάξουμε μια λίστα με τα κομμάτια που θέλουμε και να αφήσουμε το πρόγραμμα να κατεβάζει τα κομμάτια,όσο εμείς κάνουμε κάτι άλλο.


Φυσικά υπάρχουν και άλλες λύσεις, όπως τα extentions στους διάφορους browsers,αλλά με τα προγράμματα αυτά, έχουμε περισσότερες δυνατότητες καθώς και την ευκολία να κατεβάζουμε πολλά βίντεο μαζί και όχι ένα ένα.

Περισσότερα ...

Πέμπτη 13 Ιανουαρίου 2011

Ictinus - level editor

Φτιάχνω αυτό το καιρό έναν level editor για την DarkBasic Pro.Αν και στην αρχή μου φάνηκε περιττό, δυστυχώς δέν βρήκα κάποιον editor που να κάνει ακριβώς αυτό που θέλω.Με λίγα λόγια θέλω να τοποθετώ τα αντικείμενα μου, είτε δυναμικά, είτε όχι και να μπορώ να τα ελέγχω μετά στο προγραμμά μου. Κάτι τέτοιο δέν υπάρχει δυστυχώς, άν και είναι πολύ βολικό σαν ιδέα.Έτσι αποφάσισα να το φτιάξω.

Ο editor παράγει ενα .dat αρχείο που είναι ουσιαστικά το level σας και πρέπει να καλέσετε αυτό το αρχείο στο πρόγραμμα σας.Έτσι δέν χρειάζετε να γράψετε κώδικα για να τοποθετήσετε και να περιστρέψετε κάθε αντικείμενο.Τα κάνετε μέσα απο τον editor,ο όποιος θυμάται τις θέσεις του κάθε αντικειμένου.Στην συνέχεια μπορείτε να χειριστείτε τα δυναμικά σας αντικείμενα (παίχτες,εχθροί) με βάση το όνομα τους και όχι να μπερδευτείτε με object numbers.

Ο editor είναι συμβατός με το 3ds max, που σημαίνει τα μοντέλα που κάνετε import έχουν το ίδιο σύστημα συντεταγμένων.Δηλαδή ένα μοντέλο που φαίνεται με την όψη του στο front παράθυρο στο 3ds max, το ίδιο θα συμβεί και στον editor.Συνήθως πρέπει να περιστρέψετε τα μοντέλα στην DarkBasic, για να εμφανιστούν όπως και στο 3ds max.

Ictinus 0.1
-Μετακίνηση στους x,y,z άξονες.
-Κλωνοποίηση μοντέλων.
-Σμίκρυνση, μεγέθυνση μοντέλων.
-Εισαγωγή μοντέλων 3DS,X,MDL,MDL2,MDL3,BSP
-Στοίχιση μοντέλων ανάλογα με το grid.
-Διαγραφή μοντέλων.
-Εκτός απο την θέση, σώζετε και το rotation του αντικειμένου.
-Υποστηρίζει μέχρι και 1000 αντικείμενα.



Μόλις προστεθούν περισσότερες δυνατότητες θα γράψω κάποιο download link.


Τι θα προστεθεί στο μέλλον
-Top down view.
-Δημιουργία primitives.
-Εισαγωγή textures στα primitives.
-Περισσότερη ευκολία στην χρήση.
-Skyspheres.
-Lights.
-Filemanager.
Περισσότερα ...

Παρασκευή 7 Ιανουαρίου 2011

Pick of the week - Evernote



Είχαμε μιλήσει λίγο στο παρελθόν για το Evernote και τις ευκολίες που προσφέρει στους ανθρώπους που κρατάνε σημειώσεις.Από τότε όμως το Evernote, έχει αλλάξει αρκετές εκδόσεις και έχει φτάσει στην έκδοση 4.1.Αυτό σημαίνει οτι πολλά άλλαξαν.

Το Evernote λοιπόν είναι ενα πρόγραμμα για την αποθήκευση των σημειώσεων μας στο ίντερνετ.Με τον καιρό άρχισε να γίνετε προσβάσιμο όχι μόνο από υπολογιστές, αλλά και κινητά και tablets.Αυτό σημαίνει οτι έχετε πρόσβαση στις σημειώσεις σας, όπου κι αν βρίσκεστε.

Το μεγάλο ατού του προγράμματος, είναι η αναζήτηση πληροφοριών ανάμεσα από τις σημειώσεις μας.Δεν γίνετε μόνο σε κείμενο αλλά και σε φωτογραφίες με την βοήθεια OCR τεχνολογίας.Για παράδειγμα αν έχω μια φωτογραφία που δείχνει έναν αριθμό τηλεφώνου και ένα όνομα, μπορώ γράφοντας το όνομα ή το τηλέφωνο στην αναζήτηση να βρώ την φωτογραφία και να διαβάσω τα υπόλοιπα στοιχεία.

Για τον υπολογιστή, μπορείτε να κατεβάσετε το πρόγραμμα της υπηρεσίας ή να διαχειριστείτε τις σημειώσεις σας μέσω του browser σας. Στήν σελίδα του Evernote θα βρείτε πληροφορίες για το πώς θα κατεβάσετε τα προγράμματα που αναλογούν στις συσκευές σας.


Μία ακόμα σημαντική και πάρα πολύ χρήσιμη δυνατότητα του προγράμματος είναι η επικόλληση κομματιών από σελίδες στο ίντερνετ ή και ακόμα ολόκληρων σελίδων.Το ενδιαφέρον σε αυτό είναι ότι τα αρχεία που επικολλούμε στις σημειώσεις μας κρατάνε τις εικόνες, αλλά και την διάταξη τους.Πιστεύω πως αν έχετε κάνει ποτέ επικόλληση ένα μέρος μιας ιστοσελίδας, θα καταλαβαίνετε για το τι μιλάω ακριβώς.

Το Evernote είναι δωρεάν για μεταφορά όγκου δεδομένων 60mb το μήνα.Που για σημειώσεις και φωτογραφίες, είναι υπέρ αρκετά Αν πάλι παράγετε περισσότερο απο 60mb το μήνα, τότε υπάρχει και η premium έκδοση επί πληρωμής για 1Gb το μήνα.Στην περίπτωση που μπερδευτήκατε, ο χώρος αποθήκευσής τών αρχείων σας δεν έχει όριο.Το όριο είναι ότι στον κάθε μήνα μπορείτε να ανεβάζετε μέχρι 60mb σημειώσεις.

Περισσότερα ...

Τετάρτη 29 Δεκεμβρίου 2010

Pick of the week - LibraryThing.com



Εάν σας αρέσει να διαβάζετε πολλά βιβλία ή αν ψάχνετε για προτάσεις βασισμένες πάνω στα γούστα σας, τότε πρέπει να γραφτείτε στο LibraryThing.com.Φανταστείτε αυτή την σελίδα, σαν το Facebook για τους βιβλιόφιλους. Είναι δηλαδή μια μεγάλη κοινότητα ανθρώπων όπου μοιράζονται τις εμπειρίες τους και τις προτάσεις τους για τα βιβλία που αγαπούν.

Μόλις φτιάξουμε τον λογαριασμό, θα πρέπει να προσθέσουμε κάποια από τα αγαπημένα μας βιβλία, ώστε να ολοκληρωθεί το προφίλ μας.Με βάση λοιπόν αυτά τα βιβλία, θα μπορεί το σύστημα να μας προτείνει βιβλία που άρεσαν σε άλλους χρήστες που έχουν διαβάσει τα δικά μας βιβλία.Μπορούμε να δούμε τους χρήστες που έχουν τα ίδια γούστα με μάς, να διαβάσουμε κριτικές τους ή και να επικοινωνήσουμε μαζί τους.Όσα περισσότερα βιβλία προσθέσουμε, τόσο ευκολότερο είναι για το σύστημα να μας προτείνει βιβλία που μας ενδιαφέρουν.

Τα βιβλία που έχω προσθέσει μέχρι τώρα.

Περισσότερα θα δείτε με το που φτιάξετε το account σας.Αξίζει τον κόπο να εξερευνήσετε την σελίδα και να δείτε όλα αυτά που σας προσφέρει.Η υπηρεσία είναι δωρεάν, όπως και οτιδήποτε προτείνω γενικά εδώ.Υπάρχει και μια επιλογή για λογαριασμό επί πληρωμής, αλλά να σας πώ την αλήθεια δέν ενδιαφέρθηκα να μάθω τι προσφέρει γιατί το μόνο που θέλω είναι να διαβάζω κριτικές, αλλά και νέες προτάσεις για βιβλία.



Περισσότερα ...

Δευτέρα 20 Δεκεμβρίου 2010

Dark Basic Pro.Φτιάχνουμε ένα κλώνο του Pong.

H DarkBasic είναι ένα ακόμα εργαλείο απο τήν The Game Creators, που μας έδωσε το Fps Creator. Είναι αρκετά παλιά σαν γλώσσα προγραμματισμού παιχνιδιών και ήταν η πρώτη που δοκίμασα πριν πολλά χρόνια..

Η DarkBasic είναι λοιπόν μια γλώσσα προγραμματισμού στύλ Basic, όπου βγάζει από τον προγραμματιστή όλη την πολυπλοκότητα του DirectX, και τον αφήνει να προγραμματίσει μόνο το παιχνίδι του.Μας γυρνάει στις εποχές, που εγώ δυστυχώς δεν έζησα, τις εποχές που ένας απλός χρήστης με την Basic μπορούσε να γράψει τα δικά του παιχνίδια και να τα μοιράζει η να τα πουλάει.Τότε που η βιομηχανία των παιχνιδιών ήταν ακόμα στην αρχή της και τα παιχνίδια γίνονταν από ένα άτομο.

Παρόλο που μας γυρνάει σε παλιές εποχές, δεν κάνει και το ίδιο στο θέμα των γραφικών.Όπως θα δείτε και μόνοι σας, τα γραφικά των παιχνιδιών που θα φτιάξετε θα είναι πολύ κοντά στα σημερινά τρισδιάστατα παιχνίδια.

Ενώ υπάρχουν κάποια εργαλεία για να δημιουργούμε παιχνίδια χωρίς προγραμματισμό, η αλήθεια είναι ότι η επιλογές μας είναι περιορισμένες.Για πραγματικό έλεγχο στην δημιουργία παιχνιδιών χρειάζεται και κάποια μορφή γλώσσας, έτσι ώστε να μπορείτε να αποτυπώσετε ότι έχετε στην φαντασία σας στο παιχνίδι.

Το κακό με τους αρχάριους όπως γίνονταν και με μένα είναι οτι θέλουν να φτιάξουν σε μια μέρα το επόμενο Half Life ή όποιο άλλο παιχνίδι αρέσει στον καθένα.Δυστυχώς θέλει αρκετή υπομονή και κουράγιο μέχρι να μάθετε όσα πιο πολλά μπορείτε για το περιβάλλον ανάπτυξης που θα χρησιμοποιήσετε. Και να έχετε στο νού σας ότι τα πρώτα 10 παιχνίδια θα είναι απαίσια.Αλλά αυτα τα πρώτα 10 παιχνίδια θα σας δώσουν τις γνώσεις που χρειάζεται για να παρουσιάσετε μια μέρα ένα καλό παιχνίδι.

Θα φτιάξουμε λοιπόν σήμερα ένα κλώνο του Pong.Είναι ίσως το πιο απλό παιχνίδι που παράλληλα μπορεί να μας δώσει τις πρώτες γνώσεις για την δημιουργία παιχνιδιών.Βέβαια ο οδηγός δεν θα σας μάθει να προγραμματίζετε,οπότε είναι καλύτερο να ξέρετε κάποια βασικά πράγματα για την DarkBasic.
Αν έχετε προγραμματίσει σε άλλες γλώσσες , τότε μπορείτε να ακολουθήσετε τον οδηγό.

Ας αρχίσουμε με το να δηλώσουμε κάποιες μεταβλητές που χρειαζόμαστε για το παιχνίδι μας.


global PlayerOnePoints as integer = 0
global PlayerTwoPoints as integer = 0


global BallX as integer = 0
global BallY as integer = 0


global BallSpeedX as integer = 0
global BallSpeedY as integer = 0


global PadX1 as integer = 0
global PadY1 as integer = 0


global PadX2 as integer = 0
global PadY2 as integer = 0

Εδώ λοιπόν δηλώνουμε τους πόντους των παιχτών,την θέση x και y της μπάλας,την κατεύθυνση που έχει η μπάλα και την θέση  x και y τής κάθε μπάρας των 2 παιχτών.


PlayerOnePoints = 0
PlayerTwoPoints = 0
BallX = screen width() /2
BallY = screen height() /2
BallSpeedX = 3 
BallSpeedY = 1 
PadX1 = 5
PadY1 = (screen height() / 2)-37
PadX2 = screen width () - 15
PadY2 = (screen height() / 2)- 37

Στην συνέχεια θα δώσουμε αρχικές τιμές


PlayerOnePoints = 0
PlayerTwoPoints = 0
BallX = screen width() /2
BallY = screen height() /2
BallSpeedX = 3 
BallSpeedY = 1 
PadX1 = 5
PadY1 = (screen height() / 2)-37
PadX2 = screen width () - 15
PadY2 = (screen height() / 2)- 37


Οι πόντοι είναι φυσικά μηδέν στην αρχή του παιχνιδιού.Η μπάλα αρχίζει απο την μέση της οθόνης.Δηλαδή πλάτος οθόνης δια δύο και μήκος οθόνης δια δύο.(Αυτό γίνετε για να είμαστε σίγουροι οτι το παιχνίδι θα δείχνει το ίδιο σε κάθε ανάλυση.) Η κατεύθυνση της μπάλας είναι  3 pixels για τον άξονα x και ένα για τον άξονα  y.Η μπάρα του πρώτου παίχτη τοποθετείτε στο 5 pixel και στο ανάλυση οθόνης δια δύο μείων 37 pixels.(Αν η ανάλυση είναι 800x600 τότε το y της μπάρας1 είναι
(600/2)-37 = 263.Στην συνέχεια τοποθετούμε και την άλλη μπάρα με το ίδιο σκεπτικό ακριβώς απέναντι.


Πρίν συνεχίσουμε να πούμε δύο λόγια αν δυσκολεύεστε με τις διαστάσεις.Η οθόνη του υπολογιστή χωρίζετε σε δύο άξονες.Ο οριζόντιος άξονας λέγετε x και ο κάθετος λέγετε y.Το σημείο μηδέν και για τους δύο άξονες, είναι στην πάνω αριστερή γωνία της οθόνης και από εκεί και πέρα οι τιμές μεγαλώνουν θετικά.


Θέλοντας να βρούμε λοιπόν το σημείο 300,200 θα πρέπει να απομακρυνθούμε 300 pixes απο τον άξονα x και 200 από τον άξονα y.

Πώς λειτουργεί ένα παιχνίδι.Ένα παιχνίδι είναι ουσιαστικά ένα κομμάτι κώδικα το οποίο εκτελείτε συνεχώς, μέχρι να το διακόψουμε για κάποιο λόγο.Αυτή η loop είναι και ο πυρήνας του παιχνιδιού, που είναι υπεύθυνη να ανανεώνει τις θέσεις των γραφικών μας σε μεγάλη συχνότητα, έτσι ώστε να παίρνουμε την ψευδαίσθηση της κίνησης.

Ένα παιχνίδι για να θεωρείτε οτι "τρέχει" ομαλά θα πρέπει να ανανεώνει την οθόνη 30-60 φορές το δευτερόλεπτο.Οτιδήποτε πιο κάτω, κάνει το παιχνίδι αργό.Θα έχετε σίγουρα εμπειρία απο ένα παιχνίδι με πολλές απαιτήσεις που όπως λέμε "σέρνεται" στον υπολογιστή μας.Αυτό γίνετε γιατί η κάρτα μας από το πολύ φόρτο δέν προλαβαίνει να ανανεώσει την οθόνη με τις καινούργιες συντεταγμένες τών στοιχείων του παιχνιδιού.

Απο την άλλη αν φτιάξετε ένα παιχνίδι που θα έτρεχε ομαλά σε μια κάρτα 16mb, με την σημερινή κάρτα τών 512 και 1024mb, το παιχνίδι θα έκανε περισσότερες ανανεώσεις και έτσι η ταχύτητα του θα ήταν πολύ μεγαλύτερη, όπου και πάλι δεν θα μπορούσαμε να το παίξουμε.

Γιαυτό λοιπόν η DarkBasic έχει φροντίσει να μας αφήσει να κάνουμε εμείς τις ανανεώσεις όποτε τις θέλουμε, με αποτέλεσμα να φτιάχνουμε παιχνίδια με ομαλή ανανέωση.


sync on : sync rate 60 : hide mouse


Εδώ λοιπόν λέμε στον compiler οτι θα χειριστούμε εμείς τις ανανεώσεις,θέλουμε 60 ανανεώσεις το δευτερόλεπτο και κρύψε και τον δείκτη του ποντικιού μιας και σε απασχολούμε.

Ας αρχίσουμε με τον τίτλο του παιχνιδιού.Θα δείχνει με μεγάλα γράμματα τον τίτλο και με μικρότερα θα μας ζητάει να πατήσουμε ένα κουμπί για να αρχίσουμε να παίζουμε.


cls
set text font "Fixedsys"
set text size 100
center text screen width() / 2 , (screen height() / 2) , " PONGclone "
set text size 30 
center text screen width() / 2 , (screen height() / 2)+50 , "Press any key to play"
wait key()


Εδώ καθαρίζουμε την οθόνη,ορίζουμε την γραμματοσειρά που θα γράψουμε σε Fixedsys, μοιάζει λίγο με τις παλιές χοντροκομμένες γραμματοσειρές τών παιχνιδιών.Ορίζουμε το μέγεθος της γραμματοσειράς σε 100 και γράφουμε το τίτλο του παιχνιδιού στο κέντρο της οθόνης..

Τοποθετούμε το "Press any key to play" 50 pixels κάτω από τον τίτλο και με την  wait key περιμένουμε τον χρήστη να πατήσει κάποιο κουμπί για να αρχίσει να παίζει.

Πάμε τώρα στην καρδία του παιχνιδιού όπως είπαμε που είναι η loop.H loop έχει την μορφή do...loop.


do
cls


draw()
update_ball()
padmove()
display_score()
collision_with_walls()
collision_with_pads()
collision_with_sides()
who_won()


sync
loop
end

Τα ονόματα που βλέπετε που τελειώνουν με παρενθέσεις είναι functions.Δεν θυμάμαι πώς μεταφράζονται στα ελληνικά, αλλά καλύτερα είναι αν ασχολείστε με προγραμματισμό να μείνετε στην αγγλική ορολογία μιας και τα ελληνικά δεν είναι και η καλύτερη γλώσσα για να περιγράφεις θέματα υπολογιστών.Η functions λοιπόν είναι κομμάτι κώδικα που κάνει κάτι ιδιαίτερο.Την τοποθετούμε κάπου στο τέλος του προγράμματος και την καλούμε όποτε θέλουμε να κάνει την λειτουργία που την έχουμε προγραμματίσει να κάνει.Είναι καλή πρακτική μιας και έτσι ο κώδικας μπορεί να διαβαστεί και να βγάλει κάποιο νόημα πιο εύκολα.

Εδώ λοιπόν θέλουμε μια function για να "ζωγραφίζει" με κάθε ανανέωση τις μπάρες και την μπάλα στην οθόνη ώστε να έχουμε κίνηση.Μια για την ανανέωση των συντεταγμένων,ανάλογα με την φορά που έχει η μπάλα.Οι κίνηση τίς κάθε μπάρας.Πχ όταν πατάω το shift θα πηγαίνει πρός τα πάνω.Οι διάφορες επαφές που κάνει η μπάλα.Τι θα κάνει η μπάλα όταν έρθει σε επαφή με την μπάρα του παίχτη;Τι θα κάνει εάν ο παίχτης την χάσει και περάσει εκτός οθόνης;Τι θα κάνει εαν χτυπήσει πάνω η κάτω.Θυμάστε το pongq; Πώς συμπεριφέρεται σε αυτά τα σενάρια;

Το σημαντικότερο για κάποιον που αρχίζει τον προγραμματισμό παιχνιδιών δεν είναι ο κώδικας αλλά το πώς εκφράζει αυτά τα σενάρια με απλές προτάσεις και λογική.Η μετατροπή των προτάσεων σε κώδικα θα δείτε οτι είναι πιό δύσκολη υπόθεση απο τον ίδιο τον κώδικα.

Πάμε λοιπόν να φτιάξουμε αυτές τις functions μια μια...


function draw()
   circle BallX,BallY,8
   box PadX1,PadY1,PadX1 + 10,PadY1 + 75
   box PadX2,PadY2,PadX2 + 10,PadY2 + 75
endfunction

Εδώ ζητάω απο την DarkBasic να μου φτιάξει ενα κύκλο όπου το κέντρο του θα είναι στο BallX,BallY και η ακτίνα του θα είναι 8 pixels.Επίσης ζωγράφισε μου και δύο κουτάκια.Τα κουτάκια θα έχουν πλάτος 10 pixels και 75 pixels ύψος.Μην περιμένετε να καταλάβετε τον σχεδιασμό σχημάτων στην οθόνη χωρίς να κάτσε τε και να παίξετε ζωγραφίζοντας διάφορα σχήματα σε διάφορες συντεταγμένες.

function update_ball()
inc BallX,BallSpeedX 
        inc BallY,BallSpeedY 
endfunction

Θυμάστε που είπαμε ότι κάθε φορά που θα κάνεις ανανέωση θα μετακινείς την μπάλα 3 pixes στον x και 1 στον y.Αυτό γίνετε εδώ.Το inc προσθέτει στην πρώτη μεταβλητή την μεταβλητή μετά το κόμμα.


function padmove()
if shiftkey()
dec PadY1,3
if PadY1 < 0 then PadY1 = 0
endif

if controlkey()
inc PadY1,3 
if PadY1 > screen height() - 75 then PadY1 = screen height() - 75
endif

if upkey()
dec PadY2,3
if PadY2 < 0 then PadY2 = 0
endif

if downkey()
inc PadY2,3
if PadY2 > screen height() - 75 then PadY2 = screen height() - 75
endif

endfunction

Εδώ γίνετε η κίνηση των δύο μπαρών.Εάν πατήσω shift πηγαίνει πάνω η μπάρα 1.Εάν πατήσω control πάει κάτω.Up και down arrows για την μπάρα 2.Το pong όταν η μπάρα πάει στο πάνω μέρος της οθόνης η στο κάτω,σταματάει η κίνηση της.Αν δεν γράψουμε κώδικα γιαυτό τότε η μπάρες θα συνεχίζουν εκτός οθόνης και ο παίχτης δεν θα μπορεί να τις δει.Καλύπτω και αυτό το ενδεχόμενο λέγοντας ότι άν το y σημείο της μπάρας 1 πάει να γίνει μηδέν τότε κάνε το σημείο μηδέν.Που σημαίνει οτι όσο ο παίχτης θα πατάει για να πάει πρός τα πάνω αμα φτάσεις στην άκρη της οθόνης θα μένεις εκεί, μέχρι να πατήσει για να πάει προς τα κάτω.Το ίδιο συμβαίνει βέβαια και με την κάτω πλευρά της οθόνης και την δεύτερη μπάρα.

function display_score()
  set window title "Player 1: " + str$(PlayerOnePoints) + "  -  " + "Player 2: " + str$(PlayerTwoPoints)
endfunction

Θα γράψουμε το σκόρ με αυτή την function.Όχι όμως στην οθόνη αλλά στην titlebar του προγράμματος.Βέβαια μπορούμε να τα εμφανίσουμε και στο παιχνίδι, αλλά καθαρά για ευκολία θα το κάνουμε έτσι.

function collision_with_walls()
if BallY < 16 or BallY > screen height() - 16
BallSpeedY = BallSpeedY *  - 1
play sound 2
endif
endfunction

Ώρα να τσεκάρουμε τις επαφές.Όταν η μπάλα χτυπάει στην πάνω και κάτω πλευρά της οθόνης θα αλλάζει κατεύθυνση.Και επειδή αυτή η κίνηση γίνετε στο άξονα y πρέπει να αλλάξουμε την BallSpeedY.Ο πολλαπλασιασμός με το -1,αντιστρέφει το πρόσημο ενός αριθμού.Αν λοιπόν αντιστρέψουμε το πρόσημο του BallSpeedY τότε σημαίνει πώς αν η μπάλα πήγαινε προς τα πάνω, μετά θα πάει πρός τα κάτω.Μάλλον το BallSpeedY δέν είναι και το καλύτερο όνομα για την μεταβλητή μιας και δεν δηλώνει ταχύτητα, αλλά κατεύθυνση και ταχύτητα.Αλλά πιστεύω να καταλαβαίνετε τι κάνουμε εδώ.


function collision_with_pads()
  if point(BallX,BallY) >0 
BallSpeedX = BallSpeedX * - 1
play sound 1
  endif
endfunction

Εξετάζουμε τώρα τις επαφές με τις μπάρες.Υπάρχει μια function στο manual της DarkBasic που λέγετε point().Αυτή παίρνει σαν ορίσματα ένα ζευγάρι συντεταγμένων (x,y) και μας επιστρέφει,τον κωδικό του χρώματος που υπάρχει σε αυτό το σημείο.Εάν η point() μας επιστρέψει κάτι άλλο εκτός απο μηδέν( που είναι ο κωδικός του μαύρου χρώματος) σημαίνει ότι κάναμε επαφή με μία μπάρα, μιάς και το χρώμα της είναι άσπρο.Άρα τώρα αντιστρέφουμε την κατεύθυνση του BallSpeedX.

H point() μου δίνει παράξενα αποτελέσματα για το μαύρο.Αντί για μηδέν μου δίνει 4294967295 κάτι που κάνει το if μου να εκτελείτε πάντα και η μπάλα σε κάθε frame να αλλάζει κατεύθυνση.Άν σας τύχει κάτι τέτοιο, δοκιμάστε να βάλετε το if σαν if point(BallX,BallY) = 16777215 .Το 16777215 είναι ο κωδικός του άσπρου χρώματος.

function collision_with_sides()
if BallX < 1 
inc PlayerTwoPoints,1
reset_game()
BallSpeedX = BallSpeedX * -1
wait 2000
endif
if BallX > screen width()-2
inc PlayerOnePoints,1
reset_game()
BallSpeedX = BallSpeedX * -1
wait 2000
endif
endfunction

Εδώ εξετάζουμε τις επαφές με τις κάθετες πλευρές τις οθόνης.Δηλαδή τι γίνετε αν ο παίχτης χάσει την μπάλα και αυτή φτάσει πίσω από την μπάρα.Όπως θα καταλάβατε αυτό σημαίνει οτι έχασε ένα πόντο ο παίχτης που δέν κατάφερε να αποκρούσει την μπάλα.Αν λοιπόν η μπάλα φτάσει στο 1 pixel σημαίνει οτι ο παίχτης 1 δέν κατάφερε να την αποκρούσει, άρα προσθέτουμε ένα πόντο στον παίχτη 2.
Η reset_game() είναι μια function που θα φτιάξουμε πιο κάτω και απλά θα τοποθετεί την μπάλα ξανά στο κέντρο και τις δύο μπάρες στην αρχική τους θέση, έτσι ώστε να αρχίσουμε καινούργιο γύρο.
Η wait 2000, απλά λέει στο πρόγραμμα να σταματήσει για 2 δευτερόλεπτα.Τα δίνουμε σάν millisecond.

Δίνουμε 2 δευτερόλεπτα ώστε να ετοιμαστούν οι παίχτες για τον επόμενο γύρο.

function who_won()
if PlayeronePoints>9 
cls
set text size 70
center text screen width()/2,200,"Player 1 wins!!!"
sync
wait 3000
endif
if PlayerTwoPoints>9
cls
set text size 70
center text screen width()/2,200,"Player 2 wins!!!"
sync
wait 3000
endif
endfunction


Τα πράγματα είναι απλά εδώ.Αν ένας από τους δύο παίχτες ξεπεράσει τους 9 πόντους γράψε οτι νίκησε με μεγάλα γράμματα.

function reset_game()
  BallX = screen width() /2
  BallY = screen height() /2
  PadX1 = 5
  PadY1 = (screen height() / 2)-37
  PadX2 = screen width () - 15
  PadY2 = (screen height() / 2)- 37
endfunction

Και η reset_game() που βάζει την μπάλα και τις μπάρες στην αρχική τους θέση, για να αρχίσουμε καινούργιο γύρο.


Αυτή είναι η δικιά μου έκδοση με λίγο παραπάνω κώδικα για κάποιες εξτρά λειτουργίες όπως το να ρυθμίζει ο παίχτης την ταχύτητα της μπάλας.

 H DarkBasic Pro είναι πλέον δωρεάν οπότε είναι ακόμα πιο εύκολο να αρχίσουμε να προγραμματίζουμε τα πρώτα μας παιχνίδια.Μπορείτε να την κατεβάσετε απο τό http://www.thegamecreators.com/?m=view_product&id=2000&page=free .Υπάρχει μια φανταστική προσφορά για φέτος τα χριστούγεννα.Με 38 ευρό μπορούμε να πάρουμε την DarkBasic και πολλά άλλα εργαλεία που την συνοδεύουν, όλα σε ενα πακέτο.Ελπίζω να προλάβω την προσφορά γιατί πραγματικά συμφέρει.
Περισσότερα ...
 

Copyright © panosdk Design by BTDesigner | Blogger Theme by BTDesigner | Powered by Blogger