Παρασκευή 25 Φεβρουαρίου 2011

Φτιάχνουμε την πρώτη μας εφαρμογή για το Android.

Για έναν πιο εύκολο οδηγό δείτε τον οδηγό με τον App Inventor.


To Android είναι ένα λειτουργικό σύστημα για κινητά και μικρούς υπολογιστές (Tablets συνήθως). Είναι το πιο επιτυχημένο λειτουργικό γιατί σε αντίθεση με όλα τα άλλα, είναι ανοιχτού κώδικα και είναι δωρεάν.Οι περιορισμοί που έχει σαν προϊόν είναι ελάχιστοι.Γιαυτό λοιπόν είναι πολύ λογικό αρκετοί άνθρωποι να στοχεύουν πλέον πρός το Android market, ώστε να φτιάξουν και να πουλήσουν τις εφαρμογές τους.

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

Σε αυτό θα μας βοηθήσει η Unity 3d. Αυτό το περιβάλλον ανάπτυξης παιχνιδιών είναι από τα πιό γνωστά εργαλεία στον τομέα του.Τα καλύτερα παιχνίδια του Iphone γίνονται με αυτό το πρόγραμμα και ήρθε η ώρα να αναπτυχθεί και στο Android.Το αν αποφασίσετε να ασχοληθείτε με την ανάπτυξη παιχνιδιών είναι μια δική σας απόφαση.Εδώ θα δούμε την πιο εύκολη δίοδο, ώστε να δούμε την εφαρμογή μας στο Android market.

Το πρώτο πράγμα που θα κάνουμε είναι να κατεβάσουμε τα εργαλεία μας.Με την δωρεάν έκδοση της Unity, μπορούμε να φτιάξουμε ένα παιχνίδι και να το εξάγουμε είτε σε Windows, είτε σε παιχνίδι για ίντερνετ browsers.Για να εξάγουμε παιχνίδι για το Android πρός το παρών χρειαζόμαστε μια άδεια.Η άδεια για το Android κοστίζει 1100 ευρώ, ποσό που φαίνεται αρκετά υψηλό.Αν όμως θέλετε να ασχοληθείτε επαγγελματικά με την ανάπτυξη και πώληση παιχνιδιών, το ποσό αυτό θα το βγάλετε πολύ γρήγορα, εφόσον το ταλέντο σας βοηθήσει στο να φτιάξετε καλές εφαρμογές.Στην περίπτωση που απλά θέλετε να μάθετε, τότε κατεβάστε την δωρεάν έκδοση της Unity και όταν έχετε κάποιο καλό παιχνίδι έτοιμο, αγοράστε την άδεια. Εμείς θα δούμε όλη την διαδικασία εδώ.Στόχος μας είναι να φτιάξουμε ένα απλό πρόγραμμα και να το δούμε να τρέχει σε ένα Android κινητό.

Λοιπόν για την ανάπτυξη εφαρμογών σε Android θα χρειαστούμε:
Τα κάνουμε εγκατάσταση με αυτή την σειρά.Τρέχουμε τον Android SDK manager και διαλέγουμε τα εξής.SDK tools revision 9,SDK platform Android 2.2,API 8 revision 2.Άν τα κάνατε εγκατάσταση όλα επίσης δέν υπάρχει κανένα πρόβλημα.

Το επόμενο βήμα είναι να στήσουμε έναν emulator για όσους δέν διαθέτουν Android κινητό. Πηγαίνοντας στο Virtual devices, επιλέγουμε new kai στο παράθυρο που θα βγεί γράφουμε τα εξής.

Σάν όνομα, ένα όνομα που θέλετε, σαν target το Android 2.2  - Api level 8.Το size δέν μας ενδιαφέρει οπότε μια τιμή 512 είναι αρκετή.Στο skin διαλέγουμε την ανάλυση της οθόνης.Για να κάνουμε τα πράγματα εύκολα, ας διαλέξουμε την QVGA όπου είναι μια κλασσική ανάλυση (320x240).Περισσότερες αναλύσεις έχω απο κάτω: 

QQVGA (160×120)
HQVGA (240×160)
QVGA (320×240)
WQVGA (432×240)
HVGA (480×320)
VGA (640×480)
WVGA (800×480)
FWVGA (854×480)
SVGA (800×600)
WSVGA (1024×576)
     
Δέν θέλουμε κάτι άλλο απο εδώ.Ας πατήσουμε οκ και στον μάνατζερ, άς επιλέξουμε τον emulator μας και ας τον αρχίσουμε πατώντας "start".O emulator είναι αρκετά αργός αλλά όταν φορτώσει θα έχετε ένα πλήρως λειτουργικό Android 2.2.Μπορείτε να φορτώσετε και το 2.3 αλλά για λόγους συμβατότητας θα μείνουμε στο 2.2.

Άς περάσουμε στην Unity.Θα δημιουργήσουμε ένα καινούργιο project.Στον wizard που ακολουθεί θα δούμε αρκετά πακέτα που μας προσφέρει για να συμπεριλάβουμε στην εφαρμογή μας.Τα κινητά δέν είναι σε καμιά περίπτωση ικανά να παράγουν τα γραφικά του υπολογιστή.Γιαυτό δέν μπορούμε να προσθέσουμε δυνατότητες που θα έπαιζαν άνετα στον υπολογιστή μας.Τσεκάρετε το πακέτο "Standard Assets(Mobile).UnityPackage. Εδώ περιέχονται αρκετά βοηθήματα για την εργασία μας.
Πριν συνεχίσουμε να πούμε δυο λόγια για την Unity.Η Unity λοιπόν είναι ένα πρόγραμμα ανάπτυξης παιχνιδίων. Υποστηρίζει κάποιες γλώσσες προγραμματισμού, όπως Boo,C# και Javascript. H ιδέα είναι απλή.Εισάγετε ή δημιουργήτε μοντέλα και "κολλάτε" σε αυτά script συμπεριφοράς.Απο τις επιλογές για τον προγραμματισμό τών script ή Javascript φαίνεται η πίο εύκολη λύση.Εκτος αν ξέρετε C#.H Unity δέν είναι ενα πρόγραμμα που θα μάθουμε σε μία μέρα.Απαιτεί αρκετές ώρες μελέτης. 

Το πρόγραμμα μας θα είναι αρκετά απλό.Σίγουρα όμως πιο εντυπωσιακό απο το "Hello world" που κάναμε για το Iphone. Το turbosquid έχει ένα πολύ ωραίο 3d μοντέλο με την μασκότ του Android.Αυτό θα χρησιμοποιήσω εδώ.Εσείς μπορείτε να βάλετε οτι θέλετε.Αυτό λοιπόν το αντικείμενο απλά θα το περιστρέφουμε στην οθόνη με ένα απλό script.

Το αποτέλεσμα μπορείτε να το δείτε στον browser σας απο εδώ. AndroidExample.unity3d 
Αν δέν έχετε τon Unity 3d player, πρέπει να τον κάνετε εγκατάσταση για να παίζετε παιχνίδια απο την Unity στον browser σας. http://unity3d.com/webplayer/

Αν δέν έχετε δουλέψει με κάποιον 3d editor το περιβάλλον του Unity μάλλον θα σας φανεί βουνό. Eίναι όμως αρκετά απλός όταν καταλάβετε τα βασικά.Μακάρι να μπορούσα να εξηγήσω περισσότερα πράγματα αλλά θα πρέπει να ψάξετε στον ίντερνετ, για να βρείτε κάποια video tutorials με τα βασικά του προγράμματος.

Εγώ απλά θα εισάγω το μοντέλο μου με την μασκότ του Android, θα δημιουργήσω ένα directional light για να φωτίσω το μοντέλο και θα δημιουργήσω ένα νέο script.Σε αυτό το script θα πώ στο μοντέλο μου να περιστρέφετε στον άξονα y και z.

function Update () {
transform.Rotate(0,1,1);
}

H function update() εκτελείτε σε κάθε frame και περιστρέφει το μοντέλο στον άξονα  y και z κατά 1.Αυτό το κολλάμε στο μοντέλο μας, κάνοντας drag and drop απο το project στο όνομα του μοντέου στο Hierarchy.Aς τεστάρουμε το πρόγραμμα μας πατώντας το "play".

Αν όλα πήγαν καλά, είναι η ώρα να μετατρέψουμε την εφαρμογή μας για το Android.Από το file πάμε build settings και άν έχουμε την άδεια επιλέγουμε Android.Αλλιώς μπορείτε να το εξάγετε σε .exe για τα windows.Στην περίπτωση του Android πατάμε πρώτα "player settings" και στο μενού που θα βγεί αλλάζουμε το indentification | bundle identifier σε κάποιο όνομα πχ (com.apple.a) (Οι αριθμοί αδειών είναι κοινοί για google και apple).Στήν περίπτωση που θα δοκιμάσουμε την εφαρμογή σε emulator τότε αλλάζουμε το Device filter σε Universal.

Πατώντας "build and run" η Unity θα βρεί τον emulator μας και θα τρέξει το πρόγραμμα.Αν όλα γίναν σωστά θα δείτε την μασκότ του Android να περιστρέφετε στην οθόνη του emulator.

Εδώ ουσιαστικά έχουμε τελειώσει.Πρίν όμως κλείσουμε το άρθρο καλό είναι να δώσουμε και μερικές οδηγίες γιαυτούς που έχουν Android κινητά και θέλουν να περάσουν την εφαρμογή στο κινητό τους.Στο φάκελο tools του Android SDK, βρίσκεται ένα πολύ χρήσιμο .exe με το όνομα adb.Αυτό το προγραμματάκι είναι μια εφαρμογή κονσόλας, οπότε μην το τρέξετε.Αντίθετα πατήστε shift και δεξί κλίκ κάπου στο περιθώριο του φακέλου tools και επιλέξτε "Open command window here".Αυτο θα ανοίξει ενα command prompt με path το tools του Android SDK.(Το παραπάνω λειτουργεί μόνο σε Windows 7).Για παλιότερα Windows πάτε με cd στον φάκελο.

Για να δούμε τις Αndroid συσκευές μας στον υπολογιστή, δίνουμε την εντολή adb devices.Αν έχουμε συνδέσει την συσκευή και έχουμε drivers τότε θα επιστρέψει ένα μήνυμα με την συσκευή μας.Στην συνέχεια με την εντολή adb install μπορούμε να γράψουμε την εφαρμογή στο κινητό.
H εφαρμογή μας έτρεξε κανονικά στον emulator.Από εδώ μπορούμε να αρχίσουμε και να δημιουργήσουμε κάτι πιο ενδιαφέρον.Προς το παρών όμως νομίζω οτι καλύψαμε το πιο σημαντικό κομμάτι.Να δημιουργήσουμε και να εισάγουμε την δική μας εφαρμογή στο κινητό μας.

Θά θελα πολύ να γράψω περισσότερα άρθρα για την Unity.Και πιστεύω στο μέλλον να το κάνω.Απλά είναι καλύτερο για τέτοιες εργασίες να βλέπετε κάποιο βίντεο παρά να διαβάζετε ένα κείμενο με εικόνες. 



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

Πέμπτη 17 Φεβρουαρίου 2011

Pick of the week - Sculptris



Όσοι έχετε ασχοληθεί με 3D προγράμματα (3ds max, Maya...), θα έχετε παρατηρήσει πώς ενώ είναι σχετικά εύκολο να φτιάξουμε μοντέλα τα οποία βασίζονται σε primitives (κύβος,σφαίρα ...), είναι πολύ δύσκολο να φτιάξουμε ανθρώπινα μοντέλα.Βέβαια μπορούμε να αφιερώσουμε αρκετό χρόνο μαθαίνοντας τον τρόπο, αλλά σήμερα θα δούμε μια πιο εύκολη λύση.

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


Ένα τέτοιο πρόγραμμα είναι το Sculptris. Ένα πρόγραμμα που μπορείς να κάτσεις να ασχοληθείς μαζί του γιατί προσφέρει έναν εύκολο και διασκεδαστικό τρόπο να υλοποιήσεις αυτό που έχεις στο μυαλό σου. Το Sculptris λοιπόν γίνετε το εργαλείο μας για να φτιάξουμε ανθρώπινα μοντέλα.Με πολύ απλά εργαλεία και με την χρήση του ποντικιού, μπορούμε να "πλάσουμε" ένα πρόσωπο ή κάποιο ολόκληρο μοντέλο όπως θέλουμε εμείς, σαν να ήμασταν αγγειοπλάστες.Στην συνέχεια μπορούμε να το εξάγουμε σε .Obj αρχείο και να το εισάγουμε σε κάποιο 3d πρόγραμμα ή σε ένα παιχνίδι.
Το Sculptris παράγει μοντέλα με πολλά πολύγωνα, γιαυτό πρέπει να μειώσετε τον αριθμό τους αν θέλετε να τα εισάγετε σε κάποιο παιχνίδι που φτιάχνετε.Όπως και τα περισσότερα προγράμματα σε αυτή την στήλη, είναι δωρεάν. Κατεβάστε το και παίξτε μαζί του ακόμα κιαν δεν σας ενδιαφέρει η κατασκευή 3d μοντέλων.



Εδώ είναι ένα εισαγωγικό βίντεο για το πώς θα ξεκινήσετε.

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

Πέμπτη 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.
Περισσότερα ...

Δευτέρα 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 και πολλά άλλα εργαλεία που την συνοδεύουν, όλα σε ενα πακέτο.Ελπίζω να προλάβω την προσφορά γιατί πραγματικά συμφέρει.
Περισσότερα ...

Τετάρτη 3 Νοεμβρίου 2010

Pick of the week - Kodu

Το Kodu είναι ένα ακόμα ενδιαφέρον πρόγραμμα από την Microsoft Research. Στόχος του είναι να μάθει σε παιδία κάθε ηλικίας να προγραμματίζουν παιχνίδια.Απο ότι έχω δεί μέχρι τώρα είναι μακράν το καλύτερο πρόγραμμα για να αρχίσει κάποιος να φτιάχνει παιχνίδια. Στα παιχνίδια, ο προγραμματιστής περιμένει την επιβράβευση του, με το να δεί κάτι όμορφο στην οθόνη. Αυτό όμως με τα κοινά προγράμματα ανάπτυξης παιχνιδιών, δεν έρχεται γρήγορα.Έτσι είναι πολύ εύκολο να τα παρατήσει κάποιος.

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

“ Έτσι προγραμματίζουμε το Kodu. ”

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

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

“ Αυτός είναι ο level editor του προγράμματος. “

Κατεβάστε το Kodu.

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

Τετάρτη 16 Δεκεμβρίου 2009

FPS Creator

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

Άρχισα να παίζω παιχνίδια με το atari 2600.Όπως καταλαβαίνεται πρόλαβα την ιστορία απο την αρχή της. Και ενώ όλοι παίζαμε, κάποιοι απο εμάς σκέφτηκαν για το πώς θα μπορούσαν να φτιάξουν κάτι δικό τους. Πρίν τα 3d παιχνίδια οι απλοί χρήστες είχαν όλα τα εργαλεία για να το κάνουν. Ένας compiler μίας γλώσσας (άν και συνήθως ήταν basic), ήταν αρκετός για να φτιάξουμε ένα text adventure ή ακόμα και δισδιάστατα παιχνίδια. Έτσι και αλλίως και τα παιχνίδια εμπορίου ήταν φτιαγμένα απο ένα,δύο άτομα.

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

Το να προσπαθείς σήμερα να φτιάξεις ένα παιχνίδι μοιάζει με αστείο. Όταν η Electronic Arts απασχολεί κατα μέσο όρο 100-150 ανθρώπους για ένα παιχνίδι, ένα άτομο και χωρίς τις εξειδικευμένες γνώσεις δέν φαίνεται να καταφέρνει πολλά. Σε αυτό έρχονται να μας βοηθήσουν διάφορες εταιρίες που αναπτύσσουν εργαλεία τα οποία κάνουν λίγο πιο εύκολη την δουλεία ένος ερασιτέχνη. Και πάλι όμως θα χρειαστούμε πολύ διάβασμα,αρκετό χρόνο και τα κατάλληλα εργαλεία για να το πετύχουμε.

Ας δούμε λίγο τι πρέπει να ξέρουμε για να φτιάξουμε ένα παιχνίδι.
Προγραμματισμό
3D modeling
Animation
Βασικές γνώσεις προγραμμάτων επεξεργασίας εικόνας.
Βασικές γνώσεις προγραμμάτων επεξεργασιάς ήχου.
Βασικές γνώσεις προγραμμάτων επεξεργασίας βίντεο.
Καθόλου ζωή.

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

Οι επιλογές που έχουμε για αρχή είναι πολλές. Έχω ασχοληθεί κατά καιρούς με τις εξής μηχανές
Dark basic
Blitz 3d
Fps creator
Reality factory
3d game studio
Game maker
Unity 3d
Dx studio
Adventure studio
3d state
Original 3d


Oπότε μπορώ να σας προτείνω κάποιες λύσεις που θα σας διευκολύνουν στο να κάνετε το πάθος σας πραγματικότητα. Πρίν συνεχίσουμε να σας πώ οτι στο www.devmaster.net θα βρείτε αρκετές μηχανές παιχνιδιών ή άλλα προγράμματα για να αρχίσετε.

Πρίν αρχίσουμε θα βάλουμε στο μυαλό μας μια σοφή φράση. “Ο ελέφαντας τρώγεται ένα κομμάτι την φορά ”. Δυστυχώς δέν μπορούμε να φτιάξουμε το επόμενο doom3 ή το οblivion μέσα σε μια μέρα. Άρα να θυμάστε πάντα να απολαμβάνετε τα μικρά πράγματα για να μην τα παρατήσετε.

Θα αρχίσουμε με το πιο εύκολο πρόγραμμα απο όλα αυτά. Έτσι για να φτίαξουμε ένα γρήγορο και καλό αποτέλεσμα που με άλλες μηχανές θα θέλαμε μήνες.Θα δουλέψουμε με το Fps creator και θα φτιάξουμε ένα μικρό level με απλά πράγματα.

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

Οκ ας πούμε ότι η ιστορία εξελίσεται στον β' παγκόσμιο και στόχος μας είναι να σώσουμε έναν φυλακισμένο συνεργάτη μας απο τους ναζί (τρέχα γύρευε τώρα :P).Το προσχέδιο είναι αυτό.

Οι κόκκινες τελείες είναι οι εχθροί μας.Οι δύο πρώτοι θα μιλάνε οπότε θα έχουν την πλάτη γυρισμένη. Στην συνέχεια αντιμετωπίζουμε άλλους τρείς ώσπου να βρούμε σε κάποιο κελί τόν συνάδερφο μας (πράσινη τελεία).

Ας πάμε να φτιάξουμε το level μας.Πρώτα διαλέγουμε ενα segment. Οπώς θα έχετε δεί το Fps creator έχει έτοιμα μοντέλα και δέν χρειάζεται ακόμα να δημιουργήσουμε τπτ. Μετά πάμε στο markers και βάζουμε το player start όπως στο προσχέδιο. Δείτε λίγο εδώ τι αλλάζουμε στις ιδιότητες του παίχτη μας.

Στις ιδιότητες του player start πάμε με το να επιλέξουμε το player start και μετά δεξί κλίκ πάνω του. Και γενικά έτσι πάμε στις ιδιότητες του κάθε αντικειμένου.

Ας πάμε λίγο στα entities και ας βάλουμε έναν εχθρό. Για να δούμε λίγο της ιδιότητες του.Επειδή θέλουμε ένα stealth kill ας τους βάλουμε 10 live.

Ωραία. Στην συνέχεια θα μιλήσουμε λιγάκι για τα scripts .Τα scripts είναι οδηγίες για τον εχθρό- ή για μια κατάσταση - για το πώς θα κινηθεί.Ας πούμε οτι ο εχθρός θέλει να ψάχνει για τον παίχτη,μόλις τον δεί να πυροβολεί 3 φορές και μετά να ψάχνει για ένα ασφαλές μέρος να σωθεί. Αυτό είναι ένα script σε απλά λόγια. Το Fps creator έρχετε με έτοιμα scripts τα οποία και θα βάζουμε ανάλογα με το σενάριο του παιχνιδιού. Πρέπει να πειραματιστείτε αρκέτα με τα scripts ώστε να πετύχετε κάθε φορά την σωστή συμπεριφορά.

Εδώ είναι το level έτοιμο όπως φαίνεται στον editor.

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



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

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