Vous êtes sur la page 1sur 26

Programao de Computadores e Robocode

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

O que Programao de Computadores?


O que um programa de computador? Quem escreve estes programas? Como so escritos? O que podemos fazer com estes programas?

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

O que Programao de Computadores?

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

O que Programao de Computadores?

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

O que Programao de Computadores?

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

Conceitos

Sistema Operacional Controla o hardware e os programas do computador. Linguagem de Programao usada para escrever programas. Compilador Traduz programas de linguagens de programao para cdigo que o computador pode entender diretamente.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

O que Programao de Computadores?

Linguagens de programao modernas so de alto nvel (pessoas podem entender os programas). O computador entende cdigo de baixo nvel (pessoas no conseguem entender diretamente). Compiladores traduzem alto nvel para baixo nvel.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

O que Programao de Computadores?

Quantas linguagens de programao existem? Mais de 500! Algumas so variaes, algumas no servem para (quase) nada... Muitas linguagens modernas evoluiram das mais antigas. Algumas das mais populares: C, C++, C#, Java, Python, PHP, Visual Basic, Delphi, Perl. Por que existem tantas? Quais aprender? Programas podem fazer muitas coisas Linguagens podem ser muito complicadas!

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

O que podemos fazer com programao?

Prepare uma pizza.

Receba um nmero. Compare com outro.


Se maior, imprima A. Se menor, imprima B.

Retorne ao incio. Leia o valor do joystick. Mova o personagem. Se encontrar algo, execute um subprograma.
9

Dirija um carro.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

Como um programa em Java? (1)


packageprimeiro; /* *Esteumcomentrio.Serveparaanotarosprogramaspara *facilitaracompreenso. */ publicclassPrimeiroPrograma { //Outrotipodecomentrio(sumalinha). publicstaticvoidmain(String[]args) { System.out.println("MeuprimeiroprogramaemJava!"); } }

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

10

Como um programa em Java? (1)


Programas em Java so packageprimeiro; organizados em pacotes. /* *Esteumcomentrio.Serveparaanotarosprogramaspara *facilitaracompreenso. */

publicclassPrimeiroPrograma {

Programas em Java so declarados como classes pblicas, e devem ter um nome.

//Outrotipodecomentrio(sumalinha). publicstaticvoidmain(String[]args) { System.out.println("MeuprimeiroprogramaemJava!"); } Trechos de programas que tem uma funo definida so }
chamados mtodos. Mtodo main: diz o que ser feito quando o programa for executado.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

11

Como um programa em Java? (1)


packageprimeiro; /* *Esteumcomentrio.Serveparaanotarosprogramaspara *facilitaracompreenso. */ publicclassPrimeiroPrograma { //Outrotipodecomentrio(sumalinha). publicstaticvoidmain(String[]args) { System.out.println("MeuprimeiroprogramaemJava!"); } }
Classes e mtodos so criados em blocos. Blocos de mtodos ficam dentro dos blocos de classes.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 12

Como um programa em Java? (1)


packageprimeiro; /* *Esteumcomentrio.Serveparaanotarosprogramaspara *facilitaracompreenso. */ publicclassPrimeiroPrograma { //Outrotipodecomentrio(sumalinha). publicstaticvoidmain(String[]args) { System.out.println("MeuprimeiroprogramaemJava!"); } }
O que o mtodo main contm: imprima uma mensagem.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

13

Como um programa em Java? (2)


package primeiro; import javax.swing.JOptionPane; public class SegundoPrograma { public static void main(String[] args) { String nome = JOptionPane.showInputDialog("Entre seu nome"); String sIdade = JOptionPane.showInputDialog("Entre sua idade"); int idade = Integer.parseInt(sIdade); int meses = 12*idade; int dias = 365*idade; System.out.println("Ol, "+nome); System.out.println("Voc j viveu mais de "+meses+" meses"); System.out.println(" e mais de "+dias+" dias."); } }

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

14

Como um programa em Java? (2)


package primeiro; import javax.swing.JOptionPane; public class SegundoPrograma Vamos usar os mtodos desta classe. { public static void main(String[] args) { String nome = JOptionPane.showInputDialog("Entre seu nome"); String sIdade = JOptionPane.showInputDialog("Entre sua idade"); int idade = Integer.parseInt(sIdade); int meses = 12*idade; int dias = 365*idade; System.out.println("Ol, "+nome); System.out.println("Voc j viveu mais de "+meses+" meses"); System.out.println(" e mais de "+dias+" dias."); } }

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

15

Como um programa em Java? (2)


package primeiro; import javax.swing.JOptionPane; Fazemos algumas perguntas...

public class SegundoPrograma { public static void main(String[] args) { String nome = JOptionPane.showInputDialog("Entre seu nome"); String sIdade = JOptionPane.showInputDialog("Entre sua idade"); int idade = Integer.parseInt(sIdade); int meses = 12*idade; int dias = 365*idade; System.out.println("Ol, "+nome); System.out.println("Voc j viveu mais de "+meses+" meses"); System.out.println(" e mais de "+dias+" dias."); } }

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

16

Como um programa em Java? (2)


package primeiro; import javax.swing.JOptionPane; public class SegundoPrograma { public static void main(String[] args) { String nome = JOptionPane.showInputDialog("Entre seu nome"); String sIdade = JOptionPane.showInputDialog("Entre sua idade"); int idade = Integer.parseInt(sIdade); int meses = 12*idade; int dias = 365*idade; Fazemos algumas contas... System.out.println("Ol, "+nome); System.out.println("Voc j viveu mais de "+meses+" meses"); System.out.println(" e mais de "+dias+" dias."); } }

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

17

Como um programa em Java? (2)


package primeiro; import javax.swing.JOptionPane; public class SegundoPrograma { public static void main(String[] args) { String nome = JOptionPane.showInputDialog("Entre seu nome"); String sIdade = JOptionPane.showInputDialog("Entre sua idade"); int idade = Integer.parseInt(sIdade); int meses = 12*idade; int dias = 365*idade; System.out.println("Ol, "+nome); System.out.println("Voc j viveu mais de "+meses+" meses"); System.out.println(" e mais de "+dias+" dias."); } } Mostramos o resultado.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

18

Como um programa em Java? (2)


package primeiro; import javax.swing.JOptionPane; Mtodos podem ter parmetros.

public class SegundoPrograma { public static void main(String[] args) { String nome = JOptionPane.showInputDialog("Entre seu nome"); String sIdade = JOptionPane.showInputDialog("Entre sua idade"); int idade = Integer.parseInt(sIdade); int meses = 12*idade; int dias = 365*idade; System.out.println("Ol, "+nome); System.out.println("Voc j viveu mais de "+meses+" meses"); System.out.println(" e mais de "+dias+" dias."); } } Mtodos podem ter valores retornados. Pense em mtodos como tarefas ou perguntas que podem precisar de mais informao.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 19

Como um programa em Java? (3)


package primeiro; public class TerceiroPrograma { public static void main(String[] args) { for(int x=1;x<=10;x++) { for(int y=1;y<=10;y++) { int res = x * y; System.out.println(x+"x"+y+"="+res); } } } }

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

20

Como um programa em Java? (3)


package primeiro; public class TerceiroPrograma { public static void main(String[] args) { Conta de 1 at 10 (guarda em x) for(int x=1;x<=10;x++) { Conta de 1 at 10 (guarda em y) for(int y=1;y<=10;y++) { Calcula x * y int res = x * y; System.out.println(x+"x"+y+"="+res); } } Imprime resultado. } }

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

21

Como um programa em Java? (4)


packageapplets; importjava.awt.Color; importjavax.swing.JApplet; importjavax.swing.JLabel; publicclassTestAppletextendsJApplet { publicTestApplet() { JLabellabel=newJLabel("VersodoJava:"+ System.getProperty("java.version")); label.setOpaque(true); label.setHorizontalAlignment(JLabel.CENTER); label.setBackground(Color.yellow); add(label); } }

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

22

Como um programa em Java? (4)


packageapplets; importjava.awt.Color; importjavax.swing.JApplet; importjavax.swing.JLabel; publicclassTestAppletextendsJApplet { Usamos uma classe j existente publicTestApplet() (que j faz alguma coisa). { JLabellabel=newJLabel("VersodoJava:"+ System.getProperty("java.version")); label.setOpaque(true); label.setHorizontalAlignment(JLabel.CENTER); label.setBackground(Color.yellow); add(label); } } Vamos usar os mtodos destas classes.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

23

Como um programa em Java? (4)


packageapplets; importjava.awt.Color; Criamos um objeto do tipo JLabel chamado label

importjavax.swing.JApplet; importjavax.swing.JLabel; publicclassTestAppletextendsJApplet { publicTestApplet() { JLabellabel=newJLabel("VersodoJava:"+ System.getProperty("java.version")); label.setOpaque(true); label.setHorizontalAlignment(JLabel.CENTER); label.setBackground(Color.yellow); add(label); } } Mudamos algumas de suas caractersticas.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 24

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

25

O que Robocode?

um software educacional. Serve para aprender conceitos de programao brincando! Robocode tem uma arena onde robs virtuais competem. Programadores criam o comportamento dos robs. Robs simples podem ser criados em minutos (vamos fazer alguns!). Robs complexos podem demorar meses para ser aperfeioados.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

26

Robocode

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

27

Robocode

Muita ajuda, mas em ingls. Opes para exibio dos robs e batalhas, outros. Crie novos robs ou times de robs, empacote robs, edite seus robs e outros. Crie novas batalhas, abra arquivos com batalhas j pr-programadas, saia do Robocode.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 28

Criando Robs

Ctrl+E

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

29

Criando Robs

Ajuda para comandos, em ingls. Controle das janelas do editor. Traduo do cdigo-fonte para o que o computador entende. Comandos de editor de texto. Crie novos robs, edite-os e salve-os no disco.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 30

Robs no Robocode
Eixo do movimento do rob (move-se para a frente e para trs) Direo do rob

Bala (poder, direo, velocidade)

Direo do canho
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 31

Robs no Robocode

Posso dar comandos para o rob... ... executar enquanto nada acontece. ... executar quando enxergar outro rob. ... executar quando bater em outro rob. ... executar quando bater em uma parede. ... executar quando acertar em outro rob. ... executar quando outro rob nos acertar. ... executar quando errar o tiro em outro rob.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

32

Robs no Robocode

Comandos para o rob: Andar para a frente ou para trs (unidades de distncia). Girar para a esquerda ou para a direita (graus). Girar o canho para a esquerda ou para a direita (graus). Atirar (com energia). O rob pode ainda... ... saber suas coordenadas (x e y) e ... saber sua energia. ... saber quantos oponentes ainda existem e quanto tempo falta para o fim da partida.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 33

Robs no Robocode

Quando vir o oponente o rob pode... ... saber sua direo e distncia. ... saber sua energia e velocidade, ... mas no saber onde est (x,y). Quando for atingido o rob pode... ... saber de onde veio a bala. ... saber quem atirou.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

34

Um primeiro rob

Ctrl+N

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

35

Um primeiro rob

Parte do cdigo j escrita para ns.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

36

Um primeiro rob: O cdigo


Nome de organizao Usaremos cdigo j existente Comentrios (para humanos) O nome do seu programa (que usa um j pronto como base)

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

37

Um primeiro rob: O cdigo

Comentrios (para humanos)

Faa isto para sempre.

Enquanto no acontece nada de importante, nosso rob andar 100 passos para a frente, girar o canho 360 graus, andar 100 passos para trs e girar novamente o canho 360 graus.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 38

Um primeiro rob: O cdigo

O que nosso rob far se enxergar outro rob (atira). O que nosso rob far se levar um tiro (vira 90 graus menos o ngulo da bala).
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 39

Uma primeira batalha

Ctrl+N

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

40

Uma primeira batalha

Podemos ter vrias cpias (instncias) de cada rob no jogo ao mesmo tempo!

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

41

Uma primeira batalha

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

42

Uma primeira batalha


Pontuao dada em 10 turnos da batalha. Algumas categorias de bnus.

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

43

Nosso Primeiro Rob


publicvoidrun() { setBodyColor(Color.RED); setGunColor(Color.YELLOW); setScanColor(Color.GREEN); while(true) { ahead(10); turnLeft(20); } }
Enquanto no acontecer nada de especial... Mude a aparncia do rob Ande 10 unidades para a frente e vire 20 graus esquerda para sempre

publicvoidonScannedRobot(ScannedRobotEvente) { } publicvoidonHitByBullet(HitByBulletEvente) { }
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 44

Nosso Primeiro Rob


publicvoidrun() { setBodyColor(Color.RED); setGunColor(Color.YELLOW); setScanColor(Color.GREEN); while(true) { Quando enxergar outro rob ahead(10); turnLeft(20); } }

Quando for atingido

publicvoidonScannedRobot(ScannedRobotEvente) { No faa nada! } publicvoidonHitByBullet(HitByBulletEvente) { No faa nada! }


Outubro/2008 http://www.lac.inpe.br/~rafael.santos 45

Nosso Primeiro Rob

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

46

Nosso Segundo Rob


Usa Numero1 como base.

publicclassNumero2extendsNumero1 Quando enxergar outro rob, pare, { publicvoidonScannedRobot(ScannedRobotEvente) { stop(); ahead(10); fire(10); Quando for atingido, resume(); vire 90 graus } e ande para trs. publicvoidonHitByBullet(HitByBulletEvente) { turnRight(90); back(100); } }
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 47

ande para frente, atire e continue.

Nosso Segundo Rob

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

48

Nosso Terceiro Rob


publicclassNumero3extendsRobot {
Enquanto nada acontecer, fique olhando em volta.

publicvoidrun() { setBodyColor(newColor(200,50,0)); setGunColor(Color.BLUE); setScanColor(Color.RED); while(true) { ahead(5); turnLeft(30); } }

Quando for atingido, ande para trs.

publicvoidonHitByBullet(HitByBulletEvente) { back(40); }
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 49

Nosso Terceiro Rob


publicvoidonScannedRobot(ScannedRobotEvente) { doubledist=e.getDistance(); //Spararobsqueestiveremprximos. if(dist<200) { Atire em volta da direo //Paraemudaacordofeixedoradar. se estiver perto. stop(true); setScanColor(Color.WHITE); turnLeft(10); fire(1); turnRight(10); fire(1); turnRight(10); fire(1); //Continuaemudaacordofeixeparaaoriginal. resume(); setScanColor(Color.RED); Chegue mais perto. } else { stop(); ahead(dist/2);resume(); } }
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 50

Demonstrao

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

51

Para saber mais


http://www.lac.inpe.br/~rafael.santos/javafun-robocode.jsp http://testwiki.roborumble.org/ http://www.codepoet.org/~markw/weber/java/robocode/ http://robocode.sourceforge.net/docs/robocode/

Outubro/2008

http://www.lac.inpe.br/~rafael.santos

52

Vous aimerez peut-être aussi