Oppure

Loading
18/06/11 14:09
comina8
Ciao a tutti ho scritto questo semplice codice per iniziare la programmazione di Thread:


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

#include <process.h>

#include "mia_libreria.h"

bool esci=false;
unsigned char x_b=1, y_b=1;
unsigned char x_t=1, y_t=20;

void spara()
{
    unsigned char i, ausx=x_t;

    for(i=y_t-2;i>=1;i--)
        {
            delay(100);
            gotoxy(ausx,i+1);
            putchar(' ');
            gotoxy(ausx,i);
            putchar('*');
        }
    if(x_b==ausx)
        {
            gotoxy(0,0);
            printf("Hai vinto!");
            esci=true;
        }
    else
        {
            gotoxy(ausx,i);
            putchar(' ');
        }
    chiudi_thread();
}

void muovi_x()
{
    bool indietro;

    while(!esci)
        {
            delay(100);
            if(indietro)
                {
                    gotoxy(x_b,y_b);
                    putchar(' ');
                    x_b--;
                    gotoxy(x_b,y_b);
                    putchar('x');
                }
            else
                {
                    gotoxy(x_b,y_b);
                    putchar(' ');
                    x_b++;
                    gotoxy(x_b,y_b);
                    putchar('x');
                }
            if(x_b==60)
                indietro=true;
            else if(x_b==1)
                indietro=false;
        }
    chiudi_thread();
}

int main()
{
    _beginthread(muovi_x,0,NULL);
    unsigned char tasto;

    while(!esci)
        {
            tasto=getch();
            if(tasto==27)
                esci=true;
            else if(tasto==75)
                {
                    gotoxy(x_t,y_t);
                    putchar(' ');
                    x_t--;
                    gotoxy(x_t,y_t);
                    putchar('_');
                }
            else if(tasto==77)
                {
                    gotoxy(x_t,y_t);
                    putchar(' ');
                    x_t++;
                    gotoxy(x_t,y_t);
                    putchar('_');
                }
            else if(tasto==' ')
                {
                    _beginthread(spara,0,NULL);
                }
        }
    return 0;
}


Facendolo girare però ogni tanto viene stampata la 'x' o il trattino sbagliati
e soprattutto quando si sparano più colpi insieme vengono fatte delle stampe
assurde. Il codice mi sembra giusto, cosa posso aver sbagliato?

EDIT:

Scusa anthony015 ma ho premuto per sbaglio INVIO e non riesco a modificare.
Comunque penso di si perchè ogni thread usa variabili diverse.
Forse per iniziare potrei mettere come parametro alla funzione spara la x_t
almeno non devo più assegnarla ad ausx.
Provo poi ti dico.
Grazie comunque per la risposta =)
Ultima modifica effettuata da comina8 23/06/11 10:30
aaa
22/06/11 23:40
anthony015
sei sicura che venga rispettata la mutua esclusione(soltanto un thread alla volta deve poter accedere ad una variabile o zona di memoria condivisa)?
aaa