diff --git a/ias/__pycache__/ia_0000001.cpython-37.pyc b/ias/__pycache__/ia_0000001.cpython-37.pyc index e02aa5a2def2e8e1079fdb021a4b0ed2bd45f74a..b62a8cd8bcd5fa43633b386fde4069f845336e53 100644 Binary files a/ias/__pycache__/ia_0000001.cpython-37.pyc and b/ias/__pycache__/ia_0000001.cpython-37.pyc differ diff --git a/stadium/ball.pde b/stadium/ball.pde index 54a698b74197468ec0f86206f07a5b3a0824e628..4775bb5ab87067ecd3414a72a17d6925d91a83a0 100644 --- a/stadium/ball.pde +++ b/stadium/ball.pde @@ -3,8 +3,9 @@ class Ball { float pos_y; float vel_x; float vel_y; + int linked_to = -1; Ball() { - this.set_velocity(0,-10); + this.set_velocity(0,0); } void set_position(float pos_x, float pos_y) { this.pos_x = pos_x; @@ -16,6 +17,7 @@ class Ball { this.vel_y = vel_y; } void run(float delta_t) { + if(linked_to == -1) this.pos_x += this.vel_x*delta_t; this.pos_y += this.vel_y*delta_t; this.verify_borders(); diff --git a/stadium/game.pde b/stadium/game.pde index e5c6227afaf10731f080854a6ee0f2117d9691ef..aa3d1474869180a6efb92f5147197de8cb2a3fb9 100644 --- a/stadium/game.pde +++ b/stadium/game.pde @@ -3,19 +3,23 @@ class Game { Team team_1; Team team_2; Ball ball; + + int linked_to = -1; + float timestamp = 0; + Game() { this.team_1 = new Team(1); this.team_2 = new Team(2); this.ball = new Ball(); } void keep_distance(Player player_1, Player player_2) { - + float xm = player_1.get_pos_x()/2.0 + player_2.get_pos_x()/2.0; float ym = player_1.get_pos_y()/2.0 + player_2.get_pos_y()/2.0; float dx = player_1.get_pos_x() - xm; float dy = player_1.get_pos_y() - ym; float n = sqrt(pow(dx, 2)+pow(dy, 2)); - + if (n < 6) { dx *= 6/n; dy *= 6/n; @@ -61,10 +65,70 @@ class Game { input[21] = this.ball.get_pos_y(); return input; } + void ball_mechanic(float delta_t) { + if (this.linked_to == -1) { + this.ball.run(delta_t); + } else { + if (this.linked_to < 5) { + float x = this.team_1.players[this.linked_to].opening_x(); + float y = this.team_1.players[this.linked_to].opening_y(); + this.ball.set_position(x, y); + if (this.team_1.kick_catch != 0) { // kick + float vx = this.team_1.kick_catch*cos(this.team_1.players[this.linked_to].get_angle()); + float vy = this.team_1.kick_catch*sin(this.team_1.players[this.linked_to].get_angle()); + this.ball.set_velocity(vx, vy); + this.team_1.kick_catch = 0; + this.linked_to = -1; + } + } else { + float x = this.team_2.players[this.linked_to-5].opening_x(); + float y = this.team_2.players[this.linked_to-5].opening_y(); + this.ball.set_position(x, y); + if (this.team_2.kick_catch != 0) { //kick + float vx = this.team_2.kick_catch*cos(this.team_2.players[this.linked_to-5].get_angle()); + float vy = this.team_2.kick_catch*sin(this.team_2.players[this.linked_to-5].get_angle()); + this.ball.set_velocity(vx, vy); + this.team_2.kick_catch = 0; + this.linked_to = -1; + } + } + } + //catch + if (this.linked_to == -1 || this.timestamp - millis() > 500) { + if (random(1)>0.5) { + if (this.team_1.kick_catch != 0) { + for (int i=0; i<5; i++) { + float dx = this.team_1.players[i].opening_x() - this.ball.get_pos_x(); + float dy = this.team_1.players[i].opening_y() - this.ball.get_pos_y(); + float n = sqrt(pow(dx, 2)+pow(dy, 2)); + if (n<1) { + this.team_1.kick_catch = 0; + this.linked_to = i; + this.timestamp = millis(); + } + } + } + } else { + if (this.team_2.kick_catch != 0) { + for (int i=0; i<5; i++) { + float dx = this.team_2.players[i].opening_x() - this.ball.get_pos_x(); + float dy = this.team_2.players[i].opening_y() - this.ball.get_pos_y(); + float n = sqrt(pow(dx, 2)+pow(dy, 2)); + if (n<1) { + this.team_2.kick_catch = 0; + this.linked_to = 5+i; + this.timestamp = millis(); + } + } + } + } + } + } void run(float delta_t) { - this.ball.run(delta_t); + this.team_1.run(delta_t); this.team_2.run(delta_t); + this.ball_mechanic(delta_t); this.verify_colision(); } void show() { diff --git a/stadium/player.pde b/stadium/player.pde index 88c9cbc1896d409f80589586b85f5cf3a578b5f8..fad6d174989953bb538173f843af73862d829737 100644 --- a/stadium/player.pde +++ b/stadium/player.pde @@ -29,8 +29,8 @@ class Player { this.pos_x = pos_x; this.pos_y = pos_y; } - void set_angle(float angle){ - this.angle = angle; + void set_angle(float angle) { + this.angle = angle; } float get_pos_x() { return this.pos_x; @@ -38,6 +38,15 @@ class Player { float get_pos_y() { return this.pos_y; } + float get_angle() { + return this.angle; + } + float opening_x() { + return this.get_pos_x()+6*cos(this.angle); + } + float opening_y() { + return this.get_pos_y()+6*sin(this.angle); + } void verify_borders() { if (this.pos_x < -93) { this.pos_x = -93; @@ -57,10 +66,10 @@ class Player { this.pos_y += this.vel*sin(angle)*delta_t; this.verify_borders(); } - void showPos(){ + void showPos() { textSize(2); - fill(255,0,0); - text(str(this.pos_x)+","+str(this.pos_y),0,0); + fill(255, 0, 0); + text(str(this.pos_x)+","+str(this.pos_y), 0, 0); } void show() { noStroke(); diff --git a/stadium/team.pde b/stadium/team.pde index 5d7cea53d946d902ed5fe5a92e57988ffc34e95d..73fbfb594d5132c07f0fe2be2eea30f5a93f5359 100644 --- a/stadium/team.pde +++ b/stadium/team.pde @@ -1,9 +1,10 @@ class Team { - + int team = 1; Player[] players = new Player[5]; int score = 0; - + float kick_catch = 0; + Team(int team) { this.team = team; @@ -19,11 +20,12 @@ class Team { this.players[i].set_velocity(output[i*2]); this.players[i].set_direction(output[i*2+1]); } + this.kick_catch = output[10]; } void initialize_players() { int s = 1; - if(this.team == 2){ - s = -1; + if (this.team == 2) { + s = -1; } this.players[0].set_position(-80*s, 0); this.players[0].set_angle((PI-(s*PI))/2.0);