X si 0

Padina Flavius 331CC

Introducere

X si 0 este unul dintre cele mai cunoscute jocuri ale copilariei.

Proectul a fost conceput pentru a realiza designul hardware si software necesr pentru a juca x si 0 pe ecranul LCD al unui Nokia 3310.

Descriere generală

Schema bloc a dispozitivului:

Hardware Design

Lista pieselor:

LCD NOKIA 3310

5 rezistente 3.3k

5 rezistente 1.8k

6 butoane

2 switchuri

3 diode 1N4148

Schema placutei:

Software Design

Limbajul de programare: C

Mediul de dezvoltare: WinAVR Programers Notepad

S-a folosit driverul de la Quantum Torque pentru LCD NOKIA 3310 modificandu-se functia main.c pentru a se putea juca x si 0 pe lcd.

Am legat placuta aditionala pe care am lipit butoanele si LCDul la porturile A si C ale placutei.

Astfel LCDul a fost legat la portul A iar butoanele la portul C

Implementarea

S-au folosit functiile:

void lcd_init(void); - pt initializare lcd

void lcd_contrast(unsigned char contrast); - stabilire contrast

void lcd_clear(void); - stergerea lcd-ului

void lcd_clear_area(unsigned char line, unsigned char startX, unsigned char endX); - stergerea unei portiuni din lcd

void lcd_clear_line(unsigned char line); - stergerea unei linii

void lcd_goto_xy(unsigned char x, unsigned char y); - mutarea cursorului

void lcd_goto_xy_exact(unsigned char x, unsigned char y); - mtarea cursorului

void lcd_chr(char chr); -scrierea unui caracter

void lcd_str(char* str); -scrierea unui sir de caractere

Am definit butoanele:

#define BL	PC7	//buton stanga
#define BR	PC3	//buton dreapta
#define BU	PC4	//buton sus
#define BD	PC5	//buton jos
#define BO	PC6	//buton ok
#define SS	PC0	//switch start
#define SM	PC1	//switch pentru modul single/multi player
#define BS 	PC2	//buton reset

S-au adaugat functii precum:

functie de initializare: void init()

printarea tablei de joc la un anumit moment de timp: void printare_matrice()

verificarea daca un jucator a castigat: int check_m(char bb[9],char pl)

intoarce jucatorul opus: char otherplayer(char ch)

functia de minimax:

int minimax(char bb[9],uint8_t occ,uint8_t depth,char ch){
uint8_t score,max=LOSS;
uint8_t i;
if(check_m(bb,ch)==1) return WIN*(10-depth);
if(check_m(bb,ch)==1) return LOSS*(10-depth);
if(occ>=9) return DRAW;
for(i=0;i<9;i++){
	if(bb[i]==' '){
		if(ch=='1') bb[i]='x';
		else bb[i]='0';
		score=-minimax(bb,occ+1,depth+1,otherplayer(ch));
		bb[i]=' ';
		if(score>max){
			max=score;
			if(depth==0){
				curI=i;
				}
			}
		}
	}
return max;
}

Rezultate Obţinute

Placuta de baza:

Placuta aditionala:

LCD NOKIA 3310:

Placuta aditionala + LCD:

Intregul proiect:

LCDul in timpul jocului:

Concluzii

Proictul a fost unul interesant, util si deosebit de ceea ce am facut pana acum.

Download

Bibliografie/Resurse

pm/prj2010/dtudose/jocxsi0.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