solitaire* solitaire_theidiot(mem_context *context, visual_settings *settings) { visual_pile *deck, *pile1, *pile2, *pile3, *pile4, *done; rule *rule1, *rule2; condition *pile1_4_cond; /* The one solitaire instance we have.*/ solitaire* s = mem_alloc(context, sizeof(solitaire)); /* This is the internal data representation of this * solitaire. This is a local struct hidden from other * members. */ internal* i = mem_alloc(context, sizeof(internal)); s->data = i; s->visual = visual_create(context, settings); i->deck = pile_create(context, 52); deck = visual_pile_create(context, i->deck); deck->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2 + settings->card_width / 2); deck->origin[1] = 40.0f; deck->rotation = 45.0f; deck->action = action_deal(context, s, i); visual_add_pile(context, s->visual, deck); i->pile1 = pile_create(context, 13); pile1 = visual_pile_create(context, i->pile1); pile1->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width + settings->card_spacing); pile1->origin[1] = 70.0f; pile1->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile1); i->pile2 = pile_create(context, 13); pile2 = visual_pile_create(context, i->pile2); pile2->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2); pile2->origin[1] = 70.0f; pile2->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile2); i->pile3 = pile_create(context, 13); pile3 = visual_pile_create(context, i->pile3); pile3->origin[0] = settings->card_width / 2 + settings->card_spacing / 2; pile3->origin[1] = 70.0f; pile3->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile3); i->pile4 = pile_create(context, 13); pile4 = visual_pile_create(context, i->pile4); pile4->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width + settings->card_spacing; pile4->origin[1] = 70.0f; pile4->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile4); i->done = pile_create(context, 48); done = visual_pile_create(context, i->done); done->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2 + settings->card_width / 2; done->origin[1] = 40.0f; done->rotation = -45.0f; visual_add_pile(context, s->visual, done); card_create_deck(context, i->deck, 14); card_shuffle(i->deck); visual_sync(s->visual); s->ruleset = ruleset_create(context); /* Shared condition between several rules. */ pile1_4_cond = condition_source_array( context, 4, i->pile1, i->pile2, i->pile3, i->pile4); /* Move card to done pile if source is pile1-pile4 and there is a higher card in same suit in those piles. */ rule1 = rule_create(context); rule_add_condition(context, rule1, pile1_4_cond); rule_add_condition(context, rule1, condition_destination(context, i->done)); rule_add_condition( context, rule1, condition_or_array( context, 4, condition_top_card_compare(context, i->pile1, e_dest_higher_value | e_follow_suit), condition_top_card_compare(context, i->pile2, e_dest_higher_value | e_follow_suit), condition_top_card_compare(context, i->pile3, e_dest_higher_value | e_follow_suit), condition_top_card_compare(context, i->pile4, e_dest_higher_value | e_follow_suit))); rule_add_condition(context, rule1, condition_top_card(context)); ruleset_add_rule(context, s->ruleset, rule1); /* Allow move to a top card to an empty pile. */ rule2 = rule_create(context); rule_add_condition(context, rule2, pile1_4_cond); rule_add_condition(context, rule2, condition_top_card(context)); rule_add_condition(context, rule2, condition_destination_empty(context)); rule_add_condition( context, rule2, condition_destination_array( context, 4, i->pile1, i->pile2, i->pile3, i->pile4)); ruleset_add_rule(context, s->ruleset, rule2); /* Solved rule */ s->ruleset->solved = rule_create(context); rule_add_condition( context, s->ruleset->solved, condition_source_card_equal( context, e_suit_none, 14, e_equal_value, i->pile1)); rule_add_condition( context, s->ruleset->solved, condition_source_card_equal( context, e_suit_none, 14, e_equal_value, i->pile2)); rule_add_condition( context, s->ruleset->solved, condition_source_card_equal( context, e_suit_none, 14, e_equal_value, i->pile3)); rule_add_condition( context, s->ruleset->solved, condition_source_card_equal( context, e_suit_none, 14, e_equal_value, i->pile4)); rule_add_condition( context, s->ruleset->solved, condition_card_count_array( context, 1, 4, i->pile1, i->pile2, i->pile3, i->pile4)); return s; }
MainWindow::MainWindow() { //CREATION DU MENU setWindowTitle("CalcUTC"); this->size_min(); QMenu *menuOption = menuBar()->addMenu("&Option"); QAction *actionQuitter = new QAction("&Quitter", this); //AJOUT DE QUITTER menuOption->addAction(actionQuitter); QAction *actionProgEdit = new QAction("Nouveau programme", this); // Ajout d'une action créer nouveau programme qui ouvre un QEDITTEXT menuOption->addAction(actionProgEdit); QMenu *menuAffichage = menuBar()->addMenu("&Affichage"); QAction *actionClavier = new QAction("&Clavier", this); //OPTION D'AFFICHAGE DU CLAVIER ET DES FONCTIONS SCIENTIFIQUES menuAffichage->addAction(actionClavier); QAction *actionScientifique = new QAction("&Mode scientifique", this); menuAffichage->addAction(actionScientifique); QAction *actionProg = new QAction("&Gestion Programme",this); menuAffichage->addAction(actionProg); QAction *actionRedo = new QAction("&Redo", this); // AJOUT DU "Redo" menuOption->addAction(actionRedo); actionRedo->setIcon(QIcon("\\Users\\Adrien\\Documents\\Adrien\\UTC\\GI 02\\LO21\\Projet\\version finale\\projet_1_0\\images/arrow_redo.png")); actionRedo->setShortcut(QKeySequence(tr("Ctrl+y"))); QAction *actionUndo = new QAction("&Undo", this); // AJOUT DU "Undo" menuOption->addAction(actionUndo); actionUndo->setIcon(QIcon("\\Users\\Adrien\\Documents\\Adrien\\UTC\\GI 02\\LO21\\Projet\\version finale\\projet_1_0\\images/arrow_undo.png")); actionUndo->setShortcut(QKeySequence(tr("Ctrl+z"))); QMenu *menuAide = menuBar()->addMenu("&Aide"); QAction *actionAPropos = new QAction("&A propos", this); // AJOUT DU "A PROPOS" menuAide->addAction(actionAPropos); // GESTION DES SIGNAUX ET SLOTS DU MENU connect(actionQuitter, SIGNAL(triggered()), qApp, SLOT(quit())); actionQuitter->setShortcut(QKeySequence("Escape")); connect(actionScientifique, SIGNAL(triggered()), this, SLOT(afficher_scientique())); connect(actionClavier, SIGNAL(triggered()), this, SLOT(afficher_clavier())); actionClavier->setCheckable(true); actionScientifique->setCheckable(true); // CONNECT DU PROGEDIT connect(actionProg,SIGNAL(triggered(bool)), this, SLOT(openProgWindow())); connect(actionProgEdit,SIGNAL(triggered()), this, SLOT(openEditProg())); // OUVRE LE QEDITTEXT connect(actionAPropos,SIGNAL(triggered(bool)), this, SLOT(afficher_APropos())); //INITIALISATION DES OBJETS DU .h mainArea = new QWidget; mainSet = new QHBoxLayout; scientificPad = new scientific_pad; scientificPad->hide(); keyboard = new Keyboard(); keyboard->hide(); controlScreen = new QWidget(); controlScreen->setFixedSize(QSize(280, 300)); pile = new Pile ; qDebug()<<pile; controleur = Controleur::getInstance(LiteraleManager::getInstance() , *pile) ; message = new QLineEdit() ; commande = new QLineEdit() ; vuePile = new QTableWidget (pile->getNbItemsToAffiche(),1) ; pile_create(); topLayout = new QHBoxLayout(); middleLayout = new QHBoxLayout(); boutons_droits = new QVBoxLayout(); bottomLayout = new QHBoxLayout(); pile_plus = new QPushButton(); pile_moins = new QPushButton(); enter = new QPushButton(); leftLayout = new QVBoxLayout(); leftLayout->addWidget(vuePile); vuePile->setStyleSheet("background : rgba(35,141,214,45)"); commande->setStyleSheet("background : rgba(35,141,214,45)"); //MIDDLELAYOUT SETTINGS middleLayout->addLayout(leftLayout); middleLayout->addLayout(boutons_droits); boutons_droits->addWidget(pile_plus); boutons_droits->addWidget(pile_moins); //BOTTOM LAYOUT SETTINGS bottomLayout->addWidget(commande); bottomLayout->addWidget(enter); enter->setIcon(QIcon("\\Users\\Adrien\\Documents\\Adrien\\UTC\\GI 02\\LO21\\Projet\\version finale\\projet_1_0\\images/enter-arrow.png")); enter->setFlat(true); enter->setFocusPolicy(Qt::NoFocus); connect(enter,SIGNAL(clicked(bool)),this,SLOT(slot_getNextCommande())); //BOUTON PILE SETTINGS + CONNECT pile_plus->setIcon(QIcon("\\Users\\Adrien\\Documents\\Adrien\\UTC\\GI 02\\LO21\\Projet\\version finale\\projet_1_0\\images/add.png")); pile_plus->setFlat(true); pile_plus->setFocusPolicy(Qt::NoFocus); pile_moins->setIcon(QIcon("\\Users\\Adrien\\Documents\\Adrien\\UTC\\GI 02\\LO21\\Projet\\version finale\\projet_1_0\\images/minus.png")); pile_moins->setFlat(true); pile_moins->setFocusPolicy(Qt::NoFocus); connect(pile_plus,SIGNAL(clicked(bool)),pile,SLOT(aug_pile())); connect(pile_plus,SIGNAL(clicked(bool)),this,SLOT(pile_create())); connect(pile_moins,SIGNAL(clicked(bool)),pile,SLOT(dim_pile())); connect(pile_moins,SIGNAL(clicked(bool)),this,SLOT(pile_create())); // MESSAGE SETTINGS message->setReadOnly(true); //empèche d'écrire dans la lineEdit message->setStyleSheet("background: blue; color: yellow"); message->setAlignment(Qt::AlignHCenter); message->setFixedHeight(45); //VUE PLIE SETTINGS vuePile->horizontalHeader()->setVisible(false); //enlève l'indice de col vuePile->horizontalHeader()->setStretchLastSection(true); //ajuste la largeur à la fenetre vuePile->setSelectionMode(QAbstractItemView::NoSelection); vuePile->setEditTriggers(QAbstractItemView::NoEditTriggers) ; //empèche d'écrire dans les cellules //SOUND_LOCK SETTINGS sound_lock = new QPushButton(); sound_lock->setIcon(QIcon("\\Users\\Adrien\\Documents\\Adrien\\UTC\\GI 02\\LO21\\Projet\\version finale\\projet_1_0\\images/speaker.png")); sound_lock->setFlat(true); sound_lock->setFocusPolicy(Qt::NoFocus); connect(sound_lock,SIGNAL(clicked(bool)),this,SLOT(sound_disable())); //GESTION DES CONNECTS DU SCIENTIFIC_PAD connect(scientificPad->cos, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); connect(scientificPad->sin, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); connect(scientificPad->tan, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); connect(scientificPad->arccos, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); connect(scientificPad->arcsin, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); connect(scientificPad->arctan, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); connect(scientificPad->sqrt, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); connect(scientificPad->puis, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); connect(scientificPad->exp, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); connect(scientificPad->ln, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); connect(scientificPad->div, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); connect(scientificPad->mod, SIGNAL(clicked(bool)), this, SLOT(keyboardButtonPressed())); //GESTION DES CONNECTS DU CONTROLSCREEN connect(commande, SIGNAL (returnPressed()) , this , SLOT(slot_getNextCommande())) ; connect(pile , SIGNAL (modificationEtat()) , this, SLOT(refresh())) ; //GESTION DES CONNECTS DU KEYBOARD connect(keyboard->b1,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->b2,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->b3,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->b4,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->b5,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->b6,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->b7,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->b8,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->b9,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->b0,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->bplus,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->bmoins,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->bdiv,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->bmult,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->clear,SIGNAL(clicked(bool)),commande, SLOT(clear())); connect(keyboard->space,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->bComp,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->bPo,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); connect(keyboard->bPf,SIGNAL(clicked(bool)),this, SLOT(keyboardButtonPressed())); //CREATION DES LIENS ENTRE LES LAYOUTS mainSet->addWidget(scientificPad); scientificPad->setStyleSheet("background : rgba(35,141,214,45)"); mainSet->addWidget(controlScreen); message->setStyleSheet("background : rgba(35,186,117,45)"); vuePile->setStyleSheet("background : rgba(35,141,214,25)");; mainSet->addWidget(keyboard); keyboard->setStyleSheet("background : rgba(35,141,214,45)"); topLayout->addWidget(message); topLayout->addWidget(sound_lock); LcontrolScreen = new QVBoxLayout; controlScreen->setLayout(LcontrolScreen); LcontrolScreen->addLayout(topLayout); LcontrolScreen->addLayout(middleLayout); LcontrolScreen->addLayout(bottomLayout); mainArea->setLayout(mainSet); setCentralWidget(mainArea); //GESTION SAUVEGARDE CONTEXTE connect(qApp,SIGNAL(aboutToQuit()),this,SLOT(save_context())); open_context(); }
solitaire* solitaire_noname1(mem_context *context, visual_settings *settings) { visual_pile *deck, *ace1, *ace2, *ace3, *ace4; visual_pile *pile1, *pile2, *pile3, *pile4, *pile5, *pile6, *pile7, *pile8; /* The one solitaire instance we have.*/ solitaire* s = mem_alloc(context, sizeof(solitaire)); /* This is the internal data representation of this * solitaire. This is a local struct hidden from other * members. */ internal* i = mem_alloc(context, sizeof(internal)); s->data = i; s->visual = visual_create(context, settings); i->deck = pile_create(context, 52); deck = visual_pile_create(context, i->deck); deck->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2 + settings->card_width / 2); deck->origin[1] = 70.0f; deck->rotation = 45.0f; deck->action = action_deal(context, s, i); visual_add_pile(context, s->visual, deck); i->ace[0] = pile_create(context, 13); ace1 = visual_pile_create(context, i->ace[0]); ace1->origin[0] = settings->card_width / 2 + settings->card_spacing / 2; ace1->origin[1] = 70.0f; visual_add_pile(context, s->visual, ace1); i->ace[1] = pile_create(context, 13); ace2 = visual_pile_create(context, i->ace[1]); ace2->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width + settings->card_spacing; ace2->origin[1] = 70.0f; visual_add_pile(context, s->visual, ace2); i->ace[2] = pile_create(context, 13); ace3 = visual_pile_create(context, i->ace[2]); ace3->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2; ace3->origin[1] = 70.0f; visual_add_pile(context, s->visual, ace3); i->ace[3] = pile_create(context, 13); ace4 = visual_pile_create(context, i->ace[3]); ace4->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 3 + settings->card_spacing * 3; ace4->origin[1] = 70.0f; visual_add_pile(context, s->visual, ace4); i->build[0] = pile_create(context, 52); pile1 = visual_pile_create(context, i->build[0]); pile1->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 3 + settings->card_spacing * 3); pile1->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile1); i->build[1] = pile_create(context, 52); pile2 = visual_pile_create(context, i->build[1]); pile2->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2); pile2->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile2); i->build[2] = pile_create(context, 52); pile3 = visual_pile_create(context, i->build[2]); pile3->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width + settings->card_spacing); pile3->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile3); i->build[3] = pile_create(context, 52); pile4 = visual_pile_create(context, i->build[3]); pile4->origin[0] = 0 - (settings->card_width / 2 + settings->card_spacing / 2); pile4->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile4); i->build[4] = pile_create(context, 52); pile5 = visual_pile_create(context, i->build[4]); pile5->origin[0] = settings->card_width / 2 + settings->card_spacing / 2; pile5->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile5); i->build[5] = pile_create(context, 52); pile6 = visual_pile_create(context, i->build[5]); pile6->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width + settings->card_spacing; pile6->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile6); i->build[6] = pile_create(context, 52); pile7 = visual_pile_create(context, i->build[6]); pile7->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 2 + settings->card_spacing * 2; pile7->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile7); i->build[7] = pile_create(context, 52); pile8 = visual_pile_create(context, i->build[7]); pile8->origin[0] = settings->card_width / 2 + settings->card_spacing / 2 + settings->card_width * 3 + settings->card_spacing * 3; pile8->translateY = 0 - settings->card_height / 5; visual_add_pile(context, s->visual, pile8); card_create_deck(context, i->deck, 1); card_shuffle(i->deck); visual_sync(s->visual); setup_rules(context, s, i); return s; }