SlideShare uma empresa Scribd logo
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 1
Programação de Computadores
e Robocode
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 2
O que é Programação de Computadores?
● O que é um programa de computador?
● Quem escreve estes programas?
● Como são escritos?
● O que podemos fazer com estes programas?
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 3
O que é Programação de Computadores?
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 4
O que é Programação de Computadores?
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 5
O que é Programação de Computadores?
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 6
Conceitos
● Sistema Operacional
– Controla o hardware e os programas do computador.
● Linguagem de Programação
– É usada para escrever programas.
● Compilador
– Traduz programas de linguagens de programação para
código que o computador pode entender diretamente.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 7
O que é Programação de Computadores?
● Linguagens de programação modernas são de alto nível
(pessoas podem entender os programas).
● O computador entende código de baixo nível (pessoas não
conseguem entender diretamente).
●
Compiladores traduzem alto nível para baixo nível.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 8
O que é Programação de Computadores?
●
Quantas linguagens de programação existem? Mais de 500!
– Algumas são variações, algumas não 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 9
O que podemos fazer com programação?
● Prepare uma pizza.
● Dirija um carro. ● Leia o valor do joystick.
● Mova o personagem.
● Se encontrar algo, execute
um subprograma.
● Receba um número.
● Compare com outro.
– Se maior, imprima “A”.
– Se menor, imprima “B”.
● Retorne ao início.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 10
Como é um programa em Java? (1)
package primeiro;
/*
* Este é um comentário. Serve para anotar os programas para
* facilitar a compreensão.
*/
public class PrimeiroPrograma
{
// Outro tipo de comentário (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 11
Como é um programa em Java? (1)
package primeiro;
/*
* Este é um comentário. Serve para anotar os programas para
* facilitar a compreensão.
*/
public class PrimeiroPrograma
{
// Outro tipo de comentário (só uma linha).
public static void main(String[] args)
{
System.out.println("Meu primeiro programa em Java!");
}
}
Programas em Java são
organizados em pacotes.
Programas em Java são declarados
como classes públicas,
e devem ter um nome.
Trechos de programas que tem
uma função definida são
chamados métodos.
Método main: diz o que será
feito quando o programa
for executado.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 12
Como é um programa em Java? (1)
package primeiro;
/*
* Este é um comentário. Serve para anotar os programas para
* facilitar a compreensão.
*/
public class PrimeiroPrograma
{
// Outro tipo de comentário (só uma linha).
public static void main(String[] args)
{
System.out.println("Meu primeiro programa em Java!");
}
}
Classes e métodos são criados em blocos.
Blocos de métodos ficam dentro dos blocos de classes.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 13
Como é um programa em Java? (1)
package primeiro;
/*
* Este é um comentário. Serve para anotar os programas para
* facilitar a compreensão.
*/
public class PrimeiroPrograma
{
// Outro tipo de comentário (só uma linha).
public static void main(String[] args)
{
System.out.println("Meu primeiro programa em Java!");
}
}
O que o método main contém: imprima uma mensagem.
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
{
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;
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.");
}
}
Vamos usar os métodos desta classe.
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;
System.out.println("Olá, "+nome);
System.out.println("Você já viveu mais de "+meses+" meses");
System.out.println(" e mais de "+dias+" dias.");
}
}
Fazemos algumas perguntas...
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.");
}
}
Fazemos algumas contas...
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 18
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 19
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.");
}
}
Métodos podem ter parâmetros.
Métodos podem ter valores retornados.
Pense em métodos como tarefas ou perguntas
que podem precisar de mais informação.
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)
{
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 21
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);
}
}
}
}
Conta de 1 até 10 (guarda em x)
Conta de 1 até 10 (guarda em y)
Calcula x * y
Imprime resultado.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 22
Como é um programa em Java? (4)
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("Versão 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 23
Como é um programa em Java? (4)
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("Versão do Java: "+
System.getProperty("java.version"));
label.setOpaque(true);
label.setHorizontalAlignment(JLabel.CENTER);
label.setBackground(Color.yellow);
add(label);
}
}
Vamos usar os métodos destas classes.
Usamos uma classe já existente
(que já faz alguma coisa).
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 24
Como é um programa em Java? (4)
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("Versão do Java: "+
System.getProperty("java.version"));
label.setOpaque(true);
label.setHorizontalAlignment(JLabel.CENTER);
label.setBackground(Color.yellow);
add(label);
}
}
Criamos um objeto do tipo JLabel chamado label
Mudamos algumas de suas características.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 25
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 26
O que é Robocode?
● É um software educacional.
● Serve para aprender conceitos de programação brincando!
●
Robocode tem uma arena onde robôs virtuais competem.
●
Programadores criam o comportamento dos robôs.
– Robôs simples podem ser criados em minutos (vamos
fazer alguns!).
– Robôs complexos podem demorar meses para ser
aperfeiçoados.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 27
Robocode
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 28
Robocode
Crie novos robôs ou times de robôs,
empacote robôs, edite seus robôs e
outros.
Crie novas batalhas, abra arquivos
com batalhas já pré-programadas,
saia do Robocode.
Opções para exibição dos robôs e
batalhas, outros.
Muita ajuda, mas em inglês.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 29
Criando Robôs
●
Ctrl+E
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 30
Criando Robôs
Comandos de editor de texto.
Crie novos robôs, edite-os e salve-os no disco.
Tradução do código-fonte para o
que o computador entende.
Ajuda para comandos,
em inglês.
Controle das janelas do
editor.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 31
Robôs no Robocode
Eixo do movimento do robô
(move-se para a frente e para trás)
Direção do robô
Direção do canhão
Bala (poder, direção,
velocidade)
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 32
Robôs 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 33
Robôs no Robocode
● Comandos para o robô:
– Andar para a frente ou para trás (unidades de distância).
– Girar para a esquerda ou para a direita (graus).
– Girar o canhão 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 34
Robôs no Robocode
● Quando vir o oponente o robô pode...
– ... saber sua direção e distância.
– ... saber sua energia e velocidade,
– ... mas não 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 35
Um primeiro robô
●
Ctrl+N
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 36
Um primeiro robô
● Parte do código já é
escrita para nós.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 37
Um primeiro robô: O código
Nome de
organização
Usaremos código
já existente
Comentários
(para humanos)
O nome do seu
programa (que usa
um já pronto como
base)
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 38
Um primeiro robô: O código
Faça isto “para
sempre”.
Comentários
(para humanos)
Enquanto não acontece nada de importante, nosso
robô andará 100 passos para a frente, girará o canhão
360 graus, andará 100 passos para trás e girará
novamente o canhão 360 graus.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 39
Um primeiro robô: O código
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 40
Uma primeira batalha
●
Ctrl+N
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 41
Uma primeira batalha
Podemos ter várias cópias (instâncias) de cada robô
no jogo ao mesmo tempo!
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 42
Uma primeira batalha
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 43
Uma primeira batalha
● Pontuação dada em 10 turnos da batalha.
● Algumas categorias de bônus.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 44
Nosso Primeiro Robô
public void run()
{
setBodyColor(Color.RED);
setGunColor(Color.YELLOW);
setScanColor(Color.GREEN);
while(true)
{
ahead(10);
turnLeft(20);
}
}
public void onScannedRobot(ScannedRobotEvent e)
{
}
public void onHitByBullet(HitByBulletEvent e)
{
}
Enquanto não acontecer
nada de especial...
Mude a aparência do robô
Ande 10 unidades para a frente
e vire 20 graus à esquerda
“para sempre”
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 45
Nosso Primeiro Robô
public void run()
{
setBodyColor(Color.RED);
setGunColor(Color.YELLOW);
setScanColor(Color.GREEN);
while(true)
{
ahead(10);
turnLeft(20);
}
}
public void onScannedRobot(ScannedRobotEvent e)
{
}
public void onHitByBullet(HitByBulletEvent e)
{
}
Quando enxergar outro robô
Não faça nada!
Quando for atingido
Não faça nada!
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 46
Nosso Primeiro Robô
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 47
Nosso Segundo Robô
public class Numero2 extends Numero1
{
public void onScannedRobot(ScannedRobotEvent e)
{
stop();
ahead(10);
fire(10);
resume();
}
public void onHitByBullet(HitByBulletEvent e)
{
turnRight(90);
back(100);
}
}
Quando for atingido,
vire 90 graus
e ande para trás.
Usa Numero1 como base.
Quando enxergar outro robô, pare,
ande para frente, atire e continue.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 48
Nosso Segundo Robô
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 49
Nosso Terceiro Robô
public class Numero3 extends Robot
{
public void run()
{
setBodyColor(new Color(200,50,0));
setGunColor(Color.BLUE);
setScanColor(Color.RED);
while(true)
{
ahead(5);
turnLeft(30);
}
}
public void onHitByBullet(HitByBulletEvent e)
{
back(40);
}
Quando for atingido,
ande para trás.
Enquanto nada acontecer,
fique olhando em volta.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 50
Nosso Terceiro Robô
public void onScannedRobot(ScannedRobotEvent e)
{
double dist = e.getDistance();
// Só para robôs que estiverem próximos.
if (dist < 200)
{
// Para e muda a cor do feixe do radar.
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);
}
else
{
stop(); ahead(dist/2); resume();
}
}
Chegue mais perto.
Atire em volta da direção
se estiver perto.
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 51
Demonstração
Outubro/2008 http://www.lac.inpe.br/~rafael.santos 52
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/

Mais conteúdo relacionado

PDF
Spring framework 2.5
PDF
Java introdução ao java
PDF
Ecosistema spring a_plataforma_enterprise_jav
DOCX
Java para iniciantes
PPTX
Linguagem de Programação Java
ODP
Mini Curso Python
PDF
Cartilha de R para Estatística e Data Science.pdf
Spring framework 2.5
Java introdução ao java
Ecosistema spring a_plataforma_enterprise_jav
Java para iniciantes
Linguagem de Programação Java
Mini Curso Python
Cartilha de R para Estatística e Data Science.pdf

Semelhante a Programacao de Computadores e Robocode PDF (20)

PPT
(Portuguese) Java EE Poliglota
PDF
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
ODP
Calourada2010
PDF
Tutorial java swing
ODP
Matando o Java e Mostrando o Python
PPTX
Estrutura de Dados em Java (Introdução)
PDF
Spring Data Jpa
PPT
Java
PPTX
JAVA - Tipos de dados. - Operadores e prioridades; - Tipo variáveis; Definiçã...
PPTX
Beljug2010
PPT
Introdução a conceitos e a Praticas de Programação
ODP
Programação Defensiva
PDF
PL/Python: Programando em Python no PostgreSQL
PPTX
Pdm -final
PDF
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
ODP
Python Emsl2009
PPT
Aula 5 Programando em Java.ppt - Introdutória
PPTX
Desenvolvendo para WEB com JAVA
PDF
Algoritomos aula 3 rafael
(Portuguese) Java EE Poliglota
Plataforma de compiladores .NET, C# 6 e Visual Studio 2015
Calourada2010
Tutorial java swing
Matando o Java e Mostrando o Python
Estrutura de Dados em Java (Introdução)
Spring Data Jpa
Java
JAVA - Tipos de dados. - Operadores e prioridades; - Tipo variáveis; Definiçã...
Beljug2010
Introdução a conceitos e a Praticas de Programação
Programação Defensiva
PL/Python: Programando em Python no PostgreSQL
Pdm -final
Plataforma de compiladores .NET (“Roslyn”), C# 6 e Visual Studio “14”
Python Emsl2009
Aula 5 Programando em Java.ppt - Introdutória
Desenvolvendo para WEB com JAVA
Algoritomos aula 3 rafael
Anúncio

Último (7)

PDF
Dos requisitos ao código: como criar código rastreável em PHP
PDF
Evolução em código: algoritmos genéticos com PHP
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PPTX
Curso de Windows 11 resumido na prática.pptx
PPTX
Mapeamento de Objeto para Tabela Relacional
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PDF
apresentacao introducao computacao ead.pdf
Dos requisitos ao código: como criar código rastreável em PHP
Evolução em código: algoritmos genéticos com PHP
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
Curso de Windows 11 resumido na prática.pptx
Mapeamento de Objeto para Tabela Relacional
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
apresentacao introducao computacao ead.pdf
Anúncio

Programacao de Computadores e Robocode PDF