Ajuda: C/C++ [RESOLVIDO]

1. Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 01/07/2014 - 21:55h

Olá Galera , Estou "Re"Aprendendo a programar em c,eu decidi fazer um jogo de labirinto,mas agora quero aperfeiçoa-lo com mapas randomicos (ou aleatorios) e eu fiz mas esta dando um erro , alguem pode me ajudar ?

-----



#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <graphics.h>

/* Definicoes, para facilitar o uso da funcao para desenhar o mapa */
#define CHAO 0
#define PAREDE 1
#define VOCE 2
#define GRAMA 3
#define SAIDA 4


#define ACIMA 119
#define ABAIXO 115
#define DIREITA 100
#define ESQUERDA 97

#define ESC 27

/*Outras definições para tratamento de erros*/
#define OK 1
#define ERRO 2

int coluna_atual = 1,
linha_atual = 1;
int coluna_atual2 = 1,
linha_atual2 = 1;

int key,passos;



/* O Mapa */
int mapa[5][5] = {

1,1,1,1,1,
1,0,1,1,1,
1,0,0,0,1,
1,1,1,0,1,
1,1,1,4,1};

int x ,y;
int mapa2[6][6];
for (int m = 0; m < 6;m++){

for (int n = 0;n<6;n++){
srand( (unsigned)time(NULL) );
x = rand % 3;
mapa2[m][n] = x;
}
srand( (unsigned)time(NULL) );
y = rand %3;
mapa2[m][n] = y;
}

int desenhar_mapa2()
{
int linha2,coluna2;
for (linha2=0;linha2<6;linha2++) {
for (coluna2=0;coluna2<6;coluna2++) {
if ((linha2 == linha_atual2) && (coluna2 == coluna_atual2)) {
printf("@");
continue;
}

if (mapa2[linha2][coluna2] == CHAO)
printf(" ");
if (mapa2[linha2][coluna2] == PAREDE)
printf("=");
if (mapa2[linha2][coluna2] == GRAMA)
printf(".");
if (mapa2[linha2][coluna2] == SAIDA)
printf("#");

}
printf("\n");
}
return OK;
}

int desenhar_mapa()
{
int linha,coluna;
for (linha=0;linha<5;linha++) {
for (coluna=0;coluna<5;coluna++) {
if ((linha == linha_atual) && (coluna == coluna_atual)) {
printf("@");
continue;
}
if (mapa[linha][coluna] == CHAO)
printf(" ");
if (mapa[linha][coluna] == PAREDE)
printf("=");
if (mapa[linha][coluna] == GRAMA)
printf(".");
if (mapa[linha][coluna] == SAIDA)
printf("#");

}
printf("\n");
}
return OK;
}


int main(){
system("clear");
desenhar_mapa();
do {
key=getch();

if (key==ACIMA){
linha_atual -= 1;
passos += 1;
if (mapa[linha_atual][coluna_atual] == PAREDE){
linha_atual +=1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==ABAIXO){
linha_atual += 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
linha_atual -= 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==DIREITA){
coluna_atual += 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
coluna_atual -= 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==ESQUERDA){
coluna_atual -= 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
coluna_atual += 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

}while(mapa[linha_atual][coluna_atual]!=SAIDA);

printf("\n\nLevel 1 Concluido\nTotal de Passos Level 1: %i\nPrecione Qualquer Tecla Para ir Ao Level 2\n",passos);
getch();
system("clear");
desenhar_mapa2();
int passos2 = 0;
do {
key=getch();


if (key==ACIMA){
linha_atual2 -= 1;
passos2 += 1;
if (mapa2[linha_atual2][coluna_atual2] == PAREDE){
linha_atual2 +=1;
}
system("clear");
desenhar_mapa2();
printf("@");
}

if (key==ABAIXO){
linha_atual2 += 1;
passos2 += 1;
if ((mapa2[linha_atual2][coluna_atual2] == PAREDE)){
linha_atual2 -= 1;
}
system("clear");
desenhar_mapa2();
printf("@");
}

if (key==DIREITA){
coluna_atual2 += 1;
passos += 1;
if ((mapa2[linha_atual2][coluna_atual2] == PAREDE)){
coluna_atual2 -= 1;
}
system("clear");
desenhar_mapa2();
printf("@");
}

if (key==ESQUERDA){
coluna_atual2 -= 1;
passos2 += 1;
if ((mapa2[linha_atual2][coluna_atual2] == PAREDE)){
coluna_atual2 += 1;
}
system("clear");
desenhar_mapa2();
printf("@");
}


}while(mapa2[linha_atual2][coluna_atual2]!=SAIDA);
int total = passos+passos2;
printf("Level 2 Concluido\nTotal de Passos Level 2: %i\nTotal de Passos nos 2 Levels: %i\n",passos2,total);
}



--
Valeu



  


2. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 01/07/2014 - 22:42h

Opa Amigao,
Eu Sei que é pedir de mais ,mas eu tenho apenas 14 anos e meus professores da escola me acham um genio , e para eles, qlq coisa que eu faça (e funcione) deixa eles supresos,entao hj eu começei a trabalhar nesse "script", mas estou com muita duvida, eu mudei um pouco , pois estava dando erro porque o for nao funciona fora de funcao ,mas voltando ao foco , eu queria saber como faço para retornar o "mapa2[][]", poderia me dar um exemplo de como esse codigo poderia funcionar ?

Minhas Humildes Desculpas Caso o Ofendi de alguma maneira

-- Codigo Modificado (ele está bugando)



#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <graphics.h>

/* Definicoes, para facilitar o uso da funcao para desenhar o mapa */
#define CHAO 0
#define PAREDE 1
#define VOCE 2
#define GRAMA 3
#define SAIDA 4


#define ACIMA 119
#define ABAIXO 115
#define DIREITA 100
#define ESQUERDA 97

#define ESC 27

/*Outras definições para tratamento de erros*/
#define OK 1
#define ERRO 2

int coluna_atual = 1,
linha_atual = 1,
coluna_atual2 = 1,
linha_atual2 = 1;

int key,passos;
int mapa2[6][6] = {0};


/* O Mapa */
int mapa[5][5] = {

1,1,1,1,1,
1,0,1,1,1,
1,0,0,0,1,
1,1,1,0,1,
1,1,1,4,1};

int teste (){
int x ,y,m,n;

for (m = 0; m < 6;m++){
srand( (unsigned)time(NULL) );
for (n = 0;n<6;n++){

x = (rand() % 5);
mapa2[m][n] = x;
}
y = (rand() %5);
mapa2[m][n] = y;
}
return mapa2[0][0];
}
int desenhar_mapa2()
{
teste();
int linha2,coluna2;
for (linha2=0;linha2<6;linha2++) {
for (coluna2=0;coluna2<6;coluna2++) {
if ((linha2 == linha_atual2) && (coluna2 == coluna_atual2)) {
printf("@");
continue;
}

if (mapa2[linha2][coluna2] == CHAO)
printf(" ");
if (mapa2[linha2][coluna2] == PAREDE)
printf("=");
if (mapa2[linha2][coluna2] == GRAMA)
printf(".");
if (mapa2[linha2][coluna2] == SAIDA)
printf("#");

}
printf("\n");
}
return OK;
}

int desenhar_mapa()
{
int linha,coluna;
for (linha=0;linha<5;linha++) {
for (coluna=0;coluna<5;coluna++) {
if ((linha == linha_atual) && (coluna == coluna_atual)) {
printf("@");
continue;
}
if (mapa[linha][coluna] == CHAO)
printf(" ");
if (mapa[linha][coluna] == PAREDE)
printf("=");
if (mapa[linha][coluna] == GRAMA)
printf(".");
if (mapa[linha][coluna] == SAIDA)
printf("#");

}
printf("\n");
}
return OK;
}


int main(){
system("clear");
desenhar_mapa();
do {
key=getch();

if (key==ACIMA){
linha_atual -= 1;
passos += 1;
if (mapa[linha_atual][coluna_atual] == PAREDE){
linha_atual +=1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==ABAIXO){
linha_atual += 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
linha_atual -= 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==DIREITA){
coluna_atual += 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
coluna_atual -= 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==ESQUERDA){
coluna_atual -= 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
coluna_atual += 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

}while(mapa[linha_atual][coluna_atual]!=SAIDA);

printf("\n\nLevel 1 Concluido\nTotal de Passos Level 1: %i\nPrecione Qualquer Tecla Para ir Ao Level 2\n",passos);
getch();
system("clear");
desenhar_mapa2();
int passos2 = 0;
do {
key=getch();


if (key==ACIMA){
linha_atual2 -= 1;
passos2 += 1;
if (mapa2[linha_atual2][coluna_atual2] == PAREDE){
linha_atual2 +=1;
}
system("clear");
desenhar_mapa2();
printf("@");
}

if (key==ABAIXO){
linha_atual2 += 1;
passos2 += 1;
if ((mapa2[linha_atual2][coluna_atual2] == PAREDE)){
linha_atual2 -= 1;
}
system("clear");
desenhar_mapa2();
printf("@");
}

if (key==DIREITA){
coluna_atual2 += 1;
passos += 1;
if ((mapa2[linha_atual2][coluna_atual2] == PAREDE)){
coluna_atual2 -= 1;
}
system("clear");
desenhar_mapa2();
printf("@");
}

if (key==ESQUERDA){
coluna_atual2 -= 1;
passos2 += 1;
if ((mapa2[linha_atual2][coluna_atual2] == PAREDE)){
coluna_atual2 += 1;
}
system("clear");
desenhar_mapa2();
printf("@");
}


}while(mapa2[linha_atual2][coluna_atual2]!=SAIDA);
int total = passos+passos2;
printf("Level 2 Concluido\nTotal de Passos Level 2: %i\nTotal de Passos nos 2 Levels: %i\n",passos2,total);
}




3. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 02/07/2014 - 12:13h

Ola Sam

Valeu pelas dicas , meu codigo melhorou um pouco , mas o maa ele é totalmente bugado ,se voce consegue passar pela pedra é esta bem estranho (no entando ele gera um novo sempre), e uma coisa como eu faço para o codigo ter a identação aki no VOL ?

segue o codigo reformulado

--



#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <graphics.h> // Aki eu uso o graphics.h apenas para usar o getch();

/* Definicoes, para facilitar o uso da funcao para desenhar o mapa */
#define CHAO 0
#define PAREDE 1
#define VOCE 2
#define GRAMA 3
#define SAIDA 4


#define ACIMA 119
#define ABAIXO 115
#define DIREITA 100
#define ESQUERDA 97

#define ESC 27

/*Outras definições para tratamento de erros*/
#define OK 1
#define ERRO 2

int coluna_atual = 1,
linha_atual = 1,
coluna_atual2 = 1,
linha_atual2 = 1;

int key,passos;


/* O Mapa */
int mapa[5][5] = {

1,1,1,1,1,
1,0,1,1,1,
1,0,0,0,1,
1,1,1,0,1,
1,1,1,4,1};

int mapa2[6][6];

void gera_mapa ( )
{
int m, n;
for (m = 0; m < 5;m++){
for (n = 0;n<5;n++){
mapa2[m][n] = rand() %5;
}
}
}

int desenhar_mapa2()
{
int linha2,coluna2;
for (linha2=0;linha2<6;linha2++) {
for (coluna2=0;coluna2<6;coluna2++) {
if ((linha2 == linha_atual2) && (coluna2 == coluna_atual2)) {
printf("@");
continue;
}

if (mapa2[linha2][coluna2] == CHAO)
printf(" ");
if (mapa2[linha2][coluna2] == PAREDE)
printf("=");
if (mapa2[linha2][coluna2] == GRAMA)
printf(".");
if (mapa2[linha2][coluna2] == SAIDA)
printf("#");

}
printf("\n");
}
return OK;
}

int desenhar_mapa()
{
int linha,coluna;
for (linha=0;linha<6;linha++) {
for (coluna=0;coluna<6;coluna++) {
if ((linha == linha_atual) && (coluna == coluna_atual)) {
printf("@");
continue;
}
if (mapa[linha][coluna] == CHAO)
printf(" ");
if (mapa[linha][coluna] == PAREDE)
printf("=");
if (mapa[linha][coluna] == GRAMA)
printf(".");
if (mapa[linha][coluna] == SAIDA)
printf("#");

}
printf("\n");
}
return OK;
}


int main(){
srand( (unsigned)time(NULL) );
system("clear");
desenhar_mapa();
do {
key=getch();

if (key==ACIMA){
linha_atual -= 1;
passos += 1;
if (mapa[linha_atual][coluna_atual] == PAREDE){
linha_atual +=1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==ABAIXO){
linha_atual += 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
linha_atual -= 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==DIREITA){
coluna_atual += 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
coluna_atual -= 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==ESQUERDA){
coluna_atual -= 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
coluna_atual += 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

}while(mapa[linha_atual][coluna_atual]!=SAIDA);

printf("\n\nLevel 1 Concluido\nTotal de Passos Level 1: %i\nPrecione Qualquer Tecla Para ir Ao Level 2\n",passos);
getch();
system("clear");
gera_mapa();

desenhar_mapa2();
int passos2 = 0;
do {
key=getch();



if (key==ACIMA){
linha_atual2 -= 1;
passos2 += 1;
if (mapa2[linha_atual2][coluna_atual2] == PAREDE){
linha_atual2 +=1;
}
system("clear");
desenhar_mapa2();
printf("@");
}

if (key==ABAIXO){
linha_atual2 += 1;
passos2 += 1;
if ((mapa2[linha_atual2][coluna_atual2] == PAREDE)){
linha_atual2 -= 1;
}
system("clear");
desenhar_mapa2();
printf("@");
}

if (key==DIREITA){
coluna_atual2 += 1;
passos += 1;
if ((mapa2[linha_atual2][coluna_atual2] == PAREDE)){
coluna_atual2 -= 1;
}
system("clear");
desenhar_mapa2();
printf("@");
}

if (key==ESQUERDA){
coluna_atual2 -= 1;
passos2 += 1;
if ((mapa2[linha_atual2][coluna_atual2] == PAREDE)){
coluna_atual2 += 1;
}
system("clear");
desenhar_mapa2();
printf("@");
}


}while(mapa2[linha_atual2][coluna_atual2]!=SAIDA);
int total = passos+passos2;
printf("Level 2 Concluido\nTotal de Passos Level 2: %i\nTotal de Passos nos 2 Levels: %i\n",passos2,total);
}



-- Valeu por tudo Sam (eu posso te chamar assim , né ?) , e mais uma coisa , vc nao me ofendeu , é que eu (quase) manjava de shell script , por isso eu fui para o c que é bem parecido (mas muda bastante coisa),valeu por tudo amigo, vc ta me ajudando bastante em c

Obrigadooooo ....



4. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 02/07/2014 - 23:28h

Opa Amigo
Eu Ja Reescrevi o codigo , agora ele esta quase pronto para ser a versao "3.0" do jogo do labirinto,ele tem contador de fases,numero de passos e "fases ilimitadas"

da uma olhada


/*

Esse é o Labirinto '3.0'
W - Cima
A - Esquerda
S - Baixo
D - Direita
Q - Sair

Como todo bom labirinto , esse pode gerar mapas em que você fica impossibilitado de Chegar Até o # (O Boneco é o @)

Definições

Parede = (=)(Você Não Pode Passar );
Grama = (.)(Você Pode Passar);
Chao = (Espaço em Branco) (Você Pode Passar)

A Biblioteca <graphics.h> aqui foi usado apenas para o getch();, mas caso voces nao tenham , apenas modique de getch(); para getchar();

*/
#include <stdio.h>
#include <stdlib.h>
#include <graphics.h>
#include <time.h>

/* Definicoes, para facilitar o uso da funcao para desenhar o mapa */
#define CHAO 0
#define PAREDE 1
#define VOCE 2
#define GRAMA 3
#define SAIDA 4


#define ACIMA 119
#define ABAIXO 115
#define DIREITA 100
#define ESQUERDA 97

#define Q 113

/*Outras definições para tratamento de erros*/
#define OK 1
#define ERRO 2




int coluna_atual = 1,
linha_atual = 1,
coluna_atual2 = 1,
linha_atual2 = 1;

int key,passos;


/* O Mapa */
int mapa[6][6] = {
1,1,1,1,1,1,
1,3,0,0,0,1,
1,0,0,0,0,1,
1,0,0,0,0,1,
1,0,0,0,3,1,
1,1,1,1,1,1};

void gera_mapa( )
{
int m, n;

for (m = 0; m < 6;m++)
{
for (n = 0;n<6;n++)
{
if (mapa[m][n] == 0)
{
mapa[m][n] = rand() % 4;
if (mapa[m][n] == 2)
{
mapa[m][n] = 0;
}
}
}
}
mapa[5][4] = 4;
}

int desenhar_mapa()
{
int linha,coluna;
for (linha=0;linha<6;linha++) {
for (coluna=0;coluna<6;coluna++) {
if ((linha == linha_atual) && (coluna == coluna_atual)) {
printf("@");
continue;
}
if (mapa[linha][coluna] == CHAO)
printf(" ");
if (mapa[linha][coluna] == PAREDE)
printf("=");
if (mapa[linha][coluna] == GRAMA)
printf(".");
if (mapa[linha][coluna] == SAIDA)
printf("#");

}
printf("\n");
}
return OK;
}


int main(){
srand( (unsigned)time(NULL) );
system("clear");
int level = 1;
do{
gera_mapa();
desenhar_mapa();
do {
key=getch();
if (key==ACIMA){
linha_atual -= 1;
passos += 1;
if (mapa[linha_atual][coluna_atual] == PAREDE){
linha_atual +=1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==ABAIXO){
linha_atual += 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
linha_atual -= 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==DIREITA){
coluna_atual += 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
coluna_atual -= 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==ESQUERDA){
coluna_atual -= 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
coluna_atual += 1;
}
system("clear");
desenhar_mapa();
printf("@");
}

if (key==Q){

printf("\n\nLevel %i Incompleto\nTotal de Passos Level %i: %i\nPrecione Qualquer Para Sair . .\n",level,level,passos);
getch();
exit(2);

}

}while(mapa[linha_atual][coluna_atual]!=SAIDA);
coluna_atual =1;
linha_atual=1;
int level2 = level +1;

printf("\n\nLevel %i Concluido\nTotal de Passos Level %i: %i\nPrecione Qualquer Tecla Para ir Ao Level %i\n",level,level,passos,level2);
getch();
passos = 0;
system("clear");
level+=1;
}while(key!=Q);
exit(2);
}


ah , e obrigado por dizer do ["code"] e ["\code"], se tiver como testar o jogo , eu apenas uso o graphics.h para usar o getch();(que nao precisa apertar enter para jogar o valor na variavel, caso voce nao tenha instalado é so mudar para getchar();)

Falow ...


5. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 03/07/2014 - 22:37h

Opa
Valeu Pelas Dicas , So Me Da Mais uma

como o mapa é aleatorio ha risco de gerar um mapa sem a possibilidade de chegar ao fim

voce acha que eu coloco uma tecla para "quebrar"
a parede para conseguir passar ?

e voce acha que ficaria legal eu colocar interface grafica ?

obrigado por tudo

e mais uma coisa

nao sei se voce se lembra mas voce tinha feito um prototipo de parabola,mas nao esta funcionando perfeitamente , teria como tentar reparar ? por que hj eu tava testando e achei um script em java e tentei colocar no meu codigo , mas em vez de acontecer uma parabola acontede isso :


---------------------------------

mas nao com "-" mas uma linha reta

teria como me ajudar ?


T+


6. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 04/07/2014 - 19:45h

Opa Mano
Valeu , Mas Voce me deixou mais confuso ainda,eu sei que isso nao é bom , mas eu nao aprendi logica de programação,entao algoritimo nao é pra mim,e voce escreveu umas coisas meio estranhas,tipo distancia de ... , enfim , voce me deixou mais confuso ainda , pq eu nao sei como fazer para ele "andar" antes,eu ainda to tentando entender o q vc fez,malz por nao ter entendido,teria outra maneira ? eu to fazendo uma nova funcao chamada "testa_mapa" e dentro dela eu quero colocar um do{}while() para testar , tipo isso



/// Codigo ...

void testa_mapa{

for (m=0;m<10;m++){
for (n=0;n<20;n++){

do{

/*

nao sei o que colocar aki , me da uma ajuda ?

*/
}while(mapa[m][n] !=);

}
}
}



valeu


7. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 05/07/2014 - 16:05h

Opa Amigo

No ultimo tópico (eu fiquei um pouco ofendido),você disse algumas coisas , então eu tive uma ideia, pq o pc não vai criar uma mapa diferente toda vez , no meu prototipo já estava assim , ele tinha o molde do mapa ex {1,1,0,0,0,1}
se o valor [m][n] fosse = a zero ele geraria um mapa diferente (a chance de gerar um mapa impossível de 1° é BEM difícil (quase impossível)), ai vem o problema, em vez de ele zerar o mapa e gerar novamente , o que ele faz é manter os obstáculos e colocar mais em lugares onde sao "0" , e eu ainda não descobri como fazer ele "apagar" o mapa e gerar de novo com o molde do zero

ah e sobre a lógica de programação , eu tava vendo uns vídeos só que é com visualg (mas eu não ia tentar na pratica),e outra coisa , eu sei alguma coisa de ponteiros , estruturas (mas tudo em teoria ,pq eu não sei qnd vou usar),e estava pesquisando sobre "arvore" e me pareceu interessante

desculpa por ser tão ignorante


NOTA: eu "consegui" arrumar o problema da sua parabola , foi assim , eu via que os num do a fosse negativo ficava pra cima e vice versa, dai me surgiu a "soluçao" , depois de pedir a a,b e c é só fazer isso


a*=-1;
// O Poder de 1 linha kkk

dai funciona :) (mais ou menos , pq é so para ter uma base com o seu programa,pois a curva nao fica perfeitamente correta , mas é só para exemplo)
valeu :)



while(1){

printf("Té +\n");

}



8. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 06/07/2014 - 11:13h

Opa Mano !

Valeu Pelas Dicas

Agora Eu Consegui Fazer Que o Mapa LITERALMENTE mudasse em vez de apenas acrescentar aonde não tinha o "0", agora toda vez ele gera apenas 40 paredes (fora o "esqueleto", e tem como aumentar e diminuir),e agora eu cheguei até o level 15 e poderia ir adiante, mas tava meio sem tempo, só que para fazer isso eu tive que duplicar o mapa(criar o mesmo mapa 2 vezes 'o esqueleto'), e agora gera leveis literalmente , teria como você identar o código para mim (e teste você msm), pq identar com o GEdit é super difícil

Código :




/*

Esse é o Labirinto '2.0'
W - Cima
A - Esquerda
S - Baixo
D - Direita
Q - Sair

Como todo bom labirinto , esse pode gerar mapas em que você fica impossibilitado de Chegar Até o # (O Boneco é o @)(QUASE IMPOSSÍVEL)

Definições

Parede = (=)(Você Não Pode Passar );
Grama = (.)(Você Pode Passar);
Chão = (Espaço em Branco) (Você Pode Passar)

A Biblioteca <graphics.h> aqui foi usado apenas para o getch();, mas caso vocês não tenham , apenas modifique de getch(); para getchar();

Versão 2.0 ; Versão 3.0 Com o Uso Das Setas do Teclado (Ou Não ...)

*/
#include <stdio.h>
#include <graphics.h>
#include <time.h>

/* Definicoes, para facilitar o uso da funcao para desenhar o mapa */
#define CHAO 0
#define PAREDE 1
#define VOCE 2
#define GRAMA 3
#define SAIDA 4


#define ACIMA 119
#define ABAIXO 115
#define DIREITA 100
#define ESQUERDA 97

#define Q 113
/*Outras definições para tratamento de erros*/
#define OK 1
#define ERRO 2


int coluna_atual = 1,linha_atual = 1,key,passos;


int mapa[10][20] = {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};

int mapa2[10][20] = {
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};

void gera_mapa( )
{
int m, n,x,y,teste,Parede = 0,MaxParede = 40;
system("clear");
for (x = 0;x<10;x++){

for(y = 0;y<20;y++){

mapa[x][y] = 0;
mapa[x][y] = mapa2[x][y];
}

}


for (m = 0; m < 10;m++)
{

for (n = 0;n<20;n++)
{
teste = rand()%4;
if (((mapa[m][n] == 0)&&(teste == 1)&&(Parede < MaxParede)))
{
mapa[m][n] = teste;
Parede = Parede + 1;

}else if ((teste == 0)&&(mapa[m][n]== 0)){

mapa[m][n] = 3;

}
}
}
mapa[9][18] = 4;
}

int desenhar_mapa()
{
int linha,coluna;
for (linha=0;linha<10;linha++) {
for (coluna=0;coluna<20;coluna++) {
if ((linha == linha_atual) && (coluna == coluna_atual)) {
printf("&");
continue;
}
if (mapa[linha][coluna] == CHAO)
printf(".");
if (mapa[linha][coluna] == PAREDE)
printf("©");
if (mapa[linha][coluna] == GRAMA)
printf(".");
if (mapa[linha][coluna] == SAIDA)
printf("#");

}
printf("\n");
}
return OK;
}


int main(){
srand( (unsigned)time(NULL) );
system("clear");
int level = 1;
do{
gera_mapa();
desenhar_mapa();
do {
key=getch();
if (key==ACIMA){
linha_atual -= 1;
passos += 1;
if (mapa[linha_atual][coluna_atual] == PAREDE){
linha_atual +=1;
}
system("clear");
desenhar_mapa();
}

if (key==ABAIXO){
linha_atual += 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
linha_atual -= 1;
}
system("clear");
desenhar_mapa();
}

if (key==DIREITA){
coluna_atual += 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
coluna_atual -= 1;
}
system("clear");
desenhar_mapa();
}

if (key==ESQUERDA){
coluna_atual -= 1;
passos += 1;
if ((mapa[linha_atual][coluna_atual] == PAREDE)){
coluna_atual += 1;
}
system("clear");
desenhar_mapa();
}

if (key==Q){

printf("\n\nLevel %i Incompleto\nTotal de Passos Level %i: %i\nPrecione Qualquer Para Sair . .\n",level,level,passos);
getch();
exit(2);

}

}while(mapa[linha_atual][coluna_atual]!=SAIDA);
coluna_atual =1;
linha_atual=1;
int level2 = level +1;

printf("\n\nLevel %i Concluido\nTotal de Passos Level %i: %i\nPrecione Qualquer Tecla Para ir Ao Level %i\n",level,level,passos,level2);
getch();
passos = 0;
system("clear");
level+=1;
}while(key!=Q);
exit(2);
}




Muito obrigado pelas dicas, se tiver como testar eu ficaria muito grato :)


9. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 06/07/2014 - 13:15h

Opa Amigo

Voce Quebrou o Meu Codigo,eu sei que o "bom programador tem que criar um programa para todas as plataformas",mas eu nao queria isso,e que ideia esse de usar o 1 2 3 4 para se mexer ? eu acho que essa ultima modificaçao que voce fez ficou horrivel,eu nao quero que meu programa seja compilado no windows, apenas no linux


Fiquei triste :(


10. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 06/07/2014 - 14:15h

Opa Amigo

Nao Sei Como Aconteceu,mas depois de eu testar o seu antigo codigo,eu acabei chorando,nao sei como e nem pq , so sei que quando eu escrevei muito triste :( ja tava chorando(nao muito,mas era choro),mas valeu por ter "re"arrumado meu codigo com identacao ,fica muito mais legivel com identaçao

Valeu,qlq coisa eu te peço

e mais uma coisa

para o jogo funfar legal coloca entre 30 a 40 o numero de paredes , eu recomendo 35 que fica desafiante e tem saida(diferente do 40);
entao mais uma vez,valeu



11. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 06/07/2014 - 21:47h

Opa Amigo

Eu Sei Que Você Deve Estar Me Odiando Agora,Mas Você acha que eu poderia tentar implementar interface gráfica ?
eu sei que você já fez um,e quando eu comecei a desenvolver esse eu não sabia(desculpa por pegar sem sua autorização),se sim,vc poderia me dar algumas dicas de SDL ?
Tava Lendo uns artigos , mas eles são muito "formais" e eu "não entendo" , então se você pudesse me dizer como começar eu agradeceria

Muito Obrigado (e por falar de publicar meu código , na primeira vez que você pediu eu já coloquei,e ele foi aprovado ,mas não aparece na lista de scripts, o que será ?)


12. Re: Ajuda: C/C++ [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 06/07/2014 - 22:53h

Opa Mano

Eu Tava Lendo e Seu Artigo esta de facil entendimento (mas o sdl nao rsrs)

entao , com base no seu jogo do labirinto eu fiz o meu, tem como dar uma olha? ele fica piscando a parede e a grama e queria saber se voce consegue fazer igual no terminal que quando chega em na saida ele gera outro mapa

Nossa Mano,se fizer isso eu poderia ter dar um beijo no rosto (num bom sentido),se achar o problema, me fala e corrige o codigo se conseguir ?

Segue



#include <stdio.h>
#include <stdlib.h>
#include <SDL/SDL.h>

/* Definicoes, para facilitar o uso da funcao para desenhar o mapa */
#define PAREDE 1
#define VOCE 2 /* não usado */
#define GRAMA 3
#define SAIDA 4

/* Desfinicoes da configuracao do Video */
#define LARGURA 400 /* Numero total de colunas*largura_da_parede */
#define ALTURA 200 /* Numero total de linhas*altura_da_parede */
#define BPP 0 /* A Flag SDL_ANYFORMAT se encaregara da resolucao */

#define Q 113
/*Outras definições para tratamento de erros*/
#define OK 1
#define ERRO 2


SDL_Surface * tela, * piso, * parede, * player, * final, * grama;

int coluna_atual = 1,linha_atual = 1,key,passos,fim=0;


int mapa[10][20] =
{
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1}
};

int mapa2[10][20] =
{
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
{1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,1},
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,4,1,1,1
}};

void controla_fps ( int tempo_inicial )
{
int fps = 1000/60; // converte 60 FPS para milissegundos
int tempo_agora = SDL_GetTicks() - tempo_inicial;

if(tempo_agora < fps)
SDL_Delay(fps - tempo_agora);
}

int carrega_imagens ( )
{
/* Carrega as Imagens */
parede = SDL_LoadBMP("parede_muro.bmp");
if (parede == NULL)
{
printf("Não carregou parede_muro.bmp\n");
return 0;
}

player = SDL_LoadBMP("gamer.bmp");
if (player == NULL)
{
printf("Não carregou gamer.bmp\n");
return 0;
}

final = SDL_LoadBMP("fim.bmp");
if (final == NULL)
{
printf("Não carregou fim.bmp\n");
return 0;
}

grama = SDL_LoadBMP("gramado.bmp");
if (grama == NULL)
{
printf("Não carregou gramado.bmp\n");
return 0;
}

return 1;
}

void gera_mapa( )
{
int m, n,x,y,teste,Parede = 0,MaxParede = 35;
for (x = 0;x<10;x++)
{
for(y = 0;y<20;y++)
{
mapa[x][y] = 0;
mapa[x][y] = mapa2[x][y];
}
}


for (m = 0; m < 10;m++)
{
for (n = 0;n<20;n++)
{
teste = rand()%4;
if (((mapa[m][n] == 0)&&(teste == 1)&&(Parede < MaxParede)))
{
mapa[m][n] = teste;
Parede = Parede + 1;
}
else if ((teste == 0)&&(mapa[m][n]== 0))
{
mapa[m][n] = 3;
}
}
}
}

int desenhar_mapa()
{
int linha,coluna;
SDL_Rect destino;
for (linha=0;linha<10;linha++)
{
destino.y = linha * 20;
for (coluna=0;coluna<20;coluna++)
{
destino.x = coluna * 20;

if (mapa[linha][coluna] == PAREDE)
SDL_BlitSurface(parede, NULL, tela, &destino);
if (mapa[linha][coluna] == GRAMA)
SDL_BlitSurface(grama, NULL, tela, &destino);
if (mapa[linha][coluna] == SAIDA)
SDL_BlitSurface(final, NULL, tela, &destino);
}
printf("\n");
}

return OK;
}

void move_jogador ( SDL_Event event )
{
/*=============== Deslocamento do jogador =====================*/
switch (event.key.keysym.sym)
{
/* Na vertical */
case SDLK_UP:
/* Se o usuario aperta a seta para cima e linha_atual for maior que 0 ... */
if (linha_atual > 0) /* 0 = primeira linha */
{
/* ...subtraia 1 de linha_atual, ou seja, suba uma linha... */
linha_atual = linha_atual - 1;
/* ... e verifique a localizacao do jogador ...*/
if (mapa[linha_atual][coluna_atual] == PAREDE)
linha_atual = linha_atual + 1; /* ... Se for sobre a PAREDE volte para a posição anterior. */
}
break;

case SDLK_DOWN:
if (linha_atual < 9)
{
linha_atual = linha_atual + 1;
if (mapa[linha_atual][coluna_atual] == PAREDE)
linha_atual = linha_atual - 1;
}
break;

/* Na horizontal */
case SDLK_LEFT:
/* Se o usuario aperta a seta para esquerda e coluna_atual for maior que 0 ... */
if (coluna_atual > 0) /* 0 = primeira coluna */
{
/* ...subtraia 1 de coluna_atual, ou seja, recue uma coluna ... */
coluna_atual = coluna_atual - 1;
/* ... e verifique a localizacao do jogador ...*/
if (mapa[linha_atual][coluna_atual] == PAREDE)
coluna_atual = coluna_atual + 1; /* ... Se for sobre a PAREDE adicione 1 a coluna_atual. */
}
break;

case SDLK_RIGHT:
if (coluna_atual < 39)/* 39 = última coluna */
{
coluna_atual = coluna_atual + 1;
if (mapa[linha_atual][coluna_atual] == PAREDE)
coluna_atual = coluna_atual - 1;
}
break;

default:
break;
}
}


int main()
{
srand( (unsigned)time(NULL) );
/*inicializando a SDL e verificando possiveis erros */
if(SDL_Init(SDL_INIT_VIDEO) != 0)
{
printf("Erro: %s\n", SDL_GetError());
exit(-1);
}

SDL_Rect destino; /* para blitar o jogador */
SDL_Event evento; /* para os eventos */

/* Carrega as imagens */
if (carrega_imagens() == 0) /* Se não carregou uma ou outra imagem */
{
return 1; /* encerre o programa */
}

/* Configura o Video */
tela = SDL_SetVideoMode(LARGURA, ALTURA, BPP, SDL_SWSURFACE | SDL_ANYFORMAT);
if(tela == NULL)
{
printf("Erro: %s\n", SDL_GetError());
return 1; /* encerre o programa */
}

int tempo_inicial;

/* Loop principal */
while (fim == 0) /* Enquanto NÃO for verdadeiro o fim */
{
/* Para a funcao controla_fps */
tempo_inicial = SDL_GetTicks();

/* Loop de eventos */
while(SDL_PollEvent(&evento))
{
if(evento.type == SDL_QUIT)
fim = 1;

/* move o jogador */
if (evento.type == SDL_KEYDOWN)
move_jogador(evento);
}

/* Verifica se o jogador chegou ao ponto final */
if (mapa[linha_atual][coluna_atual] == SAIDA)
{
printf("Chegou ao ponto final\n");
}

/* Pinta a tela inteira de branco antes de desenhar o mapa, esse branco eh o caminho */
SDL_FillRect(tela, NULL, SDL_MapRGB(tela->format, 255, 255, 255));
/* Desenha o mapa sobre a tela */
gera_mapa();
desenhar_mapa();

/* blita o jogador na tela */
/* para o jogador: destino.x = coluna_atual*largura_da_imagem e destino.y = linha_atual*altura_da_imagem */
destino.x = coluna_atual * 20;
destino.y = linha_atual * 20;
/* pegue a imagem player completa(NULL) e jogue na tela em destino */
SDL_BlitSurface(player, NULL, tela, &destino);

SDL_UpdateRect(tela,0,0,0,0); /* Atualiza a tela inteira */
controla_fps(tempo_inicial); // controla o FPS
}

/* Finalizando o SDL */
SDL_Quit();
return 0;
}



eu fiz usando os mesmos arquivos e fiz basicamente um Ctrl + C && Ctrl + V

Por Favor Me Ajude!



01 02 03



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts