Gatech ECE 4180 Lab 4 Deal or No Deal Game -Alex Ferrara -Luke LeFeve
Dependencies: 4DGL-uLCD-SE SDFileSystem mbed wave_player
Diff: main.cpp
- Revision:
- 1:13d194e38ea6
- Parent:
- 0:a9fc9a400a0a
- Child:
- 3:0d3cadcd159b
diff -r a9fc9a400a0a -r 13d194e38ea6 main.cpp --- a/main.cpp Mon Oct 31 02:40:10 2016 +0000 +++ b/main.cpp Mon Oct 31 05:37:38 2016 +0000 @@ -1,57 +1,129 @@ #include "mbed.h" #include "uLCD_4DGL.h" +#include <math.h> void draw_case(int x, int y); void draw_case_grid(void); +void draw_single_case(int caseNum); +void flashCase(int caseNum); +void draw_banker_screen(void); uLCD_4DGL uLCD(p28,p27,p30); +bool isCase[] = {false,false,false,true,false,false,false,false,false,false,false,false}; +bool isOpen[] = {false,true,false,false,false,true,false,false,false,true,false,false}; int G_HANDLE_HEIGHT = 1; int G_HANDLE_LENGTH = 2; int G_CASE_HEIGHT = 2; int G_CASE_LENGTH = 3; -void draw_case(int x, int y, int scale){ - //uLCD.pen_size(1); +void draw_case(int x, int y, int scale, bool gold, bool open){ int HANDLE_HEIGHT = G_HANDLE_HEIGHT * scale; int HANDLE_LENGTH = G_HANDLE_LENGTH * scale; int CASE_HEIGHT = G_CASE_HEIGHT * scale; int CASE_LENGTH = G_CASE_LENGTH * scale; int HANDLE_OFFSET = (CASE_LENGTH - HANDLE_LENGTH) /2; + int c1,c2,c3; + (gold) ? (c1=0xfff08c) : (c1=LGREY); + (gold) ? (c2=0xc99700) : (c2=DGREY); + (gold) ? (c3= 0xFFDF00) : (c3=WHITE); //handle - uLCD.rectangle(x+HANDLE_OFFSET, y, x+HANDLE_OFFSET+HANDLE_LENGTH, y+HANDLE_HEIGHT, LGREY); + uLCD.rectangle(x+HANDLE_OFFSET, y, x+HANDLE_OFFSET+HANDLE_LENGTH, y+HANDLE_HEIGHT, c1); //main section - uLCD.filled_rectangle(x, y+HANDLE_HEIGHT, x+CASE_LENGTH, y+HANDLE_HEIGHT+CASE_HEIGHT, WHITE); - uLCD.rectangle(x, y+HANDLE_HEIGHT, x+CASE_LENGTH, y+HANDLE_HEIGHT+CASE_HEIGHT, LGREY); + uLCD.filled_rectangle(x, y+HANDLE_HEIGHT, x+CASE_LENGTH, y+HANDLE_HEIGHT+CASE_HEIGHT, c3); + uLCD.rectangle(x, y+HANDLE_HEIGHT, x+CASE_LENGTH, y+HANDLE_HEIGHT+CASE_HEIGHT, c2); //uLCD.printf("%d, %d",x+HANDLE_HEIGHT+(CASE_HEIGHT/2), y+CASE_LENGTH/2); -} -void draw_case_grid(void){ - uLCD.textbackground_color(WHITE); - //draw 12 cases - int text_offset_x = 7; - int text_offset_y = 4; - int xPos[] = {0,33,66,99};//,0,33,66,99,0,33,66,99]; - int yPos[] = {0,33,66}; - for(int i=0; i<12; i++){ - draw_case(xPos[i%4]+text_offset_x,yPos[i%3]+text_offset_y,7); - } - //print nums - uLCD.text_string("1", 2, 2, NULL, BLACK); - uLCD.text_string(" 2", 6, 2, NULL, BLACK); - uLCD.text_string(" 3", 11, 2, NULL, BLACK); - uLCD.text_string("4", 16, 2, NULL, BLACK); - uLCD.text_string("5", 2, 6, NULL, BLACK); - uLCD.text_string(" 6", 6, 6, NULL, BLACK); - uLCD.text_string(" 7", 11, 6, NULL, BLACK); - uLCD.text_string("8", 16, 6, NULL, BLACK); - uLCD.text_string("9", 2, 10, NULL, BLACK); - uLCD.text_string("10", 6, 10, NULL, BLACK); - uLCD.text_string("11", 11, 10, NULL, BLACK); - uLCD.text_string("12", 16, 10, NULL, BLACK); + if(open){ + uLCD.line(x,y,x+CASE_LENGTH,y+HANDLE_HEIGHT+CASE_HEIGHT,RED); + uLCD.line(x+1,y,x+CASE_LENGTH+1,y+HANDLE_HEIGHT+CASE_HEIGHT,RED); + uLCD.line(x-1,y,x+CASE_LENGTH-1,y+HANDLE_HEIGHT+CASE_HEIGHT,RED); -draw_case(20,100,8); + uLCD.line(x,y+HANDLE_HEIGHT+CASE_HEIGHT,x+CASE_LENGTH,y,RED); + uLCD.line(x+1,y+HANDLE_HEIGHT+CASE_HEIGHT,x+CASE_LENGTH+1,y,RED); + uLCD.line(x-1,y+HANDLE_HEIGHT+CASE_HEIGHT,x+CASE_LENGTH-1,y,RED); + } } +int text_offset_x = 7; +int text_offset_y = 4; +int xPos[] = {0,33,66,99};//,0,33,66,99,0,33,66,99}; +int yPos[] = {0,33,66};//0,0,0,33,33,33,33,66,66,66,66}; +char* caseLabel[] = {"1"," 2"," 3","4","5"," 6"," 7","8","9","10","11","12"}; +int labelCol[] = {2,6,11,16};//,2,6,11,16,2,6,11,16}; +int labelRow[] = {2,6,10};//2,2,2,6,6,6,6,10,10,10,10}; +void draw_case_grid(void){ + //draw 12 case grid + for(int i=0; i<12; i++){ + uLCD.text_mode(TRANSPARENT); + draw_case(xPos[i%4]+text_offset_x,yPos[i/4]+text_offset_y,7,isCase[i],isOpen[i]); + uLCD.text_string(caseLabel[i],labelCol[i%4],labelRow[i/4], NULL, BLACK); + } + uLCD.text_mode(OPAQUE); + draw_case(60,100,9, false, false); + uLCD.locate(9,14); + uLCD.textbackground_color(WHITE); + uLCD.printf("%d",12); + uLCD.textbackground_color(BLACK); + uLCD.color(GREEN); + uLCD.locate(0,13); + uLCD.printf("%d cases",3); + uLCD.locate(0,14); + uLCD.printf("left in"); + uLCD.locate(0,15); + uLCD.printf("round"); + uLCD.locate(10,15); + uLCD.printf("$%d",1000); +} +void flashCase(int caseNum){ + int i = caseNum - 1; + int scale = 8; + int tempX = xPos[i%4]+text_offset_x-1; + int tempY = yPos[i/4]+text_offset_y-1; + int HANDLE_HEIGHT = G_HANDLE_HEIGHT * scale; + int CASE_HEIGHT = G_CASE_HEIGHT * scale; + int CASE_LENGTH = G_CASE_LENGTH * scale; + for(int j=0;j<2;j++){ + uLCD.filled_rectangle(tempX,tempY,tempX+CASE_LENGTH+2,tempY+CASE_HEIGHT+HANDLE_HEIGHT+2,BLACK); + wait(0.2); + draw_single_case(i+1); + wait(0.2); + } +} +void draw_single_case(int caseNum){ + int i = caseNum-1; + uLCD.text_mode(TRANSPARENT); + draw_case(xPos[i%4]+text_offset_x,yPos[i/4]+text_offset_y,7,isCase[i],isOpen[i]); + uLCD.text_string(caseLabel[i],labelCol[i%4],labelRow[i/4], NULL, BLACK); +} + +int values[] = {1,5,10,20,50,100,250,500,1000,2500,5000,10000}; +char* valuesStr[] = {"1","5","10","20","50","100","$ 250","$ 500","$ 1k","$2.5k","$ 5k","$ 10k"}; +bool valueOpen[]= {true,false,true,false,true,false,true,false,false,true,false,false}; +void draw_banker_screen(void){ + //uLCD.locate(0,0); + //uLCD.printf("test"); + for(int i=0;i<6;i++){ + uLCD.locate(0,i); + (valueOpen[i]) ? uLCD.color(RED) : uLCD.color(GREEN); + uLCD.printf("$%d",values[i]); + } + for(int i=6;i<12;i++){ + //int j = ((int) log10((double)values[i]) + 1); + uLCD.locate(13,(i-6)); + (valueOpen[i]) ? uLCD.color(RED) : uLCD.color(GREEN); + /*char* val; + (values[i]>500) ? val=values[i] : valuesStr[i];*/ + uLCD.printf(valuesStr[i]); + } + uLCD.locate(0,8); + uLCD.printf("The banker's"); + uLCD.locate(0,9); + uLCD.printf("offer is: $%d",3784); +} int main() { + //uLCD.baudrate(299999); + //draw_case_grid(); + //wait(2); + //flashCase(2); - draw_case_grid(); + draw_banker_screen(); }