Trooper
|
[AJUDA] Para quem sabe programar em C
01-12-05, 00:46
#1
oh.. a prof passou esse trabalho.. quem quiser me ajudar a fazer ou dar uma luz e tal. avisa aí =]
msn: [email protected] beijos |
||||
Trooper
|
01-12-05, 02:18
#2
então corre que tu tem só 5 dias pra fazer
|
spkr
|
01-12-05, 02:29
#3
depois que conheci Shell minha vida mudou!
ASEIOUHASEIUASEHUIASEH shell rlz |
Trooper
|
01-12-05, 02:42
#4
faco em 5 min em vb..
|
Trooper
|
01-12-05, 02:43
#5
e ta mto facil esse exercicio, poe um contador de tempo... pra caso a partida acabar em empate o vencedor eh aquele q demorou menos tempo pra fazer seus movimentos
|
Trooper
|
01-12-05, 03:12
#6
Quote:
|
|
spkr
|
01-12-05, 03:29
#7
vc tb shell :*
vc e o bourne shell pronto tds felizes \o/ iehoasui |
The Alpha Male
|
01-12-05, 07:18
#8
qual eh a duvida sua
|
Trooper
|
01-12-05, 07:21
#9
Eu acho que ele quer qua alguém faça toda a programação para ele...
|
Trooper
|
01-12-05, 08:13
#10
os caras vão falando sem saber..
eu não posso usar toda a sintaxe c. só o que a prof falou.. ou seja, vai até matrizes bidimensionais (numerica/caractere) só queria dicas, só isso quem puder ajudar... |
The Alpha Male
|
01-12-05, 08:45
#11
entao enche de if dentro de um while verificando quem ganhou ou nao
com UMA matriz 3x3 voce consegue isso voce tem q colocar as duvidas fica mais facil |
Trooper
|
01-12-05, 16:07
#12
beleza.. na verdade, nem comecei a fazer o prog
vou começar a fazer amanhã. aí se surgirem dúvidas, posto aqui, ok? beijos! |
Trooper
|
02-12-05, 03:04
#13
Com uma porrada de IF da pra fazer esse Programa huasuhsaUH
|
Trooper
|
02-12-05, 08:25
#14
Eu faço em Pascal ou Java, serve?
|
The Alpha Male
|
02-12-05, 08:43
#15
eu n faço de graça serve?
|
Trooper
|
02-12-05, 09:28
#16
aeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
passei de c++ pqp ahUHAUHuha o bagulho cahto da porra |
Trooper
|
02-12-05, 12:48
#17
ehehhe
eu tenho que passar nessa porra =] |
Trooper
|
02-12-05, 16:37
#18
eu ACHO que tenho um pronto aqui, do primeiro ano..
eu SEI que eu tenho um em assembler, mas o de C q eu fiz não sei c ainda tenho comigo.. qqer coisa se eu achar eu mando pro seu email, (qual eh?) soh o q o trabalho tah pronto, c vc n estudar ele n vai aprender nada.. bom.. vo mandah c eu tiveh e vc v dps soh q soh amanha q eu vo tah na minha casa.. entao soh dps :P |
Trooper
|
05-12-05, 15:06
#20
oh.. eu fiz ele. ta quase certo
mas as vezes quando eh a vez do pc jogar, ele nao joga e passa a vez pra mim =/ e as vezes o programa acaba inesperadamente ja ja eu posto o source aqui valeu |
Trooper
|
05-12-05, 15:51
#21
source:
http://www.agiba.org/ricardo/jogo_velha_mod.txt caso não tenham compilador.. vou explicar o q acontece: o jogo abre normal, mas as vezes o pc nao joga, ele passa a vez. e quando cada jogador tem as 3 pecas no tabuleiro, o programa deve perguntar pra onde quer mexer a peca y. mas isso não acontece, o programa simplesmente encerra se alguem puder me dar uma luz, ficarei muito grato |
The Alpha Male
|
05-12-05, 17:43
#22
esses teus for ate 3 estao com erro provavelmente
tipo no maximo cada pessoa esta fazendo 3 jogadas aonde eram pra ser feitas um 4 e o outro 5 no pior dos casos faz 1 for so ateh 9 com uma variavel de controle pra saber de quem é a vez e coloca no meio desse for(por ultimo) aquele tanto de if seu vericando quem ganhou |
Trooper
|
05-12-05, 18:00
#23
Quote:
Quote:
|
||
The Alpha Male
|
05-12-05, 18:07
#24
ah ta entendi achei q era jogo da velha heruhae
mas ele esta acabando por causa disso viu holo(eu acho dei uma olhada de 2min no seu codigo) oq eu falei do for eh algo do tipo int vez=1; for(int i=0;i<9;i++) { if(vez == 1) { vez = 2 // vez da bolinha // codigo da bolinha } else { vez = 1 // vez do X // codigo do X } if(tabela[0][0]=='x' || tabela[0][1]=='x' || tabela[0][2]=='x') // X GANHOU e por ae vai coloquei bem simples pra vc entender } |
Trooper
|
05-12-05, 18:36
#25
ah.. tipo
descobri outro erro.. as vezes o jogo encerra inesperadamente de primeira.. o pc joga, ai qdo eu jogo ele encerra mas é as vezes. não sei pq vou alterar umas coisas aqui e digo valeu |
Trooper
|
05-12-05, 19:44
#26
bombastic
o problema do programa encerrar sem motivo eu ainda nao descobri mas ajeitei umas coisas aqui. ele entra na funcao de trocar a peca. o erro ta na funcao troca() e troca_pc() vou tentar ajeitar aqui |
Trooper
|
05-12-05, 20:13
#27
Solução em negrito:
Code:
... if ( !(tab[x2][y2] == 'x' || tab[x2][y2] == 'o') ) { tab[x1][y1] = posicao; tab[x2][y2] = jogador_pc; break; //por causa do while } }while (tab[x2][y2] == 'x' || tab[x2][y2] == 'o'); |
Trooper
|
05-12-05, 20:34
#28
É eu estou convencido.
C é uma putaria! |
Trooper
|
05-12-05, 21:12
#29
O programa esta encerrando sozinho por causa da função recursiva jogada_pc(). Ela esta se chamando demais, entupindo a pilha de chamadas de funções.
E ela esta se chamando demais por que voce esta recolocando a semente randomica a cada iteração: Ela esta assim: Code:
void jogada_pc() { srand(time(NULL)); x = rand()%9+1; ... if ( jogada invalida) { jogada_pc() } } A função time te retorna o tempo em milissegundos, mas em um computador atual, digamos de 2 ghz, 1 milissegundo é o tempo de 2 milhões de ciclos. E a sua função é bem simples, com quase todas as instruções de apenas um ciclo, eu chutaria que no pior caso ela gasta no máximo umas 50 instruções (chutando bem pra cima). Então 2.000.000 / 50 seria 400.000 vezes por milissegundo, e em um mesmo milissegundo sua rand() sempre retornaria o mesmo valor, ja que voce esta resetando a semente com o valor do milissegundo. Isso faz com que a função seja chamada muitas vezes, quando o tabuleiro começa a ficar cheio demais, e como ela é recursiva, ela vai só se empilhando na pilha de chamadas de funções, até que a pilha estoura. Então a solução para esse travamento seria colocar o srand apenas no inicio do programa (linha 24 por exemplo), tirando ele de qualquer outro lugar (acho que existem 3 srand's no seu codigo). O chato de ver este bug é que se voce colocar um printf dentro da função, ele para de ocorrer, pois o printf é uma chamada de E/S, o que por definição é lento. Last edited by Ted; 05-12-05 at 21:23.. |
Trooper
|
05-12-05, 22:21
#30
valeu ted. você me salvou..
segue o novo codigo: http://www.agiba.org/ricardo/novo_velha.txt agora soh falta fazer o pc ficar inteligente, ele nunca ganha :/ vou meter um bocado de if =] valeu =] |
The Alpha Male
|
05-12-05, 22:34
#31
achei um codigo rapidao em javascript
http://javascript.internet.com/games/tic-tac-toe.html da pra ter uma ideia de IA simples ele nao eh tao burro |
Trooper
|
05-12-05, 22:51
#32
to tentando entender esse codigo aqui, bombastic
valeu mesmo =] |
Trooper
|
05-12-05, 23:12
#33
ja sei o que tenho que fazer..
bem facil.. mas vai demorar pra caralho.. tipo.. a = tab[0][0]; b = tab[0][1]; etc.............. posso fazer isso? |
The Alpha Male
|
05-12-05, 23:19
#34
nao entendi
pra que isso? o codigo javascript nada mais eh do que varios ifs para ele jogar nas "melhores" posicoes um jogo da velha tradicional |
Trooper
|
05-12-05, 23:21
#35
negão... seja feliz com C, pq eu sou infeliz com Java ;(
|
Trooper
|
06-12-05, 01:20
#36
to quase acabando..
eu fiz assim: coloquei isso na funcao jogada_pc() char a, b, c, d, e, f, g, h, i; a = tab[0][0]; b = tab[0][1]; c = tab[0][2]; d = tab[1][0]; e = tab[1][1]; f = tab[1][2]; g = tab[2][0]; h = tab[2][1]; i = tab[2][2]; ... if (tab[x][y] == 'x' || tab[x][y] == 'o') { jogada_pc(); } else { if ((a==jogador_pc) && (b==jogador_pc) && (c== '3')) tab[0][2]=jogador_pc; else if ((a==jogador_pc)&&(b== '2')&&(c==jogador_pc)) tab[0][1]=jogador_pc; else if ((a== '1')&&(b==jogador_pc)&&(c==jogador_pc)) tab[0][0]=jogador_pc; else if ((a==jogador_pc)&&(d==jogador_pc)&&(g== '7')) tab[2][0]=jogador_pc; else if ((a==jogador_pc)&&(d== '4')&&(g==jogador_pc)) tab[1][0]=jogador_pc; else if ((a== '1')&&(d==jogador_pc)&&(g==jogador_pc)) tab[0][0]=jogador_pc; else if ((a==jogador_pc)&&(e==jogador_pc)&&(i== '9')) tab[2][2]=jogador_pc; else if ((a==jogador_pc)&&(e== '5')&&(i==jogador_pc)) tab[1][1]=jogador_pc; else if ((a== '1')&&(e==jogador_pc)&&(i==jogador_pc)) tab[0][0]=jogador_pc; else if ((b==jogador_pc)&&(e==jogador_pc)&&(h== '8')) tab[2][1]=jogador_pc; else if ((b==jogador_pc)&&(e== '5')&&(h==jogador_pc)) tab[1][1]=jogador_pc; else if ((b== '2')&&(e==jogador_pc)&&(h==jogador_pc)) tab[0][1]=jogador_pc; else if ((d==jogador_pc)&&(e==jogador_pc)&&(f== '6')) tab[1][2]=jogador_pc; else if ((d==jogador_pc)&&(e== '5')&&(f==jogador_pc)) tab[1][1]=jogador_pc; else if ((d== '4')&&(e==jogador_pc)&&(f==jogador_pc)) tab[1][0]=jogador_pc; else if ((g==jogador_pc)&&(h==jogador_pc)&&(i== '9')) tab[2][2]=jogador_pc; else if ((g==jogador_pc)&&(h== '8')&&(i==jogador_pc)) tab[2][1]=jogador_pc; else if ((g== '7')&&(h==jogador_pc)&&(i==jogador_pc)) tab[2][0]=jogador_pc; else if ((c==jogador_pc)&&(f==jogador_pc)&&(i== '9')) tab[2][2]=jogador_pc; else if ((c==jogador_pc)&&(f== '6')&&(i==jogador_pc)) tab[1][2]=jogador_pc; else if ((c== '3')&&(f==jogador_pc)&&(i==jogador_pc)) tab[0][2]=jogador_pc; else if ((g==jogador_pc)&&(e==jogador_pc)&&(c== '3')) tab[0][2]=jogador_pc; else if ((g==jogador_pc)&&(e== '5')&&(c==jogador_pc)) tab[1][1]=jogador_pc; else if ((g== '7')&&(e==jogador_pc)&&(c==jogador_pc)) tab[2][0]=jogador_pc; else if ((a==jogador)&&(b==jogador)&&(c==0)) tab[0][2]=jogador_pc; else if ((a==jogador)&&(b==0)&&(c==jogador)) tab[0][1]=jogador_pc; else if ((a==0)&&(b==jogador)&&(c==jogador)) tab[0][0]=jogador_pc; else if ((a==jogador)&&(d==jogador)&&(g==0)) tab[2][0]=jogador_pc; else if ((a==jogador)&&(d==0)&&(g==jogador)) tab[1][0]=jogador_pc; else if ((a==0)&&(d==jogador)&&(g==jogador)) tab[0][0]=jogador_pc; else if ((a==jogador)&&(e==jogador)&&(i==0)) tab[2][2]=jogador_pc; else if ((a==jogador)&&(e==0)&&(i==jogador)) tab[1][1]=jogador_pc; else if ((a==0)&&(e==jogador)&&(i==jogador)) tab[0][0]=jogador_pc; else if ((b==jogador)&&(e==jogador)&&(h==0)) tab[2][1]=jogador_pc; else if ((b==jogador)&&(e==0)&&(h==jogador)) tab[1][1]=jogador_pc; else if ((b==0)&&(e==jogador)&&(h==jogador)) tab[0][1]=jogador_pc; else if ((d==jogador)&&(e==jogador)&&(f==0)) tab[1][2]=jogador_pc; else if ((d==jogador)&&(e==0)&&(f==jogador)) tab[1][1]=jogador_pc; else if ((d==0)&&(e==jogador)&&(f==jogador)) tab[1][0]=jogador_pc; else if ((g==jogador)&&(h==jogador)&&(i==0)) tab[2][2]=jogador_pc; else if ((g==jogador)&&(h==0)&&(i==jogador)) tab[2][1]=jogador_pc; else if ((g==0)&&(h==jogador)&&(i==jogador)) tab[2][0]=jogador_pc; else if ((c==jogador)&&(f==jogador)&&(i==0)) tab[2][2]=jogador_pc; else if ((c==jogador)&&(f==0)&&(i==jogador)) tab[1][2]=jogador_pc; else if ((c==0)&&(f==jogador)&&(i==jogador)) tab[0][2]=jogador_pc; else if ((g==jogador)&&(e==jogador)&&(c==0)) tab[0][2]=jogador_pc; else if ((g==jogador)&&(e==0)&&(c==jogador)) tab[1][1]=jogador_pc; else if ((g==0)&&(e==jogador)&&(c==jogador)) tab[2][0]=jogador_pc; else tab[x][y] = jogador_pc; } .... |
Trooper
|
06-12-05, 02:18
#37
Bicho, TEM que ter uma forma mais fácil de fazer isso.
Essa quantidade de "else if" não pode ser a melhor forma. |
Trooper
|
06-12-05, 02:20
#38
SANTA MARIA NOSSA SENHORA SANTÍSSIMA MÃE DE CABELO!!!
Parece até código do Windows pqp!! Vai pra Microsoft, cê tem os dom!!! |
Trooper
|
06-12-05, 02:31
#39
Um dia eu vi uma heuristica para jogo de GO que o cara dava pontos para as posições de acordo com o tabuleiro.
Voce corre o tabuleiro, se achar um posição vazia voce pontua ela de acordo com regras que inventar, por exemplo: possui 1 inimigo na vertical/horizontal/diagonal (se for a diagonal maior) = 2 possui 2 inimigos na vertical/horizontal/diagonal = 4 possui 1 igual na vertical/horizontal/diagonal = 2 possui 2 iguais na vertical/horizontal/diagonal = 10 não possui pedras colocadas na vertical/horizontal/diagonal = 1 Se mais de uma regra bate, voce soma os pontos, e então o PC joga na posição com maior pontos (e se mais de uma tiver o mesmo numero de pontos, então inventa um modo de escolher uma, ou pega aleatorio). Essa é so uma ideia de heuristica, mas vc tem que saber distribuir estes pontos, e para velha 3x3 são poucas opções. Outra coisa, voce ainda precisa de pensar em como o computador vai fazer na segunda parte, que é a de escolher uma peça e move-la. |
Trooper
|
06-12-05, 03:04
#40
ficou assim:
if ((a==jogador_pc) && (b==jogador_pc) && (c== '3')) tab[0][2]=jogador_pc; else if ((a==jogador_pc)&&(b== '2')&&(c==jogador_pc)) tab[0][1]=jogador_pc; else if ((a== '1')&&(b==jogador_pc)&&(c==jogador_pc)) tab[0][0]=jogador_pc; else if ((a==jogador_pc)&&(d==jogador_pc)&&(g== '7')) tab[2][0]=jogador_pc; else if ((a==jogador_pc)&&(d== '4')&&(g==jogador_pc)) tab[1][0]=jogador_pc; else if ((a== '1')&&(d==jogador_pc)&&(g==jogador_pc)) tab[0][0]=jogador_pc; else if ((a==jogador_pc)&&(e==jogador_pc)&&(i== '9')) tab[2][2]=jogador_pc; else if ((a==jogador_pc)&&(e== '5')&&(i==jogador_pc)) tab[1][1]=jogador_pc; else if ((a== '1')&&(e==jogador_pc)&&(i==jogador_pc)) tab[0][0]=jogador_pc; else if ((b==jogador_pc)&&(e==jogador_pc)&&(h== '8')) tab[2][1]=jogador_pc; else if ((b==jogador_pc)&&(e== '5')&&(h==jogador_pc)) tab[1][1]=jogador_pc; else if ((b== '2')&&(e==jogador_pc)&&(h==jogador_pc)) tab[0][1]=jogador_pc; else if ((d==jogador_pc)&&(e==jogador_pc)&&(f== '6')) tab[1][2]=jogador_pc; else if ((d==jogador_pc)&&(e== '5')&&(f==jogador_pc)) tab[1][1]=jogador_pc; else if ((d== '4')&&(e==jogador_pc)&&(f==jogador_pc)) tab[1][0]=jogador_pc; else if ((g==jogador_pc)&&(h==jogador_pc)&&(i== '9')) tab[2][2]=jogador_pc; else if ((g==jogador_pc)&&(h== '8')&&(i==jogador_pc)) tab[2][1]=jogador_pc; else if ((g== '7')&&(h==jogador_pc)&&(i==jogador_pc)) tab[2][0]=jogador_pc; else if ((c==jogador_pc)&&(f==jogador_pc)&&(i== '9')) tab[2][2]=jogador_pc; else if ((c==jogador_pc)&&(f== '6')&&(i==jogador_pc)) tab[1][2]=jogador_pc; else if ((c== '3')&&(f==jogador_pc)&&(i==jogador_pc)) tab[0][2]=jogador_pc; else if ((g==jogador_pc)&&(e==jogador_pc)&&(c== '3')) tab[0][2]=jogador_pc; else if ((g==jogador_pc)&&(e== '5')&&(c==jogador_pc)) tab[1][1]=jogador_pc; else if ((g== '7')&&(e==jogador_pc)&&(c==jogador_pc)) tab[2][0]=jogador_pc; // DAQUI PRA BAIXO ELE TENTA "MARCAR" O USUARIO (se tiver x x ele coloca o) else if ((a==jogador)&&(b==jogador)&&(c=='3')) tab[0][2]=jogador_pc; else if ((a==jogador)&&(b=='2')&&(c==jogador)) tab[0][1]=jogador_pc; else if ((a=='1')&&(b==jogador)&&(c==jogador)) tab[0][0]=jogador_pc; else if ((a==jogador)&&(d==jogador)&&(g=='7')) tab[2][0]=jogador_pc; else if ((a==jogador)&&(d=='4')&&(g==jogador)) tab[1][0]=jogador_pc; else if ((a=='1')&&(d==jogador)&&(g==jogador)) tab[0][0]=jogador_pc; else if ((a==jogador)&&(e==jogador)&&(i=='9')) tab[2][2]=jogador_pc; else if ((a==jogador)&&(e=='5')&&(i==jogador)) tab[1][1]=jogador_pc; else if ((a=='1')&&(e==jogador)&&(i==jogador)) tab[0][0]=jogador_pc; else if ((b==jogador)&&(e==jogador)&&(h=='8')) tab[2][1]=jogador_pc; else if ((b==jogador)&&(e=='5')&&(h==jogador)) tab[1][1]=jogador_pc; else if ((b=='2')&&(e==jogador)&&(h==jogador)) tab[0][1]=jogador_pc; else if ((d==jogador)&&(e==jogador)&&(f=='6')) tab[1][2]=jogador_pc; else if ((d==jogador)&&(e=='5')&&(f==jogador)) tab[1][1]=jogador_pc; else if ((d=='4')&&(e==jogador)&&(f==jogador)) tab[1][0]=jogador_pc; else if ((g==jogador)&&(h==jogador)&&(i=='9')) tab[2][2]=jogador_pc; else if ((g==jogador)&&(h=='8')&&(i==jogador)) tab[2][1]=jogador_pc; else if ((g=='7')&&(h==jogador)&&(i==jogador)) tab[2][0]=jogador_pc; else if ((c==jogador)&&(f==jogador)&&(i=='8')) tab[2][2]=jogador_pc; else if ((c==jogador)&&(f=='6')&&(i==jogador)) tab[1][2]=jogador_pc; else if ((c=='3')&&(f==jogador)&&(i==jogador)) tab[0][2]=jogador_pc; else if ((g==jogador)&&(e==jogador)&&(c=='3')) tab[0][2]=jogador_pc; else if ((g==jogador)&&(e=='5')&&(c==jogador)) tab[1][1]=jogador_pc; else if ((g=='7')&&(e==jogador)&&(c==jogador)) tab[2][0]=jogador_pc; else tab[x][y] = jogador_pc; só que tem uns problemas ainda: x x 3 4 o 6 x o o ao inves de ele fazer: x 2 3 x o 6 x o o ele faz: x x o x o 6 7 o 9 se eu não colocar "o" no 7 ele vai lá e pega o x (do 2) e bota no 7 tem uns bugs mas vai assim mesmo o programa tem 732 linhas |
Trooper
|
06-12-05, 03:40
#41
são 02:37 e eu to indo dormir.
acho que o programa está todo bom se alguem quiser ver, é só pedir que eu colo o link do codigo. vou apresentar o trabalho amanha 10:30 valeu mesmo pra quem ajudou ou tentou ajudar.. preciso de 9 pra passar direto =] abraço |
The Alpha Male
|
06-12-05, 07:11
#42
ted
pelo estilo de codigo do programa do cara nem pensei em sugerir nenhuma heuristica por que pelo jeito ele nao iria conseguir implementar uma direito entao achei um codigo "burro" mesmo pra tentar ajudar |
Trooper
|
06-12-05, 09:42
#43
to indo pra aula
seja o que deus quiser |
Trooper
|
06-12-05, 09:52
#44
putz mano, dá pra fazer sem esse monte de if ae...
depois tenta usando algoritmo de sucessores e predecessores |
Trooper
|
06-12-05, 11:36
#45
achei a pagina com a heuristica de gomoku (eu troquei o nome do jogo, hehe)
http://biphome.spray.se/dread/English/ai.html Bem simples de implementar, e gomoku é igual velha, só que com mais casas e precisando fazer 5 pedras seguidas. |
Trooper
|
06-12-05, 15:21
#46
CARALHO PORRA PROFESSORA FILA DA PUTA
fui dormir tarde pra caralho, acrodei cedo. a prof chega atrasada =/ a eu era o penultimo a apresentar. quando deu 12:20 ela falou que não iria dar tempo =/ ai vou apresentar amanha.. que raiva =/ |
Trooper
|
06-12-05, 20:51
#47
diga qto ce tirou depois!
e otra: ted eh nosso salvador em programacao digo por experiencia propria uhHUAHUAUHA |
The Alpha Male
|
06-12-05, 22:18
#48
eu acho que o ted as vezes tenta dar algumas solucoes classicas pra pessoas que nao tem muita nocao nem de como estruturar um programa
acho que as vezes ele complica um pouco mas da umas ajudas bem bacanas |
|
|