Skip to content
This repository has been archived by the owner on Sep 23, 2024. It is now read-only.
/ myctiobarka Public archive

Project for the Structured Programming class, E.C.E A.U.Th

Notifications You must be signed in to change notification settings

chatziiola/myctiobarka

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 

Repository files navigation

MYCTIOBAPKA

Successfully graded Successfully graded

In essence this is a 2D sailing (multiplayer) game developed using ncurses

Συγγραφείς: Λαμπρινός Χατζηιωάννου και Γεώργιος Παναγιωτίδης για το μάθημα του δομημένου προγραμματισμού, 1ου εξαμήνου του τμήματος Ηλεκτρολόγων Μηχανικών και Mηχανικών Υπολογιστών του Α.Π.Θ., υπό την επίβλεψη του κ. Χρήστου Σεβαστιάδη.

Περίληψη

Το ΜΥCΤΙΟΒΑΡΚΑ είναι ένα ανταγωνιστικό παιχνίδι δύο παικτών, οι οποίοι χειρίζονται ιστιοφόρα. Στόχος του παιχνιδιού είναι ο παίκτης να οδηγήσει το σκάφος του στην αρχική θέση αφού ολοκληρώσει έναν περίπλου του νησιού. Οι κινήσεις διεξάγονται σε γύρους, όπου ο κάθε παίκτης ορίζει την κατεύθυνση του σκάφους με τρία key strokes. Παράλληλα, την πορεία του πλοίου επηρεάζει ο άνεμος, ο οποίος μεταβάλλεται τυχαία, τόσο σε ένταση όσο και σε κατεύθυνση ανά γύρο.

Η ένταση του ανέμου κυμαίνεται από 1 έως 4, και καθορίζει πόσες θέσεις θα μετακινηθεί το καράβι. Η κατεύθυνση του ανέμου προσδιορίζεται με ένα χρωματιστό βέλος: άσπρο για τιμή 1, πράσινο για τιμή 2, μπλε για τιμή 3, και κόκκινο για τιμή 4.

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

Οδηγίες Χρήσης - Ανάλυση

Έχει χρησιμοποιηθεί εκτενώς η λειτουργικότητα των shields.io για να δείξουμε την λειτουργικότητα των κουμπιών/επιλογών: button

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

  • Τερματισμό του παιχνιδιού (showExit()),
  • Προβολή Credits (showCredits()), από όπου ο χρήστης μπορεί να επιστρέψει στο μενού, και
  • Έναρξη του παιχνιδιού (PLAY).

Επιλέγοντας PLAY, ο παίκτης εισέρχεται στην εισαγωγική οθόνη του παιχνιδιού (showIntro()). Ακολουθεί η αρχικοποίηση των παικτών με την initPlayers(), όπου οι χρήστες δηλώνουν τα ονόματα (setPlayerName()) και τους χαρακτήρες τους (setPlayerChar()). Το παιχνίδι συνεχίζεται μέχρι να νικήσει κάποιος ή μέχρι να πατηθεί το πλήκτρο F1, οπότε τερματίζεται το παιχνίδι.

Η διαδικασία παιχνιδιού (playATurn()) περιλαμβάνει τα εξής βήματα:

  • Εμφάνιση του χάρτη (wprintCurrentState()),
  • Εμφάνιση των συντεταγμένων των παικτών (wprintPlayerData()),
  • Εμφάνιση του ανέμου για τον τρέχοντα γύρο (wprintAirArrow()),
  • Ζήτηση κινήσεων από κάθε παίκτη μέσω των βελών κατεύθυνσης, με δυνατότητα διόρθωσης (Backspace) και ολοκλήρωση με Enter,
  • Εναλλαγή κινήσεων μεταξύ των παικτών και του ανέμου.

Libraries Used

unistd.h

  • sleep(): Wait for a specified time.

ncurses.h

  • box(): Creates window borders.
  • cbreak(): Disable line buffering.
  • curs_set(): Controls cursor visibility (0 for invisible).
  • echo(): Makes typed characters visible.
  • endwin(): Ends the curses mode.
  • getch(): Reads a key from stdscr.
  • getmaxyx(): Retrieves the window size and coordinates.
  • init_pair(): Sets foreground and background colors.
  • initscr(): Starts curses mode.
  • keypad(): Enables function key input.
  • mvwaddch(): Moves cursor and adds character.
  • mvwinch(): Returns a character from the window.
  • mvwprintw(): Moves cursor and prints formatted output.
  • noecho(): Disables character echoing.
  • refresh(): Refreshes stdscr.
  • start_color(): Enables color mode.
  • waddch(): Adds character to the window.
  • attron(), attroff(): Turns on/off attributes.
  • wclear(): Clears window.
  • wgetch(): Reads character from window.
  • wgetstr(): Reads a string from the window.
  • wmove(): Moves cursor within window.
  • wrefresh(): Refreshes window.

menu.h

  • current_item(): Gets the current item in a menu.
  • free_item(): Frees an item.
  • free_menu(): Frees a menu.
  • item_name(): Gets the name of a menu item.
  • menu_driver(): Processes menu commands.
  • new_item(): Creates a new menu item.
  • new_menu(): Creates a menu.
  • post_menu(): Displays the menu.
  • set_menu_mark(): Sets the mark for the selected item.
  • set_menu_sub(): Defines a submenu.
  • set_menu_win(): Defines the window for the menu.
  • unpost_menu(): Hides the menu.

stdio.h

  • printf: Sends formatted output.

string.h

  • strcmp(): Compares two strings.

stdlib.h

  • calloc(): Allocates memory.
  • exit(): Terminates the program.
  • rand(): Generates random numbers.
  • srand(): Seeds the random number generator.

time.h

  • srand(time()): Seeds random number generator using the current time.

Πηγές

About

Project for the Structured Programming class, E.C.E A.U.Th

Topics

Resources

Stars

Watchers

Forks

Languages