test avoid bulled game

Dependencies:   C12832_lcd LCD_fonts mbed mbed-rtos

main.cpp

Committer:
kaku_jyoko
Date:
2016-12-12
Revision:
33:442498e281b1
Parent:
32:abb3086c210d
Parent:
31:17b4ee41bdc5
Child:
36:b88fa8ff0be9
Child:
37:f5d98f22b6bd

File content as of revision 33:442498e281b1:

#include "mbed.h"
#include "C12832_lcd.h"
#include "Arial_9.h"
#include "Small_7.h"
#include "graphics.h"
#include "models.h"
#include "rtos.h"
#include "point.h"
#include "stdlib.h"
#include "convert.h"

C12832_LCD lcd;

// down: p12, left: p13, center: p14, up: p15, right: p16
InterruptIn button(p14);
AnalogIn aIn(p20);
DigitalOut led1(LED1);

Mutex jump_mtx;
Mutex update_mtx;
int jump_flag = 0;
Person h;
Stage stage;
Serial pc(USBTX, USBRX); // tx, rx
Bullet* b = NULL;
Timer t;
int white_board[LCD_Y][LCD_X];
int* wall_height;

void reset_white_board()
{
    for(int i = 0; i < LCD_Y; i++){
        for (int j = 0; j < LCD_X; j++){
            white_board[i][j] = 0;
        }
    }
}

void make_wall(){
    wall_height = stage.getStage();
    for(int i = 0; i < LCD_Y; i++){
        for(int j = 0; j < LCD_X ; j++){
            if(wall_height[i] > (LCD_Y - 1 - j)){
                white_board[i][j] = white_board[i][j] ^ 1;
            }
        }
    }
}

void a(){
    h.jump();
}

void jump_receive(void const *argument){
    while(true){
        jump_mtx.lock();
        button.rise(&a);
        jump_mtx.unlock();
        //Thread::wait(0.1);
    }
}

void bullet_receive(void const *argument){
    point start;
    start.x = 127;
    start.y = 27;
    char c;
    while(true){
        t.start();
        c = pc.getc();
        if(c == 'a' && t.read() > 5.0){
            b = NULL;
            b = &Bullet(start, 2);
            t.reset();
        }
    }
}

int line_judge(int a, int b, int c, int d){
    //if corrision, return 1
    if(b < c){
        return 0;
    }else if(d < a){
        return 0;
    }else{
        return 1;
    }
}

int corrision_judge(point p_person, point p_bullet){
    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);

    return (line_judge(p_person.x, p_person.x + PERSON_SIZE, p_bullet.x, p_bullet.x + BULLET_SIZE)
    && line_judge(p_person.y, p_person.y + PERSON_SIZE, p_bullet.y - 1, p_bullet.x - 4));
}

int main(){
    point p_person, p_bullet;
    printf("hello\n");
    Thread jump_th(jump_receive);
    Thread bullet_th(bullet_receive);
    lcd.setmode(XOR);
    int gameOver = 0;
    srand((int)(aIn * 100));
    Converter converter();
//    Bitmap picture;
    
    while(true){
        update_mtx.lock();
        reset_white_board();
        make_wall();
        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);
        corrision_judge(p_person, p_bullet);
        Bitmap picture = converter.convert(white_board);
        update_mtx.unlock();
        lcd.cls();
        lcd.print_bm(bitmPlayer,p_person.x,p_person.y);
        if(b != NULL){
            lcd.print_bm(bitmBullet_graphics, p_bullet.x, p_bullet.y);
        }
        lcd.copy_to_lcd();
        wait(0.02);
        lcd.cls();
        lcd.print_bm(bitmPlayerB,p_person.x,p_person.y);
        if(b != NULL){
            lcd.print_bm(bitmBullet_graphics, p_bullet.x, p_bullet.y);
        }
        lcd.copy_to_lcd();
        wait(0.02);
    }
}