Advertisement
Guest User

Hundir la flota, C y Conio

a guest
Jan 30th, 2013
379
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.07 KB | None | 0 0
  1. /////////////////////////////////////
  2. //                                 //
  3. // Marc González Planes | 1WOPE    //
  4. //                                 //
  5. //      HUNDIR_LA_FLOTA            //
  6. //                                 //
  7. /////////////////////////////////////
  8.  
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <conio.h>
  13. #include <time.h>
  14. #include <windows.h>
  15.  
  16. #define num_filas 10                
  17. #define num_columnas 10
  18.  
  19.           // Variables
  20. int matriz [num_columnas] [num_filas];
  21. int c,f;
  22. int i,j;
  23. int d_rand;
  24.  
  25.            // Funcions
  26. int header(); //Feta per que sigui més simple de llegir, igual que la columna
  27. int columna();
  28. int direccio(); //Random per saber cap on va el vaixell
  29. int margen(int x,int y);//Comproba els margens i si esta vuida o no
  30.  
  31. int main (){
  32.     srand((unsigned) time(NULL));     //Semilla a 0
  33.  
  34.     header();
  35.    
  36. /* GENERO LA MATRIU AMB TOT A 0 */      
  37.    for(i=0;i<num_columnas;i++){
  38.     columna();  
  39.      for(j=0;j<num_filas;j++){
  40.         matriz[i][j] = 0;
  41.         printf("%c",254); // Coloco els []
  42.           }
  43.      putchar('\n');
  44.      }
  45.          
  46. /* Genero els vaixells */
  47.    direccio();//1-Horitzontal 0-Vertical
  48. int v3=0; //Sumare cuan estigui complet sino el while seguira fent combinacions
  49.    while(v3<=1){
  50.         f=((rand())%(num_filas-2));//-2 serveix per evitar els voltants
  51.         c=((rand())%(num_columnas-2));
  52.                                
  53.    if(d_rand==0){//vertical
  54.       if(margen(c,f)==0 && margen(c,f+1)==0 && margen(c,f+2)==0){
  55.          matriz[c][f]='X';
  56.          matriz[c][f+1]='X';
  57.          matriz[c][f+2]='X';
  58.          v3++;
  59.             }
  60.         }
  61.    if(d_rand==1){//horizontal
  62.       if(margen(c,f)==0 && margen(c+1,f)==0 && margen(c+2,f)==0){
  63.          matriz[c][f]='X';
  64.          matriz[c+1][f]='X';
  65.          matriz[c+2][f]='X';
  66.          v3++;
  67.             }
  68.          }
  69.     }
  70.    
  71. int v2=0;//Numero de v2
  72.     while(v2<=2){
  73.           f=((rand())%(num_filas-1));//-2 serveix per evitar els voltants
  74.           c=((rand())%(num_columnas-1));
  75.                  
  76.     if(d_rand==0){//vertical
  77.        if(margen(c,f)==0 && margen(c,f+1)==0){
  78.           matriz[c][f]='Y';
  79.           matriz[c][f+1]='Y';
  80.           v2++;
  81.              }
  82.          }
  83.     if(d_rand==1){//horizontal
  84.        if(margen(c,f)==0 && margen(c+1,f)==0){
  85.           matriz[c][f]='Y';
  86.           matriz[c+1][f]='Y';
  87.           v2++;
  88.               }
  89.         }
  90.      }
  91. int v1=0;
  92.     while(v1<=3){f=((rand())%(num_filas));//-2 serveix per evitar els voltants
  93.           c=((rand())%(num_columnas));
  94.                  
  95.     if(d_rand==0){//vertical
  96.       if(margen(c,f)==0){
  97.          matriz[c][f]='Z';                    
  98.          v1++;
  99.              }
  100.          }
  101.     if(d_rand==1){//horizontal
  102.        if(margen(c,f)==0){
  103.           matriz[c][f]='Z';
  104.           v1++;
  105.               }
  106.           }
  107.         }          
  108. /*Dibuix*/
  109.   header();
  110.     for(i=0;i<num_filas;i++){  
  111.       columna();
  112.        for(j=0;j<num_columnas;j++){
  113.         switch(matriz[j][i]){
  114.         case 'X':
  115.            printf("%2c",254);
  116.             break;
  117.         case 'Y':
  118.            printf("%2c",254);
  119.             break;
  120.         case 'Z':
  121.            printf("%2c",254);
  122.             break;
  123.         default:
  124.             printf("%2c",254);
  125.             }            
  126.           }
  127.           putchar('\n');
  128.     }        
  129.  
  130.  
  131. // Jugar
  132.  
  133. int trets=0; // Numero de trets, contador 15-> Or 20->Plata 25->Bronze +25->"Gracies per participar"
  134. int vaixells=0; //Numero total de vaixells, 'Contador'
  135. int t_c=9999; // On apunto en la columna
  136. int t_f=9999; // On apunto en la fila
  137. int linea=25; //Per evitar grafics
  138.  
  139. //Num vaixells?
  140.  
  141. gotoxy(5,17);
  142. printf("\tInstruccions:    Primer valor-> Columna\n\t\t\t Segon valor -> Fila\n\t\t\t Format numeric\n\t\t\t Exemple: F=1 C=3\n\n");
  143.  
  144. vaixells=(v3*3)+(v2*2)+v1;
  145.  
  146.  
  147. while(vaixells>=1){
  148.       trets++; // Si toco vaixell tret--!!!
  149. pp:   gotoxy(5,linea);
  150.       textcolor(752);
  151.       printf("Escolleix fila i columna a la que disparar: ");//1 al 10
  152.       linea=linea+2;                  
  153.       fflush(stdin);
  154.       if(linea == 35) linea=25; // Evitar que no es vegui el tauler tota la estona
  155.       scanf("%d %d",&t_c,&t_f);//vector1[0],vector1[1]    
  156.       t_c--;
  157.       t_f--;
  158.       gotoxy((t_f*2+18),(t_c+5));
  159.                    
  160. switch(matriz[t_c][t_f]){
  161.         case 'X':
  162.         textcolor(28);
  163.             printf("X");
  164.             vaixells--;
  165.             trets--;          
  166.             break;
  167.         case 'Y':
  168.         textcolor(28);
  169.             printf("Y");
  170.             vaixells--;
  171.             trets--;            
  172.             break;
  173.         case 'Z':
  174.         textcolor(28);
  175.             printf("Z");
  176.             vaixells--;
  177.             trets--;            
  178.             break;
  179.         default:
  180.         textcolor(9);
  181.             printf("%c",254);
  182.             break;
  183.             }      
  184.            
  185.             gotoxy(1,36);
  186.             printf("\tNumero de vaixells restants: %d\n",vaixells);
  187.             printf("\tNumero de trets totals: %d\n",trets);
  188.            
  189.                        }
  190.           gotoxy(5,40);    
  191.           textcolor(225);
  192.   if( trets<25)printf("Enhorabona, obtens la medalla d'or amb %d trets",trets);    
  193.   else if ( trets >= 25 && trets<=50)printf("Enhorabona, obtens la medalla de plata amb %d trets",trets);
  194.   else if ( trets>51)printf("Enhorabona, obtens la medalla de bronce amb %d trets",trets);
  195.     getchar();      
  196.     getchar();              
  197.     getchar();
  198.     getchar();
  199. }
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208. /* FUNCIONS */
  209.  
  210. int header(){
  211.     int lletra='A';
  212.     gotoxy(18,3);
  213.     while(lletra<'K'){
  214.        printf("%-2c",lletra);
  215.        lletra++;
  216.                       }
  217.                       printf("\n\n");
  218. }
  219.  
  220. int columna(){
  221.  int x=0;
  222.  x=i+1;  
  223.  printf("Fila num: %d \t",x);
  224. }
  225.  
  226. int direccio(){    
  227.     d_rand=(rand()%2); //0-Vertical 1-Horitzontal
  228.     return d_rand;
  229. }
  230.  
  231. int margen(int x , int y){
  232.  int r = 0;
  233.     int i,j;
  234.     for(i=(x-1);i<(x+2);i++){
  235.         for(j=(y-1);j<(y+2);j++){
  236.             if(matriz[i][j]!=0) r = 1;
  237.         }
  238.     }
  239.     return r;
  240. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement