test avoid bulled game

Dependencies:   C12832_lcd LCD_fonts mbed mbed-rtos

Committer:
kaku_jyoko
Date:
Tue Dec 13 11:55:17 2016 +0000
Revision:
39:e8d6dd3c75c7
Parent:
38:63b99151e218
Child:
40:ec5c1b305b9a
change convert, jump speed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
th_mbed 0:26e5e770f91b 1 #include "mbed.h"
th_mbed 0:26e5e770f91b 2 #include "C12832_lcd.h"
th_mbed 0:26e5e770f91b 3 #include "Arial_9.h"
th_mbed 0:26e5e770f91b 4 #include "Small_7.h"
th_mbed 0:26e5e770f91b 5 #include "graphics.h"
kaku_jyoko 4:0fe59e58def9 6 #include "models.h"
kaku_jyoko 4:0fe59e58def9 7 #include "rtos.h"
kaku_jyoko 5:651879f4f047 8 #include "point.h"
kaku_jyoko 29:7784b098ef1d 9 #include "stdlib.h"
kaku_jyoko 32:abb3086c210d 10 #include "convert.h"
th_mbed 0:26e5e770f91b 11
th_mbed 0:26e5e770f91b 12 C12832_LCD lcd;
th_mbed 0:26e5e770f91b 13
kaku_jyoko 4:0fe59e58def9 14 // down: p12, left: p13, center: p14, up: p15, right: p16
kaku_jyoko 5:651879f4f047 15 InterruptIn button(p14);
kaku_jyoko 29:7784b098ef1d 16 AnalogIn aIn(p20);
kaku_jyoko 5:651879f4f047 17 DigitalOut led1(LED1);
kaku_jyoko 4:0fe59e58def9 18
kaku_jyoko 5:651879f4f047 19 Mutex jump_mtx;
kaku_jyoko 5:651879f4f047 20 Mutex update_mtx;
kaku_jyoko 4:0fe59e58def9 21 int jump_flag = 0;
kaku_jyoko 6:e63641e13374 22 Person h;
kaku_jyoko 29:7784b098ef1d 23 Stage stage;
kaku_jyoko 18:0f6f2aa2339d 24 Serial pc(USBTX, USBRX); // tx, rx
kaku_jyoko 18:0f6f2aa2339d 25 Bullet* b = NULL;
kaku_jyoko 19:55f3114f3996 26 Timer t;
kaku_jyoko 29:7784b098ef1d 27 int white_board[LCD_Y][LCD_X];
kaku_jyoko 29:7784b098ef1d 28 int* wall_height;
kaku_jyoko 18:0f6f2aa2339d 29
kaku_jyoko 29:7784b098ef1d 30 void reset_white_board()
kaku_jyoko 29:7784b098ef1d 31 {
kaku_jyoko 29:7784b098ef1d 32 for(int i = 0; i < LCD_Y; i++){
kaku_jyoko 29:7784b098ef1d 33 for (int j = 0; j < LCD_X; j++){
kaku_jyoko 29:7784b098ef1d 34 white_board[i][j] = 0;
kaku_jyoko 29:7784b098ef1d 35 }
kaku_jyoko 29:7784b098ef1d 36 }
kaku_jyoko 29:7784b098ef1d 37 }
kaku_jyoko 29:7784b098ef1d 38
kaku_jyoko 29:7784b098ef1d 39 void make_wall(){
kaku_jyoko 29:7784b098ef1d 40 wall_height = stage.getStage();
kaku_jyoko 29:7784b098ef1d 41 for(int i = 0; i < LCD_Y; i++){
kaku_jyoko 29:7784b098ef1d 42 for(int j = 0; j < LCD_X ; j++){
kaku_jyoko 39:e8d6dd3c75c7 43 if(wall_height[j] > (LCD_Y - 1 - i)){
kaku_jyoko 37:f5d98f22b6bd 44 white_board[i][j] = 1;
kaku_jyoko 29:7784b098ef1d 45 }
kaku_jyoko 29:7784b098ef1d 46 }
kaku_jyoko 29:7784b098ef1d 47 }
kaku_jyoko 39:e8d6dd3c75c7 48 //print wall int
kaku_jyoko 39:e8d6dd3c75c7 49 // for(int i = 0; i < LCD_X; i++){
kaku_jyoko 39:e8d6dd3c75c7 50 // printf("line %d height: %d ",i, wall_height[i]);
kaku_jyoko 39:e8d6dd3c75c7 51 // for(int j = 0; j < LCD_Y; j++){
kaku_jyoko 39:e8d6dd3c75c7 52 // printf("%d ",white_board[j][i]);
kaku_jyoko 39:e8d6dd3c75c7 53 // }
kaku_jyoko 39:e8d6dd3c75c7 54 // printf("\n");
kaku_jyoko 39:e8d6dd3c75c7 55 // }
kaku_jyoko 39:e8d6dd3c75c7 56 // printf("\n");
kaku_jyoko 39:e8d6dd3c75c7 57
kaku_jyoko 29:7784b098ef1d 58 }
kaku_jyoko 4:0fe59e58def9 59
kaku_jyoko 5:651879f4f047 60 void a(){
kaku_jyoko 6:e63641e13374 61 h.jump();
kaku_jyoko 4:0fe59e58def9 62 }
kaku_jyoko 4:0fe59e58def9 63
kaku_jyoko 18:0f6f2aa2339d 64 void jump_receive(void const *argument){
kaku_jyoko 4:0fe59e58def9 65 while(true){
kaku_jyoko 6:e63641e13374 66 jump_mtx.lock();
kaku_jyoko 6:e63641e13374 67 button.rise(&a);
kaku_jyoko 6:e63641e13374 68 jump_mtx.unlock();
kaku_jyoko 6:e63641e13374 69 //Thread::wait(0.1);
th_mbed 0:26e5e770f91b 70 }
kaku_jyoko 5:651879f4f047 71 }
kaku_jyoko 5:651879f4f047 72
kaku_jyoko 18:0f6f2aa2339d 73 void bullet_receive(void const *argument){
kaku_jyoko 18:0f6f2aa2339d 74 point start;
kaku_jyoko 18:0f6f2aa2339d 75 start.x = 127;
kaku_jyoko 18:0f6f2aa2339d 76 start.y = 27;
kaku_jyoko 18:0f6f2aa2339d 77 char c;
kaku_jyoko 18:0f6f2aa2339d 78 while(true){
kaku_jyoko 19:55f3114f3996 79 t.start();
kaku_jyoko 18:0f6f2aa2339d 80 c = pc.getc();
kaku_jyoko 19:55f3114f3996 81 if(c == 'a' && t.read() > 5.0){
kaku_jyoko 19:55f3114f3996 82 b = NULL;
kaku_jyoko 18:0f6f2aa2339d 83 b = &Bullet(start, 2);
kaku_jyoko 19:55f3114f3996 84 t.reset();
kaku_jyoko 18:0f6f2aa2339d 85 }
kaku_jyoko 18:0f6f2aa2339d 86 }
kaku_jyoko 18:0f6f2aa2339d 87 }
kaku_jyoko 18:0f6f2aa2339d 88
th_mbed 31:17b4ee41bdc5 89 int line_judge(int a, int b, int c, int d){
th_mbed 31:17b4ee41bdc5 90 //if corrision, return 1
th_mbed 31:17b4ee41bdc5 91 if(b < c){
th_mbed 31:17b4ee41bdc5 92 return 0;
th_mbed 31:17b4ee41bdc5 93 }else if(d < a){
th_mbed 31:17b4ee41bdc5 94 return 0;
th_mbed 31:17b4ee41bdc5 95 }else{
th_mbed 31:17b4ee41bdc5 96 return 1;
th_mbed 31:17b4ee41bdc5 97 }
th_mbed 31:17b4ee41bdc5 98 }
th_mbed 31:17b4ee41bdc5 99
kaku_jyoko 29:7784b098ef1d 100 int corrision_judge(point p_person, point p_bullet){
kaku_jyoko 39:e8d6dd3c75c7 101 //printf("bullet x: %d, y: %d \n", p_bullet.x,p_bullet.y);
kaku_jyoko 39:e8d6dd3c75c7 102 // printf("person x: %d, y: %d \n", p_person.x,p_person.y);
kaku_jyoko 33:442498e281b1 103
th_mbed 31:17b4ee41bdc5 104 return (line_judge(p_person.x, p_person.x + PERSON_SIZE, p_bullet.x, p_bullet.x + BULLET_SIZE)
th_mbed 31:17b4ee41bdc5 105 && line_judge(p_person.y, p_person.y + PERSON_SIZE, p_bullet.y - 1, p_bullet.x - 4));
kaku_jyoko 29:7784b098ef1d 106 }
kaku_jyoko 29:7784b098ef1d 107
kaku_jyoko 5:651879f4f047 108 int main(){
kaku_jyoko 18:0f6f2aa2339d 109 point p_person, p_bullet;
kaku_jyoko 5:651879f4f047 110 printf("hello\n");
kaku_jyoko 18:0f6f2aa2339d 111 Thread jump_th(jump_receive);
kaku_jyoko 18:0f6f2aa2339d 112 Thread bullet_th(bullet_receive);
kaku_jyoko 29:7784b098ef1d 113 lcd.setmode(XOR);
kaku_jyoko 29:7784b098ef1d 114 int gameOver = 0;
kaku_jyoko 29:7784b098ef1d 115 srand((int)(aIn * 100));
th_mbed 36:b88fa8ff0be9 116 Converter converter;
kaku_jyoko 39:e8d6dd3c75c7 117 Bitmap picture;
kaku_jyoko 32:abb3086c210d 118
kaku_jyoko 5:651879f4f047 119 while(true){
kaku_jyoko 5:651879f4f047 120 update_mtx.lock();
kaku_jyoko 29:7784b098ef1d 121 reset_white_board();
kaku_jyoko 29:7784b098ef1d 122 make_wall();
kaku_jyoko 39:e8d6dd3c75c7 123 p_person = h.update(wall_height[3]);
kaku_jyoko 18:0f6f2aa2339d 124 if(b != NULL){
kaku_jyoko 18:0f6f2aa2339d 125 p_bullet = b->update();
kaku_jyoko 18:0f6f2aa2339d 126 }
kaku_jyoko 29:7784b098ef1d 127 //printf("bullet x: %d, y: %d \n", p_bullet.x,p_bullet.y);
th_mbed 36:b88fa8ff0be9 128 //printf("person x: %d, y: %d \n", p_person.x,p_person.y);
kaku_jyoko 29:7784b098ef1d 129 corrision_judge(p_person, p_bullet);
kaku_jyoko 39:e8d6dd3c75c7 130 picture = converter.convert(white_board);
kaku_jyoko 5:651879f4f047 131 update_mtx.unlock();
kaku_jyoko 6:e63641e13374 132 lcd.cls();
kaku_jyoko 18:0f6f2aa2339d 133 lcd.print_bm(bitmPlayer,p_person.x,p_person.y);
kaku_jyoko 39:e8d6dd3c75c7 134 lcd.print_bm(picture,0,0);
kaku_jyoko 18:0f6f2aa2339d 135 if(b != NULL){
kaku_jyoko 18:0f6f2aa2339d 136 lcd.print_bm(bitmBullet_graphics, p_bullet.x, p_bullet.y);
kaku_jyoko 18:0f6f2aa2339d 137 }
kaku_jyoko 5:651879f4f047 138 lcd.copy_to_lcd();
kaku_jyoko 6:e63641e13374 139 wait(0.02);
kaku_jyoko 6:e63641e13374 140 lcd.cls();
kaku_jyoko 18:0f6f2aa2339d 141 lcd.print_bm(bitmPlayerB,p_person.x,p_person.y);
kaku_jyoko 39:e8d6dd3c75c7 142 lcd.print_bm(picture,0,0);
kaku_jyoko 18:0f6f2aa2339d 143 if(b != NULL){
kaku_jyoko 18:0f6f2aa2339d 144 lcd.print_bm(bitmBullet_graphics, p_bullet.x, p_bullet.y);
kaku_jyoko 18:0f6f2aa2339d 145 }
kaku_jyoko 5:651879f4f047 146 lcd.copy_to_lcd();
kaku_jyoko 6:e63641e13374 147 wait(0.02);
kaku_jyoko 5:651879f4f047 148 }
kaku_jyoko 6:e63641e13374 149 }