Sunteți pe pagina 1din 52

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 !raduz programas de linguagens de programao para c"digo 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 n#vel $pessoas podem entender os programas%. O computador entende c"digo de &ai'o n#vel $pessoas no conseguem entender diretamente%. Compiladores traduzem alto n#vel para &ai'o n#vel.

Outubro/2008

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

O que Programao de Computadores?

Quantas linguagens de programao e'istem? Mais de 500! (lgumas so varia)es* algumas no servem para $quase% nada... +uitas linguagens modernas evoluiram das mais antigas. (lgumas das mais populares, C* C--* C.* /ava* P0t1on* P2P* 3isual 4asic* 5elp1i* Perl. Por que e'istem tantas? Quais aprender? Programas podem fazer muitas coisas 6 Linguagens podem ser muito complicadas7

Outubro/2008

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

O que podemos fazer com programao?

Prepare uma pizza.

9ece&a um n:mero. Compare com outro.


Se maior* imprima ;(<. Se menor* imprima ;4<.

9etorne ao in#cio. Leia o valor do joystick. +ova o personagem. Se encontrar algo* e'ecute um su&programa.
9

5iri8a um carro.

Outubro/2008

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

Como um programa em Ja a? !"#


package primeiro; /* * Este um comentrio. Serve para anotar os programas para * facilitar a compreenso. */ public class PrimeiroPrograma { // Outro tipo de comentrio (s uma linha). public static void main(String[] args) { System.out.println("Meu primeiro programa em Java!"); } }

Outubro/2008

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

10

Como um programa em Ja a? !"#


Programas em Java so package primeiro; organizados em pacotes. /* * Este um comentrio. Serve para anotar os programas para * facilitar a compreenso. */

public class PrimeiroPrograma {

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

// Outro tipo de comentrio (s uma linha). public static void main(String[] args) { System.out.println("Meu primeiro programa em Java!"); } Trechos de programas que tem uma funo definida so }
chamados mtodos. todo main! diz o que ser" feito quando o programa for e#ecutado.

Outubro/2008

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

11

Como um programa em Ja a? !"#


package primeiro; /* * Este um comentrio. Serve para anotar os programas para * facilitar a compreenso. */ public class PrimeiroPrograma { // Outro tipo de comentrio (s uma linha). public static void main(String[] args) { System.out.println("Meu primeiro programa em Java!"); } }
$lasses e mtodos so criados em blocos. %locos de mtodos ficam dentro dos blocos de classes.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 12

Como um programa em Ja a? !"#


package primeiro; /* * Este um comentrio. Serve para anotar os programas para * facilitar a compreenso. */ public class PrimeiroPrograma { // Outro tipo de comentrio (s uma linha). public static void main(String[] args) { System.out.println("Meu primeiro programa em Java!"); } }
& que o mtodo main contm! imprima uma mensagem.

Outubro/2008

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

13

Como um programa em Ja a? !$#


package primeiro; import javax.swing.JOptionPane; public class SegundoPrograma { public static void main(String[] args) { String nome = JOptionPane.showInputDialog(" ntre seu nome"); String s!dade = JOptionPane.showInputDialog(" ntre sua idade"); int idade = !nteger.parseInt(s!dade); int meses = "#$idade; int dias = %&'$idade; S(stem.out.print)n("O)*+ ",nome); S(stem.out.print)n("-o./ j* viveu mais de ",meses," meses"); S(stem.out.print)n(" e mais de ",dias," dias."); 0 0

Outubro/2008

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

14

Como um programa em Ja a? !$#


package primeiro; import javax.swing.JOptionPane; public class SegundoPrograma 'amos usar os mtodos desta classe. { public static void main(String[] args) { String nome = JOptionPane.showInputDialog(" ntre seu nome"); String s!dade = JOptionPane.showInputDialog(" ntre sua idade"); int idade = !nteger.parseInt(s!dade); int meses = "#$idade; int dias = %&'$idade; S(stem.out.print)n("O)*+ ",nome); S(stem.out.print)n("-o./ j* viveu mais de ",meses," meses"); S(stem.out.print)n(" e mais de ",dias," dias."); 0 0

Outubro/2008

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

15

Como um programa em Ja a? !$#


package primeiro; import javax.swing.JOptionPane; (azemos algumas perguntas...

public class SegundoPrograma { public static void main(String[] args) { String nome = JOptionPane.showInputDialog(" ntre seu nome"); String s!dade = JOptionPane.showInputDialog(" ntre sua idade"); int idade = !nteger.parseInt(s!dade); int meses = "#$idade; int dias = %&'$idade; S(stem.out.print)n("O)*+ ",nome); S(stem.out.print)n("-o./ j* viveu mais de ",meses," meses"); S(stem.out.print)n(" e mais de ",dias," dias."); 0 0

Outubro/2008

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

16

Como um programa em Ja a? !$#


package primeiro; import javax.swing.JOptionPane; public class SegundoPrograma { public static void main(String[] args) { String nome = JOptionPane.showInputDialog(" ntre seu nome"); String s!dade = JOptionPane.showInputDialog(" ntre sua idade"); int idade = !nteger.parseInt(s!dade); int meses = "#$idade; int dias = %&'$idade; (azemos algumas contas... S(stem.out.print)n("O)*+ ",nome); S(stem.out.print)n("-o./ j* viveu mais de ",meses," meses"); S(stem.out.print)n(" e mais de ",dias," dias."); 0 0

Outubro/2008

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

17

Como um programa em Ja a? !$#


package primeiro; import javax.swing.JOptionPane; public class SegundoPrograma { public static void main(String[] args) { String nome = JOptionPane.showInputDialog(" ntre seu nome"); String s!dade = JOptionPane.showInputDialog(" ntre sua idade"); int idade = !nteger.parseInt(s!dade); int meses = "#$idade; int dias = %&'$idade; S(stem.out.print)n("O)*+ ",nome); S(stem.out.print)n("-o./ j* viveu mais de ",meses," meses"); S(stem.out.print)n(" e mais de ",dias," dias."); 0 0 ostramos o resultado.

Outubro/2008

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

18

Como um programa em Ja a? !$#


package primeiro; import javax.swing.JOptionPane; todos podem ter par)metros.

public class SegundoPrograma { public static void main(String[] args) { String nome = JOptionPane.showInputDialog(" ntre seu nome"); String s!dade = JOptionPane.showInputDialog(" ntre sua idade"); int idade = !nteger.parseInt(s!dade); int meses = "#$idade; int dias = %&'$idade; S(stem.out.print)n("O)*+ ",nome); S(stem.out.print)n("-o./ j* viveu mais de ",meses," meses"); S(stem.out.print)n(" e mais de ",dias," dias."); 0 0 todos 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 Ja a? !%#


package primeiro; public class 1er.eiroPrograma { public static void main(String[] args) { for(int x=";x2="3;x,,) { for(int (=";(2="3;(,,) { int res = x $ (; S(stem.out.print)n(x,"x",(,"=",res); 0 0 0 0

Outubro/2008

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

20

Como um programa em Ja a? !%#


package primeiro; public class 1er.eiroPrograma { public static void main(String[] args) { $onta de * at *+ ,guarda em #for(int x=";x2="3;x,,) { $onta de * at *+ ,guarda em .for(int (=";(2="3;(,,) { $alcula # / . int res = x $ (; S(stem.out.print)n(x,"x",(,"=",res); 0 0 0mprime resultado. 0 0

Outubro/2008

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

21

Como um programa em Ja a? !&#


package applets; import java.awt.Color; import javax.swing.JApplet; import javax.swing.JLabel; public class TestApplet extends JApplet { public TestApplet() { JLabel label = new JLabel("Verso do Java: "+ 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 Ja a? !&#


package applets; import java.awt.Color; import javax.swing.JApplet; import javax.swing.JLabel; public class TestApplet extends JApplet { 1samos uma classe 2" e#istente public TestApplet() ,que 2" faz alguma coisa-. { JLabel label = new JLabel("Verso do Java: "+ System.getProperty("java.version")); label.setOpaque(true); label.setHorizontalAlignment(JLabel.CENTER); label.setBackground(Color.yellow); add(label); } } 'amos usar os mtodos destas classes.

Outubro/2008

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

23

Como um programa em Ja a? !&#


package applets; import java.awt.Color; $riamos um ob2eto do tipo J3abel chamado label

import javax.swing.JApplet; import javax.swing.JLabel; public class TestApplet extends JApplet { public TestApplet() { JLabel label = new JLabel("Verso do Java: "+ System.getProperty("java.version")); label.setOpaque(true); label.setHorizontalAlignment(JLabel.CENTER); label.setBackground(Color.yellow); add(label); } } udamos algumas de suas caracter4sticas.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 24

Outubro/2008

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

25

O que 'o(ocode?

um software educacional. Serve para aprender conceitos de programao &rincando7 9o&ocode tem uma arena onde ro&=s virtuais competem. Programadores criam o comportamento dos ro&=s. 9o&=s simples podem ser criados em minutos $vamos fazer alguns7%. 9o&=s comple'os podem demorar meses para ser aperfeioados.

Outubro/2008

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

26

'o(ocode

Outubro/2008

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

27

'o(ocode

uita a2uda, mas em ingl9s. &p8es para e#ibio dos rob5s e batalhas, outros. $rie novos rob5s ou times de rob5s, empacote rob5s, edite seus rob5s e outros. $rie novas batalhas, abra arquivos com batalhas 2" pr6programadas, saia do 7obocode.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 28

Criando 'o()s

Ctrl*+

Outubro/2008

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

29

Criando 'o()s

;2uda para comandos, em ingl9s. $ontrole das 2anelas do editor. Traduo do c:digo6fonte para o que o computador entende. $omandos de editor de te#to. $rie novos rob5s, edite6os e salve6os no disco.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 30

'o()s no 'o(ocode
<i#o do movimento do rob5 ,move6se para a frente e para tr"s=ireo do rob5

%ala ,poder, direo, velocidade-

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

'o()s no 'o(ocode

Posso dar comandos para o ro&=... ... e'ecutar ;enquanto nada acontece<. ... e'ecutar ;quando en'ergar outro ro&=<. ... e'ecutar ;quando &ater em outro ro&=<. ... e'ecutar ;quando &ater em uma parede<. ... e'ecutar ;quando acertar em outro ro&=<. ... e'ecutar ;quando outro ro&= nos acertar<. ... e'ecutar ;quando errar o tiro em outro ro&=<.

Outubro/2008

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

32

'o()s no 'o(ocode

Comandos para o ro&=, (ndar para a frente ou para tr>s $unidades de dist?ncia%. @irar para a esquerda ou para a direita $graus%. @irar o can1o para a esquerda ou para a direita $graus%. (tirar $com energia%. O ro&= pode ainda... ... sa&er suas coordenadas $' e 0% e ... sa&er sua energia. ... sa&er quantos oponentes ainda e'istem e quanto tempo falta para o fim da partida.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 33

'o()s no 'o(ocode

Quando vir o oponente o ro&= pode... ... sa&er sua direo e dist?ncia. ... sa&er sua energia e velocidade* ... mas no sa&er onde est> $'*0%. Quando for atingido o ro&= pode... ... sa&er de onde veio a &ala. ... sa&er quem atirou.

Outubro/2008

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

34

,m primeiro ro()

Ctrl*-

Outubro/2008

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

35

,m primeiro ro()

Parte do c"digo 8> escrita para n"s.

Outubro/2008

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

36

,m primeiro ro(). O c/digo


>ome de organizao 1saremos c:digo 2" e#istente $oment"rios ,para humanos& nome do seu programa ,que usa um 2" pronto como base-

Outubro/2008

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

37

,m primeiro ro(). O c/digo

$oment"rios ,para humanos-

(aa isto ?para sempre@.

<nquanto no acontece nada de importante, nosso rob5 andar" *++ passos para a frente, girar" o canho AB+ graus, andar" *++ passos para tr"s e girar" novamente o canho AB+ graus.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 38

,m primeiro ro(). O c/digo

& que nosso rob5 far" se ?en#ergar@ outro rob5 ,atira-. & que nosso rob5 far" se levar um tiro ,vira C+ graus menos o )ngulo da bala-.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 39

,ma primeira (atal0a

Ctrl*-

Outubro/2008

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

40

,ma primeira (atal0a

Podemos ter v"rias c:pias ,inst)ncias- de cada rob5 no 2ogo ao mesmo tempoD

Outubro/2008

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

41

,ma primeira (atal0a

Outubro/2008

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

42

,ma primeira (atal0a


Pontuao dada em AB turnos da &atal1a. (lgumas categorias de &=nus.

Outubro/2008

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

43

-osso Primeiro 'o()


public void run() { setBodyColor(Color.RED); setGunColor(Color.YELLOW); setScanColor(Color.GREEN); while(true) { ahead(10); turnLeft(20); } }
<nquanto no acontecer nada de especial... ude a apar9ncia do rob5 ;nde *+ unidades para a frente e vire E+ graus F esquerda ?para sempre@

public void onScannedRobot(ScannedRobotEvent e) { } public void onHitByBullet(HitByBulletEvent e) { }


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

-osso Primeiro 'o()


public void run() { setBodyColor(Color.RED); setGunColor(Color.YELLOW); setScanColor(Color.GREEN); while(true) { Guando en#ergar outro rob5 ahead(10); turnLeft(20); } }

Guando for atingido

public void onScannedRobot(ScannedRobotEvent e) { >o faa nadaD } public void onHitByBullet(HitByBulletEvent e) { >o faa nadaD }
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 45

-osso Primeiro 'o()

Outubro/2008

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

46

-osso 1egundo 'o()


1sa >umero* como base.

public class Numero2 extends Numero1 Guando en#ergar outro rob5, pare, { public void onScannedRobot(ScannedRobotEvent e) { stop(); ahead(10); fire(10); Guando for atingido, resume(); vire C+ graus } e ande para tr"s. public void onHitByBullet(HitByBulletEvent e) { turnRight(90); back(100); } }
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 47

ande para frente, atire e continue.

-osso 1egundo 'o()

Outubro/2008

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

48

-osso 2erceiro 'o()


public class Numero3 extends Robot {
<nquanto nada acontecer, fique olhando em volta.

public void run() { setBodyColor(new Color(200,50,0)); setGunColor(Color.BLUE); setScanColor(Color.RED); while(true) { ahead(5); turnLeft(30); } }

Guando for atingido, ande para tr"s.

public void onHitByBullet(HitByBulletEvent e) { back(40); }


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

-osso 2erceiro 'o()


public void onScannedRobot(ScannedRobotEvent e) { double dist = e.getDistance(); // S para robs que estiverem prximos. if (dist < 200) { ;tire em volta da direo // Para e muda a cor do feixe do radar. se estiver perto. stop(true); setScanColor(Color.WHITE); turnLeft(10); fire(1); turnRight(10); fire(1); turnRight(10); fire(1); // Continua e muda a cor do feixe para a original. resume(); setScanColor(Color.RED); $hegue mais perto. } else { stop(); ahead(dist/2); resume(); } }
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 50

3emonstrao

Outubro/2008

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

51

Para sa(er mais


1ttp,CCDDD.lac.inpe.&rCErafael.santosC8avafunFro&ocode.8sp 1ttp,CCtestDiGi.ro&orum&le.orgC 1ttp,CCDDD.codepoet.orgCEmarGDCDe&erC8avaCro&ocodeC 1ttp,CCro&ocode.sourceforge.netCdocsCro&ocodeC

Outubro/2008

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

52

S-ar putea să vă placă și