Você está aqui: Cards de AutoCAD Civil 3D |
||
|
||
|
|
||
Python ::: Pygame ::: Animação, Animações, Técnicas de Animação |
Como criar um relógio analógico no Pygame - Código completo com variáveis e comentários em portuguêsQuantidade de visualizações: 1516 vezes |
Nesta dica mostrarei um código para a criação de um relógio analógico completo em Python, com comentários detalhados e fácil de entender. Veja a imagem:![]() Por simplicidade, eu mantive a mesma cor para todos os elementos da animação e deixei somente o básico mesmo, para que você possa se concentrar nas partes mais importantes. Neste código você aprenderá como definir o tamanho, título e cor de fundo para uma janela do Pygame do Python. Aprenderá também como definir a quantidade de frames por segundo para a animação, assim como controlar os disparos do timer pygame.time.Clock(). Por fim, o código mostra como calcular o ângulo dos ponteiros das horas, minutos e segundos e efetuar o desenho das retas saindo do centro do círculo. Você sabia, por exemplo, que o ângulo de 45 graus corresponde exatamente à hora 1:30hs? Em vários exemplos de relógios analógicos na internet, o ponteiro das horas fica preso à uma determinada hora, aguardando o ponteiro dos segundos completar um giro completo. No código que apresento aqui, eu obtive a hora atual como um decimal, o que faz com que o ponteiro das horas mostre a posição real da hora, como um relógio analógico do mundo real. Para estudantes de matemática, engenharia e física, este código é uma boa aplicação da técnica de se converter coordenadas polares para coordenadas cartesianas. Eis o código completo para o relógio analógico. Boa diversão.
# vamos importar as bibliotecas necessárias
import pygame, sys
from pygame.locals import *
import math
from datetime import datetime
# função que faz a correção dos ângulos
def corrigir_angulo(angulo):
return abs(angulo % 360)
# inicializa a biblioteca
pygame.init()
# quantidade de frames por segundo
FPS = 30
# construímos o timer
timer = pygame.time.Clock()
# obtém a superfície do jogo e define o tamanho da tela
janela = pygame.display.set_mode((600, 400))
# vamos definir o título da janela do jogo
pygame.display.set_caption('Relógio Analógico no Pygame')
# vamos definir alguns parâmetros
fonte = pygame.font.Font(None, 36)
VERMELHO = (200, 0, 0)
BRANCO = (255, 255, 255)
raio = 150
x_inicial = 300
y_inicial = 200
distancia_aro = 20
# e aqui nós entramos no loop do game
while True:
# vamos pintar a tela toda de branco
janela.fill(BRANCO)
# monitoramos os eventos
for evento in pygame.event.get():
# se o evento foi um pedido para sair
if evento.type == QUIT:
# fechamos a tela do jogo
pygame.quit()
# e saimos do programa
sys.exit()
# vamos desenhar um circulo não preenchido (maior)
pygame.draw.circle(janela, VERMELHO, (x_inicial, y_inicial), raio, 2)
# vamos desenhar um circulo não preenchido (menor)
pygame.draw.circle(janela, VERMELHO, (x_inicial + 1, y_inicial + 1), 5, 0)
# vamos desenhar os números do relório (1-12)
for n in range(1, 13):
# calcula o ângulo dessa hora
angulo = math.radians((n * (360 / 12)) - 90)
# agora convertemos o ângulo e o raio para coordenadas cartesianas
if len(str(n)) > 1:
x = math.cos(angulo) * (raio - distancia_aro) - 18
else:
x = math.cos(angulo) * (raio - distancia_aro) - 10
y = math.sin(angulo) * (raio - distancia_aro) - 10
texto_numero = fonte.render(str(n), True, VERMELHO)
janela.blit(texto_numero, (x_inicial + x, y_inicial + y))
# vamos obter as horas, minutos e segundos atuais
hoje = datetime.today()
horas = hoje.hour % 12
minutos = hoje.minute
segundos = hoje.second
# ajustamos as horas para tratar a hora decimal (com frações de horas)
horas = horas + (minutos * (1 / 60)) + (segundos * (1 / 3600))
# desenha o ponteiro das horas
angulo_horas = corrigir_angulo(horas * (360 / 12) - 90)
angulo_horas = math.radians(angulo_horas)
hora_x = math.cos(angulo_horas) * (raio - 60)
hora_y = math.sin(angulo_horas) * (raio - 60)
coord_finais = (x_inicial + hora_x, y_inicial + hora_y)
pygame.draw.line(janela, VERMELHO, (x_inicial, y_inicial), coord_finais, 4)
# desenha o ponteiro dos minutos
angulo_minutos = corrigir_angulo(minutos * (360 / 60) - 90)
angulo_minutos = math.radians(angulo_minutos)
minutos_x = math.cos(angulo_minutos) * (raio - 40)
minutos_y = math.sin(angulo_minutos) * (raio - 40)
coord_finais = (x_inicial + minutos_x, y_inicial + minutos_y)
pygame.draw.line(janela, VERMELHO, (x_inicial, y_inicial), coord_finais, 3)
# desenha o ponteiro dos segundos
angulo_segundos = corrigir_angulo(segundos * (360 / 60) - 90)
angulo_segundos = math.radians(angulo_segundos)
segundos_x = math.cos(angulo_segundos) * (raio - 30)
segundos_y = math.sin(angulo_segundos) * (raio - 30)
coord_finais = (x_inicial + segundos_x, y_inicial + segundos_y)
pygame.draw.line(janela, VERMELHO, (x_inicial, y_inicial), coord_finais, 1)
# redesenha a tela continuamente
pygame.display.update()
# aciona o disparo do timer
timer.tick(FPS)
|
Java ::: Tratamento de Erros ::: Erros de Tempo de Execução |
Como corrigir um erro ClassCastException em Java - Como tratar a exceção ClassCastException do JavaQuantidade de visualizações: 17434 vezes |
|
A exceção ClassCastException é um erro de tempo de execução que ocorre quando tentamos fazer um cast (coerção - conversão explícita) de uma classe para outra classe diferente desta ou que não seja uma superclasse desta. Em outras palavras, casts válidos para classes e interfaces devem seguir as regras abaixo: 1) Se NovoTipo é uma classe, a classe da expressão sendo convertida deve ser do tipo NovoTipo ou herdar de NovoTipo. 2) Se NovoTipo é uma interface, a classe da expressão sendo convertida deve implementar NovoTipo. Considere o código a seguir:
public class Estudos{
public static void main(String args[]){
Object x = new Integer(0);
System.out.println((String)x);
}
}
Este código compila normalmente. Porém, ao ser executado, a seguinte mensagem de erro é exibida: Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at Estudos.main(Estudos.java:4) Esta mensagem nos informa que a classe Integer não pode sofrer um cast para String, uma vez que Integer não é e nem herda de String. Veja agora a nova versão:
public class Estudos{
public static void main(String args[]){
Object x = new Integer(0);
System.out.println((Integer)x);
}
}
Veja que agora nós estamos fazendo o cast de uma referência Object para Integer. Embora Object não seja e nem herde de Integer, o sistema de tempo de execução sabe que x guarda atualmente uma referência a um Integer: Object x = new Integer(0); |
C++ ::: Dicas & Truques ::: Strings e Caracteres |
Como substituir substrings em strings C++ usando a função replace()Quantidade de visualizações: 11044 vezes |
Nesta dica mostrarei como podemos usar a função replace() da classe String do C++ para substituir parte de uma palavra, frase ou texto, ou seja, substituir uma substring em uma string. Para isso nós vamos usar a seguinte assinatura da função replace():string& replace(size_t pos1, size_t n1, const string& str); Veja o código C++ completo para o exemplo:
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char *argv[]){
// vamos criar uma string
string frase = "Gosto de Java";
cout << "A frase e: " << frase << endl;
// vamos substituir Java por C++
frase.replace(9, 4, "PHP");
// e mostramos o resultado
cout << "Depois da substituicao: " << frase << endl;
system("PAUSE"); // pausa o programa
return EXIT_SUCCESS;
}
Ao executar este código C++ nós teremos o seguinte resultado: A frase é: Gosto de Java Depois da substituição: Gosto de PHP |
Java ::: Classes e Componentes ::: JComponent |
Java Avançado - Como verificar se uma classe herda de JComponentQuantidade de visualizações: 8819 vezes |
|
Nesta dica mostrarei como podemos tirar proveito dos métodos getClass(), getSuperclass() e getName() da classe Class para verificarmos se uma determinada classe herda da classe JComponent. Embora este exemplo busque relacionar controles do Java Swing, a técnica usada pode ser aplicada em qualquer classe da linguagem Java. Veja o código completo:
package arquivodecodigos;
import javax.swing.*;
public class Estudos{
public static void main(String args[]){
// verifica se JLabel herda de JComponent
JLabel label = new JLabel("Teste");
if(herdaJComponent(label)){
System.out.println("JLabel herda de JComponent");
}
else{
System.out.println(
"JLabel não herda de JComponent");
}
// verifica se Timer herda de JComponent
java.util.Timer timer = new java.util.Timer();
if(herdaJComponent(timer)){
System.out.println(
"java.util.Timer herda de JComponent");
}
else{
System.out.println(
"java.util.Timer não herda de JComponent");
}
System.exit(0);
}
static boolean herdaJComponent(Object obj){
Class cls = obj.getClass();
Class superclass = cls.getSuperclass();
while(superclass != null){
String className = superclass.getName();
if(className.equals("javax.swing.JComponent")){
return true;
}
cls = superclass;
superclass = cls.getSuperclass();
}
return false;
}
}
Ao executarmos este código nós teremos o seguinte resultado: JLabel herda de JComponent java.util.Timer não herda de JComponent |
Java ::: Coleções (Collections) ::: Stack |
Como criar uma pilha em Java usando a classe Stack - Java CollectionsQuantidade de visualizações: 13563 vezes |
|
A classe Stack é usada quando precisamos de uma estrutura de dados LIFO (last-in-first-out). Neste tipo de estrutura temos uma pilha de objetos, na qual o último elemento inserido na pilha é sempre o primeiro a sair. A classe Stack extende a classe Vector com a adição de cinco operações próprias da estrutura de dados pilha. As dicas nesta seção mostram a você como usar cada uma destas operações. Antes, veja a posição da classe Stack na hierarquia de classes Java:
java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.Vector<E>
java.util.Stack<E>
Esta classe implementa as interfaces: Serializable, Cloneable, Iterable<E>, Collection<E>, List<E> e RandomAccess. Veja um trecho de código que cria uma Stack de inteiros, insere três elementos e usa o método pop() para remover o elemento no topo da pilha:
import java.util.*;
public class Estudos{
public static void main(String args[]){
// Cria uma Stack
Stack<Integer> pilha = new Stack<Integer>();
// adiciona três elementos na pilha
pilha.push(34);
pilha.push(12);
pilha.push(83);
// remove o elemento no topo da pilha
int topo = pilha.pop();
System.out.println("Elemento removido do " +
"topo da pilha: " + topo);
}
}
Ao executar este código Java nós teremos o seguinte resultado: Elemento removido do topo da pilha: 83 |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






