|
Se suposa que hi ha 5 tipus de barco:
4 -d'una posició
3- de dos posicions
2- de tres posicions
1- de quatre posicions
a més, 3 mines d'una posició (que fan sortir del
joc).
Llavors, el tauler és de color:
blau - no disparat
vermell - aigua
verd - tocat
blanc - enfonsat (no sé si el blanc és com l'he
posat, però això és el de menys.
El meu nivell és tant alt que ni sé ben bé com funcionen els punters (i
teòricament els hauria d'usar aquí xD bé, n'uso un, però ni sé si funcionarà
jeje).
També s'accepten idees de com millorar-ho :D #include<stdio.h>
#include<time.h> #include<windows.h> #include<conio.h> int tamanys[13]={4,3,3,2,2,2,1,1,1,1,1,1,1}; //tamany dels barcos a colocar. int valors[13]={11,12,12,13,13,13,4,4,4,4,5,5,5}; //valor que li donarem als barcos-mines segons l'array 'tamany' bool colocar; int x,y,z; struct varco{ int eixx[5]; int eixy[5]; }posvarcos[6]; void genera_llavor_aleatori(){
time_t temps; int sem; temps=time( NULL ); sem=(int) temps % 5000; srand(sem); } int genera_aleatori_0_a_9(){ int num; num=rand()%10; return num; } int genera_aleatori_0_a_1(){ int num; num=rand()%2; return num; } void modifica_color (int color){ HANDLE h; h = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute (h,color); } void mostra_tauler ();
void comprova (); void prova_ple(); void genera_tauler (); void llegenda (); void genera_barco(); void inicia_matrius(); void inicia_matrius(int miniciar[10][10]){ varco *siniciar; int i,j; for (i=0; i<=9; i++) { if (i<6) //6 numero barcos de més duna posició {(siniciar+i)->eixx[4]=tamanys[i]; //eixx[4] = nombre de posicions 'no tocades' del vaixell. (siniciar+i)->eixy[4]=tamanys[i]; //eixy[4]= nombre de posicions del vaixell. } for (j=0; j<=9; j++) {miniciar[i][j]=0;} } } void genera_barco(int vgenerar[10][10], int max){
int j=0; while
(j<tamanys[max])
{ vgenerar[x][y]=valors[max]; if (max<=5) //si màx és menor/igual a 5, serà barco de vàries posicions, pel que també donarem valors a l'Struct de les posicions emprades. { posvarcos[max].eixx[j]=x; posvarcos[max].eixy[j]=y; } if (z==0) {x++;} else {y++;} j++; } } void llegenda (int punts){
printf("\n\n Tens %d punts!!!\n\n ",punts); modifica_color(BACKGROUND_RED); printf(" "); modifica_color(FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE); printf(" Aigua\n "); modifica_color(BACKGROUND_GREEN); printf(" "); modifica_color(FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE); printf(" Tocat\n "); modifica_color(BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE); printf(" "); modifica_color(FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE); printf(" Enfonsat\n "); modifica_color(BACKGROUND_BLUE); printf(" "); modifica_color(FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE); printf(" Posicio no probada\n\n"); } void genera_tauler(int tgenerat[10][10]){
int i=0, lmaxim=0; genera_llavor_aleatori(); while (lmaxim<=12) //total
barcos
{x=genera_aleatori_0_a_9(); y=genera_aleatori_0_a_9(); z=genera_aleatori_0_a_1(); i=0; colocar=true; prova_ple(tgenerat, lmaxim); if (colocar==true) {genera_barco(tgenerat, lmaxim); lmaxim++;} } // printf("x= %d y= %d \n",i,j); //mode trampes } void prova_ple(int tcom[10][10], int max){
int j=1; while (j<=tamanys[max]) { if (tcom[x][y]<=4 || x>9 || y>9) {j=20; colocar=false;} if (z==0) {x++;} else {y++;} j++; } } void comprova(int taula[10][10], int n){
int i; n=n-6; if (posvarcos[n].eixx[4]==1) { for(i=0; i<=(posvarcos[n].eixy[4]-1); i++) {taula[posvarcos[n].eixx[i]][posvarcos[n].eixy[i]]=3;} } else { posvarcos[n].eixx[4]=posvarcos[n].eixx[4]-1; taula[x][y]=2; } } void mostra_tauler(int matriu[10][10]){
int i, j; printf(" 0123456789 x\n"); for (i=0; i<=9; i++) {modifica_color(FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE); printf(" %d ",i); for (j=0; j<=9; j++) {if (matriu[i][j]==0 || matriu[i][j]<=4){ //res o barco amagat modifica_color(BACKGROUND_BLUE);} if (matriu[i][j]==1){ //fallada/aigua modifica_color(BACKGROUND_RED);} if (matriu[i][j]==2){ //tocat barco 1 ò més posicions modifica_color(BACKGROUND_GREEN);} if (matriu[i][j]==3){ //enfonsat barco 1 ò més posicions modifica_color(BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE);} printf("_"); } printf("\n"); } modifica_color(FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE); printf(" y \n\n"); } int main()
{int taulell[10][10]; int i=0,j=0, compro=0, marcador=0; //0=aigua; 1=fallat; 2=tocat; 3=enfonsat; 4=barco una posició; 5=mina;
//6=barco 4 posicios //7=8=barco 3 posicions //9=10=11=barco 2 posicions inicia_matrius(taulell);
/* fer eixos a 5/5? en cada eix una posició de la matriu on hi ha el baixell. s'hauria de deixar constància del numero de posicions de cada vaixell s'hauria de deixar constància del número de posicions encertades. comprovar si està a zero després d'haver-se restat l'encert. */ genera_tauler(taulell);
//inici joc while (compro!=20) { llegenda(marcador); mostra_tauler(taulell); //pregunta printf("En quina posicio vols provar sort?\n\n Eix x: "); scanf("%d",&j); printf("\n Eix y: "); scanf("%d",&i); //sortida if (j>9 || j<0 || i>9 || i<0 || compro==20 || taulell[i][j]==5){ printf("\n\nHas enfonsat %d vaixell/s i has tingut %d punts\n\n Prem qualsevol tecla per a sortir.\n",compro,marcador); compro=20;} //resposta else { if (taulell[i][j]==1){ //aigua taulell[i][j]=3; marcador=marcador+10; printf("\nAigua\n");} else if (taulell[i][j]==0){ //encert taulell[i][j]=2; compro++; printf("\nEnfonsat!!\n");} else if (taulell[i][j]==2 || taulell[i][j]==3 || taulell[i][j]==4){ //re-seleccionat printf("\nJa hi havies disparat!\n");} printf("\n\n continuar..."); } fflush(stdin); getch(); system("cls"); } } |
_______________________________________________ llista de correu de l'Internauta [email protected] http://zeus.internauta.net/mailman/listinfo/internauta
