Quick and horrible speech engine
main.cpp@12:37d999e445ad, 2018-10-20 (annotated)
- Committer:
- spinal
- Date:
- Sat Oct 20 15:16:16 2018 +0000
- Revision:
- 12:37d999e445ad
- Parent:
- 11:a573cacdc078
- Child:
- 13:0333e08d59e6
simple snake type ting that uses the analog stick on Pokitto
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Pokitto | 0:2d2a3994d55d | 1 | #include "Pokitto.h" |
Pokitto | 0:2d2a3994d55d | 2 | |
Pokitto | 0:2d2a3994d55d | 3 | Pokitto::Core mygame; |
spinal | 12:37d999e445ad | 4 | Pokitto::Display d; |
Pokitto | 0:2d2a3994d55d | 5 | |
spinal | 12:37d999e445ad | 6 | mbed::DigitalOut jh_rumble(EXT0); |
spinal | 12:37d999e445ad | 7 | mbed::DigitalIn jh_b1(EXT15); |
spinal | 12:37d999e445ad | 8 | mbed::DigitalIn jh_b2(EXT14); |
spinal | 12:37d999e445ad | 9 | mbed::AnalogIn jh_x(EXT1); |
spinal | 12:37d999e445ad | 10 | mbed::AnalogIn jh_y(EXT2); |
spinal | 12:37d999e445ad | 11 | |
spinal | 12:37d999e445ad | 12 | #define ANALOG 256 |
spinal | 12:37d999e445ad | 13 | #define DECAY .85 |
spinal | 12:37d999e445ad | 14 | #define SEGSIZE 7 |
spinal | 12:37d999e445ad | 15 | #define number_of_segments 10 |
spinal | 12:37d999e445ad | 16 | #define MOVEANGLE .25 |
spinal | 12:37d999e445ad | 17 | |
spinal | 12:37d999e445ad | 18 | //Sprite structure |
spinal | 12:37d999e445ad | 19 | typedef struct |
spinal | 12:37d999e445ad | 20 | { |
spinal | 12:37d999e445ad | 21 | int x,y,oldx,oldy; //location |
spinal | 12:37d999e445ad | 22 | int xSpeed, ySpeed; //speed |
spinal | 12:37d999e445ad | 23 | char frame; // body gfx |
spinal | 12:37d999e445ad | 24 | }Sprite; |
spinal | 12:37d999e445ad | 25 | Sprite marbles[number_of_segments]; |
spinal | 12:37d999e445ad | 26 | |
spinal | 11:a573cacdc078 | 27 | |
spinal | 12:37d999e445ad | 28 | bool move_tail(void){ |
spinal | 12:37d999e445ad | 29 | int pos_x,pos_y; |
spinal | 12:37d999e445ad | 30 | int bodySize = SEGSIZE*512; |
spinal | 12:37d999e445ad | 31 | bool collision = false; |
spinal | 12:37d999e445ad | 32 | for(int t=1; t<number_of_segments; t++){ |
spinal | 12:37d999e445ad | 33 | // float rotation = atan2((float)marbles[t].y-marbles[t-1].y,(float)marbles[t].x-marbles[t-1].x); |
spinal | 12:37d999e445ad | 34 | /* |
spinal | 12:37d999e445ad | 35 | // rotate the head graphic |
spinal | 12:37d999e445ad | 36 | if(t==1) |
spinal | 12:37d999e445ad | 37 | { |
spinal | 12:37d999e445ad | 38 | int rot = rotation*(180 / 3.14159); |
spinal | 12:37d999e445ad | 39 | rot+=90; |
spinal | 12:37d999e445ad | 40 | if(rot<0)rot+=360; |
spinal | 12:37d999e445ad | 41 | if(rot>360)rot-=360; |
spinal | 12:37d999e445ad | 42 | rot/=10; |
spinal | 12:37d999e445ad | 43 | rot+=3; |
spinal | 12:37d999e445ad | 44 | // PA_SetSpriteAnimEx(1,0,16,16,1,rot); |
spinal | 12:37d999e445ad | 45 | } |
spinal | 12:37d999e445ad | 46 | */ |
spinal | 12:37d999e445ad | 47 | |
spinal | 12:37d999e445ad | 48 | float x1 = marbles[t].x; |
spinal | 12:37d999e445ad | 49 | float y1 = marbles[t].y; |
spinal | 12:37d999e445ad | 50 | float x2 = marbles[t-1].x; |
spinal | 12:37d999e445ad | 51 | float y2 = marbles[t-1].y; |
spinal | 12:37d999e445ad | 52 | float rotation = atan2(y1-y2,x1-x2); |
spinal | 12:37d999e445ad | 53 | |
spinal | 12:37d999e445ad | 54 | for(int s=0; s<number_of_segments; s++){ |
spinal | 12:37d999e445ad | 55 | if(s<t-1 || s>t+1){ |
spinal | 12:37d999e445ad | 56 | double square_difference_x = (x1 - marbles[s].x) * (x1 - marbles[s].x); |
spinal | 12:37d999e445ad | 57 | double square_difference_y = (y1 - marbles[s].y) * (y1 - marbles[s].y); |
spinal | 12:37d999e445ad | 58 | double value = sqrt(square_difference_x + square_difference_y); |
spinal | 12:37d999e445ad | 59 | |
spinal | 12:37d999e445ad | 60 | if(value < bodySize+1){ |
spinal | 12:37d999e445ad | 61 | pos_x = x2 + bodySize * cos(rotation+MOVEANGLE); |
spinal | 12:37d999e445ad | 62 | pos_y = y2 + bodySize * sin(rotation+MOVEANGLE); |
spinal | 11:a573cacdc078 | 63 | |
spinal | 12:37d999e445ad | 64 | double square_difference_x = (pos_x - marbles[s].x) * (pos_x - marbles[s].x); |
spinal | 12:37d999e445ad | 65 | double square_difference_y = (pos_y - marbles[s].y) * (pos_y - marbles[s].y); |
spinal | 12:37d999e445ad | 66 | double value2 = sqrt(square_difference_x + square_difference_y); |
spinal | 12:37d999e445ad | 67 | |
spinal | 12:37d999e445ad | 68 | if(value < value2)rotation+=MOVEANGLE; |
spinal | 12:37d999e445ad | 69 | if(value > value2)rotation-=MOVEANGLE; |
spinal | 12:37d999e445ad | 70 | collision=true; |
spinal | 12:37d999e445ad | 71 | } |
spinal | 12:37d999e445ad | 72 | } |
spinal | 12:37d999e445ad | 73 | } |
spinal | 12:37d999e445ad | 74 | |
spinal | 12:37d999e445ad | 75 | pos_x = marbles[t-1].x + bodySize * cos(rotation); |
spinal | 12:37d999e445ad | 76 | pos_y = marbles[t-1].y + bodySize * sin(rotation); |
spinal | 12:37d999e445ad | 77 | marbles[t].x = pos_x; |
spinal | 12:37d999e445ad | 78 | marbles[t].y = pos_y; |
spinal | 12:37d999e445ad | 79 | |
spinal | 12:37d999e445ad | 80 | |
spinal | 12:37d999e445ad | 81 | } // for t... |
spinal | 12:37d999e445ad | 82 | return collision; |
spinal | 12:37d999e445ad | 83 | |
spinal | 12:37d999e445ad | 84 | }// end function |
spinal | 12:37d999e445ad | 85 | |
spinal | 12:37d999e445ad | 86 | |
spinal | 12:37d999e445ad | 87 | |
spinal | 12:37d999e445ad | 88 | int main () |
spinal | 12:37d999e445ad | 89 | { |
spinal | 12:37d999e445ad | 90 | mygame.begin(); |
spinal | 12:37d999e445ad | 91 | |
spinal | 12:37d999e445ad | 92 | int JCX = ((jh_x.read()*ANALOG)); |
spinal | 12:37d999e445ad | 93 | int JCY = ((jh_y.read()*ANALOG)); |
spinal | 12:37d999e445ad | 94 | |
spinal | 11:a573cacdc078 | 95 | |
spinal | 12:37d999e445ad | 96 | while (mygame.isRunning()) |
spinal | 12:37d999e445ad | 97 | { |
spinal | 12:37d999e445ad | 98 | if (mygame.update()) |
spinal | 12:37d999e445ad | 99 | { |
spinal | 12:37d999e445ad | 100 | |
spinal | 12:37d999e445ad | 101 | int xd = ((jh_x.read()*ANALOG)-JCX)*4; |
spinal | 12:37d999e445ad | 102 | int yd = ((jh_y.read()*ANALOG)-JCY)*4; |
spinal | 12:37d999e445ad | 103 | |
spinal | 12:37d999e445ad | 104 | // motion gravity etc. |
spinal | 12:37d999e445ad | 105 | marbles[0].xSpeed += -xd; |
spinal | 12:37d999e445ad | 106 | marbles[0].ySpeed += yd; |
spinal | 12:37d999e445ad | 107 | |
spinal | 12:37d999e445ad | 108 | // add some dampening to speed |
spinal | 12:37d999e445ad | 109 | marbles[0].xSpeed *= DECAY; |
spinal | 12:37d999e445ad | 110 | marbles[0].ySpeed *= DECAY; |
spinal | 12:37d999e445ad | 111 | |
spinal | 12:37d999e445ad | 112 | marbles[0].x += marbles[0].xSpeed; |
spinal | 12:37d999e445ad | 113 | marbles[0].y += marbles[0].ySpeed; |
spinal | 12:37d999e445ad | 114 | |
spinal | 12:37d999e445ad | 115 | |
spinal | 12:37d999e445ad | 116 | jh_rumble.write(mygame.buttons.aBtn()); |
spinal | 12:37d999e445ad | 117 | d.color = 1; |
spinal | 12:37d999e445ad | 118 | d.printf("Joy X: %d\n",xd); |
spinal | 12:37d999e445ad | 119 | d.printf("Joy Y: %d\n",yd); |
spinal | 12:37d999e445ad | 120 | d.printf("B1: %d\n",jh_b1.read()); |
spinal | 12:37d999e445ad | 121 | d.printf("B2: %d\n",jh_b2.read()); |
spinal | 12:37d999e445ad | 122 | d.printf("A to Rumble!\n"); |
spinal | 12:37d999e445ad | 123 | |
spinal | 12:37d999e445ad | 124 | |
spinal | 12:37d999e445ad | 125 | // loop until the snake no longer collides with itself. |
spinal | 12:37d999e445ad | 126 | while(move_tail()){} |
spinal | 12:37d999e445ad | 127 | |
spinal | 12:37d999e445ad | 128 | for(int t=0; t<number_of_segments; t++){ |
spinal | 12:37d999e445ad | 129 | d.color = 0; |
spinal | 12:37d999e445ad | 130 | if(t==0) d.color = 1; |
spinal | 12:37d999e445ad | 131 | d.fillCircle(marbles[t].x>>8,marbles[t].y>>8,SEGSIZE); |
spinal | 12:37d999e445ad | 132 | d.color = 2; |
spinal | 12:37d999e445ad | 133 | d.drawCircle(marbles[t].x>>8,marbles[t].y>>8,SEGSIZE); |
spinal | 12:37d999e445ad | 134 | } |
spinal | 12:37d999e445ad | 135 | |
spinal | 12:37d999e445ad | 136 | |
spinal | 12:37d999e445ad | 137 | |
spinal | 12:37d999e445ad | 138 | |
spinal | 12:37d999e445ad | 139 | } |
spinal | 12:37d999e445ad | 140 | } |
spinal | 11:a573cacdc078 | 141 | } |
spinal | 11:a573cacdc078 | 142 | |
spinal | 11:a573cacdc078 | 143 |