trika Postado Junho 16, 2008 Denunciar Share Postado Junho 16, 2008 Oi galera!Sou nova aqui e meio inexperiente em c/c++.Bom,tenho esse projeto pra fazer: http://docentes.puc-campinas.edu.br/ceatec...hoFinal2008.htm e depois de ler artigos de lógica e tal,a única coisa que consegui fazer foi isso:#include <iostream.h>#include <windows.h> void gotoxy(int lin, int col){ HANDLE hOut; COORD Position; hOut = GetStdHandle(STD_OUTPUT_HANDLE); Position.X = col; Position.Y = lin; SetConsoleCursorPosition(hOut,Position);}void desenha_caixa(){ cout<<flush; gotoxy(0,0); cout<<"Quebra-cabeca"<<flush gotoxy(4,2); cout<<"\332\304\304\304\302\304\304\304\302\304\304\304\277"<<flush; gotoxy(5,2); cout<<"\263 \263\ \263 \263"<<flush; gotoxy(6,2); cout<<"\303\304\304\304\305\304\304\304\305\304\304\304\264"<<flush; gotoxy(7,2); cout<<"\263\ \263\ \263\ \263"<<flush; gotoxy(8,2); cout<<"\303\304\304\304\305\304\304\304\305\304\304\304\264"<<flush; gotoxy(9,2); cout<<"\263\ \263\ \263\ \263"<<flush; gotoxy(10,2); cout<<"\300\304\304\304\301\304\304\304\301\304\304\304\331"<<flush;}void coloca_val(char mat[][3]){ int i,j,c,l; for ( i=1,l=5;i<4;i++,l+=2) for (j=1,c=4;j<4;j++,c+=4)gotoxy (l,c);printf ("%c",mat[j]);}int verifica (char tentativa[][3],char objetivo[][3]){ int i,j;for (i=1;i<=3;i++)for (j=1;j<=3;j++)if (tentativa[j]!=objetivo[j])return 0;else return 1;} void move (char tenta[][3]){ char valor; int i,j,c,l; cout<<"Valor a ser movido:"<<flush; valor= getch(); /*if valor=='1' num=valor-49 else if valor=='2' num=valor-50 else if valor=='3' num=valor-51else if valor=='4' num=valor-52 else if valor=='5' num=valor-53else if valor=='6' num=valor-54 else if valor=='7' num=valor-55 else if valor=='8' num=valor-56; for ( i=1,l=5;i<4;i++,l+=2) for (j=1,c=4;j<4;j++,c+=4) if tenta[i-1][j-1]==0||tenta[i-3][j-3]==0||tenta[i+1][j+1]==0||tenta[i+3][j+3]==0*/ } void main(){ char certa[3][3]= { {1,2,3}, {4,5,6}, {7,8, } }; char err[3][3]= { {4,1,3}, {7,2,5}, { ,8,6} };printf ("Para sair digite S"); { verifica (err,certa); while 0 { desenha_caixa(); coloca_val(err); move(err);}} }uma vergonha,mas fazer o q?!Tem como alguém me dar umqa ajudinha??bj Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest --Guilherme -- Postado Julho 6, 2008 Denunciar Share Postado Julho 6, 2008 bah!!Tenho que fazer um desses também, mas não comecei ainda.Estou pesquisando por enquanto e já vendo q vou encontrara dificuldades, hehe..Se tiver alguma coisa para compartilhar??Abraço Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Guest Visitante Postado Julho 6, 2008 Denunciar Share Postado Julho 6, 2008 Se puder, explique seu raciocinio ai!!valeu Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 == Douplus == Postado Julho 26, 2008 Denunciar Share Postado Julho 26, 2008 (editado) Como não entro aqui faz um tempo, só ví seu tópico hoje. Não sei se ainda está em tempo, espero que tenha conseguido resolver.De qualquer modo, dei uma completada no código, estou com muito sono e está muito tardepara explicar os acrécimos, mas dei uma leve comentada no código.#include <iostream> using std::cout; #include <windows.h> // Não sei porque a próxima linha deu certo no Dev-C++, juro que não sei, descobri por acaso. extern "C" { int getch(void); } void gotoxy(int lin, int col) { HANDLE hOut; COORD Position; hOut = GetStdHandle(STD_OUTPUT_HANDLE); Position.X = col; Position.Y = lin; SetConsoleCursorPosition(hOut,Position); } void desenha_caixa() { cout.flush(); gotoxy(0,0); cout<<"Quebra-cabeca";cout.flush(); gotoxy(4,2); cout<<"\332\304\304\304\302\304\304\304\302\304\304\304\277";cout.flush(); gotoxy(5,2); cout<<"\263 \263 \263 \263";cout.flush(); gotoxy(6,2); cout<<"\303\304\304\304\305\304\304\304\305\304\304\304\264";cout.flush(); gotoxy(7,2); cout<<"\263 \263 \263 \263";cout.flush(); gotoxy(8,2); cout<<"\303\304\304\304\305\304\304\304\305\304\304\304\264";cout.flush(); gotoxy(9,2); cout<<"\263 \263 \263 \263";cout.flush(); gotoxy(10,2); cout<<"\300\304\304\304\301\304\304\304\301\304\304\304\331";cout.flush(); } void coloca_val(char mat[][3]) { for (int l = 0; l < 3; l++) for (int c = 0; c < 3; c++) { gotoxy (5+l*2,4+4*c); printf ("%c",mat[l][c]); } } int verifica (char tentativa[][3],char objetivo[][3]) { int i,j; for (i=0;i<3;i++) for (j=0;j<3;j++) if (tentativa[i][j]!=objetivo[i][j]) return 0; return 1; } /* Função que procura a posição do numero requisitado na matriz, retorna false se não encontrou, se encontrou copia os valores para col e lin*/ bool procura_numero(char puzzle[][3], char val, int &col, int &lin) { for (col = 0; col < 3; col++) for (lin = 0; lin < 3; lin++) if (puzzle[col][lin] == val) return true; return false; } bool move (char tenta[][3]) { char valor; int i,j,c,l,; gotoxy(11,1); cout<<"\nValor a ser movido:";cout.flush(); valor = getch(); if (valor == 's' || valor == 'S') // 's' ou 'S' sai do programa. exit(0); if ((valor < '0') && (valor > '9')) // Se a entrada for inválida não faz nada return 0; if (!(procura_numero(tenta, valor, c, l))) // Passa c e l por referência return false; if ((c < 2) && (tenta[c + 1][l] == ' ')) { // Checa se pode ir para frente. tenta[c + 1][l] = tenta[c][l]; tenta[c][l] = ' '; return true; } if ((c > 0) && (tenta[c - 1][l] == ' ')) { // Checa se pode ir para trás. tenta[c - 1][l] = tenta[c][l]; tenta[c][l] = ' '; return true; } if ((l > 0) && (tenta[c][l - 1] == ' ')) { // Checa se pode ir para cima. tenta[c][l - 1] = tenta[c][l]; tenta[c][l] = ' '; return true; } if ((l < 2) && (tenta[c][l + 1] == ' ')) { // Checa se pode ir para baixo. tenta[c][l + 1] = tenta[c][l]; tenta[c][l] = ' '; return true; } return false; // Se o movimento for inválido não faz nada. } int main() { char certa[3][3]= { { '1', '2', '3' }, { '4', '5', '6' }, { '7', '8', ' ' } }; // Espaço para facilitar a saída char err[3][3]= { { '4', '1', '3' }, { '7', '2', '5' }, { '8', '6', ' ' } }; // ... O mesmo aqui printf ("Para sair digite S"); while (!verifica (err,certa)) { desenha_caixa(); coloca_val(err); move(err); } gotoxy(12,5); cout<<"Parabens!\n";cout.flush(); return 0; } Detalhe: A linha extern "C" { int getch(void); } funcionou por mero acaso, estava criando uma versão de getch em Assembly porque o Dev-C++ não possui uma. Eu criei a função e exportei, mas esqueci de compilar com o arquivo objeto da função e funcionou :wacko: , daí descobri que não precisa dela. Não entendi... [EDITADO] De quaquer jeito, se você precisar de uma versão de getch, essa foi a que fiz: int getch(void) { char chkkbstatus[5] = {0xB4, 0x00, 0xCD, 0x16, 0xC3 }, (*funcptr)(void) = reinterpret_cast<char(*)(void)>(reinterpret_cast<int>(chkkbstatus)); return ((*funcptr)()); }Dá erro na execução se compilado no Dev-C++, mas no DJGPP funciona bem.Até mais! Editado Julho 26, 2008 por == Douplus == Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
trika
Oi galera!Sou nova aqui e meio inexperiente em c/c++.Bom,tenho esse projeto pra fazer: http://docentes.puc-campinas.edu.br/ceatec...hoFinal2008.htm e depois de ler artigos de lógica e tal,a única coisa que consegui fazer foi isso:
#include <iostream.h>
#include <windows.h>
void gotoxy(int lin, int col)
{
HANDLE hOut;
COORD Position;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
Position.X = col;
Position.Y = lin;
SetConsoleCursorPosition(hOut,Position);
}
void desenha_caixa()
{
cout<<flush;
gotoxy(0,0);
cout<<"Quebra-cabeca"<<flush
gotoxy(4,2);
cout<<"\332\304\304\304\302\304\304\304\302\304\304\304\277"<<flush;
gotoxy(5,2);
cout<<"\263 \263\ \263 \263"<<flush;
gotoxy(6,2);
cout<<"\303\304\304\304\305\304\304\304\305\304\304\304\264"<<flush;
gotoxy(7,2);
cout<<"\263\ \263\ \263\ \263"<<flush;
gotoxy(8,2);
cout<<"\303\304\304\304\305\304\304\304\305\304\304\304\264"<<flush;
gotoxy(9,2);
cout<<"\263\ \263\ \263\ \263"<<flush;
gotoxy(10,2);
cout<<"\300\304\304\304\301\304\304\304\301\304\304\304\331"<<flush;
}
void coloca_val(char mat[][3])
{
int i,j,c,l;
for ( i=1,l=5;i<4;i++,l+=2)
for (j=1,c=4;j<4;j++,c+=4)
gotoxy (l,c);
printf ("%c",mat[j]);
}
int verifica (char tentativa[][3],char objetivo[][3])
{
int i,j;
for (i=1;i<=3;i++)
for (j=1;j<=3;j++)
if (tentativa[j]!=objetivo[j])
return 0;
else
return 1;
}
void move (char tenta[][3])
{ char valor;
int i,j,c,l;
cout<<"Valor a ser movido:"<<flush;
valor= getch();
/*if valor=='1'
num=valor-49
else if valor=='2'
num=valor-50
else if valor=='3'
num=valor-51
else if valor=='4'
num=valor-52
else if valor=='5'
num=valor-53
else if valor=='6'
num=valor-54
else if valor=='7'
num=valor-55
else if valor=='8'
num=valor-56;
for ( i=1,l=5;i<4;i++,l+=2)
for (j=1,c=4;j<4;j++,c+=4)
if tenta[i-1][j-1]==0||tenta[i-3][j-3]==0||tenta[i+1][j+1]==0||tenta[i+3][j+3]==0*/
}
void main()
{
char certa[3][3]=
{
{1,2,3},
{4,5,6},
{7,8, }
};
char err[3][3]=
{
{4,1,3},
{7,2,5},
{ ,8,6}
};
printf ("Para sair digite S");
{
verifica (err,certa);
while 0
{
desenha_caixa();
coloca_val(err);
move(err);
}
}
}
uma vergonha,mas fazer o q?!Tem como alguém me dar umqa ajudinha??bj
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.