Quick and horrible speech engine

Dependencies:   PokittoLib

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?

UserRevisionLine numberNew 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