Beispiel #1
0
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    mMsg = new CMsg(this);  // instanciation de la file de messages
    int res = mMsg->initialiser(NOMFIC, (int)LETTRE);
    if (res==-1) {
        qDebug("Erreur init file de message !");
    } // if res

    // création du segment de mémoire partagé contenant la description des capteurs et les valeurs instantanées
    mShm = new QSharedMemory(KEY, this);
    mShm->attach();   // tentative de s'attacher
    if (!mShm->isAttached()) {   // si existe pas alors création
        res = mShm->create(9*sizeof(T_Mes));   // on réserve pour 9 capteurs max
        if (res == false)
            qDebug(mShm->errorString().toStdString().c_str());
    } // if isattached

    mCCom = new CCommuniquer(this, mMsg);
    connect(mMsg, SIGNAL(mailReady(long)), mCCom, SLOT(onMessReady(long)));
    connect(mCCom, SIGNAL(afficherTexte(QString)), this, SLOT(onAfficherTexte(QString)));
    connect(mCCom, SIGNAL(lancerThreads()), this, SLOT(onLancerThreads()));
/*
    // lecture du fichier de configuration config.ini qui identifie les capteurs présents sur le drone
    QList<T_Mes> mesures;
    T_Mes mes;
    QList<QByteArray> parties;
    QFile file("./config.ini");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
         qDebug("Erreur ouverture du fichier config.ini !");
    } // if fichier pas bon
    int nbLigne=0;
    while (!file.atEnd()) {         // lecture des lignes du fichier
         QByteArray line = file.readLine();
         if (isdigit(line[0])) {    // si le premier car de la ligne est 0-9
             qDebug() << "CONFIG.INI: " << line;
             parties = line.split(';'); // extrait chaque partie de la ligne
             mes.noMes = parties.at(0).toInt();
             strncpy(mes.adrCapteur, parties.at(1).toStdString().c_str(), sizeof(mes.adrCapteur));
             strncpy(mes.nomClasse, parties.at(2).toStdString().c_str(), sizeof(mes.nomClasse));
             strncpy(mes.nomMes, parties.at(3).toStdString().c_str(), sizeof(mes.nomMes));
             strncpy(mes.symbUnit, parties.at(4).toStdString().c_str(), sizeof(mes.symbUnit));
             strncpy(mes.textUnit, parties.at(5).toStdString().c_str(), sizeof(mes.textUnit));
             mesures.append(mes);       // ajout dans la QList
             nbLigne++;
         } // if
    } // while

    qDebug() << "Main:" << nbLigne << "capteurs vus";
*/

    // création des objets et connexions à la file des messages
    connect(mMsg, SIGNAL(mailReady(long)), this, SLOT(onMessReady(long)));
    mCCam = new CControlerCamera(this, mMsg);
    connect(mMsg, SIGNAL(mailReady(long)), mCCam, SLOT(onMessReady(long)));

    ui->setupUi(this);

} // constructeur
Beispiel #2
0
int main (int argc, char *argv[])
{
	/* déclaration des variables*/
	win = NULL;
	renderer = NULL;
	continuer = SDL_TRUE;
	snake = NULL;
	points = NULL;
	tempsActuel = 0;
	tempsPrecedent = 0;
	niveauActuel = 1;
	pause = SDL_FALSE;
	gagner = SDL_FALSE;

    srand(time(NULL));

	/* Initialisation de la SDL. */
	init();

	/* Création de la fenêtre et du renderer */
	win = SDL_CreateWindow("Snake", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WIDTH, HEIGHT, 0);
	renderer = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);

	/* Création de la police */
	if((police = TTF_OpenFont("data/arial.ttf", 14)) == NULL)
        snakeERROR("Impossible d'ouvrir le fichier data/arial.ttf : %s\n", TTF_GetError());


    snake = initSerpent(renderer);
    ajouterSerpent(snake, renderer);
    points = initPoints();
    chargerPoints(points, niveauActuel);

    afficherPoints(renderer, points);
    afficherSerpent(renderer, snake);

	while(continuer)
    {
		SDL_Event e;
		if(SDL_PollEvent(&e)) {
            switch(e.type)
            {
                case SDL_QUIT:
                    continuer = SDL_FALSE;
                    break;
                case SDL_KEYUP:
                    if(e.key.keysym.sym == SDLK_ESCAPE)
                        continuer = SDL_FALSE;
                    break;
                case SDL_KEYDOWN:
                    switch(e.key.keysym.sym)
                    {
                        case SDLK_UP:
                            snake->direction = HAUT;
                            break;
                        case SDLK_DOWN:
                            snake->direction = BAS;
                            break;
                        case SDLK_RIGHT:
                            snake->direction = DROITE;
                            break;
                        case SDLK_LEFT:
                            snake->direction = GAUCHE;
                            break;
                        case SDLK_p:
                            if(pause)
                            {
                                pause = SDL_FALSE;
                                SDL_RenderFillRect(renderer, &rectPause);
                            }
                            else
                            {
                                pause = SDL_TRUE;
                                rectPause = afficherTexte(renderer, "PAUSE", police, 400, 300, 255, 255, 255);
                            }
                            break;
                    }
            }
		}

        tempsActuel = SDL_GetTicks();
        if(tempsActuel - tempsPrecedent > INTERVALLE && !pause) /* Si 0.2 sec se sont écoulées */
        {
            deplacerSerpent(snake, renderer);
            afficherSerpent(renderer, snake);
            afficherPoints(renderer, points);
            if(pointsVide(points))
            {
                /* Il reste des niveaux à faire */
                if(niveauActuel < MAX_NIVEAUX)
                    chargerPoints(points, ++niveauActuel);
                /* On a fini tous les niveaux */
                else
                {
                    continuer = SDL_FALSE;
                    gagner = SDL_TRUE;
                    afficherTexte(renderer, "Gagné !", police, 400, 300, 255, 255, 255);
                }
            }
            tempsPrecedent = tempsActuel;
        }
	}

	quit();

	return EXIT_SUCCESS;
}