void Deck::shuffle(){ Deck_t new_deck(0); while(m_deck.size() > 0){ auto iter(m_deck.begin()); advance(iter, m_gen() % m_deck.size()); new_deck.push_front(*iter); m_deck.erase(iter); } m_deck = new_deck; }
END_TEST START_TEST (a_deck_with_21_cards_is_not_busted) { Deck *sut = new_deck(); Card* card1 = new_card(1, 10); Card* card2 = new_card(2, 11); deck_push_card(sut,card1); deck_push_card(sut,card2); ck_assert_msg (is_busted(sut) == 0, "Deck with 21 Cards Is Not Busted"); }
END_TEST START_TEST (should_be_able_to_tell_if_a_busted_deck_has_busted) { Deck *sut = new_deck(); Card* card1 = new_card(1, 11); Card* card2 = new_card(2, 12); deck_push_card(sut,card1); deck_push_card(sut,card2); ck_assert_msg (is_busted(sut) == 1, "23 Point Deck Should Bust"); }
// from UDP made simple at https://www.abc.se/~m6695/udp.html int main(int argc, char *argv[]) { struct sockaddr_in si_me, si_oth,si_other[4]; int s, sockFd[4]; socklen_t slen=sizeof(struct sockaddr_in); ssize_t len; FILE *fd; fd = fopen("/var/tmp/serve_client","w"); char buf[BUFLEN]={"start"}; char *trick[4]; FF_trick(trick); //Game initiation, shuffling and dealing. Card sorted_deck[52]; Card shuffled_deck[52]; char *deck[52]; new_deck(sorted_deck); shuffle_deck(sorted_deck,shuffled_deck); convert_card_struct(shuffled_deck,deck,buf); Game *game = malloc(sizeof(Game)); memcpy(game->deck,deck,sizeof(deck)); for (int k = 0; k < 4; k++) memcpy(game->buffer[k],buf, sizeof(buf)); for (int k = 0; k < 4; k++) printf("Shuffled deck: \n%s\n\n",game->buffer[k]); //get communication going if ((s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1) diep("socket"); printf("socket open\n"); memset((char *) &si_me, 0, sizeof(si_me)); si_me.sin_family = AF_INET; si_me.sin_port = htons(GAMEPORT); si_me.sin_addr.s_addr = htonl(INADDR_ANY); if (bind(s, (struct sockaddr *) &si_me, sizeof(si_me))==-1) diep("bind"); printf("bound\n"); //Player initiation int counter[4]; for(int i=0;i<4;i++){ counter[i] = i; } pthread_t players[4]; for(int i=0;i<4;i++){ pthread_t tmp=0; players[i] = tmp; } //Player thread arguments are initiated Player player[4]; for(int i=0;i<4;i++){ memset((char *) &si_other[i], 0, sizeof(si_other[i])); Player tmp={i,&s,game,&si_me,&si_other[i]}; memcpy(&player[i], (void *) &tmp, sizeof(tmp)); } //deal cards into each player's game buffer for (int k = 0; k < 4; k++) { sprintf(player[k].game->buffer[k],"%s;",game->deck[k]); for(int j=4;j<52;j+=4) { strcat(player[k].game->buffer[k], game->deck[(j+k)]); strcat(player[k].game->buffer[k],";"); } printf("Player %d game buffer: %s\n",k,player[k].game->buffer[k]); } for (int k = 0; k < 4; k++)printf("Player %d game buffer: %s\n",k,player[k].game->buffer[k]); //deal cards into player hands for (int k = 0; k < 4; k++) { for(int j=0;j<52;j+=4) { player[k].game->hands[k][j/4] = malloc(3); strcpy(player[k].game->hands[k][j/4], game->deck[(j+k)]); } } /* print hands for (int k = 0; k < 4; k++) { printf("Player %d game hand: ", k); for (int l = 0; l < 13; l++) { printf("%s ", player[k].game->hands[k][l]); } printf("\n"); }*/ int j=0,connected=0; void *buffer = (void *) strdup(buf); bool connections[]={false,false,false,false}; char *this_is_my_pos[4]; do{ printf("inet: %s\tsocket descriptor: %d\n\n", inet_ntoa(player[j].si_other->sin_addr), player[j].sockfd); if((len = recvfrom(s, buffer, BUFLEN, 0, &si_oth, &slen)) == -1) diep("recvfrom()"); //check given position separate_strings(buffer,";",this_is_my_pos,4); if((j=find_DD(this_is_my_pos,4))== -1) printf("not a new connection\n"); if(j < 4 && j >= 0 && !connections[j]){ //In preparation for threads sockFd[j]= s; player[j].sockfd = &sockFd[j]; strcpy(si_other[j].sin_zero,si_oth.sin_zero); si_other[j].sin_addr.s_addr=si_oth.sin_addr.s_addr; si_other[j].sin_port=si_oth.sin_port; si_other[j].sin_family=si_oth.sin_family; player[j].si_other = &si_other[j]; printf("pthread to addr: %d\n",si_oth.sin_addr.s_addr); //pthread_create(&players[j],NULL,&player_waits_or_plays,(void *) &player[j]); //Signal that four clients are connected connections[j]=true; connected += 1; } else perror("not a new connection\n"); printf("Received packet from IP-address: %s: Port: %d\nPosition: %d\nData: %s\nLength: %d\n", inet_ntoa(si_oth.sin_addr), ntohs(si_oth.sin_port), j, (char *) buffer,(int) len); //strängen delas upp i fyra separate_strings(buffer,";",trick,4); printf("received split into: %s",trick[0]); for(int i=1;i<4;i++) printf(" %s",trick[i]); //skicka första handen printf("\nSending packet: \n%s\nto player %d\n", game->buffer[j],j); if (sendto(s, game->buffer[j], 200, 0, (struct sockaddr *) &si_oth, slen)==-1) diep("sendto()"); } while (connected<4); int starter=0; // Här börjar spelet, första handen har skickats till klienterna. Vem börjar? starter=who_starts(game->hands); int winner=-1; printf("player %d starts\n", starter); EE_trick(trick,starter); printf("Winner: %d\n", winner=check_winner(trick,starter)); EE_trick(trick,starter); EE_trick(game->trick,starter); // Lägg nu sticket i fyra buffertar, en till varje spelare (overkill!) for (int m = 0; m < 4; m++) { for (int k = 0; k < 4; k++) { if (!k) sprintf(player[m].game->buffer[m], "%s;", trick[0]); else { strcat(game->buffer[m], trick[k]); strcat(game->buffer[m], ";"); } printf("Game buffer: %s\n", game->buffer[m]); } } for (int k = 0; k < 4; k++)printf("Player %d game buffer: %s\n",k,player[k].game->buffer[k]); for (int l = 0; l < 4; l++) { if ((len = recvfrom(s, buffer, BUFLEN, 0, (struct sockaddr *) &si_oth, &slen)) == -1) diep("recvfrom()"); if (si_other[l].sin_addr.s_addr == si_oth.sin_addr.s_addr) { if (sendto(s, game->buffer[l], sizeof(game->buffer[l]), 0, (struct sockaddr *) &si_other[l], slen) == -1) diep("sendto()"); printf("Skickar %s till spelare %d\n",game->buffer[l], player[l].pos); } } /*for (int l = 0; l < 4; l) { if((len = recvfrom(s, buffer, BUFLEN, 0, (struct sockaddr *) &si_oth, &slen)) == -1) diep("recvfrom()"); }*/ int o=0; do{ if((len = recvfrom(s, buffer, BUFLEN, 0, (struct sockaddr *) &si_oth, &slen)) == -1) diep("recvfrom()"); printf("from addr: %d\n",si_oth.sin_addr.s_addr); if ((strstr(buffer,"00"))) { for (int m = 0; m < 4; m++) { sprintf(player[m].game->buffer[m], "%s;", buffer); printf("Buffer written: %s\n", buffer); } for (int l = 0; l < 4; l++) { if (si_other[l].sin_addr.s_addr == si_oth.sin_addr.s_addr) { if (sendto(s, game->buffer[l], sizeof(game->buffer[l]), 0, (struct sockaddr *) &si_other[l], slen) == -1) diep("sendto()"); printf("Skickar %s till spelare %d\n", buffer, player[l].pos); //pthread_create(&players[l], NULL, &player_waits_or_plays, (void *) &player[l]); } } } } while (!(strstr(buffer,"00"))); void *new_buffer; void *best_buffer; new_buffer = malloc(40); best_buffer = malloc(40); int FFs=0, best_count=4; // så länge första handen spelas vill vi jämföra skickade händer med mottagna händer while(strstr(buffer, "00") && strstr(buffer,"FF")){ if((len = recvfrom(s, new_buffer, BUFLEN, 0, (struct sockaddr *) &si_oth, &slen)) == -1) diep("recvfrom()"); //Vill du ha hela din hand igen? if(strstr((char*) new_buffer, "DD")){ for (int i = 0; i < 4; i++) { if(si_oth.sin_addr.s_addr==player[i].si_other->sin_addr.s_addr){ if (sendto(s, game->hands[i], sizeof(game->hands[i]), 0, (struct sockaddr *) &si_other[i], slen) == -1) diep("sendto()"); // inga onödiga loopar! break; } } //tillbaka till att ta emot igen! continue; } else if((strcmp((char *) buffer, (char *) new_buffer)) && !(strstr(new_buffer, "EE"))) { printf("Gammalt stick: %s\nUppdaterat stick: %s",(char*) buffer, (char*) new_buffer); char *tmp = strdup(new_buffer); if((FFs= count_FF(tmp)) < best_count) best_count = FFs; else continue; // skriv inte över sticket om det inte nästa kort spelats strcpy((char*)buffer, new_buffer); split((char*) buffer,';',game->trick); //bufferten måste återställas efter split() strcpy((char*)buffer, new_buffer); printf("\nkontroll av pekare: : \n"); for (int i = 0; i < 4; i++) printf("trick %d: %s\n",i,game->trick[i]); for (int i = 0; i < 4; i++) printf("trick %d: %s\n",i,game->trick[i]); for (int l = 0; l < 4; l++){ strcpy(game->buffer[l],new_buffer); if (sendto(s, game->buffer[l], sizeof(game->buffer[l]), 0, (struct sockaddr *) &si_other[l], slen) == -1) diep("sendto()"); else printf("Precis skickat %s till spelare %d\n",game->buffer[l], player[l].pos); } } } assert(!strstr(game->buffer[0],"FF")); split(game->buffer[0],';',trick); //Ta reda på vem som vann sticket //int winner=-1; printf("Winner: %d\n", winner=check_winner(trick,starter)); // Jag räknar med att klienten ställer frågor om sticket EE_trick(trick,winner); EE_trick(game->trick,winner); // Förmodligen börjar en do-while-loop här som kör så länge // Switch-sats beroende på /*while(strcmp(buffer,"quit")){ printf("buffer: %s \n",player[j].game->buffer); if ((len = recvfrom(s, buffer, BUFLEN, 0, &si_oth, &slen)) == -1) diep("recvfrom()"); printf("Received packet from %s:%d\nData: %s\nLength: %d\n", inet_ntoa(si_oth.sin_addr), ntohs(si_oth.sin_port), (char *) buffer,len); */ //counter[j] = pthread_create(&players[j], NULL, &player_waits_or_plays, (void *) &player[j]); //pthread_join((players[j]),NULL); printf("\nclient data: %s \n",buffer); separate_strings(buffer,";",trick,4); printf("received split into: %s",trick[0]); for(int i=1;i<4;i++) printf(" %s",trick[i]); printf("\n"); /* //Receive data and start game threads for each client for(int j=0;j<4;j++) { if ((len = recvfrom(player[j].sockfd, player[j].game->buffer, BUFLEN, 0, &si_other[i], &slen)) == -1) diep("recvfrom()"); counter[j++] = pthread_create(&players[j], NULL, &player_waits_or_plays, (void *) &player[j]); printf("Received packet from %s:%d\nData: %s\nLength: %d\n", inet_ntoa(si_other[i].sin_addr), ntohs(si_other[i].sin_port), (char *) buffer,len); } // Jag försöker föra över detta till trådarna--------------------// char cards_to_send[40]; i=0; sprintf(cards_to_send,"%s;",player[i].game->deck[player[i].pos]); for(int j=4;j<52;j+=4) { strcat(cards_to_send, player[i].game->deck[player[i].pos+j]); strcat(cards_to_send,";"); } printf("Sending packet2: \n%s\n", cards_to_send); if (sendto(s, cards_to_send, 40, 0, (struct sockaddr *) &si_other[i], slen)==-1) diep("sendto()"); int k=0; */ close(s); return 0; }
/* * Description: The main driver function for this program. * Input: Command line arguments * Result: EXIT_SUCCESS or EXIT_FAILURE * PRE: None. * POST: The appropriate encryption/decryption function will be called. */ int main( int argc, char** argv ) { if( argc == 1 ) // Program was executed with no arguments, so show usage. { show_usage( argv[ 0 ] ); } else if( strcasecmp( argv[ 1 ], "-e" ) == 0 ) // Encrypt { if( argv[ 2 ] == NULL ) { show_usage( argv[ 0 ] ); return EXIT_FAILURE; } //pontifex -e deck.txt plaintext.txt ciphertext.txt printf( "Reading in deck...\n" ); card_ptr deck = read_deck_from_file( argv[ 2 ] ); printf( "Reading in plaintext...\n" ); char* plaintext = read_filetext( argv[ 3 ] ); printf( "Encrypting...\n" ); char* ciphertext = encode_message( plaintext, deck ); write_filetext( ciphertext, argv[ 4 ] ); } else if( strcasecmp( argv[ 1 ], "-d" ) == 0 ) // Decrypt { if( argv[ 2 ] == NULL ) { show_usage( argv[ 0 ] ); return EXIT_FAILURE; } //pontifex -d deck.txt ciphertext.txt decrypted.txt printf( "Reading in deck...\n" ); card_ptr deck = read_deck_from_file( argv[ 2 ] ); printf( "Reading in ciphertext...\n" ); char* ciphertext = read_filetext( argv[ 3 ] ); printf( "Decrypting...\n" ); char* plaintext = decode_message( ciphertext, deck ); write_filetext( plaintext, argv[ 4 ] ); } else if( strcasecmp( argv[ 1 ], "-a" ) == 0 ) // Create a new deck with all cards in ascending order { if( argv[ 2 ] == NULL ) { show_usage( argv[ 0 ] ); return EXIT_FAILURE; } printf( "Creating a new deck with cards in ascending order...\n" ); fflush( stdout ); //pontifex -a deck.txt card_ptr deck = new_deck(); write_deck_to_file( deck, argv[ 2 ] ); } else if( strcasecmp( argv[ 1 ], "-r" ) == 0 ) // Create a new, randomly shuffled deck { if( argv[ 2 ] == NULL ) { show_usage( argv[ 0 ] ); return EXIT_FAILURE; } printf( "Creating a new, randomly shuffled deck...\n" ); //pontifex -r deck.txt card_ptr deck = new_deck(); deck = shuffle_deck( deck ); write_deck_to_file( deck, argv[ 2 ] ); } else if( strcasecmp( argv[ 1 ], "-k" ) == 0 ) // Show key sequence { if( argv[ 2 ] == NULL ) { show_usage( argv[ 0 ] ); return EXIT_FAILURE; } printf( "Showing key sequence generated by deck in given file...\n" ); //pontifex -k deck.txt printf( "Reading in deck...\n" ); card_ptr deck = read_deck_from_file( argv[ 2 ] ); char* keystream = generate_keystream( deck, 8 ); int i; for( i = 0; i < 8; i++ ) { int key = keystream[ i ] - 64; printf( "%d ", key ); } printf( "\n" ); } else if( strcasecmp( argv[ 1 ], "-f" ) == 0 ) // Test reading a deck from a file { if( argv[ 2 ] == NULL ) { show_usage( argv[ 0 ] ); return EXIT_FAILURE; } printf( "Testing reading deck from a file...\n" ); //pontifex -f deck.txt printf( "Reading in deck...\n" ); card_ptr deck = read_deck_from_file( argv[ 2 ] ); show_deck( deck ); } else if( strcasecmp( argv[ 1 ], "-m" ) == 0 ) // Test move joker steps { if( argv[ 2 ] == NULL ) { show_usage( argv[ 0 ] ); return EXIT_FAILURE; } printf( "Testing move joker steps with deck in given file...\n" ); //pontifex -m deck.txt printf( "Reading in deck...\n" ); card_ptr deck = read_deck_from_file( argv[ 2 ] ); card_ptr currentCard = deck; while( currentCard->number != JOKER_A ) { currentCard = currentCard->next; } deck = swap_joker1( deck, currentCard ); currentCard = deck; while( currentCard->number != JOKER_B ) { currentCard = currentCard->next; } deck = swap_joker2( deck, currentCard ); show_deck( deck ); } else if( strcasecmp( argv[ 1 ], "-t" ) == 0 ) // Test triple cut step { if( argv[ 2 ] == NULL ) { show_usage( argv[ 0 ] ); return EXIT_FAILURE; } printf( "Testing triple cut step with deck in given file...\n" ); //pontifex -t deck.txt printf( "Reading in deck...\n" ); card_ptr deck = read_deck_from_file( argv[ 2 ] ); deck = triple_cut( deck ); show_deck( deck ); } else if( strcasecmp( argv[ 1 ], "-c" ) == 0 ) // Test count cut step { if( argv[ 2 ] == NULL ) { show_usage( argv[ 0 ] ); return EXIT_FAILURE; } printf( "Testing count cut step with deck in given file...\n" ); //pontifex -c deck.txt printf( "Reading in deck...\n" ); card_ptr deck = read_deck_from_file( argv[ 2 ] ); deck = count_cut( deck ); show_deck( deck ); } else if( strcasecmp( argv[ 1 ], "-p" ) == 0 ) // Test entire pontifex algorithm { if( argv[ 2 ] == NULL ) { show_usage( argv[ 0 ] ); return EXIT_FAILURE; } printf( "Testing all pontifex steps with deck in given file...\n" ); //pontifex -p deck.txt printf( "Reading in deck...\n" ); card_ptr deck = read_deck_from_file( argv[ 2 ] ); // Step 1, find joker A card_ptr currentCard = deck; while( currentCard->number != JOKER_A ) { currentCard = currentCard->next; } deck = swap_joker1( deck, currentCard ); printf( "Step 1:\n" ); show_deck( deck ); // Step 2, find joker B currentCard = deck; while( currentCard->number != JOKER_B ) { currentCard = currentCard->next; } deck = swap_joker2( deck, currentCard ); printf( "Step 2:\n" ); show_deck( deck ); // Step 3, do triple cut deck = triple_cut( deck ); printf( "Step 3:\n" ); show_deck( deck ); // Step 4, do count cut deck = count_cut( deck ); printf( "Step 4:\n" ); show_deck( deck ); // Step 5, find output card int streamval = get_output_card( deck ); printf( "Step 5:\n" ); printf( "%i\n", streamval ); } else if( strcasecmp( argv[ 1 ], "-o" ) == 0 ) // Test output card step { if( argv[ 2 ] == NULL ) { show_usage( argv[ 0 ] ); return EXIT_FAILURE; } printf( "Testing find output card step with deck in given file...\n" ); //pontifex -o deck.txt printf( "Reading in deck...\n" ); card_ptr deck = read_deck_from_file( argv[ 2 ] ); printf( "Output card: %i\n", get_output_card( deck ) ); } else { printf( "Invalid flag: %s\n", argv[ 1 ] ); show_usage( argv[ 0 ] ); return EXIT_FAILURE; } printf( "Done\n" ); return EXIT_SUCCESS; }
extern int process_pptx(char *pptx_file) { // Returns the number of slides, -1 in case of severe failure // (if the file doesn't exist, 0 is returned) mz_bool status; mz_zip_archive zip_archive; char *xml_slide; size_t xml_sz; char *p; char *q; char *s; char *t; int i; int deckid; int maxslide = 0; int notenum; int slidenum = 0; int slideid; char xmlrel[FILENAME_MAX]; short kw; short level; memset(&zip_archive, 0, sizeof(zip_archive)); status = mz_zip_reader_init_file(&zip_archive, pptx_file, 0); if (!status) { fprintf(stderr, "Cannot read %s!\n", pptx_file); } else { deckid = new_deck(pptx_file); // Get and print information about each file in the archive. for (i = 0; i < (int)mz_zip_reader_get_num_files(&zip_archive); i++) { mz_zip_archive_file_stat file_stat; if (!mz_zip_reader_file_stat(&zip_archive, i, &file_stat)) { fprintf(stderr, "mz_zip_reader_file_stat() failed!\n"); mz_zip_reader_end(&zip_archive); return -1; } if (!mz_zip_reader_is_file_a_directory(&zip_archive, i)) { if ((strncmp(file_stat.m_filename, "ppt/notesSlides/", 16) == 0) && strncmp(file_stat.m_filename, "ppt/notesSlides/_rels/", 22)) { // Notes // // *** ACHTUNG *** // Note numbers don't match the corresponding slide number, // that would be too easy. You have to dig into "_rels" // if (!sscanf(&(file_stat.m_filename[26]), "%d", ¬enum)) { fprintf(stderr, "Failed to extract note num from %s\n", &(file_stat.m_filename[16])); return -1; } sprintf(xmlrel, "ppt/notesSlides/_rels/notesSlide%d.xml.rels", notenum); if ((xml_slide = (char *)mz_zip_reader_extract_file_to_heap(&zip_archive, (const char *)xmlrel, &xml_sz, (mz_uint)0)) != (char *)NULL) { // Try to find the b****y slide number if ((p = strstr(xml_slide, "Target=\"../slides/slide")) != NULL) { if (!sscanf(&(p[23]), "%d", &slidenum)) { fprintf(stderr, "Failed to extract slidenum from %s\n", &(p[36])); return -1; } } free(xml_slide); } if (slidenum) { if (slidenum > maxslide) { maxslide = slidenum; } slideid = new_slide(deckid, slidenum); xml_sz = 0; if ((xml_slide = (char *)mz_zip_reader_extract_file_to_heap(&zip_archive, (const char *)file_stat.m_filename, &xml_sz, (mz_uint)0)) != (char *)NULL) { if (get_mode() & OPT_TAGS) { // Exclusively look for indexing words in the notes q = xml_slide; level = 0; while ((p = strchr(q, '[')) != (char *)NULL) { level++; do { p++; } while (isspace(*p)); q = p + 1; while (*q && ((*q != ']') || (level > 1))) { switch (*q) { case '[': level++; break; case ']': level--; break; default: break; } q++; } if (*q == ']') { *q = '\0'; if (get_sep() == ';') { // Replace HTML entities if there are any replace_entities(p); } while ((s = strchr(p, get_sep())) != (char *)NULL) { *s++ = '\0'; if (*p == get_kw()) { p++; kw = 1; } else { if (autokw()) { kw = lowercase_word(p); } else { kw = 0; } } if ((t = cleanup(p)) != (char *)NULL) { new_word_as_is(t, slideid, 'T', kw); free(t); } p = s; while (isspace(*p)) { p++; } } if (*p == get_kw()) { p++; kw = 1; } else { if (autokw()) { kw = lowercase_word(p); } else { kw = 0; } } if ((t = cleanup(p)) != (char *)NULL) { new_word_as_is(t, slideid, 'T', kw); free(t); } p = 1 + q; } else { break; } } } else { // Analyze text analyze_text(slideid, xml_slide, 'N'); } free(xml_slide); } else { fprintf(stderr, "Extract flopped\n"); return -1; } } } // We look at regular slides even if we are only interested // in tags to check that we aren't missing any slide without // notes and that our tag count is correct if ((strncmp(file_stat.m_filename, "ppt/slides/", 11) == 0) && strncmp(file_stat.m_filename, "ppt/slides/_rels/", 17)) { // Regular slide if (!sscanf(&(file_stat.m_filename[16]), "%d", &slidenum)) { fprintf(stderr, "Failed to extract num from %s\n", &(file_stat.m_filename[11])); return -1; } if (slidenum > maxslide) { maxslide = slidenum; } slideid = new_slide(deckid, slidenum); if (!(get_mode() & OPT_TAGS)) { xml_sz = 0; if ((xml_slide = (char *)mz_zip_reader_extract_file_to_heap(&zip_archive, (const char *)file_stat.m_filename, &xml_sz, (mz_uint)0)) != (char *)NULL) { // Analyze text analyze_text(slideid, xml_slide, 'S'); // Analyze images analyze_pic(slideid, xml_slide); free(xml_slide); } else { fprintf(stderr, "Extract flopped\n"); return -1; } } } } } // Close the archive, freeing any resources it was using mz_zip_reader_end(&zip_archive); } return maxslide; }
int load_cards() { //Load all paths from images for each card and store them in char * arrays const char * card_path1[] = { "/usr/src/drivers/proj/images/image_b1.mg", "/usr/src/drivers/proj/images/image_b2.mg", "/usr/src/drivers/proj/images/image_b3.mg", "/usr/src/drivers/proj/images/image_b4.mg", "/usr/src/drivers/proj/images/image_b5.mg", "/usr/src/drivers/proj/images/image_b6.mg", "/usr/src/drivers/proj/images/image_1a.mg", "/usr/src/drivers/proj/images/image_1aa.mg", "/usr/src/drivers/proj/images/image_1aaa.mg", "/usr/src/drivers/proj/images/image_1b.mg", "/usr/src/drivers/proj/images/image_1c.mg" }; const char * card_path2[] = { "/usr/src/drivers/proj/images/image_b1.mg", "/usr/src/drivers/proj/images/image_b2.mg", "/usr/src/drivers/proj/images/image_b3.mg", "/usr/src/drivers/proj/images/image_b4.mg", "/usr/src/drivers/proj/images/image_b5.mg", "/usr/src/drivers/proj/images/image_b6.mg", "/usr/src/drivers/proj/images/image_2a.mg", "/usr/src/drivers/proj/images/image_2aa.mg", "/usr/src/drivers/proj/images/image_2aaa.mg", "/usr/src/drivers/proj/images/image_2b.mg", "/usr/src/drivers/proj/images/image_2c.mg" }; const char * card_path3[] = { "/usr/src/drivers/proj/images/image_b1.mg", "/usr/src/drivers/proj/images/image_b2.mg", "/usr/src/drivers/proj/images/image_b3.mg", "/usr/src/drivers/proj/images/image_b4.mg", "/usr/src/drivers/proj/images/image_b5.mg", "/usr/src/drivers/proj/images/image_b6.mg", "/usr/src/drivers/proj/images/image_3a.mg", "/usr/src/drivers/proj/images/image_3aa.mg", "/usr/src/drivers/proj/images/image_3aaa.mg", "/usr/src/drivers/proj/images/image_3b.mg", "/usr/src/drivers/proj/images/image_3c.mg" }; const char * card_path4[] = { "/usr/src/drivers/proj/images/image_b1.mg", "/usr/src/drivers/proj/images/image_b2.mg", "/usr/src/drivers/proj/images/image_b3.mg", "/usr/src/drivers/proj/images/image_b4.mg", "/usr/src/drivers/proj/images/image_b5.mg", "/usr/src/drivers/proj/images/image_b6.mg", "/usr/src/drivers/proj/images/image_4a.mg", "/usr/src/drivers/proj/images/image_4aa.mg", "/usr/src/drivers/proj/images/image_4aaa.mg", "/usr/src/drivers/proj/images/image_4b.mg", "/usr/src/drivers/proj/images/image_4c.mg" }; const char * card_path5[] = { "/usr/src/drivers/proj/images/image_b1.mg", "/usr/src/drivers/proj/images/image_b2.mg", "/usr/src/drivers/proj/images/image_b3.mg", "/usr/src/drivers/proj/images/image_b4.mg", "/usr/src/drivers/proj/images/image_b5.mg", "/usr/src/drivers/proj/images/image_b6.mg", "/usr/src/drivers/proj/images/image_5a.mg", "/usr/src/drivers/proj/images/image_5aa.mg", "/usr/src/drivers/proj/images/image_5aaa.mg", "/usr/src/drivers/proj/images/image_5b.mg", "/usr/src/drivers/proj/images/image_5c.mg" }; //Create all cards new_card(&a1, 150, 220, card_path1, 0, 0, 1); new_card(&a2, 150, 220, card_path2, 0, 0, 2); new_card(&a3, 150, 220, card_path3, 0, 0, 3); new_card(&a4, 150, 220, card_path4, 0, 0, 4); new_card(&a5, 150, 220, card_path5, 0, 0, 5); new_card(&a6, 150, 220, card_path1, 0, 0, 1); new_card(&a7, 150, 220, card_path2, 0, 0, 2); new_card(&a8, 150, 220, card_path3, 0, 0, 3); new_card(&a9, 150, 220, card_path4, 0, 0, 4); new_card(&a10, 150, 220, card_path5, 0, 0, 5); card * cards[] = { &a1, &a2, &a3, &a4, &a5, &a6, &a7, &a8, &a9, &a10 }; //Create cards positions int xpos[10] = { 50, 240, 430, 620, 810, 50, 240, 430, 620, 810 }; int ypos[10] = { 155, 155, 155, 155, 155, 415, 415, 415, 415, 415 }; //Create new deck new_deck(&d1, 10, cards, 3, xpos, ypos); }