An easy way to make bitmaps to be drawn on a Nokia N5110 lcd display
Dependencies: N5110_fordrawings
Dependents: DCGame el14m2l_Dungeon_Crawler_Game
Diff: drawings.cpp
- Revision:
- 0:9fcda3ae181c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/drawings.cpp Thu May 05 14:26:07 2016 +0000 @@ -0,0 +1,390 @@ +/** +@file drawings.cpp + +@brief Member functions implementations + +*/ + +#include "drawings.h" + +extern Screen screen; + +void Screen::init() +{ + for(int i=0; i<3; i++) { + for(int j=0; j<48; j++) { + for(int k=0; k<84; k++) { + layers[j][k][i]=0; + } + } + } +} + +void Screen::set_pixel(int x, int y, int layer) +{ + layers[y][x][layer]=1; +} + +void Screen::clear_pixel(int x, int y, int layer) +{ + layers[y][x][layer]=2; +} + +void Screen::clear_layer(int layer) +{ + for(int i=0; i<48; i++) { + for(int j=0; j<84; j++) { + layers[i][j][layer]=0; + } + } +} + +void Screen::clear() +{ + for(int i=0; i<3; i++) { + clear_layer(i); + } +} + +void Screen::draw_layer(int layer) +{ + for(int i=0; i<48; i++) { + for(int j=0; j<84; j++) { + switch(layers[i][j][layer]) { + case 1: + lcd.setPixel(j,i); + break; + case 2: + lcd.clearPixel(j,i); + break; + default: + break; + } + } + } +} + +void Screen::draw() +{ + for(int i=0; i<3; i++) { + draw_layer(i); + } +} + +bool Screen::get_pixel(int x, int y, int layer) +{ + return layers[y][x][layer]; +} + +void object::fill(const char array[][3]) +{ + for(int i=0; i<height; i++) { + for(int j=0; j<width; j++) { + line[i][j] = array[i][j]; + } + } +} + +void object::fill(const char array[][5]) +{ + for(int i=0; i<height; i++) { + for(int j=0; j<width; j++) { + line[i][j] = array[i][j]; + } + } +} + +void object::fill(const char array[][6]) +{ + for(int i=0; i<height; i++) { + for(int j=0; j<width; j++) { + line[i][j] = array[i][j]; + } + } +} + +void object::fill(const char array[][13]) +{ + for(int i=0; i<height; i++) { + for(int j=0; j<width; j++) { + line[i][j] = array[i][j]; + } + } +} + +void object::fill(const char array[][25]) +{ + for(int i=0; i<height; i++) { + for(int j=0; j<width; j++) { + line[i][j] = array[i][j]; + } + } +} + +void object::draw(int x,int y) +{ + for(int i=0; i < height; i++) { + for(int j=0; j < width; j++) { + switch(line[i][j]) { + case 1: + lcd.setPixel(x+j,y-i); + break; + case 2: + lcd.clearPixel(x+j,y-i); + break; + default: + break; + } + } + } +} + +void object::draw_screen(int x,int y, int layer) +{ + for(int i=0; i < height; i++) { + for(int j=0; j < width; j++) { + switch(line[i][j]) { + case 1: + screen.set_pixel(x+j,y-i,layer); + break; + case 2: + screen.clear_pixel(x+j,y-i,layer); + break; + default: + break; + } + } + } +} + +void object::set(int _width,int _height) +{ + width = _width; + height = _height; + line = new char*[height]; + for(int i=0; i<height; i++) { + line[i] = new char[width]; + } +} + +bool object::check_collision(int x, int y) +{ + for(int j=0; j<width; j++) { + if(screen.get_pixel(x+j,y-height,GAME)) { + return 1; + } + } + return 0; +} + +void animation::draw(int x,int y) +{ + switch(state) + { + case 0: + state1.draw(x,y); + if(counter == divider) + { + counter = 0; + if(next == 0) + { + state = 1; + break; + } + else + { + state = 2; + break; + } + } + else + { + counter++; + break; + } + case 1: + state2.draw(x,y); + if(counter == divider) + { + counter = 0; + state = 0; + next = 1; + break; + } + else + { + counter++; + break; + } + case 2: + state3.draw(x,y); + if(counter == divider) + { + counter = 0; + state = 0; + next = 0; + break; + } + else + { + counter++; + break; + } + } +} + +void animation::draw_screen(int x,int y, int layer) +{ + switch(state) + { + case 0: + state1.draw_screen(x,y,layer); + if(counter == divider) + { + counter = 0; + if(next == 0) + { + state = 1; + break; + } + else + { + state = 2; + break; + } + } + else + { + counter++; + break; + } + case 1: + state2.draw_screen(x,y,layer); + if(counter == divider) + { + counter = 0; + state = 0; + next = 1; + break; + } + else + { + counter++; + break; + } + case 2: + state3.draw_screen(x,y,layer); + if(counter == divider) + { + counter = 0; + state = 0; + next = 0; + break; + } + else + { + counter++; + break; + } + } +} + +void Background::init() +{ + for(int i=0; i<48; i++) { + for(int j=0; j<84; j++) { + wall[i][j]=0; + } + } + //sets the mark_ver's + mark_hor_obj.draw_screen(21,22,BG); + mark_ver_obj.draw_screen(36,36,BG); + mark_ver_obj.draw_screen(55,12,BG); + mark_hor_obj.draw_screen(68,18,BG); + mark_ver_obj.draw_screen(81,28,BG); + //sets the mark_hor's + mark_hor_obj.draw_screen(7,14,BG); + mark_hor_obj.draw_screen(18,23,BG); + mark_hor_obj.draw_screen(31,24,BG); + mark_ver_obj.draw_screen(42,11,BG); + mark_ver_obj.draw_screen(76,37,BG); + //sets the rocks' + rocks_obj.draw_screen(13,42,BG); + rocks_obj.draw_screen(38,42,BG); + rocks_obj.draw_screen(65,42,BG); +} + +void Background::fill(char array[48][84][3]) +{ + for(int i=0; i<48; i++) { + for(int j=0; j<84; j++) { + wall[i][j] = array[i][j][BG]; + } + } +} + +void Background::draw() +{ + int x; + for(int i=83; i>-1; i--) { + for(int j=0; j<48; j++) { + switch(wall[j][i]) { + case 1: + if((i-counter)>=0) { + x=i-counter; + } else { + x=84+(i-counter); + } + lcd.setPixel(x,j); + break; + case 2: + if((i-counter)>=0) { + x=i-counter; + } else { + x=84+(i-counter); + } + lcd.clearPixel(x,j); + break; + default: + break; + } + } + } + counter++; + if(counter>84) { + counter=0; + } +} + +void Background::draw_screen(int layer) +{ + int x; + for(int i=83; i>-1; i--) { + for(int j=0; j<48; j++) { + switch(wall[j][i]) { + case 1: + if((i-counter)>=0) { + x=i-counter; + } else { + x=84+(i-counter); + } + screen.set_pixel(x,j,layer); + break; + case 2: + if((i-counter)>=0) { + x=i-counter; + } else { + x=84+(i-counter); + } + screen.clear_pixel(x,j,layer); + break; + default: + break; + } + } + } + counter++; + if(counter>84) { + counter=0; + } +} \ No newline at end of file