test avoid bulled game
Dependencies: C12832_lcd LCD_fonts mbed mbed-rtos
Diff: main.cpp
- Revision:
- 57:873b89862cfb
- Parent:
- 56:2ab95bb6fbcc
- Child:
- 58:3f1b71a9318c
--- a/main.cpp Wed Dec 14 03:02:34 2016 +0000 +++ b/main.cpp Wed Dec 14 03:29:19 2016 +0000 @@ -18,7 +18,7 @@ Mutex jump_mtx; Mutex update_mtx; -int jump_flag = 0; +Mutex bullet_mtx; Person h; Stage stage; Serial pc(USBTX, USBRX); // tx, rx @@ -27,6 +27,7 @@ int white_board[LCD_Y][LCD_X]; int* wall_height; + void reset_white_board() { for(int i = 0; i < LCD_Y; i++){ @@ -47,32 +48,80 @@ } } -void a(){ +void call_jump(){ h.jump(); } void jump_receive(void const *argument){ while(true){ jump_mtx.lock(); - button.rise(&a); + button.rise(&call_jump); jump_mtx.unlock(); //Thread::wait(0.1); } } void bullet_receive(void const *argument){ + //bullet option + int fast = 4; + int normal = 3; + int slow = 2; + int high = 17; + int middle = 12; + int low = 7; + point start; start.x = 127; - start.y = 27; char c; while(true){ t.start(); c = pc.getc(); - if(c == 'a' && t.read() > 5.0){ + bullet_mtx.lock(); + if(c >= '1' && c <= '9' && t.read() > 5.0){ b = NULL; - b = &Bullet(start, 2); + switch(c){ + case '1': + start.y = LCD_Y - high; + b = &Bullet(start, slow); + break; + case '2': + start.y = LCD_Y - high; + b = &Bullet(start, normal); + break; + case '3': + start.y = LCD_Y - high; + b = &Bullet(start, fast); + break; + case '4': + start.y = LCD_Y - middle; + b = &Bullet(start, slow); + break; + case '5': + start.y = LCD_Y - middle; + b = &Bullet(start, normal); + break; + case '6': + start.y = LCD_Y - middle; + b = &Bullet(start, fast); + break; + case '7': + start.y = LCD_Y - low; + b = &Bullet(start, slow); + break; + case '8': + start.y = LCD_Y - low; + b = &Bullet(start, normal); + break; + case '9': + start.y = LCD_Y - low; + b = &Bullet(start, fast); + break; + default: + break; + } t.reset(); } + bullet_mtx.unlock(); } } @@ -83,9 +132,11 @@ else if(y>x){ return(y-x); } + return 0; } bool bullet_collision(point p_person, point p_bullet){ + //彈当たり判定 double person_center_x = p_person.x + PERSON_SIZE / 2; double person_center_y = p_person.y + PERSON_SIZE / 2; @@ -102,6 +153,7 @@ } bool wall_collision(point p_person){ + //壁衝突判定と穴落ち判定 int x = p_person.x + 5; int y = p_person.y + 6; if(wall_height[x - 1] > (LCD_Y - y)){ @@ -112,7 +164,6 @@ int main(){ point p_person, p_bullet; - printf("hello\n"); Thread jump_th(jump_receive); Thread bullet_th(bullet_receive); lcd.setmode(XOR); @@ -121,6 +172,11 @@ srand((int)(aIn * 100)); Converter converter; Bitmap picture; + printf("Bullet Option\n"); + printf(" slow normal fast\n"); + printf("high 1 2 3\n"); + printf("middle 4 5 6\n"); + printf("low 7 8 9\n"); while(true){ if(!gameover){ @@ -128,15 +184,14 @@ reset_white_board(); make_wall(); p_person = h.update(wall_height[3]); - // p_person = h.update(1); + //p_person = h.update(1); if(b != NULL){ p_bullet = b->update(); } - //printf("bullet x: %d, y: %d \n", p_bullet.x,p_bullet.y); - //printf("person x: %d, y: %d \n", p_person.x,p_person.y); - gameover = bullet_collision(p_person, p_bullet); - gameover = wall_collision(p_person); picture = converter.convert(white_board); + + gameover |= bullet_collision(p_person, p_bullet); + gameover |= wall_collision(p_person); update_mtx.unlock(); lcd.cls();