Daniel Lapa – Blog de Programação

Maio 20, 2008

Jogo do galo – C++

Arquivado em: jogos c++, programação — daniellapa @ 10:11 am

Poucas aulas atrás o professor de programação lançou-nos o desafio de fazer o jogo do galo, eu achei um pouco complicado de fazer.

#include <iomanip>
#include <iostream>
#include <string>
using namespace std;
typedef struct{
	char pos[3][3];
}GALO;

void limpar_tabuleiro(GALO *g){
	int l,c;
	for(l=0;l<3;l++)
		for(c=0;c<3;c++)
			(*g).pos[l][c]=' ';
}
void mostrar(GALO g){
	cout<<"+---+---+---+"<<endl;
	cout<<"| "<<g.pos[0][0]<<" | "<<g.pos[0][1]<<" | "<<g.pos[0][2]<<" |"<<endl;
	cout<<"+---+---+---+"<<endl;
	cout<<"| "<<g.pos[1][0]<<" | "<<g.pos[1][1]<<" | "<<g.pos[1][2]<<" |"<<endl;
	cout<<"+---+---+---+"<<endl;
	cout<<"| "<<g.pos[2][0]<<" | "<<g.pos[2][1]<<" | "<<g.pos[2][2]<<" |"<<endl;
	cout<<"+---+---+---+"<<endl;

}

bool vazio(GALO p){
	bool vazio=true;
	int l,c;

	//verificar se o tabuleiro está vazio
	for(l=0;l<3;l++)
		for(c=0;c<3;c++)
			if(p.pos[l][c]!=' ')
				vazio=false;
	return vazio;
}
bool vitoriax(GALO p){
	//verificar vitória das x
	if(	(p.pos[0][0]=='x'&&p.pos[0][1]=='x'&&p.pos[0][2]=='x')||
		(p.pos[1][0]=='x'&&p.pos[1][1]=='x'&&p.pos[1][2]=='x')||
		(p.pos[2][0]=='x'&&p.pos[2][1]=='x'&&p.pos[2][2]=='x')||
		(p.pos[0][0]=='x'&&p.pos[1][0]=='x'&&p.pos[2][0]=='x')||
		(p.pos[1][0]=='x'&&p.pos[1][1]=='x'&&p.pos[1][2]=='x')||
		(p.pos[2][0]=='x'&&p.pos[2][1]=='x'&&p.pos[2][2]=='x')||
		(p.pos[0][0]=='x'&&p.pos[1][1]=='x'&&p.pos[2][2]=='x')||
		(p.pos[2][0]=='x'&&p.pos[1][1]=='x'&&p.pos[0][2]=='x'))
		return true;
	else	return false;

}
bool vitoriao(GALO p){
	//verificar vitória das o
	if(	(p.pos[0][0]=='o'&&p.pos[0][1]=='o'&&p.pos[0][2]=='o')||
		(p.pos[1][0]=='o'&&p.pos[1][1]=='o'&&p.pos[1][2]=='o')||
		(p.pos[2][0]=='o'&&p.pos[2][1]=='o'&&p.pos[2][2]=='o')||
		(p.pos[0][0]=='o'&&p.pos[1][0]=='o'&&p.pos[2][0]=='o')||
		(p.pos[1][0]=='o'&&p.pos[1][1]=='o'&&p.pos[1][2]=='o')||
		(p.pos[2][0]=='o'&&p.pos[2][1]=='o'&&p.pos[2][2]=='o')||
		(p.pos[0][0]=='o'&&p.pos[1][1]=='o'&&p.pos[2][2]=='o')||
		(p.pos[2][0]=='o'&&p.pos[1][1]=='o'&&p.pos[0][2]=='o'))
		return true;
	else	return false;
}

bool empateox(GALO p){
	//verificar empate
	int l,c;
	int ocupados=0;
	for(l=0;l<3;l++)
		for(c=0;c<3;c++)
			if(p.pos[l][c]!=' ')
				ocupados++;
	if(ocupados==9)
		return true;
	else	return false;
}

char vez(GALO g){
	int l,c;
	int o=0,x=0;
	for(l=0;l<3;l++)
		for(c=0;c<3;c++)
			switch(g.pos[l][c]){
				case 'x':x++;break;
				case 'o':o++;break;
			}
	if(x==o)
		return 'e';
	else	if(x>o)
				return 'o';
			else
				return 'x';
}
void jogar(GALO *p ,int posicao,char caracter){
	switch(posicao){
		case 1:(*p).pos[0][0]=caracter;break;
		case 2:(*p).pos[0][1]=caracter;break;
		case 3:(*p).pos[0][2]=caracter;break;
		case 4:(*p).pos[1][0]=caracter;break;
		case 5:(*p).pos[1][1]=caracter;break;
		case 6:(*p).pos[1][2]=caracter;break;
		case 7:(*p).pos[2][0]=caracter;break;
		case 8:(*p).pos[2][1]=caracter;break;
		case 9:(*p).pos[2][2]=caracter;break;
	}
}
int main(){
	GALO galo;
	char vez;
	int posicao;
	limpar_tabuleiro(&galo);

	vez='x';
	do{
		cout<<"Vai jogar o "<<vez<<"\n";
		mostrar(galo);
		cout<<"Indique a posição onde pretende jogar: ";cin>>posicao;
		jogar(&galo,posicao,vez);
		if(vez=='x')
			vez='o';
		else	vez='x';
	}while(!vitoriax(galo)&&!vitoriao(galo)&&!empateox(galo));
	mostrar(galo);
	if(empateox(galo))
		cout<<"O jogo terminou com um empate técnico!\n";
	else	if(vitoriax(galo))
			cout<<"Vitória do x\n";
		else	cout<<"Vitória do o\n";

	return 0;
}

As posições que o programa pede vão de 1 a 9 sendo 1, 2 ,3 da 1º linha, 4, 5, 6 2º linha, 7, 8, 9 da 3ºlinha.

O que são apontadores

Arquivado em: programação — daniellapa @ 9:39 am

Hoje na aula de programação aprendi o que são apontadores.
Eu acho que os apontadores são um pouco complicados ao inicio de compreender, mas depois de testarmos começamos a compreender melhor para que servem.

Aqui está um exemplo de um programa sem apontadores:

#include<iostream>
using namespace std;
int main(){
    int a=1,b=2;

	cout<<"A = "<<a<<endl;
	cout<<"B = "<<b<<endl;
	cout<<"A + B = "<<a+b<<endl;

	return 0;

}

E aqui está o mesmo programa só que com apontadores:


#include<iostream>
using namespace std;
int main(){
    int a=1,b=2;
    int *ptr_a=&a, *ptr_b=&b;

	cout<<"A = "<<*ptr_a<<endl;
	cout<<"B = "<<*ptr_b<<endl;
    cout<<"A + B = "<<*ptr_a+*ptr_b<<endl;

	return 0;
}

Com os apontadores, basicamente, podemos manipular os endereços da memória. Quando criamos uma variável, por exemplo “A”, é armazenado na memória um espaço que contem o valor de “A”. Quando voltamos a chamar a mesma variável, por exemplo “C=A+B”, é armazenado na memória outro espaço para a variável “A”. Com os apontadores podemos usar sempre o mesmo local de armazenamento da variável “A” sem mexer nas variáveis.

Os seguintes termos significam:

  • & significa “endereço de”.
  • * significa “aponta para”, ou se quisermos, “conteúdo do endereço apontado por”.

Maio 19, 2008

“HELLO WORLD”

Arquivado em: curiosidades, programação — daniellapa @ 9:46 am

Aqui temos um pequeno video do famoso programa “HELLO WORLD”.

Este é um bom exemplo de um programa para quem ainda esta a começar a programar.

Blog em WordPress.com.