|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
[c++] Non trovo l'errore
Sono alcuni giorni che tento di far funzionare questo programma ma non riesco proprio a capire quale possa essere il problema.
Tutto funziona ma dopo aver fatto le prime istruzioni si blocca e sono costretto a riavviare il pc perchè i tasti non funzionano più. Riporto solo la parte di codice strettamente legata all'errore, tutte le funzioni usate sono corrette al di fuori dell'IA dove sembra che il programma si blocchi come se non riuscisse ad uscire da un ciclo, anche i comandi disegna sono parte di un motore grafico e fuinzionano bene. Quello che non capisco è come faccia a crearsi un errore dopo aver chiamato la funzione IA (se non la chiamo il programma funziona) che non fa altro che fare calcoli matematici che al massimo potrebbero generare risultati non corretti e disegnare una immagine in un punto sbagliato dello schermo. [...] Codice:
//questa funzione è contenuta in un while che viene ripetuto //all'infinito fino alla pressione di esc
void gestione_eventi(){
disegna(sfondo, 0, 0);
disegna(scacchiera, 100, 100);
conquiste_giocatore();
disegna(giocatore, coord_xg, coord_yg, 40, 40, 0, 0);
disegna(pc, coord_xp, coord_yp, 40, 40, 0, 0);
scegli_mossa();
if(turno==0)
{
if (i==0)
{
imput_tastiera();
}
fine_turno(); //imposta turno=1
}
if(turno==1)
{
turno=0;
IA();
}
}
[...]
////////////////////////////////////////////////////////////////////////////////
////////////////////////*INTELLIGENZAARTIFICIALE*///////////////////
void IA()
{
//Fase I INTELLIGENZA ARTIFICIALE
//Calcolo qual'è la casella più vicina da conquistare per il pc
for(k=1;k<11;k++)
{
dc[k]=caselle_da_conquistare[k]/10;
uc[k]=caselle_da_conquistare[k]-(dc[k]*10);
}
dp=pos/10;
up=pos-(dp*10);
//ciclo per il riempimento del vettore distanza
for(k=1;k<11;k++)
{
if(dc[k]>=dp){distanza[k]=dc[k]-dp;}
else
{distanza[k]=dp-dc[k];}
if(uc[k]>=up){distanza[k]=distanza[k]+(uc[k]-up);}
else
{distanza[k]=distanza[k]+(dp-dc[k]);}
}
//Ora ho 2 vettori di uguale dimensione, uno con tutte le caselle da conquistare
//ed uno con le distanze dalla posizione attuale
minimo=distanza[1];
obiettivo=1;
for(k=1;k<11;k++)
{
if(distanza[k]<minimo){obiettivo=k;minimo=distanza[k];}
}
//Obiettivo adesso contiene l'indice della casella che il pc
//deve tentare di conquistare al momento
// CICLI DI CONTROLLO IA
if(dc[obiettivo]<dp)
{
coord_yp=coord_yp-60;
}
if(dc[obiettivo]>dp)
{
coord_yp=coord_yp+60;
}
if(uc[obiettivo]<up)
{
coord_xp=coord_xp-60;
}
if(uc[obiettivo]>up)
{
coord_xp=coord_xp+60;
}
Sleep(150);
disegna(pc, coord_xp, coord_yp, 40, 40, 0, 0);
}
Ultima modifica di -Ivan- : 16-02-2005 alle 18:24. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8896
|
1) codice non indentato
2) non ti sembra un pò impossibile se non è un errore sintattico capire l'errore basandosi su un pezzo di un programma che non si sa neppure che fa? ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Il codice non è indentato perchè l'ho copiato male.
L'errore secondo le prove che ho fatto dovrebbe essere in una condizione dei cicli nella funzione IA quindi non serve sapere cosa fa il programma. Vi chiedo solo di dare un'occhiata alle condizioni perchè magari ci può essere un errore banale che mi sfugge in una delle condizioni. Dalle ultime prove che ho fatto sembra bloccarsi in uno dei 2 cicli for dell'IA. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8896
|
ok indenta sto codice e poi ne parliamo
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Non mi viene indentato qua non so perchè, quando clicco su modifica per andare a modificarlo lo vedo indentato ma qua no.
Mi sa che è perchè è indentato con i tab. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
devi racchiudere il codice tra i tag CODE e /CODE chiusi tra parentesi quadri affinche resti l'indentazione
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Aug 2004
Città: Vattelapesca
Messaggi: 45
|
ti posso chiedere che gioco è che stai tentando di realizzare?
magari quando hai finito me lo passi hai provato con un buon debugger? dovresti riuscire ad eseguire un passo alla volta la procedura fino a vedere il punto nel quale il cidlo si blocca no? Un bel breakpoint al primo ciclo e testi, se funziona passi a quello successivo... La mia è solo un' idea eh, non vorrei dare l'idea di saperla lunga. Piu che altro vorrei imparare qualcosa, sono un po' gnubbo in materia. |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Sto tentando di fare un gioco su una scacchiera in cui bisogna conquistare alcune caselle, è il mio progetto che presenterò all'esame di stato.
Con il debug sono riuscito a capire che si blocca nei for, anche se non ho capito se il primo o il secondo, adesso cerco di capire quale è dei 2, la cosa che mi sembra strana è che non in quei 2 cicli non viene fatto niente che potrebbe bloccare in modo così drastico il programma in quanto le variabili usate in quella parte di programma non vengono usate da nessuna altra parte e non faccio altro che fare un paio di operazioni matematiche che nel peggiore dei casi mi dovrebbero solo dare risultati sbagliati. ps: se vuoi potrai farmi da beta tester |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
Quote:
esame di stato per cosa?
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Quote:
|
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Come posso vedere le variabili cosa contengono in modalità grafica?
Il debug del dev c++ non mi sta aiutando granchè. Come posso fare il corrispettivo del cout o della printf in ambiente grafico? |
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Aug 2004
Città: Vattelapesca
Messaggi: 45
|
io all'esame peril liceo l'anno scorso, volevo portare un programma di simulazione di vita artificiale...
poi mi han tolto informatica dalla commissione non me ne son fatto + nulla. sigh! Erano altri 5 punti sicuri all'orale. adesso faccio informatica pura all'uni e mi sto stracciando le palle a sentire gente che mi spiega cose che gia so... almeno adesso invece di farle in pascal le faccio in c++ se mi passi tutta la roba potrei provare a darci un occhiata perche così l'errore non son riuscito a trovarlo. Che compilatore usi? |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Mar 2003
Città: Rimini
Messaggi: 1843
|
Quote:
Beato te, se io mi straccerò le palle all'università, cosa che dubito inizierò immediatamente a fare un po' di grafica 3d. Oggi stavo per comprare un manualone su 3d studio max, avevo già iniziato a fare qualcosa ma ora per mancanza di tempo ho dovuto smettere. per il programma uso il dev c++ ma con l'aggiunta di alcune librerie prese da un sito di programmazione di giochi che uso come motore grafico. Se ti va di provarlo fammi un fischio da msg [email protected]). Ho individuato la parte di codice che da problemi, è il secondo ciclo for della funzione IA. L'ho riscritta senza else ma fa uguale. Che stress non ne posso più, non vedo possibili errori logici. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 01:13.



















