ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ - ΜΕΡΟΣ Γ'

Σχετικά έγγραφα
Προγραµµατισµός ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσμία: Τετάρτη 23/11/2016, 21:00

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 2 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΚΑΙ ΔΙΚΤΥΩΝ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/10, 23:59

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 13/1/13, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Πέµπτη 17/12/2015, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 7/1/2014, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 22/12/2016, 21:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσμία: 17/1/14, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: Τρίτη 4/11/2014, 22:00

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 3 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσμία: Τετάρτη 9/11/2016, 21:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 5/12/10, 23:59

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: 18/12/12, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: Τρίτη 10/11/2015, 22:00

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: 10/11/12, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 22/12/10, 23:59

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: 6/11/11, 22:00

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 27/11/11, 22:00

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραµµατισµός Ι Εργαστήριο 9ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 9 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

3 ο Εργαστήριο Μεταβλητές, Τελεστές

Προγραµµατισµός Ι Εργαστήριο 3ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 3 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

ΣΕΤ ΑΣΚΗΣΕΩΝ 3 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ Προθεσµία: 10/12/2014, 22:00

Επεξεργασία Αρχείων Κειµένου

Η άσκηση μπορεί να γίνει με συνεργασία το πολύ δυο φοιτητών, οι οποίοι θα λάβουν τον ίδιο βαθμό στην εργασία.

ΣΕΤ ΑΣΚΗΣΕΩΝ 3. Προθεσµία: Τετάρτη 7/12/2016, 21:00

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Εισαγωγή στον Προγραμματισμό

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: 25/11/13, 22:00

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Η/Υ (ΤΛ2007 )

Μεθόδων Επίλυσης Προβλημάτων

Προγραμματισμός Ι Εργαστήριο 9ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 9 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: 3/12/2018, 23:59

H ΓΛΩΣΣΑ C. Μάθηµα 7: Πίνακες. ηµήτρης Ψούνης

Προγραµµατισµός Ι ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 25/11/12, 22:00

Πίνακες. 1 Πίνακες. 30 Μαρτίου 2014

ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ, ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Η εντολή if-else. Η απλή μορφή της εντολής if είναι η ακόλουθη: if (συνθήκη) { Η γενική μορφή της εντολής ifelse. εντολή_1; εντολή_2;..

Προγραμματισμός Η/Υ (ΤΛ2007 )

Προγραμματισμός Ι Εργαστήριο 5ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 5 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

ζωγραφίζοντας µε τον υπολογιστή

Οι δείκτες στη γλώσσα C

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Κεφάλαιο 5ο: Εντολές Επανάληψης

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

οριακό PASS 402 PASS Πολύ σωστά, µπράβο οριακό PASS

abistarakis PASS - Σωστή κατασκευή tgz και ονοµασία αρχείων

Προγραμματισμός Ι Εργαστήριο 8ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 8 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Εργαστήριο 3 Εντολή for while, do while

Γραφικά υπολογιστών Εργαστήριο 10 Εισαγωγή στα Sprites

12. Συναρτήσεις (Μέρος ΙI)

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

ΣΕΤ ΑΣΚΗΣΕΩΝ 4 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ Προθεσµία: 9/1/2015, 22:00

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

LAB1 ΛΥΣΗ. Ευρετήριο απαντήσεων ανά τµήµα: Ευρετήριο απαντήσεων ανά µήνυµα λάθους/προειδοποίησης

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

Δείκτες & Πίνακες Δείκτες, Πίνακες

Επαναληπτικές δοµές. µτ α.τ. Όχι. ! απαγορεύεται µέσα σε µία ΓΙΑ να µεταβάλλουµε τον µετρητή! διότι δεν θα ξέρουµε µετά πόσες επαναλήψεις θα γίνουν

Εισαγωγή στον Προγραμματισμό

Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών

Προγραμματισμός Ι (ΗΥ120)

Βασικό Επίπεδο στο Modellus

ΕΡΓΑΣΤΗΡΙΟ 11 - Απαντήσεις

3 ο εργαστήριο Scratch for NinjaCoders

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

for for for for( . */

Master Mind εφαρμογή στη γλώσσα προγραμματισμού C

Παράδειγμα «Ημίτονο και ζωγραφική!»: Έχει δει στα μαθηματικά τη γραφική παράσταση της συνάρτησης του ημιτόνου; Σας θυμίζει κάτι η παρακάτω εικόνα;

Επανάληψη για τις Τελικές εξετάσεις

οµές (structures) Στην ενότητα αυτή θα µελετηθούν τα εξής επιµέρους θέµατα: Πίνακες δοµών, δείκτες σε δοµές, και αυτοαναφορικές δοµές.

BloodShed Dev C++ Οδηγίες Χρήσης (Συγγραφέας: Πάρις Πολύζος)

Μάθημα 1: Εισαγωγή. Κάνε κλικ την εντολή "κινήσου" και με το ποντίκι πατημένο μετέφερε τη στη περιοχή σεναρίων.

Αλγόριθμοι Ταξινόμησης Μέρος 1

Μεθόδων Επίλυσης Προβλημάτων

Πρόβληµα : Πώς θα λύναµε αυτό το πρόβληµα αν είχαµε µόνο χαρτί και µολύβι, και κάποιος µας έλεγε τους αριθµούς προφορικά?

Transcript:

ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ - ΜΕΡΟΣ Γ' ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2009-2010 Προθεσµία : ΚΥΡΙΑΚΗ 22/11/09, 23:59 Στόχοι Οι στόχοι αυτού του τµήµατος της εργασίας είναι: Εισαγωγή κίνησης Αλληλεπίδραση µε το χρήστη. Τι χρειάζεται να κάνετε ΔΙΑΒΑΣΤΕ ΟΛΗ ΤΗΝ ΕΚΦΩΝΗΣΗ ΚΑΙ ΞΕΚΙΝΗΣΤΕ ΝΩΡΙΣ! Στο προηγούµενο στάδιο γράψατε κώδικα που σχεδιάζει ένα ή δύο αντικείµενο στην οθόνη. Σε αυτό το στάδιο, το πρόγραµµά σας θα σχεδιάζει αρκετά στιγµιότυπα του κάθε αντικειµένου, σε τυχαίες θέσεις µε τυχαία µεγέθη και θα τα κινεί µε ένα απλό τρόπο, µε διάφορες ταχύτητες. Μπορείτε να µεταβάλετε επιπλέον χαρακτηριστικά, όπως για παράδειγµα το χρώµα. Ακολουθεί ακριβής περιγραφή του τι πρέπει να κάνει το πρόγραµµά σας. Στα παραδείγµατα παρακάτω θα χρησιµοποιηθεί το σχήµα του ψαριού. Εσείς προφανώς θα χρησιµοποιείτε τα δικά σας αντικείµενα. Ιδιότητες αντικειµένου Κάθε αντικείµενο που σχεδιάζουµε έχει κάποιες ιδιότητες: τη θέση του, το µέγεθός του, την ταχύτητά του και πιθανώς το χρώµα του, την κατεύθυνσή του, ακόµη και το αν ένα τµήµα του έχει ανεξάρτητη κίνηση ή όχι. Αν λοιπόν θέλουµε να εκπροσωπήσουµε ΕΝΑ αντικείµενο, πρέπει να δώσουµε τιµή σε κάθε µια από αυτές τις ποσότητες. Για κάθε ένα αντικείµενο που θέλετε να µετακινήσετε δηλώστε µια οµάδα µεταβλητών στις οποίες θα αποθηκευτούν τιµές που αντιπροσωπεύουν τις παραπάνω ιδιότητες. Αυτές οι µεταβλητές πρέπει να δηλωθούν ως καθολικές. Παράδειγµα: Αν θέλαµε να ζωγραφίσουµε ένα ψάρι στην οθόνη, θα χρειαζόµασταν τις εξής µεταβλητές: µια για τη θέση του στον άξονα x, µια για τη θέση του στον άξονα y, µια για το µέγεθός του και µία για την κατεύθυνσή του. Αν θέλαµε να ζωγραφίσουµε και δεύτερο ψάρι θα χρειαζόµασταν άλλες τόσες µεταβλητές για τις ιδιότητες του δεύτερου ψαριού Αρχικοποίηση µεταβλητών Για να εµφανιστούν τα αντικείµενα στην οθόνη πρέπει να δοθούν κάποιες αρχικές τιµές σε αυτές τις µεταβλητές. Κατασκευάστε µια συνάρτηση InitializeObjects() η οποία δεν παίρνει παραµέτρους, δεν επιστρέφει τίποτα, και στο σώµα της αρχικοποιεί όλες τις µεταβλητές που δηλώσατε. Χρησιµοποιήστε τη συνάρτηση rand() για να δώσετε τυχαίες - αλλά νόµιµες - τιµές σε τουλάχιστον µία από τις ιδιότητες θέση, µέγεθος, ταχύτητα. Καλέστε την InitializeObjects() µέσα από τη main, πριν από την κλήση στην initgraphics(); Δείτε το παράρτηµα Α για

πληροφορίες σχετικά µε τη συνάρτηση rand(). Τώρα, µπορείτε να εµφανίσετε τα αντικείµενα στην οθόνη. Μέσα στη mydisplay, καλέστε τις συναρτήσεις που ζωγραφίζουν τα αντικείµενα δίνοντας ως παραµέτρους τις µεταβλητές που κατασκευάσατε στο προηγούµενο βήµα. Κίνηση Μέχρι στιγµής, τα αντικείµενα δεν κινούνται. Για να µπορούµε να κινήσουµε τα αντικείµενα πρέπει πρώτα να ξέρουµε πώς το glut "ζωγραφίζει" στην οθόνη. Παρατηρείστε ότι η main() στο mygame.c περιέχει µια κλήση στη συνάρτηση glutmainloop() Η συνάρτηση αυτή περιέχει µια επανάληψη η οποία καλεί διαρκώς τη συνάρτηση σχεδιασµού (mydisplay) και τις συναρτήσεις εισόδου (mymouse, mykeyboard). Με άλλα λόγια φανταστείτε πως η glutmainloop() είναι κάπως έτσι: void glutmainloop() { while (1) { mydisplay(); mykeyboard(); mymouse(); Ο µόνος τρόπος τερµατισµού είναι µε εντολή exit µέσα από µια από τις myx συναρτήσεις (παρατηρήστε τον κώδικα στις mykeyboard και mymouse) Επιστρέφουµε τώρα στην κίνηση. Αν η mydisplay() περιέχει, για παράδειγµα, DrawFish(x, y, z, GO_LEFT); τότε, λόγω του κρυφού while στη glutmainloop, το πρόγραµµα ζωγραφίζει διαρκώς ένα ψάρι στη θέση (x, y), µε µέγεθος z και κατεύθυνση αριστερά. Για να µπορέσουµε να κάνουµε το ψάρι να κινείται, θα πρέπει σε κάθε επανάληψη να αλλάζουµε τη θέση του, δηλαδή να αντικαταστήσουµε τον παραπάνω κώδικα µε : x = x + bhma; DrawFish(x, y, z, GO_LEFT); Μην ξεχνάτε πως η αρχική τιµή του x έχει τεθεί στην InitializeObjects(). Το βήµα καθορίζει την ταχύτητα µε την οποία φαίνεται να κινείται το αντικείµενο. Το αν µεταβάλουµε το x, το y, ή και τα δύο, και το αν προσθέτουµε ή αφαιρούµε το βήµα καθορίζουν την κατεύθυνση κίνησης. Κάντε τα αντικείµενα να κινούνται προς κάποια κατεύθυνση (οριζόντια ή κατακόρυφα ή διαγώνια ή µε κάποιο πιο πολύπλοκο τρόπο) χρησιµοποιώντας την ιδέα της προηγούµενης παραγράφου. Όταν τα αντικείµενα φτάνουν στην άκρη της οθόνης, δεν πρέπει να εξαφανίζονται. Μπορείτε να τα κάνετε να αλλάξουν κατεύθυνση, ή να εµφανιστούν στην άλλη πλευρά της οθόνης ή να κάνουν γκελ, κτλ.

Αλληλεπίδραση µε το χρήστη Η αλληλεπίδραση µε το χρήστη επιτυγχάνεται µέσα από τις συναρτήσεις mymouse και mykeyboard. Η mymouse ανιχνεύει αν έχει κάνει click το ποντίκι (if (state == GLUT_DOWN) ), αν το κουµπί που πατήθηκε ήταν το αριστερό ( if (button == GLUT_LEFT) ) και αποθηκεύει στις µεταβλητές x και new_y, που εµφανίζονται ήδη µέσα στη συνάρτηση, τη θέση στην οποία έγινε το click. Ακολούθως µπορούµε να ελέξχουµε πού είναι αυτή η θέση σε σχέση µε τα αντικείµενά µας και να κάνουµε κάτι. Παράδειγµα: Στον κώδικα µε το ψάρι και το διαστηµόπλοιο, ελέγχουµε αν έγινε click εντός των ορίων του κουµπιού Quit, κι αν ναι, το πρόγραµµα τερµατίζει. Η mykeyboard ανιχνεύει αν έχει πατηθεί κάποιο πλήκτρο. Αν ναι, αυτό αποθηκεύεται αυτόµατα στην παράµετρο key. Ακολούθως, µπορούµε να ελέγξουµε την τιµή του και αναλόγως µε το ποιά είναι αυτή, να κάνουµε κάτι. Προσθέστε κώδικα στη mymouse και στη mykeyboard έτσι ώστε ανάλογα µε το τι πλήκτρο πατά ο χρήστης ή πού κάνει click στην οθόνη, να αλλάζει κάτι στην κατάσταση ενός ή περισσοτέρων κινούµενων αντικειµένων (πχ. αλλάζουν κατεύθυνση κίνησης, αλλάζουν µέγεθος, αλλάζουν χρώµα, κτλ.). Φοιτητές που επιθυµούν να προσθέσουν λειτουργικότητα που δεν καλύπτεται από τον κώδικα που σας έχουµε δώσει µέχρι τώρα (πχ. ανίχνευση κίνησης ποντικιού, χρήση ειδικών πλήκτρων όπως τα βελάκια, κτλ.), µπορούν να βρούν πληροφορίες στο glut tutorial. Για απορίες επάνω σε αυτά τα θέµατα, χρησιµοποιήστε το forum προγραµµατισµού ώστε να µπορούν να δούν όλοι τις απαντήσεις που θα σας δίνουµε. Μορφή κώδικα Τέλος, µην ξεχάσετε να βάλετε καλά σχόλια στο πρόγραµµά σας, να δίνετε περιγραφικά ονόµατα στις µεταβλητές και να έχετε καλή στοίχιση. Το πρόγραµµα αυτό θα γίνει αρκετά µεγάλο στο µέλλον, και όσο πιο καθαρογραµµένος και κατανοητός είναι ο κώδικας τώρα, τόσο πιο πολύ χρόνο θα εξοικονοµίσετε αργότερα. Πώς να παραδώσετε την εργασία σας Δηµιουργείστε ένα φάκελο µε όνοµα επώνυµο1_επώνυµο2 όπου επώνυµο1 και επώνυµο2 (αν υπάρχει) είναι τα επώνυµα των µελών της οµάδας. Αντιγράψτε το δικό σας mygame.c µέσα στο φάκελο. Συµπιέστε το φάκελο µε την εντολή tar ώστε να δηµιουργηθεί το επώνυµο1_επώνυµο2.tgz Το ένα µέλος της οµάδας πρέπει να αναλάβει να στείλει το tgz αρχείο. Το tgz αρχείο πρέπει να σταλεί συννηµένο σε email. Ο τίτλος (subject) πρέπει να είναι project 3. Η διεύθυνση που θα το στείλετε είναι ce120lab@gmail.com. Επίσης, στείλτε αντίγραφο (cc) και στα δύο µέλη της οµάδας. Μέσα στο σώµα του email γράψτε τα ονόµατα και αριθµούς µητρώου και των δύο µελών.

ΠΑΡΑΡΤΗΜΑ Α : ΠΑΡΑΓΩΓΗ ΤΥΧΑΙΩΝ ΑΡΙΘΜΩΝ Δεν είναι δυνατό για έναν υπολογιστή να παράγει πραγµατικά τυχαίους αριθµούς, αλλά µπορεί να παράγει "ψευδοτυχαίους" αριθµούς: µια ακολουθία αριθµών που προσεγγίζει τις ιδιότητες των τυχαίων αριθµών. Μια συνάρτηση που παράγει τυχαίους αριθµούς λειτουργεί ως εξής: 1. Ξεκινά από µια (κρυµµένη) αρχική τιµή η οποία λέγεται seed 2. Παράγει ένα ψευδοτυχαίο αριθµό από το seed µε βάση κάποιο αλγόριθµο 3. Χρησιµοποιεί τον αριθµό που παρήγαγε στο προηγούµενο βήµα ως αρχική τιµή (seed) για την επόµενη φορά που θα ζητήσουµε την παραγωγή ενός τυχαίου αριθµού (στο ίδιο πρόγραµµα). Μια συνέπεια της παραπάνω διαδικασίας είναι ότι αν το αρχικό seed είναι πάντα το ίδιο, τότε η ακολουθία αριθµών που παράγεται είναι πάντα η ίδια. Κάποιες φορές (πχ. για εύρεση λαθών) αυτό είναι επιθυµητό, αλλά γενικά θέλουµε να το αποφύγουµε. Αυτό µπορεί να επιτευχθεί αν θέσουµε ως seed την τρέχουσα ώρα. Για να παράγουµε ψευδοτυχαίους αριθµούς στη C κάνουµε τα εξής: Περιλαµβάνουµε το αρχείο πρωτοτύπων stdlib.h (περιέχει τις συναρτήσεις rand() και srand() ) και time.h (περιέχει τη συνάρτηση time() ) Στην αρχή του προγράµµατος καλούµε την srand() η οποία θέτει το seed. Ως seed θέτουµε την ώρα. Η πλήρης εντολή είναι srand( (int) time(null)); Η συνάρτηση time() επιστρέφει την τρέχουσα ώρα η οποία κωδικοποιείται ως ακέραιος (µε type cast). Η srand() πρέπει να χρησιµοποιείται ακριβώς µία φορά µέσα στο πρόγραµµα (προσέξτε να µην τη βάλετε ποτέ µέσα σε επανάληψη). Χρησιµοποιούµε τη rand() για να παράγουµε ένα ψευδοτυχαίο ακέραιο. Η rand() παράγει έναν ακέραιο ανάµεσα σε 0 και RAND_MAX. Η σταθερά RAND_MAX είναι ορισµένη (µε #define) µέσα στο stdlib.h και τυπικά είναι όσο ο µεγαλύτερος δυνατός ακέραιος. Αν θέλουµε να µειώσουµε το εύρος των τιµών, χρησιµοποιούµε τον τελεστή υπολοίπου (%). Για παράδειγµα, για να παράγουµε ένα ψευδοτυχαίο αριθµό µεταξύ 0 και 5, γράφουµε rand()%5. Για να παράγουµε ένα ψευδοτυχαίο αριθµό µεταξύ 4 και 9, γράφουµε rand()%5+4 Είναι πολύ σηµαντικό να προσέχουµε ώστε η κλήση στην srand να µη βρίσκεται, είτε άµεσα, είτε έµµεσα, µέσα σε επανάληψη. Αυτό θα έχει ως αποτέλεσµα το seed να είναι ίδιο για όλες τις επαναλήψεις που γίνονται κατά τη διάρκεια ενός δευτερολέπτου. Δείτε το πρόγραµµα στην επόµενη σελίδα ως ένα παράδειγµα χρήσης των srand(), rand()

#include<stdio.h> #include<stdlib.h> #include<time.h> int main (int argc, char *argv[]) { const int MIN = 1; /* i elaxisti timi pou tha paraxthei */ const int MAX = 10; /* i megisti timi pou tha paraxthei */ const int PLITHOS = 120; /* posoi arithmoi tha paraxthoun */ int i, number; srand( (int) time(null)); for ( i=0; i < PLITHOS; i++) { number = rand() % (MAX - MIN + 1) + MIN; printf("%d ", number); return 0;