Advertisement
Aos_45

Client.c - Final

Feb 26th, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 16.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #include <math.h>
  5. #include <windows.h>
  6. #include <string.h>
  7. #define sleep(x) Sleep(x)
  8. #include <locale.h>
  9.  
  10.  
  11. // Pour les sockets :
  12. #include <winsock2.h>
  13. typedef int socklen_t;
  14. #define PORT 23
  15.  
  16.  
  17.  
  18.  
  19.  
  20. int dernierscore = 0, meilleurscore = 0, erreur;
  21. char ip_serveur[16] = "127.0.0.1";
  22. char nom_du_joueur[16] = "User";
  23. char display_pseudo[16];
  24. int use_server = 0;
  25. int use_folder = 0;
  26.  
  27. struct socketSTRUCT{
  28.     int err;
  29.     int connection_reussie;
  30.     SOCKET sock;
  31.     SOCKADDR_IN sin;
  32. }sockets;
  33.  
  34.  
  35. struct player
  36. {
  37.     char pseudo[16];
  38.     char pseudo_alonged[32];
  39.     int result;
  40.     int place;
  41. }player[10];
  42. //typedef struct player player;
  43.  
  44. void big_print(char* to_print){
  45.     printf("/-----------------------------------------------------------------------------\\\n");
  46.     printf("|                                                                             |\n");
  47.     printf("|                        Info                                                 |\n");
  48.     printf("|                                                                             |\n");
  49.     printf("|-----------------------------------------------------------------------------|\n");
  50.     printf("|                                                                             |\n");
  51.     printf("|                                                                             |\n");
  52.     printf("|                                                                             |\n");
  53.     printf("|%s|\n", to_print);
  54.     printf("|                                                                             |\n");
  55.     printf("|                                                                             |\n");
  56.     printf("|                                                                             |\n");
  57.     printf("\\-----------------------------------------------------------------------------/\n");
  58.  
  59. }
  60.  
  61. void ligne(){
  62.     printf("*******************************************************************************\n\n");
  63. } // Compliqué ? C'est juste une ligne pourtant !!
  64.  
  65. void sendscore(int score, char pseudo[16]){
  66.  
  67.    // imput est le score a envoyer au serveur
  68.  
  69.     char buffer[256]; int erreur = 0;
  70.  
  71.     snprintf(buffer, sizeof(buffer), "%s:%d", pseudo, score);
  72.  
  73.     if(!erreur)
  74.     {
  75.         /* Si l'on a réussi à se connecter et qu'il n'y a pas d'erreur*/
  76.         if(sockets.connection_reussie != SOCKET_ERROR)
  77.         {
  78.             //printf("Connection à %s sur le port %d reussie\n", inet_ntoa(sockets.sin.sin_addr), htons(sockets.sin.sin_port));
  79.  
  80.             /* Si l'on reçoit des informations : on les affiche à l'écran */
  81.  
  82.                     sockets.err = send(sockets.sock, buffer, strlen(buffer), 0); // On envoie les données saisies a la main
  83.  
  84.                     if(sockets.err != SOCKET_ERROR) {
  85.                         //printf("Chaine envoyée : %s\n", buffer);
  86.                     } else {
  87.                         //printf("Erreur de transmission\n");
  88.                         use_server = 0;
  89.                     }
  90.  
  91.         }
  92.         /* sinon, on affiche "Impossible de se connecter" */
  93.         else
  94.         {
  95.             //printf("Impossible de se connecter\n");
  96.             use_server = 0;
  97.         }
  98.     }
  99. }
  100.  
  101. void clean(const char *buffer, FILE *fp) { // Fonction permettant d'éliminer les \n des chaines
  102.     char *p = strchr(buffer,'\n');
  103.     if (p != NULL)
  104.         *p = 0;
  105.     else
  106.     {
  107.         int c;
  108.         while ((c = fgetc(fp)) != '\n' && c != EOF);
  109.     }
  110. }
  111.  
  112. void mathinit(){ // Initialisation mathématique de la fonction alléatoire
  113.     srand(time(NULL));
  114. }
  115.  
  116. void initialisation(){
  117.     sockets.sin.sin_addr.s_addr = inet_addr(ip_serveur);
  118.     sockets.sin.sin_family = AF_INET;
  119.     sockets.sin.sin_port = htons(PORT);
  120.  
  121.     mathinit();
  122.     int i, nb = alea();
  123.     for(i = 0; i < nb; i ++){
  124.             snprintf(nom_du_joueur, sizeof(nom_du_joueur), "%s%d",nom_du_joueur, alea());
  125.  
  126.     }
  127.  
  128. }
  129.  
  130.  
  131. void reglages(){
  132.     char choix;
  133.     while(choix != 27){
  134.         system("cls");
  135.         ligne();
  136.         printf("   Echap pour quitter            \n");
  137.         printf("   1 -- Ip serveur             : %s          \n", ip_serveur);
  138.         printf("   2 -- Pseudo joueur          : %s       \n", nom_du_joueur);
  139.         printf("   3 -- Utiliser le serveur    : %s \n", use_server ? "Oui" : "Non");
  140.         printf("   4 -- Sauvegarder les scores : %s \n", use_folder ? "Oui" : "Non");
  141.         choix = getch();
  142.  
  143.         if(choix == '1'){
  144.             printf("Ip du serveur : ");
  145.             scanf("%15s", ip_serveur);
  146.  
  147.             if(use_server == 1) {
  148.                 closesocket(sockets.sock);
  149.                 use_server = 0;
  150.             }
  151.  
  152.             /* Configuration de la connexion */
  153.             sockets.sin.sin_addr.s_addr = inet_addr(ip_serveur);
  154.  
  155.         } else if (choix == '2'){
  156.             printf("Votre pseudo : ");
  157.             fgets(nom_du_joueur, sizeof(nom_du_joueur), stdin);
  158.             clean(nom_du_joueur, stdin);
  159.         } else if (choix == '3'){
  160.             printf("Utiliser un serveur ? : 1 = Oui | 2 = Non");
  161.             choix = getch();
  162.             if(choix == '1'){
  163.                 if(use_server == 1) {
  164.                     closesocket(sockets.sock);
  165.                 }
  166.  
  167.                 use_server = 1;
  168.  
  169.                 /* Création de la socket */
  170.                 sockets.sock = socket(AF_INET, SOCK_STREAM, 0);
  171.  
  172.                 /* On tente de se connecter */
  173.  
  174.                 sockets.connection_reussie = connect(sockets.sock, (SOCKADDR*)&sockets.sin, sizeof(sockets.sin));
  175.  
  176.                 if(sockets.connection_reussie != SOCKET_ERROR){
  177.                     system("cls");
  178.                     big_print("                         Connection réussie                                  ");
  179.                     Sleep(1000);
  180.                 } else {
  181.                     system("cls");
  182.                     big_print("                          Connection ratée                                   ");
  183.                     Sleep(1000);
  184.                     use_server = 0;
  185.                 }
  186.  
  187.             } else if (choix == '2'){
  188.                 use_server = 0;
  189.                 closesocket(sockets.sock);
  190.             }
  191.  
  192.         } else if (choix == '4'){
  193.                 if(use_folder == 1){
  194.                     use_folder = 0;
  195.                 } else {
  196.                     use_folder = 1;
  197.                 }
  198.             }
  199.     }
  200. }
  201.  
  202.  
  203.  
  204.  
  205. void printscoreboard(int scores[10]){
  206.     int i;
  207.  
  208.     for(i = 0; i < 10; i++){
  209.         while(16 > strlen(player[i].pseudo)){
  210.             strcat(player[i].pseudo, " ");
  211.         }
  212.     }
  213.     char serveur[21];
  214.     char port[5];
  215.     sprintf(port,"%ld", htons(sockets.sin.sin_port));
  216.     strcpy(serveur, inet_ntoa(sockets.sin.sin_addr));
  217.     strcat(serveur,":");
  218.     strcat(serveur, port);
  219.     while(16 > strlen(serveur)){
  220.             strcat(serveur, " ");
  221.     }
  222.     // printf("Connection à %s sur le port %d reussie\n", inet_ntoa(sockets.sin.sin_addr), htons(sockets.sin.sin_port));
  223.  
  224.     printf("/-----------------------------------------------------------------------------\\\n");
  225.     printf("|                                                                             |\n");
  226.     printf("|                        ScoreBoard du serveur                                |\n");
  227.     printf("|                        %s                                     |\n",serveur);
  228.     printf("|                                                                             |\n");
  229.     printf("|-----------------------------------------------------------------------------|\n");
  230.     printf("|                                                                             |\n");
  231.     printf("|                                                                             |\n");
  232.  
  233.     printf("|           %der  : %s -> %d         %s         %s                 |\n",player[0].place,player[0].pseudo,scores[0],scores[0] > 9 ? "" : " ", strncmp(nom_du_joueur,player[0].pseudo, strlen(nom_du_joueur)) == 0 ? "!!" : ".." );
  234.     for(i=1;i < 10; i++){
  235.         printf("|           %de %s : %s -> %d          %s        %s                 |\n", player[i].place, player[i].place != 10 ? " " : "",player[i].pseudo,scores[i], scores[i] > 9 ? "" : " ", strncmp(nom_du_joueur,player[i].pseudo, strlen(nom_du_joueur)) == 0 ? "!!" : "..");
  236.     }
  237.     printf("|                                                                             |\n");
  238.     printf("|                                                                             |\n");
  239.     printf("|                                                                             |\n");
  240.     printf("\\-----------------------------------------------------------------------------/\n");
  241.  
  242.  
  243. }
  244.  
  245. void scoreboardaff(){
  246.          char *buffer = "Scores"; int err, i; int scores[10];
  247.          system("cls");
  248.          err = send (sockets.sock, buffer, strlen (buffer), 0);
  249.          if (err != SOCKET_ERROR)
  250.          {
  251.              for(i = 0; i < 10; i++){
  252.                 recv(sockets.sock, &player[i], sizeof(player), 0);
  253.  
  254.                 scores[i] = player[i].result; // Pour une raison inconue, les scores sont rezet lorsque l'on passe a l'affichage des scores alors ils sont passés a la fonction via un tableau ...
  255.              }
  256.             printscoreboard(scores);
  257.  
  258.          }
  259.          else
  260.          {
  261.             big_print ("             Erreur - Non connecté ou problème de communication              ");
  262.             use_server = 0;
  263.          }
  264.  
  265.         getch();
  266.  
  267. }
  268.  
  269. void credits(){
  270.     int i;
  271.     system("cls");
  272.     ligne();
  273.     printf("                                       _____________                                 \n\n");
  274.     printf("                                          Crédits                                 \n");
  275.     printf("                                       _____________                                 \n\n\n\n");
  276.  
  277.      for(i=1;i<50;i++){
  278.           if(kbhit()){ // si on appuie sur une touche alors on arrete les credits
  279.                break;
  280.           }
  281.           printf("Développement serveur ::: Albin Parou \n");
  282.           sleep(500);
  283.           if(kbhit()){ // si on appuie sur une touche alors on arrete les credits
  284.                break;
  285.           }
  286.           printf("Interface utilisateur ::: Gabriel Delepine \n");
  287.           Sleep(500);
  288.  
  289.           if(kbhit()){ // si on appuie sur une touche alors on arrete les credits
  290.                break;
  291.           }
  292.           printf("Développement du jeu ::: Albin Parou, Gabriel Delepine \n");
  293.           Sleep(500);
  294.  
  295.           if(kbhit()){ // si on appuie sur une touche alors on arrete les credits
  296.                break;
  297.           }
  298.      }
  299.      getch();
  300. }
  301.  
  302. void init(){ // Affiche le menu principal
  303.  
  304.     printf("\n\n                                 ~* Jeu du 421 *~");
  305.     printf("\n\n                                ___________________\n\n");
  306.     printf("                               |  1-   Jouer       |   \n\n");
  307.     printf("                               |  2-   Regles      |\n\n");
  308.     printf("                               *  3-   Scoreboard  *\n\n");
  309.     printf("                               *  4-   Credits     *\n\n");
  310.     printf("                               |  5-   Réglages    |\n\n");
  311.     printf("                               |  Echap - Quitter  |\n");
  312.     printf("                                ___________________\n");
  313. } // affiche le menu principal
  314.  
  315. void regles(){ //Partie du programme qui s'occupe des règles
  316.     system("cls");
  317.     ligne();
  318.  
  319.     printf("                                       _____________                                 \n\n");
  320.     printf("                                       Règles du jeu                                 \n");
  321.     printf("                                       _____________                                 \n\n\n\n");
  322.     printf("Le joueur lancera une série de trois dés 5 fois. L'objectif est de réaliser le  meilleur score possible sachant que :\n \n");
  323.     printf("    -réaliser deux chiffres identiques rapporte 2 points \n");
  324.     printf("    -réaliser trois chiffres identiques rapporte la somme des trois dés\n");
  325.     printf("    -réaliser un 4, un 2 et un 1 en un lancer rapporte 20 points\n\n");
  326.     getch();
  327.     system("cls");
  328. } // affriche les règles
  329.  
  330.  
  331.  
  332. int alea(){ // retourne un nombre aléatoire entre 1 et 6
  333.  
  334.     int value_return = rand()%6 + 1;
  335.     return value_return;
  336.  
  337. }
  338.  
  339. int result(int de1, int de2, int de3){ // Retourne le score en fonction des 3 dés
  340.     // On comence par tester si il y a des doubles
  341.     int score = 0;
  342.  
  343.     if(de1 == de2){
  344.         if(de2 == de3){ // si on a un brelan
  345.             score = 12;
  346.         } else { // si on a juste une paire
  347.             score = 2;
  348.         }
  349.     } else if (de2 == de3){ // pour les paires on fait les tests restants
  350.         score = 2;
  351.     } else if (de1 == de3){ // le dernier
  352.         score = 2;
  353.     } else { // On test si on a un 421 -> il faut donc ne pas avoir de paire d'ou le else
  354.         if(de1*de2*de3 == 8){
  355.             if(de1 == 1 || de2 == 1 || de3 ==1){
  356.                 if(de1 == 2 || de2 == 2 || de3 ==2){
  357.                     if(de1 == 4 || de2 == 4 || de3 ==4){
  358.                         score = 20;
  359.                     }
  360.                 }
  361.             }
  362.         }
  363.     }
  364.     return score;
  365. }
  366.  
  367. void remplirfichier(int score){ // Remplis le ficher scores.txt avec les données : La date / heure et le score
  368.     FILE* fichier = NULL;
  369.  
  370.     fichier = fopen("scores.txt", "a");
  371.  
  372.     time_t heure = time(NULL);
  373.  
  374.     if(fichier != NULL){
  375.         fprintf(fichier,"%s Score : %d par %s \n",asctime(localtime(&heure)),score, nom_du_joueur);
  376.         fclose(fichier);
  377.     }
  378. }
  379.  
  380. void accueiljeu(){
  381.     ligne();
  382.     printf(" - Pour jouer appuyez sur J                    | Score precedent : %d\n", dernierscore);
  383.     printf(" - Pour quitter appuyez sur Echap              | Meilleur score  : %d\n\n", meilleurscore);
  384.     ligne();
  385. } // Juste du texte
  386.  
  387. void printscore(int de1, int de2, int de3, int score){
  388.     printf("/---\\  /---\\  /---\\                              \n");
  389.     printf("| %d |  | %d |  | %d |       Votre score actuel : %d\n",de1,de2,de3,score);
  390.     printf("\\---/  \\---/  \\---/                              \n");
  391. }
  392.  
  393. void jeu(){ // Jeu solo
  394.     char touche;
  395.  
  396.     int nbdee = 0, de1, de2, de3, score = 0;
  397.  
  398.     while (touche != 27 && nbdee < 5){
  399.  
  400.         de1 = alea();   // |-----------------------------------------------------------| //
  401.         de2 = alea();   // | On récupère la valeur des dés entre 1 et 6 pour le joueur | //
  402.         de3 = alea();   // |-----------------------------------------------------------| //
  403.  
  404.         score = score + result(de1, de2, de3); // On calcule le score en fonction des résultats des dés
  405.  
  406.         printscore(de1, de2, de3, score);      // On affiche les résultats des dés et le score actuel
  407.  
  408.         touche = getch();                      // On attends une touche entre chaque lancé
  409.  
  410.         nbdee++;                               // Compteur de lancés qui est incrémenté
  411.     }
  412.  
  413.     dernierscore = score;
  414.     if (score > meilleurscore){
  415.         meilleurscore = score;
  416.     }
  417.     if (use_folder == 1){
  418.         remplirfichier(score);
  419.     }
  420.     if(use_server == 1){
  421.         sendscore(score,nom_du_joueur);
  422.     }
  423. }
  424.  
  425. void jouer(){
  426.  
  427.     char choix;
  428.  
  429.     system("cls");
  430.  
  431.     while (1){
  432.         accueiljeu();
  433.         choix = getch();
  434.  
  435.         if(choix == 27){
  436.             break; // Si echap on quitte
  437.         } else if(choix == 106){
  438.  
  439.             jeu(sockets);
  440.             system("cls"); // Quand on sort de la partie on efface l'écran et on réaffiche l'écran de jeu
  441.         }
  442.     }
  443.     system("cls");
  444. }
  445.  
  446. int main(int argc, char *argv[]) {
  447.     setlocale(LC_ALL, "");
  448.  
  449.     system("color 73");
  450.  
  451.     WSADATA WSAData;
  452.     erreur = WSAStartup(MAKEWORD(2,2), &WSAData);
  453.  
  454.  
  455.     initialisation();
  456.  
  457.     while (1) {
  458.         system("cls");
  459.         init();
  460.  
  461.         char choix = getch(); // fonctionnement propre -> recup touche
  462.  
  463.         if (choix == '1') {
  464.             jouer();
  465.         } else if (choix == '2') {
  466.             regles();
  467.         } else if (choix == '3'){
  468.             scoreboardaff();
  469.         } else if (choix == '4'){
  470.             credits();
  471.         } else if (choix == '5'){
  472.             reglages();
  473.         } else if (choix == 27){
  474.             break;
  475.         }
  476.     }
  477.  
  478.     /* On ferme la socket */
  479.     if(use_server){
  480.         closesocket(sockets.sock);
  481.     }
  482.     WSACleanup();
  483.  
  484. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement