SPACE INVADERS




spaceinvaders1.jpg

Contact


Tanase Ramona Gentiana, Facultatea de Automatica si Calculatoare, grupa 335CB
gentiana.tanase@gmail.com

Introducere


holidayers-rare-space-invaders-invasion-photographs-prove-their-existence-1.jpg

Scurt istoric

Space Invaders 1) este la baza un joc video arcade, adica o masinarie de divertisment ce functioneaza pe baza de fise.
A fost conceput de catre Tomohiro Nishikado si lansat in 1978. Jocul a fost fabricat initial si vandut in Japonia, iar ulterior, datorita succesului cu care s-a impus pe piata jocurilor, a fost autorizat pentru producţie in Statele Unite iar apoi s-a raspandit in intreaga lume devenind un punct de referinta in istoria jocurilor video. In proiectarea jocului, Nishikado s-a inspirat din cultura media: War of the Worlds, Star Wars. Space Invaders este unul dintre primele jocuri cu impuscaturi. Obiectivul este de a invinge “valuri” de straini cu un tun cu laser. Cu fiecare “extraterestru” impuscat, jucatorul acumuleaza puncte. Ca in orice joc, scopul este acumularea de cat mai multe puncte posibil.

Scop

Proiectul isi propune sa creeze acest joc cu ATMega16 si un ecran LCD NOKIA 3410 (Philips OM6206 ).

Motivatie

Mi s-a parut interesant sa construiesc jocul care a revolutionat lumea jocurilor video in anii ’80.


Descriere generala



Descriere joc

“Space Invaders” implementat de mine este un joc bidimensional in care jucatorul controleaza un tun cu laser prin mutarea lui pe orizontala de-a lungul partii de jos a ecranului. El trebuie sa se deplaseze stanga dreapta si sa traga in extraterestrii. Acestia isi pornesc traseul din partea de sus a ecranului si au o traiectorie verticala, descendenta. Sunt aliniati pe orizontala, dispusi unul langa altul.

Vom considera display-ul o matrice de MxN elemente. La inceperea jocului pe ecran se afla doar tunul jucatorului, pozitionat pe [0][N/2] (la mijlocul primei linii), apoi la un interval de o secunda, ultima linie (partea de sus a ecranului) este populata cu extraterestri. Urmatoarea secunda consta in deplasarea toturor elementelor de pe linia cu invadatori cu o pozitie mai jos, mergand pe coloane (decrementarea indicelui j, deoarece pornim cu indicii [0][0] din stanga-jos ecranului).

Jucatorul trebuie sa se asigure ca nici un “strain” nu reuseste sa patrunda in teritorul sau, adica sa atinga partea de jos a ecranului. Daca acest lucru se intampla, jocul se termina si va fi afisat pe ecran un mesaj corespunzator “GAME OVER” “You Lost!”. Infrangerea strainilor aduce un nou val, aceasta buclă putand continua la nesfârşit. Totusi de precizat ca nivelul de dificultate creste, asadar cu fiecare linie (val) invins, extraterestrii isi maresc viteza de coborare.

In jocul original invadatorii aveau posibilitatea sa traga in jucator, acest lucru nu l-am implementat. Proiectilele vor iesi doar din tunul jucatorului si implicit acesta va fi invins doar in cazul in care extraterestrii ajung pe linia cu indicele 0. In jocul original exista si cazul 2, in care jucatorul este nimerit de un proiectil advers. Avand in vedere gradul mai mic de dificultate, am ales sa nu ofer 3 vieti jucatorului (asa cum avea in jocul de baza) ci la prima infrangere jocul ia sfarsit.

Schema bloc cu modulele proiectului





  • am folosit un display de Nokia 3410 - Philips OM6206(102 x 65)
  • afisarea este monocolora (culoare neagra pe fundal alb)




Hardware Design



Am folosit urmatoarele componenete:

?10

  • placa de baza din etapa 1 - poza fiecarei componente gasiti aici
    • (lista componentelor pentru placa de baza in partea dreapta)
  • 4 butoane
    • LEFT
    • RIGHT
    • SHOOT
    • START
  • display Philips OM6206(102×65) - de Nokia 3410
    • pinout pentru LCD
      • Pin1 → Vdd
      • Pin2 → Sclk
      • Pin3 → Sdata
      • Pin4 → D/_C
      • Pin5 → _Sce (enable)
      • Pin6 → Gnd
      • Pin7 → Vlcd
      • Pin8 → Reset
  • diode (IN4007)
    • pentru a reduce tensiunea de 5V de la ATMega16 la 3.3 suportata de ecran
  • rezistente (3k3 si 1k8)
    • pentru tensiunile de input pentru display



Schema finala




Software Design



Pentru implementarea lucrului cu LCD Nokia 3310 am folosit un api de la Quantum.
Stim ca lcd-ul are dimensiunea de 48×84 deci pentru reprezentarea lui optima vom folosi: unsigned char lcd[48][11] . Am ales de 48 pentru a reprezenta intreaga inaltime a lcd-ului si 11 pentru ca avem 84. Desi am alocat 88 de biti pentru un rand vom folosi numai 84. Din al 11-lea octet vom folosi doar primii 4 biti. Am definit in lcd.c urmatoarea functie:

	void lcd_put_line(unsigned char poz)

care transmite lcd-ului numai un octet primit ca parametru.

Pentru construirea si afisarea unui octet de la o anumita pozitie am folosit urmatoarea secventa de cod:

	i = y
	j = x/8;
	k = x%8;
	lcd[i][j] &= ~(1<<k);
	//lcd[i][j] |= (1<<k);
	i = i/8;
	i = i*8;
	c = 0x00;
	for( p = 0 ; p < 8  ; p ++)
	{
		if( lcd[i+p][j] & (1<<k) )
			c |= (1<<p);
	}
	lcd_go_zero();
	lcd_goto_xy_exact(x+1,i/8+1);
	lcd_put_line(c);

Nava va fi desenata astefel:

	
   *
  ***
 *****
*******
	

Algoritm :

bucla infinita
{	
	1) stergem bombele din pozitia curenta
	2) afisam bombele la urmatoarea pozitie daca au ajuns la caramizi
	3) daca bomba respectiva a ajuns la caramizi stergem o bucata de 8 pixeli(caramida)
	4) daca buton pentru left este s-a apasat atunci :
		41) stergem marginea din dreapta a navei
		42) afisam noua margine din stanga a navei
	5) daca butonul pentru right este apasat 
		51) stergem partea din stanga a navei
		52) afisam noua margine din dreapta a navei
	
	6) daca butonul pentru bombe este apasat atunci vom crea o bomba de la coordonatele egale 
		cu x bomba = x centru nava si y bomba  = y varf nava
	7) punem un nou rand de caramizi
}



Am facut schema in Proteus pentru a putea testa functionalitatea programului avand in vedere ca realizarea partii hardware a durat mai mult decat ma asteptam in principal datorita problemelor legate de conecatarea LCD-ului. Schema de mai jos urmareste schema de mai sus realizata in eagle. Am pus in partea de download atat fisierul .sch cat si .DSN in arhiva “scheme_tanase_ramona.zip”. Eu am intampinat probleme la acest capitol deoarece mereu am gasit print screen-uri si nu fisierele propriu-zise ca sa pot afla detalii despre componente sau sa vad in ce librarie se afla. Recomand forum-uri sau site-uri cu proiecte in avr in care gasiti si schemele.



Rezultate obtinute



sdc14716_tanaseramona.jpg sdc14703.jpg sdc14721_tanaseramona.jpg


Download

1) スペースインベーダー – numele in Japoneza
pm/prj2010/mcarjaliu/spaceinvaders.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0