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
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; }