Você está aqui: Cards de Python |
||
|
||
|
|
||
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: 1596 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 ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico |
Exercícios Resolvidos de Java - Como testar se um número é potência de dois usando JavaQuantidade de visualizações: 976 vezes |
|
Pergunta/Tarefa: Escreva um programa Java contendo um método que recebe um número inteiro e retorna um valor boolean indicando se o valor informado é potência de dois. Sua saída deverá ser parecida com: Informe um valor inteiro: 8 O valor 8 é potência de dois Informe um valor inteiro: 34 O valor 34 não é potência de dois Informe um valor inteiro: 64 O valor 64 é potência de dois Veja a resolução comentada deste exercício usando Java:
package estudos;
import java.util.Scanner;
public class Estudos{
public static void main(String args[]){
// para ler a entrada do usuário
Scanner entrada = new Scanner(System.in);
// vamos pedir para o usuário informar um valor inteiro
System.out.print("Informe um valor inteiro: ");
int valor = Integer.parseInt(entrada.nextLine());
// vamos testar se o número informado é potência de dois
if(isPotenciaDeDois(valor)){
System.out.println("O valor " + valor + " é potência de dois");
}
else{
System.out.println("O valor " + valor + " não é potência de dois");
}
}
// método que recebe um número inteiro e informe se ele é
// potência de dois
public static boolean isPotenciaDeDois(int n){
// usamos o operador AND de bits para verificar se n AND n-1
// é igual a 0
return (n > 0) && (n & (n - 1)) == 0;
}
}
|
Java ::: Pacote java.lang ::: Character |
Como usar a classe Character da linguagem Java para tratar caracteres individuais em seus programasQuantidade de visualizações: 7435 vezes |
|
A classe Character, uma classe pública e final (ou seja, não é possível fazer subclasse desta classe) e presente no pacote java.lang é uma classe encapsuladora (wrapper class) para o tipo primitivo char. Objetos desta classe contém apenas um campo, cujo tipo é char. Veja a posição desta classe na hierarquia de classes da plataforma Java: java.lang.Object java.lang.Character Esta classe implementa as interfaces Serializable e Comparable<Character>. Uma das vantagens de se usar objetos da classe Character é que podemos chamar seus métodos estáticos para obter informações sobre o tipo char encapsulado. Veja:
public class Main {
public static void main(String[] args) {
// uma variável do tipo char
char letra = 'A';
// vamos verificar se o caractere anterior é uma letra maiúscula
if(Character.isUpperCase(letra)){
System.out.println("A letra é maiúscula");
}
else{
System.out.println("A letra não é maiúscula");
}
}
}
Ao executarmos este código teremos o seguinte resultado: A letra é maiúscula Veja que neste trecho de código nós usamos o método estático isUpperCase() da classe Character para verificar se um determinado caractere está em letras maiúsculas. |
Delphi ::: VCL - Visual Component Library ::: TStringGrid |
Como usar o controle TStringGrid em suas aplicações Delphi - O componente TStringGrid do DelphiQuantidade de visualizações: 19980 vezes |
Um objeto da classe TStringGrid representa um controle de grid que pode ser usado em suas aplicações Delphi para simplificar o processo de se lidar com strings e objetos associados a esta. Veja a posição desta classe na hierarquia de classes do Delphi:
System.TObject
Classes.TPersistent
Classes.TComponent
Controls.TControl
Controls.TWinControl
Controls.TCustomControl
Grids.TCustomGrid
Grids.TCustomDrawGrid
Grids.TDrawGrid
Grids.TStringGrid
Esta classe implementa também as interfaces IInterfaceComponentReference e IInterface. O uso mais frequente de um controle TStringGrid é quando queremos apresentar um conteúdo texto em um formato tabular. Este controle fornece muitas propriedades para controlar a aparência da grid, assim como eventos e métodos que tiram vantagem da organização tabular da grid ao responder às ações do usuário. Para adicionar um controle TStringGrid ao seu formulário você só precisa acessar a aba Additional no Tool Palette, clicar no controle e arrastá-lo para a posição desejada no formulário. Por padrão, um controle TStringGrid contém 5 linhas e 5 colunas. Novas linhas e novas colunas podem ser adicionadas por meio das propriedades RowCount e ColCount da classe TCustomGrid. Cada célula da grid pode ter seu valor definido ou acessado usando-se a propriedade Cells. Veja um trecho de código no qual definimos o conteúdo da célula situada na segunda linha da primeira coluna do TStringGrid: procedure TForm1.Button1Click(Sender: TObject); begin // vamos definir o conteúdo da célula na segunda linha // da primeira coluna da grid StringGrid1.Cells[0, 1] := 'Osmar J. Silva'; end; Um controle TStringGrid introduz a possibilidade de associar um objeto com cada string na grid. Estes objetos podem encapsular quaisquer informações ou comportamento representado pelas strings apresentadas ao usuário. Se as strings a serem apresentadas na grid representarem valores de campos dos registros de um conjunto de dados (dataset), devemos usar um TDBGrid em vez de um TStringGrid. |
Java ::: Dicas & Truques ::: Mouse e Teclado |
Java Avançado - Como verificar se a tecla Caps Lock está ativada usando o método getLockingKeyState() da classe Toolkit do JavaQuantidade de visualizações: 11594 vezes |
|
Nesta dica mostrarei como é possível usar o método getLockingKeyState() da classe Toolkit da linguagem Java para verificar se a tecla Caps Lock estão ou não ativada no seu computador. Note o valor KeyEvent.VK_CAPS_LOCK sendo passado para o método. Veja o código completo para o exemplo:
package arquivodecodigos;
import java.awt.Toolkit;
import java.awt.event.*;
public class Estudos{
public static void main(String[] args){
Toolkit tk = Toolkit.getDefaultToolkit();
if(tk.getLockingKeyState(KeyEvent.VK_CAPS_LOCK))
System.out.println("A tecla Caps Lock está ativada");
else
System.out.println("A tecla Caps Lock não está ativada");
System.exit(0);
}
}
Ao executarmos este código você verá uma mensagem parecida com: A tecla Caps Lock está ativada |
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 |






