Salve a tutti! Prima di tutto vi dico che sono nuovo ed è la prima volta che scrivo in un forum quindi vogliate scusarmi se sbaglierò qualcosa.
Dunque il mio problema è che non sono ancora praticissimo di C sotto Linux e volevo realizzare il seguente programmino per realizzare un videogame elementare in cui, ad intervalli di tempo casuali, compaiono icone aventi come titolo lettere casuali. Un’icona viene poi eliminata battendo la corrispondente lettera sulla tastiera. Il gioco termina se sullo schermo compaiono 10 icone.
Questo è quello che ho realizzato ma non funziona proprio benissimo anzi.
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <string.h>
#include <unistd.h>
#include <time.h>
struct icone1 {
int ipid;
int titolo;
};
int main() {
char tasto[20];
int time;
int icone = 0;
char car [20];
printf("tempo %d\n", time);
int i;
int pid;
typedef struct icone1 fin;
fin finestre[10];
while (icone<10){
pid = fork();
icone++;
time = rand() % 10;
sprintf(car,"%i",time);
printf("lettera %s\n", car);
finestre[icone].ipid = pid;
finestre[icone].titolo = time;
sleep(rand() % 15);
if (pid==0){
execlp("xterm","xterm","-iconic", "-n",time,0);
exit(0);
}
if (pid > 0){
scanf("%s", tasto);
for (i=0;i<=icone;i++){
printf("titolo %s\n", finestre[i].titolo);
if (strcmp(tasto,finestre[i].titolo) == 0){
kill(finestre[i].ipid, SIGINT);
icone--;
}
}
}
}
}
Prima di tutto non ho trovato in giro un metodo per creare lettere casuali, quindi ho creato numeri casuali e ho usato quelli come titolo delle icone, ovviamente una schifezza sicuramente!
Altra cosa uso l'opzione -iconic per xterm per fare un'icona ma non me la crea, mi apre sempre una finestrella del nuovo terminale e non mi rimane sul terminale principale da cui ho lanciato il programma, quindi non posso premere la corrispondente lettera(che poi nel mio caso sarebbe un numero) per chiudere la finestrella appena aperta.
Poi non capisco bene perchè quando faccio l'assegnazione finestre[icone].ipid = pid; e finestre[icone].titolo = time; mi da un errore perchè praticamente se ho capito bene non corrispondono i tipi.
E poi scanf va bene per acquisire il fatidico tasto che dovrebbe chiudere l'icona oppure è meglio fgets o qualche altro comando?
Ringrazio tutti quelli che mi aiuteranno per la pazienza dimostrata, e mi scuso ancora per come scrivo codice ma come vi ho detto sto alla prime armi.
Un saluto a tutti!

Rispondi quotando