// Função que descarrega os recursos globais void Descarrega() { CA2_RemoveMusica(mfundo); C2D2_RemoveFonte(fdigital); C2D2_RemoveFonte(fsistema); C2D2_RemoveFonte(fpequeno); C2D2_RemoveSpriteSet(tuxwindows); C2D2_RemoveSpriteSet(titulo); C2D2_RemoveSpriteSet(sprite1); C2D2_RemoveSpriteSet(sprite2); }
int main(int ac, char **av) { srand((unsigned)time(NULL)); WSAData wsaData; WSAStartup(MAKEWORD(2, 2), &wsaData); sockaddr_in meuEndereco; meuEndereco.sin_addr.s_addr = INADDR_ANY; meuEndereco.sin_family = AF_INET; meuEndereco.sin_port = htons(9000 + (rand()%1000)); SOCKET meuSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); bind(meuSocket, (sockaddr*)&meuEndereco, sizeof(meuEndereco)); sockaddr_in destinatario; destinatario.sin_addr.s_addr = inet_addr("10.96.26.85"); destinatario.sin_family = AF_INET; destinatario.sin_port = htons(8888); sockaddr_in enderecoRemetente; int enderecoRemetenteTam = sizeof(enderecoRemetente); int comando = 0; int cliente; int clientes = 0; int x[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int y[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; sendto(meuSocket, (char*)&comando, sizeof(int), NULL, (sockaddr*)&destinatario, sizeof(destinatario)); int r = recvfrom(meuSocket, (char*)&cliente, sizeof(int), NULL, (sockaddr*)&enderecoRemetente, &enderecoRemetenteTam); C2D2_Inicia(800, 600, C2D2_JANELA, C2D2_DESENHO_OPENGL, "Amostragem"); C2D2_Botao *teclado; teclado = C2D2_PegaTeclas(); C2D2_Mouse *mouse; mouse = C2D2_PegaMouse(); C2D2_TrocaCorLimpezaTela(0, 120, 0); unsigned int cursorSprite; cursorSprite = C2D2_CarregaSpriteSet("cursor.png", 25, 25); unsigned long proximaAtualizacaoFrame = C2D2_TempoSistema() + 100; while (!teclado[C2D2_ESC].pressionado) { if (proximaAtualizacaoFrame < C2D2_TempoSistema()) { proximaAtualizacaoFrame = C2D2_TempoSistema() + 100; comando = 1; sendto(meuSocket, (char*)&comando, sizeof(int), NULL, (sockaddr*)&destinatario, sizeof(destinatario)); sendto(meuSocket, (char*)&cliente, sizeof(int), NULL, (sockaddr*)&destinatario, sizeof(destinatario)); sendto(meuSocket, (char*)&mouse->x, sizeof(int), NULL, (sockaddr*)&destinatario, sizeof(destinatario)); sendto(meuSocket, (char*)&mouse->y, sizeof(int), NULL, (sockaddr*)&destinatario, sizeof(destinatario)); comando = 2; sendto(meuSocket, (char*)&comando, sizeof(int), NULL, (sockaddr*)&destinatario, sizeof(destinatario)); recvfrom(meuSocket, (char*)&clientes, sizeof(int), NULL, (sockaddr*)&enderecoRemetente, &enderecoRemetenteTam); for (int i = 0; i < clientes; i++){ recvfrom(meuSocket, (char*)&x[i], sizeof(int), NULL, (sockaddr*)&enderecoRemetente, &enderecoRemetenteTam); recvfrom(meuSocket, (char*)&y[i], sizeof(int), NULL, (sockaddr*)&enderecoRemetente, &enderecoRemetenteTam); } } C2D2_LimpaTela(); C2D2_DesenhaSprite(cursorSprite, 0, mouse->x, mouse->y); for (int i = 0; i < clientes; i++){ if (i+1 == cliente) continue; C2D2_DesenhaSprite(cursorSprite, 0, x[i], y[i]); } C2D2_Sincroniza(C2D2_FPS_PADRAO); } C2D2_RemoveSpriteSet(cursorSprite); C2D2_Encerra(); closesocket(meuSocket); WSACleanup(); return 0; }
int main(int narg, char **valarg) { // Inicia a Chien2D 2 e testa se deu tudo certo if(C2D2_Inicia(LARGTELA, ALTTELA, C2D2_JANELA, C2D2_DESENHO_PADRAO, "Rotação")) printf("Iniciou a Chien2D 2 com sucesso\n"); else { printf("Falhou ao iniciar a Chien2D 2. Encerrando o programa.\n"); return 0; } // os sprites unsigned int spritescertos[4], spriteserrados[4], help; // Coordenadas na tela float xf[16], yf[16], xtrf[16], ytrf[16]; int xi[16], yi[16], xtri[16], ytri[16]; float angulo = 0; // Escolhe se desenha certo ou não bool certo = false; // O zoom a aplicar int zoom = 200; for(int i=0;i<4;i++) { char nome[40]; sprintf(nome, "graficos/rotacao%i.png", i); spritescertos[i]= C2D2_CarregaSpriteSet(nome, TAMSPRITE+2, TAMSPRITE+2); xf[0+i*4] = xf[3+i*4] = -TAMSPRITE + TAMSPRITE*(i%2); xf[1+i*4] = xf[2+i*4] = (i%2)*TAMSPRITE; yf[0+i*4] = yf[1+i*4] = (TAMSPRITE - (i/2)*TAMSPRITE); yf[2+i*4] = yf[3+i*4] = -(i/2)*TAMSPRITE; // Faz o mesmo para os sprites errados sprintf(nome, "graficos/rotacaoerrado%i.png", i); spriteserrados[i]= C2D2_CarregaSpriteSet(nome, TAMSPRITE, TAMSPRITE); xi[0+i*4] = xi[3+i*4] = -TAMSPRITE + TAMSPRITE*(i%2); xi[1+i*4] = xi[2+i*4] = (i%2)*TAMSPRITE; yi[0+i*4] = yi[1+i*4] = (TAMSPRITE - (i/2)*TAMSPRITE); yi[2+i*4] = yi[3+i*4] = -(i/2)*TAMSPRITE; } help = C2D2_CarregaSpriteSet("graficos/help.png", 0, 0); // Recupera o teclado C2D2_Botao *teclas = C2D2_PegaTeclas(); // Recupera o mouse C2D2_Mouse *mouse = C2D2_PegaMouse(); C2D2_TrocaCorLimpezaTela(255,0,0); do { // Muda o zoom? if(teclas[C2D2_Z].ativo && zoom > 1) zoom--; else if(teclas[C2D2_X].ativo && zoom < 400) zoom++; // Troca o render? if(teclas[C2D2_ESPACO].pressionado) certo = !certo; // Calcula o novo angulo if(teclas[C2D2_ENTER].ativo) angulo+=1.5; else angulo+=0.3; if(angulo>360) angulo-=360; // Rotaciona os pontos for(int i=0;i<16;i++) { // Os pontos certos xtrf[i] = LARGTELA/2 + (xf[i]*zoom/100.0)*cos(RAD*angulo) + (yf[i]*zoom/100.0)*sin(RAD*angulo); ytrf[i] = ALTTELA/2 - ((xf[i]*zoom/100.0)*-sin(RAD*angulo) + (yf[i]*zoom/100.0)*cos(RAD*angulo)); // Os pontos errados xtri[i] = LARGTELA/2 + (xi[i]*zoom/100.0)*cos(RAD*angulo) + (yi[i]*zoom/100.0)*sin(RAD*angulo); ytri[i] = ALTTELA/2 - ((xi[i]*zoom/100.0)*-sin(RAD*angulo) + (yi[i]*zoom/100.0)*cos(RAD*angulo)); } // Limpa a tela com a cor de fundo atual C2D2_LimpaTela(); // Desenha os sprites for(int i=0;i<4;i++) { if(certo) C2D2_DesenhaSpriteEfeitoSubpixel(spritescertos[i], 0, &xtrf[i*4], &ytrf[i*4], 255, 255, 255, 255); else C2D2_DesenhaSpriteEfeito(spriteserrados[i], 0, &xtri[i*4], &ytri[i*4], 255, 255, 255, 255); } C2D2_DesenhaSprite(help, 0, 10, 10); // Faz a troca do front buffer com o back buffer e atualiza as entradas C2D2_Sincroniza(C2D2_FPS_PADRAO); } while(!teclas[C2D2_ENCERRA].pressionado && !teclas[C2D2_ESC].pressionado); // Remove as imagens for(int i=0;i<4;i++) { C2D2_RemoveSpriteSet(spritescertos[i]); C2D2_RemoveSpriteSet(spriteserrados[i]); } C2D2_RemoveSpriteSet(help); // Encerra a Chien2D 2 C2D2_Encerra(); return 0; }