Advertisement
Guest User

Untitled

a guest
Oct 28th, 2016
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.46 KB | None | 0 0
  1. /*
  2. * Implementaçao feita cumprindo os requisitos do Projeto Final.
  3. * DISCIPLINA: Lógica de Programação – Turma 01 – 2016.2
  4. * PROFESSOR : Orivaldo V. de Santana Jr.
  5. * ETAPAS : 1, 2, 3, 4, 5.
  6. *
  7. * OBS:
  8. * 1) As coordenadas da tela consideram o canto superior
  9. * esquerdo como o ponto (0,0), e a unidade de tudo isso é pixels.
  10. * 2) Definimos 'd' como sendo o movimento 'FRENTE' (sentido direita) e 'a' como 'TRAS' (sentido esquerda).
  11. * 3) O sentido 'direita' é representado com valor 1, e o sentido 'esquerda' com -1.
  12. * 3) Substituimos o objeto elipse por uma imagem.
  13. */
  14.  
  15. class Obstacle {
  16. PImage icon;
  17. PVector posicao;
  18. float velocidade;
  19. boolean flagToShow;
  20. int tempToShow;
  21. int contTemp;
  22. }
  23.  
  24. // classe para representar o jogador
  25. class Player
  26. {
  27. // PImage - datatype do processing para armazenar imagens
  28. PImage icon;
  29. // PVector - classe do processing para representar um vetor geometrico
  30. // Este vetor é o mesmo estudado em geometria, com componente x, y, z, magnitude, direçao, etc.
  31. PVector posicao;
  32. PVector velocidade;
  33. float velocidadeSalto;
  34. float velocidadeMovimento;
  35. float vida;
  36. }
  37.  
  38. // global var
  39. Player player;
  40. Obstacle[] obstaculos;
  41.  
  42. float esquerda;
  43. float direita;
  44. float up;
  45. float down;
  46.  
  47. // metade de um pixel por frame gravity.
  48. float gravidade = .5;
  49. // coordenada Y do chao para colisao
  50. float ground = 450;
  51. // diment
  52. int h = 500, w = 800;
  53.  
  54. //********* variaveis de posiçao
  55. int p1_x = w/2, p1_y = 0, p2_x = w/2, p2_y = h;
  56.  
  57. /* setup(): é rodada uma vez só, e é usada pra declarações
  58. * iniciais como tamanho da tela, fundo, frameRate, etc.
  59. */
  60. void setup()
  61. {
  62. // setando informaçoes do player
  63. player = new Player();
  64. player.posicao = new PVector(50, ground);
  65. player.velocidade = new PVector(0, 0);
  66. player.velocidadeSalto = 10;
  67. player.velocidadeMovimento = 4;
  68. player.icon = loadImage("ball-icon.png");
  69. player.vida = 10;
  70.  
  71.  
  72. Obstacle o1 = new Obstacle();
  73. o1.icon = loadImage("stone-icon.png");
  74. o1.posicao = new PVector(750, ground - 10);
  75. o1.velocidade = 2;
  76. o1.flagToShow = true;
  77. o1.tempToShow = 5;
  78. o1.contTemp = 0;
  79.  
  80. obstaculos = new Obstacle[1];
  81. obstaculos[0] = o1;
  82.  
  83. // função size() é o que define o tamanho da janela
  84. size(800, 500);
  85.  
  86. // função background() é o que define a cor do fundo
  87. background(170);
  88. frameRate(25);
  89. }
  90.  
  91. /** keyPressed(): detecta tecla pressionada
  92. * As variaveis UP, DOWN, LEFT, e RIGHT ja sao
  93. * fornecidas como 'variaveis de ambiente' do processing.
  94. */
  95. void keyPressed()
  96. {
  97. if (key == 'd') {
  98. direita = 1;
  99. } else if (key == 'a') {
  100. esquerda = -1;
  101. } else if (key == ' ') {
  102. up = -1;
  103. }
  104. }
  105.  
  106. void keyReleased()
  107. {
  108. if (key == 'd') {
  109. direita = 0;
  110. } else if (key == 'a') {
  111. esquerda = 0;
  112. } else if (key == ' ') {
  113. up = 0;
  114. }
  115. }
  116.  
  117.  
  118. void draw_obstacle() {
  119. for (int i = 0; i < obstaculos.length; i++) {
  120. Obstacle o = obstaculos[i];
  121.  
  122. if (checkCollision(o)) {
  123. player.vida--;
  124. text("Vida: " + player.vida, 10, 30);
  125. }
  126.  
  127. if (o.contTemp == o.tempToShow) {
  128. o.contTemp = 0;
  129. o.flagToShow = true;
  130. continue;
  131. }
  132.  
  133. if (o.flagToShow) {
  134. o.posicao.x -= o.velocidade;
  135. image(o.icon, o.posicao.x, o.posicao.y);
  136. } else {
  137. o.contTemp++;
  138. }
  139.  
  140. if (o.posicao.x < 0) {
  141. o.posicao.x = 750;
  142. o.tempToShow = 1 + (int)random(5);
  143. o.flagToShow = false;
  144. }
  145. }
  146. }
  147.  
  148. void draw_line() {
  149. // o contorno vai ser um verde
  150. stroke(60, 150, 60);
  151. // 3 pixels de espessura
  152. strokeWeight(3);
  153. // a linha que desenhamos vai do ponto (100, 300) ao ponto (400, 400)
  154. line(p1_x, p1_y, p2_x, p2_y);
  155. }
  156.  
  157. void draw_player() {
  158. // Se o player estiver sobre o chao (player.posicao.y < ground), a gravidade é aplicada nele.
  159. // Note que usei < aqui porque subindo o valor y diminui ja que a posicao (0,0) é o topo esquedo da tela.
  160. if (player.posicao.y < ground)
  161. player.velocidade.y += gravidade;
  162. else
  163. player.velocidade.y = 0;
  164.  
  165. // si o player estiver no chao e clicar para pular
  166. // a velocidade Y do player vai ser diminuida da velocidade do salto
  167. if (player.posicao.y >= ground && up != 0)
  168. player.velocidade.y = -player.velocidadeSalto;
  169.  
  170. // regular o valor da velocidade.x considerando a desvios a esquerda e a direita
  171. player.velocidade.x = player.velocidadeSalto * (esquerda + direita);
  172.  
  173. // fazemos a adiçao de vetores para obtermos o vetor da proxima posiçao
  174. // posicao atual + vetor velocidade === vga
  175. PVector nova_posicao = new PVector(player.posicao.x, player.posicao.y);
  176. nova_posicao.add(player.velocidade);
  177.  
  178. // conferir se houve colisao com os cantos da tela
  179. float offset = 0;
  180. if (nova_posicao.x > offset && nova_posicao.x < (width - offset)) {
  181. player.posicao.x = nova_posicao.x;
  182. }
  183. if (nova_posicao.y > offset && nova_posicao.y < (height - offset)) {
  184. player.posicao.y = nova_posicao.y;
  185. }
  186.  
  187. pushMatrix();
  188. translate(player.posicao.x, player.posicao.y);
  189. image(player.icon, 0, 0);
  190. popMatrix();
  191. }
  192.  
  193.  
  194. boolean checkCollision(Obstacle o) {
  195. if (dist(player.posicao.x, player.posicao.y, o.posicao.x, o.posicao.y) <= 15) return true;
  196. return false;
  197. }
  198.  
  199. /** draw(): é rodada em loop, uma vez a cada frame
  200. */
  201. void draw()
  202. {
  203. // a próxima forma que ele desenhar não vai ter nenhum preenchimento
  204. noFill();
  205. // reseto o background para nao deixar rastro de círculos a cada quadro processado
  206. background(100);
  207.  
  208. textSize(32);
  209. text("Vida: " + player.vida, 10, 30);
  210. fill(255, 255, 255);
  211.  
  212.  
  213. draw_player();
  214. draw_obstacle();
  215. draw_line();
  216. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement