Programarea Calculatoarelor, seria CC

Tema 3

Data publicării: vineri, 10 decembrie 2010

Deadline: luni, 10 ianuarie 2011, ora 23:55


Precizări:



Cuprins

Introducere

Cerințe


Introducere

Tema presupune realizarea a clasicului joc Pac-Man, pe Linux/Windows, folosind biblioteca curses. Sursa se va numi pacman.c.

Puteți descărca de aici o arhivă ce conține exemplele, scheletul de cod și un fișier Makefile (pentru Linux).

Pentru a vă familiariza cu cerințele temei, puteți să vă jucați să testați Pac-Man aici.

De asemenea, puteți afla mai multe lucruri interesante despre lunga istorie a jocului pe Wikipedia.

În exemplu1.c și exemplu2 veți găsi un mod de utilizare a acestei biblioteci.

În exemplu1.c se arată cum poate fi folosită biblioteca pentru a afisa șiruri, pentru a muta un caracter afișat pe ecran la apăsarea anumitor taste, sau pentru a se efectua anumite acțiuni.

În exemplu2.c este prezentat un mod în care se poate determina ce tastă a fost apăsată sau dacă nicio tastă nu a fost apăsată.

Pentru mai multe detalii despre curses consultați linkurile:

Anul trecut, tema a constat în realizarea unui joc de snake. Puteți descărca de aici executabilele în format ELF (Linux) pentru unele dintre cele mai reușite teme.


Instalare curses pe Linux

Pentru a putea folosi curses va trebui să includeți curses.h cu #include <curses.h> și să linkați biblioteca curses (folosind -lcurses la compilare).

Pentru a folosi curses va trebui să instalați pachetul ncurses utilizând managerul de pachete implicit pe distribuția voastră de Linux (apt-get, yum, yast, etc..).

De exemplu, pe distribuția Ubuntu:

sudo apt-get install libncurses5-dev

Compilarea sursei se va face cu:

gcc pacman.c -lcurses

sau rulând, în directorul cu sursele, comanda:

make

Pentru a compila și exemplele, rulați comanda:

make exemple

Pentru semnalarea apăsării unei taste într-un interval de timp va trebui să includeți și unistd.h și sys/types.h (ca în exemplu2.c).

Dacă preferați să utilizați Code-Blocks, va trebui să adăugați la setările de linker și biblioteca curses:

Settings -> Compiler and Debugger -> Linker settings -> Add -> "curses"

Găsiți aici un screenshot.


Instalare curses pe Windows

Pentru a putea folosi curses pe Windows, cel mai simplu este să vă instalați IDE-ul Code-Blocks și să instalați package-ul pentru Windows, urmând instrucțiunile de la http://pdcurses.slashon.com/.


Dacă întâmpinați probleme în instalarea curses sau în compilarea și rularea exemplelor, cereți ajutorul pe forum.


Cerințe

Ținând cont că nu vă este impus un aspect anume pentru joc, ci doar anumite feature-uri pe care trebuie să le aibă veți primi puncte bonus pentru aspectul artistic al aplicației și pentru diverse îmbunătățiri sau idei originale pe care le aduceți. Precizați-le în README.


1. [20 puncte] Încărcare hartă

Creați folosind curses și pornind de la pacman.c un program care va încărca harta aflată în fișierul map.txt și o va desena pe ecran.

Hărțile sunt fișiere text, cu următorul format:

Se garantează că pe poziția (start_row, start_col) nu se va afla zid (prin urmare Pac-Man se va putea afla inițial în acea poziție).


Fișierul pacman.c poate fi un schelet pentru aplicația voastră și conține definirea a 2 structuri utile în rezolvarea temei, precum și antetele pentru funcțiile ce va trebui să le implementați la punctul 1:

* Deși toată memoria alocată este eliberată automat la ieșirea din program, o astfel de funcție este necesară în caz că programul ar suporta încărcarea unei alte hărți în timpul rulării. Atunci, memoria pentru vechea hartă ar trebui eliberată, deoarece nu mai este folosită în program.


Important! Puteți modifica structurile și funcțiile / parametrii pe care acestea le primesc după cum vă este necesar, dar va trebui ca implementarea voastră să respecte următoarele restricții:


De exemplu, la rularea aplicației, programul ar putea arăta așa:


2. [30 puncte] Mișcare Pac-Man

Pornind de la exemplu1.c, adăugați aplicației de la punctul 1 mișcarea lui Pac-Man la apăsarea tastelor de mișcare (puteți folosi săgețile sau orice alte taste; va trebui să precizați în README modul de utilizare).

Dacă Pac-Man se deplasează într-o poziție în care se află un pac-dot sau un power-pellet, acesta va fi "consumat" (va dispărea de pe hartă) și va fi incrementat scorul acumulat astfel:

Precizări:


3. [20 puncte] Mișcare Pac-Man automată

Pornind de la exemplu2.c, adăugați aplicației de la punctul 2 mișcarea automată a lui Pac-Man: acesta se mișcă încontinuu, cu o anumită viteză (dată de intervalul de timp setat între mișcări), iar la apăsarea unei taste i se schimbă direcția.

Sugestie: Veți avea o variabilă ce memorează direcția pe care se mișcă Pac-Man, iar la apăsarea unei taste de direcție se modifică doar această variabilă. Coordonatele se modifică în ambele cazuri (s-a apăsat sau nu o tastă de direcție), atunci când trece un anumit timp de la ultima mișcare.


4. [30 puncte] Inamicii

Adăugați aplicației de la punctul 3 cel puțin 2 inamici mișcători.

Precizări:

Câteva idei pe care le puteți folosi pentru a implementa mișcare inamicilor:


BONUSURI

Puteți implementa în plus orice doriți (nu uitați să precizați în README ce ați implementat și modul de utilizare). În funcție de complexitate, veți primi până la 50 puncte bonus.

Idei de bonusuri:

Se vor oferi puncte bonus și pentru aspectul estetic al jocului.