segunda-feira, 11 de maio de 2015

Protótipo de Worms e uso de threads

O projeto do protótipo de Worms foi finalizado. Seria muita extenso explicar, e muitas das coisas não foram feitas por mim, mas se alguém que está aprendendo Unity quiser se aventurar, o código está disponível no GitHub: https://github.com/marcoprado17/WormsProject

Um demo foi colocado no Youtube também, o resultado ficou legal.


O processo de recomputar a superfície após colisão é um pouco custoso, então foi utilizada uma thread para realizar esse processo em paralelo. Para observar melhor a diferença, um amigo piorou um pouco o algoritmo. Dá para ver no vídeo abaixo que quando há colisão sem threads, o jogador fica lagado e não consegue se movimentar, enquanto com thread o resultado fica bem melhor.


Até mais!

sexta-feira, 8 de maio de 2015

Threads em C# e Co-rotinas em Unity

Mais um projeto foi dado à nossa classe de POO, envolvendo animações, e meu grupo optou por fazer um jogo utilizando Unity. Se você não conhece Unity, vale a pena se informar (este link é interessante). Dando uma breve descrição, é uma game engine que facilita muito o desenvolvimento de jogos, já que une elementos gráficos, física e possui API própria, ou seja, ela tem um conjunto de funções que simplificam muitas partes difíceis que não queremos lidar quando desenvolvemos jogos, como colisões entre objetos.

Entre outras vantagens de Unity, cresce rápido e tem uma vasta documentação disponível para quem quer aprender, além de permitir criar projetos para diferentes plataformas e ainda ser de "graça" (existe a versão profissional paga, mas a gratuita oferece recursos mais que suficientes para quem não tem projetos gigantes). Um exemplo do potencial está no vídeo abaixo:


quarta-feira, 22 de abril de 2015

Ordenação [Pt 3]: Função Sort (C++)

A maior parte das vezes, só queremos que o vetor esteja ordenado. Se for uma variável já existente de C++ (int, double, string etc), para a qual já existe um comparador padrão (dado dos inteiros ou duas strings, é possível comparar), basta chamar a função pro vetor.

#include <algorithm>
#include <vector>
#include <string>
using namespace std;

vector <char> v_char; //Vector de char
vector <string> v_str; //Vector de strings
int v_int[1000]; //Vetor de inteiros

int main() {
    int n; //n = tamanho do vetor

    sort(v_char.begin(), v_char.end());
    //Soh ordenar n elementos
    sort(v_str.begin(), v_str.begin() + n);
    sort(v_int, v_int + n);
}

Ordenação [Pt 2]: Mergesort e contando inversões

Para um vetor grande, não funciona um algoritmo O(n²). Precisamos de um melhor. Primeiro mostrarei a ideia e depois o tempo de execução.

Suponha que temos um vetor de tamanho N desordenado. Se ordenamos cada uma das metades separadamente, podemos juntar as metades em O(n = tamanho do vetor), certo? Explico melhor:

Ordenação [Pt 1]: Bubblesort e contando inversões

Ordenar um vetor é um problema famoso e que possui muitas soluções, algumas intuitivas ou não. Vamos começar com o pior método de ordenar, contextualizando:

Suponha que estamos em uma corrida de fórmula 1. Cada competidor começa em uma posição arbitrária, e termina em outra posição arbitrária.

domingo, 5 de abril de 2015

Editorial #1

Fala pessoal,

Pensei um pouco sobre alguns problemas recentemente e decidi fazer um editorial que pode ser útil caso alguém tivesse dificuldade em fazê-los depois. Para começar, escolhi dois problemas do URI Online Judge (que, na verdade, são originais de provas da maratona de programação ACM ICPC):

URI 1231: Palavras (link para o problema)
URI 1265: DJ da Computação (link para o problema)

quarta-feira, 1 de abril de 2015

Foi dado como atividade à nossa turma de POO o desenvolvimento de um projeto de consulta a hyperlinks. É possível armazenar urls, nome, data de criação, adicionar comentários e metatags para cada hyperlink, e buscar um destes usando através de qualquer um dos campos (comentários e metatags também).

Meu grupo (eu e mais uma pessoa) escolhemos armazenar tudo em banco de dados, e trabalhar com consultas. Como foi feito em Java com Netbeans, fiquei responsável pela comunicação com o banco, utilizando MySQL e a API JDBC, que tem um driver bem simples de usar. Sugiro a leitura desta apostila da Caelum, pela qual eu também me baseei bastante.