Grupo de alunos da Universidade de Brasília - Campus de Engenharias Gama, com o trabalho de compartilhar um pouco de aprendizado entre alunos e para os que acessarem o blog formando melhores profissionais na área da Engenharia de Software.
terça-feira, 22 de fevereiro de 2011
Forca em C
É um jogo que utiliza os recursos da bilbioteca graphics.h, bem simples mas bem didático e até
divertido. Aproveitem! O executável pra jogar se encontra no link abaixo.
Baixe tudo aqui: http://www.4shared.com/file/e5I61g_L/Forca.html
Fonte:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<graphics.h>
/*
Nome do Programa: Forca em C
Autor: Fernando Vieira
Co-Autores:
Testes: Luiza Allen
Blog: http://fgaexplica.blogspot.com
Aluno da UNB - Gama, DF
Comentário: O jogo é para facilitar o aprendizado da biblioteca graphics.h, se divirtam e alterem
como quiser! Dúvidas entrem no blog.
*/
//funções utilizadas
void fillrectangle(int x, int y, int width, int heigth) //criei pra facilitar o uso da bar
{
bar(x, y, x+width, y+heigth); //bar pegava x e y inicial e x e y final, aqui o final vem com a soma da largura e altura
}
void preencher(char letra, int pos) //preenchendo os espaços
{
//coordenadas do primeiro espaço
char texto[1]; //string que receberá o texto a ser escrito na tela
//a string recebe a letra e o caracter \0 que define o final de uma string
texto[0]=letra;
texto[1]='\0';
outtextxy((65+20/2)+30*pos, 135-1, texto); //pos é a posição e identifica em qual dos espaços será escrita a letra
}
void desenha_parte(int erros) //pega o número do erro cometido e desenha parte correspondente
{
switch(erros)
{
case 1: fillellipse(88+2, 30+20+10, 10, 10); //cabeça
break;
case 2: moveto(80+2+10, 30+20+10+10); //corpo
linerel(0, 35);
break;
case 3: moveto(80+2+10-1, 30+20+10+10+5); //braço à direita
linerel(-15, 10);
break;
case 4: moveto(80+2+10+1, 30+20+10+10+5); //braço à esquerda
linerel(15, 10);
break;
case 5: moveto(80+2+10, 30+20+10+10+35); //perna à direita
linerel(-10, 25);
break;
case 6: moveto(80+2+10, 30+20+10+10+35); //perna à esquerda
linerel(10, 25);
break;
default:
break;
}
}
//main
int driver, mode, key=0;
int j,i, x, y, largura, altura, erros, acertos;
char *palavra, palavra2[50], *dica, dica2[50], letra, *palavras[50], *dicas[50];
bool acabou=false;
int main()
{
initwindow(600,400);
printf("Digite 0 para jogar sozinho ou 1 para jogar com duas pessoas: ");
scanf("%d",&j);
getchar(); //tava capturando algo desnecessário, coloquei aí para pegar
if(j!=1)
{
//jogar de um
palavras[0]="abacaxi";
dicas[0]="fruta";
palavras[1]="banana";
dicas[1]="fruta";
palavras[2]="ronaldo";
dicas[2]="jogador";
palavras[3]="neymar";
dicas[3]="jogador";
palavras[4]="difícil";
dicas[4]="???";
palavras[5]="lapiseira";
dicas[5]="objeto";
palavras[6]="bola";
dicas[6]="objeto";
palavras[7]="computador";
dicas[7]="objeto";
palavras[8]="escrivaninha";
dicas[8]="objeto";
palavras[9]="golfe";
dicas[9]="esporte";
palavras[10]="futebol";
dicas[10]="esporte";
palavras[11]="porco";
dicas[11]="animal";
palavras[12]="touro";
dicas[12]="esporte";
palavras[13]="cavalo";
dicas[13]="esporte";
srand(time(NULL)); //definindo o número aleatório pela hora atual do sistema
i=rand()%14; //pegando um número de 0 à 13
palavra=palavras[i];
dica=dicas[i];
}
else
{
printf("Digite a palavra: ");
gets(palavra2); //tô passando para uma string de tamanho limitado porque não estava lendo direto...
palavra=palavra2;
printf("Digite a dica: ");
gets(dica2);
dica=dica2; //tô passando para uma string de tamanho limitado porque não estava lendo direto...
}
system("cls");
outtextxy(50,10,"Forca");
//colocando a dica na tela
outtextxy(130,10,dica); //mostrando a dica
//desenhando a forca
x=20;
y=150;
largura=40;
altura=5;
fillrectangle(x, y, largura, altura);
fillrectangle(x=x+18, y, 5, -120); //x=38
fillrectangle(x, y=y-120, 50, 5); //y=30
fillrectangle(x=x+50, y, 5, 20); //x=88
//desenhando espaços para letras
x=65;
y=150;
largura=25;
altura=5;
for(i=0; i < strlen(palavra); i++)
{
fillrectangle(x+30*i, y, largura, altura); //cada uma está separada por 30 pixels no eixo x (horizontalmente)
}
while(!acabou) //enquanto não tiver alcançado uma condição para acabar (ganhar ou perder)
{
bool acerto=false; //variável que informa se houve acerto com a letra escolhida
printf("Escolha uma letra: ");
letra = getchar(); //pegando a letra
for(i=0; i < strlen(palavra); i++) //verificação letra a letra
{
if(palavra[i]==letra) //verificando se a letra escolhida é igual a alguma da palavra
{
preencher(letra, i); //preenchendo a letra na posição
acertos++; //acumulando os acertos, letras que já foram descobertas
acerto=true; //quer dizer que a letra escolhida aparece na palavra
}
if(strlen(palavra)-1==i && !acerto) //na última letra se não teve nenhum acerto
{
erros++; //acumula o número de errros
desenha_parte(erros); //desenha a parte correspondente ao erro
}
}
getchar(); //tava capturando algo desnecessário, coloquei aí para pegar
if(erros==6){acabou=true; cleardevice(); outtextxy(50,50,"Enforcado! MUAHAHAHAHAHA"); outtextxy(50,70, palavra);}
if(acertos==strlen(palavra)){acabou=true; cleardevice(); outtextxy(50,50,"Você venceu... Como pôde??? AHHHHHHHH!");}
}
system("pause"); //esperando o pressionamento de uma tecla qualquer pelo usuário
closegraph(); //fechando a tela da parte gráfica
return 0;
}
sexta-feira, 18 de fevereiro de 2011
Entrada e Saída em C
Este post descreve superficialmente algumas das funções de "entrada" (input) e de "saída" (output) mais importantes da linguagem C. Todas estão na biblioteca stdio. Portanto, seu programa deve ter um #include <stdio.h> para usar essas funções.
- printfA função printf (print formatted) exibe na tela do monitor uma lista formatada de números, caracteres, strings, etc.
Sintaxe da função:
printf (string_de_controle,lista_de_argumentos);
Na string_de_controle teremos uma descrição de tudo que a função vai colocar na tela. Isto é feito usando-se os códigos de controle, que usam a notação %. Com isso, indicamos quais, de qual tipo e em que posição estão as variáveis a serem apresentadas.
Alguns dos códigos %:
Código | Significado |
%d | Inteiro |
%f | Float |
%c | Caractere |
%s | String |
%% | Coloca na tela um % |
Alguns exemplos de printf() e o que eles exibem:
printf ("Teste %% %%") → Teste % %
printf ("%f",40.345) → 40.345000
printf ("%2.2f",40.345) → 40.34
printf ("Um caractere %c e um inteiro %d",'D',120) → Um caractere D e um inteiro 120
printf ("%s e um exemplo","Este") → Este e um exemplo
printf ("%s%d%%","Juros de ",10) → Juros de 10%
Códigos de Barra Invertida
Código | Significado |
\b | Retrocesso (“backspace”) |
\n | Nova linha (“new line”) |
\t | Tabulação horizontal (“tab”) |
\“ | Aspas duplas |
\‘ | Aspas simples |
\0 | Nulo (0 em decimal) |
\\ | Barra invertida |
\a | Sinal sonoro (“beep) |
Exemplos:
printf ("Ola! Eu esto\bu vivo!"); → Ola! Eu estu vivo!
printf ("Ola! Eu esto\nu vivo!"); → Ola! Eu esto
u vivo!
printf ("Ola! Eu esto\tu vivo!"); → Ola! Eu Esto u vivo!
printf ("\"Ola! Eu estou vivo! \""); → "Ola! Eu estou vivo!"
printf ("Ola! Eu esto\0u vivo!"); → Olá! Eu esto
printf (“\\Ola! Eu estou vivo!\\"); → \Olá! Eu estou vivo!\
- scanf
A função scanf (scan format) lê do teclado e "formata" uma lista de números, caracteres, strings, etc.
Sintaxe da função:
scanf (string_de_controle,lista_de_argumentos);
Usando a função scanf() podemos pedir dados ao usuário. Devemos ficar atentos a fim de colocar o mesmo número de argumentos que o de códigos de controle na string de controle. Outra coisa importante é lembrar-se de colocar o & antes das variáveis da lista de argumentos.
Exemplo:
#include <stdio.h>
int main ()
{
char Ch;
scanf("%c", &Ch);
printf ("Voce pressionou a tecla %c",Ch);
return(0);
}
- gets e getchar(),
Assim como scanf(), leem uma string do teclado.
getchar() lê apenas um caractere.
gets() lê uma string até o final da linha ou até que não haja mais dados para ler, e adiciona o terminador de string "\0".
Sintaxe da função get:
gets(nome_da_string);
Exemplo:
#include <stdio.h>
int main ()
{
char exemplo[10];
printf ("Digite o seu nome: ");
gets (exemplo);
printf ("O nome é: %s", exemplo);
return(0);
}
O programa pede ao usuário que entre uma string, que será armazenada na string exemplo. A função retorna o próprio exemplo.
Gets não é uma função segura, pois com essa função pode ocorrer um estouro da quantidade de posições que foi especificada na string. Por exemplo, se no código a cima o usuário digitar como entrada:
Ricardo Pereira Neto
Ou seja, digitar um total de 20 caracteres: 21 posições (incluindo o '\0' ) serão utilizadas para armazenar a string. Como a string exemplo[] só tem 10 caracteres, os 11 caracteres adicionais serão colocados na área de memória subsequente à ocupada por ela, escrevendo uma região de memória que não está reservada à string. Este efeito é conhecido como "estouro de buffer" e pode causar problemas imprevisíveis.
Sintaxe da função getchar:
variavel = getchar();
Esta função retorna o valor inteiro referente ao código ASCII do caractere lido, porém você pode atribuir este valor a uma variável do tipo caractere. Caso ocorra um erro, ela retorna EOF.
Exemplo da utilização de getchar:
#include <stdio.h>
int main()
{
char caracter;
printf("\n");
printf("Utilizando getchar()\n");
printf("--------------------\n");
printf("\n");
printf("Entre com um caracter :");
caracter = getchar();
printf("\nVocê digitou o caracter %c\n\n",caracter);
return(0);
}
Fonte: Curso de Linguagem C - UFMG (com adaptações)
Link direto para Apostila: http://migre.me/3U6Yp