Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.31 KB | None | 0 0
  1. /* ------------------------------------------------
  2. conqter.c v. 1.02 23/02/2017
  3. ------------------------------------------------
  4. Descrizione: Conquista del territorio
  5. Autore: Improta Nicola
  6. Matricola: 0124001479
  7. ------------------------------------------------ */
  8.  
  9.  
  10. /* --------------------------------
  11. Definizione librerie
  12. -------------------------------- */
  13.  
  14.  
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <time.h>
  18. #include <string.h>
  19.  
  20.  
  21. /* --------------------------------
  22. Definizione costanti
  23. -------------------------------- */
  24.  
  25.  
  26. #define NUM_GIOCATORI 3
  27. #define EXIT_SUCCESS 0 /* Programma eseguito con successo */
  28.  
  29.  
  30. /* --------------------------------
  31. Definizione strutture dati
  32. -------------------------------- */
  33.  
  34.  
  35. struct giocatore /* Struttura dati dei giocatori */
  36. {
  37. char nome[20];
  38. char cognome[20];
  39. char colore[5];
  40. unsigned int idGioc;
  41. unsigned int punteggio;
  42. };
  43.  
  44.  
  45. /* --------------------------------
  46. Definizione varibili globali
  47. -------------------------------- */
  48.  
  49.  
  50. struct giocatore vet[NUM_GIOCATORI]; /* Dati dei giocatori */
  51. unsigned int mappa[4][4]; /* Mappa */
  52. unsigned int classif[NUM_GIOCATORI]; /* Punt Classifica */
  53. unsigned int posiz[NUM_GIOCATORI]; /* Posizioni classifica */
  54.  
  55.  
  56. /* --------------------------------------------------------
  57. Nome: INITVAR
  58. Descrizione: Inizializzazione variabili
  59. Var. di ingresso: Nessuna
  60. Var. di uscita: Nessuna
  61. Ritorno funzione: Nessuno
  62. -------------------------------------------------------- */
  63.  
  64.  
  65. void INITVAR ()
  66. {
  67. unsigned int i, j;
  68.  
  69. /* Inizializzazione mappa */
  70. for (i=1;i<=4;i++)
  71. mappa[i][j] = 0;
  72.  
  73. /* Inizializzazione dati giocatori */
  74. strcpy( vet[0].nome, "Nome 1");
  75. strcpy( vet[0].cognome, "Cognome 1");
  76. strcpy( vet[0].colore, "Rosso");
  77. vet[0].idGioc = 1;
  78. vet[0].punteggio = 0;
  79.  
  80. strcpy( vet[1].nome, "Nome 2");
  81. strcpy( vet[1].cognome, "Cognome 2");
  82. strcpy( vet[1].colore, "Blu");
  83. vet[1].idGioc = 2;
  84. vet[1].punteggio = 0;
  85.  
  86. strcpy( vet[2].nome, "Nome 3");
  87. strcpy( vet[2].cognome, "Cognome 3");
  88. strcpy( vet[2].colore, "Verde");
  89. vet[2].idGioc = 3;
  90. vet[0].punteggio = 0;
  91.  
  92. /* Inizializza generatore di numeri casuali */
  93. srand(time(NULL));
  94. }
  95.  
  96.  
  97. /* --------------------------------------------------------
  98. Nome: INPUTGIOCATORE
  99. Descrizione: Legge dati giocatori da console
  100. Var. di ingresso: Nessuna
  101. Var. di uscita: struct giocatore vet[NUM_GIOCATORI]
  102. Ritorno funzione: Nessuno
  103. -------------------------------------------------------- */
  104.  
  105.  
  106. void INPUTGIOCATORI ()
  107. {
  108. unsigned int i;
  109.  
  110. printf("Corso di Laurea in Informatica\n");
  111. printf("Anno Accademico 2016-2017\n");
  112. printf("Corso di Programmazione I e Laboratorio Programmazione I\n");
  113. printf("--------------------------------------------------------\n");
  114. printf("Progetto di Esame di Laboratorio\n");
  115. printf("Conquista del territorio\n");
  116. printf("--------------------------------------------------------\n");
  117. printf("Autore: IMPROTA Nicola\n");
  118. printf("Matricola: 0124001479\n");
  119. printf("--------------------------------------------------------\n\n");
  120.  
  121. printf("Inserire nome e cognome dei giocatori.\n\n");
  122.  
  123. for(i=1;i<= NUM_GIOCATORI;i++)
  124. {
  125. printf("Giocatore %d - Colore %s\n",i, vet[i-1].colore);
  126.  
  127. printf("Inserisci il Cognome: ");
  128. scanf("%s",vet[i-1].cognome);
  129.  
  130. printf("Inserisci il Nome: ");
  131. scanf("%s",vet[i-1].nome);
  132.  
  133. printf("\n");
  134. }
  135. }
  136.  
  137.  
  138. /* --------------------------------------------------------
  139. Nome: CREAMAPPA
  140. Descrizione: Crea campo di gioco come mappa 4x4
  141. Var. di ingresso: Nessuna
  142. Var. di uscita: unsigned int mappa[4][4];
  143. Ritorno funzione: Nessuno
  144. -------------------------------------------------------- */
  145.  
  146.  
  147. void CREAMAPPA ()
  148. {
  149. /* per il momento una mappa fissa. Deve essere generata random */
  150.  
  151. mappa[0][0] = 1;
  152. mappa[0][1] = 1;
  153. mappa[0][2] = 1;
  154. mappa[0][3] = 3;
  155.  
  156. mappa[1][0] = 1;
  157. mappa[1][1] = 1;
  158. mappa[1][2] = 1;
  159. mappa[1][3] = 3;
  160.  
  161. mappa[2][0] = 2;
  162. mappa[2][1] = 2;
  163. mappa[2][2] = 3;
  164. mappa[2][3] = 3;
  165.  
  166. mappa[3][0] = 2;
  167. mappa[3][1] = 2;
  168. mappa[3][2] = 3;
  169. mappa[3][3] = 3;
  170. }
  171.  
  172.  
  173. /* ----------------------------------------------------------------------------
  174. Nome: GIOCA
  175. Descrizione: gioca partita singola, aggiorna la mappa
  176. e incrementa punteggio vincitore
  177. Var. di ingresso: Nessuna
  178. Var. di uscita: struct giocatore vet[NUM_GIOCATORI];
  179. unsigned int mappa[4][4];
  180. Ritorno funzione: Nessuno
  181. ---------------------------------------------------------------------------- */
  182.  
  183.  
  184. void GIOCA ()
  185. {
  186. /* contatori cicli */
  187. unsigned int i, j;
  188.  
  189. /* Indice Attaccante, Difensore, Vincitore, Perdente
  190. =1 per giocatore 1, =2 per giocatore 2, =3 per giocatore 3 */
  191. unsigned int indAtt, indDif, indVin, indPer;
  192.  
  193. /* risultato lancio del dado Attaccante, Difensore */
  194. unsigned int dadoAtt, dadoDif;
  195.  
  196. /* init variabili */
  197. indAtt = 0;
  198. indDif = 0;
  199. indVin = 0;
  200. indPer = 0;
  201.  
  202. dadoAtt = 0;
  203. dadoDif = 0;
  204.  
  205. /* Sceglie a caso il primo attaccante */
  206. indAtt = rand()%3+1;
  207. switch(indAtt){
  208. case 1:
  209. printf("l'attaccante e' il rosso\n");
  210. break;
  211. case 2:
  212. printf("l'attaccante e' il verde\n");
  213. break;
  214. case 3:
  215. printf("l'attaccante e' il blu\n");
  216. break;
  217. }
  218. /* Sceglie un difensore contiguo */
  219. i = 0;
  220. while ((i<4) && (indDif == 0))
  221. {
  222. j = 0;
  223. while ((j<4) && (indDif == 0))
  224. {
  225. if (mappa[i][j] == indAtt)
  226. /* trovato cella attaccante, cerco il difensore contiguo */
  227. {
  228. if ((j>0) && (mappa[i][j-1] != indAtt))
  229. {
  230. indDif = mappa[i][j-1];
  231. }
  232. else if ((j<3) && (mappa[i][j+1] != indAtt))
  233. {
  234. indDif = mappa[i][j+1];
  235. }
  236. else if ((i>0) && (mappa[i-1][j] != indAtt))
  237. {
  238. indDif = mappa[i-1][j];
  239. }
  240. else if ((i<3) && (mappa[i+1][j] != indAtt))
  241. {
  242. indDif = mappa[i+1][j];
  243. }
  244. }
  245. j++;
  246. }
  247. i++;
  248. }
  249.  
  250. /* Primo Lancio dadi */
  251. dadoAtt = rand()%6 + 1;
  252. dadoDif = rand()%6 + 1;
  253.  
  254. if (dadoAtt > dadoDif)
  255. {
  256. printf("ha vinto l'attaccante\n\n");
  257. /* ha vinto l attaccante */
  258. indVin = indAtt;
  259. indPer = indDif;
  260. }
  261. else
  262. {
  263. printf("ha vinto il difensore\n\n");
  264. /* ha vinto il difensore */
  265. indVin = indDif;
  266. indPer = indAtt;
  267. }
  268.  
  269. /* Il vincitore conquista i territori del perdente */
  270. for (i=0; i<4; i++)
  271. {
  272. for (j=0; j<4; j++)
  273. {
  274. if (mappa[i][j] == indPer)
  275. {
  276. mappa[i][j] = indVin;
  277. }
  278. }
  279. }
  280.  
  281. /* Il primo vincitore é il secondo attaccante */
  282. indAtt = indVin;
  283. indDif = 6 - indVin - indPer;
  284.  
  285. /* Secondo Lancio dadi */
  286. dadoAtt = rand()%6 + 1;
  287. dadoDif = rand()%6 + 1;
  288.  
  289. if (dadoAtt > dadoDif)
  290. {
  291. /* ha vinto l attaccante */
  292. indVin = indAtt;
  293. indPer = indDif;
  294. }
  295. else
  296. {
  297. /* ha vinto il difensore */
  298. indVin = indDif;
  299. indPer = indAtt;
  300. }
  301.  
  302. /* Il vincitore conquista i territori del perdente */
  303. for (i=0; i<4; i++)
  304. {
  305. for (j=0; j<4; j++)
  306. {
  307. if (mappa[i][j] == indPer)
  308. {
  309. mappa[i][j] = indVin;
  310. }
  311. }
  312. }
  313.  
  314. /* Incrementa punteggio vincitore */
  315. vet[indVin-1].punteggio++;
  316. }
  317.  
  318.  
  319. /* --------------------------------------------------------
  320. Nome: CLASSIFICA
  321. Descrizione: Calcola classifica e la manda a video
  322. Var. di ingresso: Nessuna
  323. Var. di uscita: Nessuna
  324. Ritorno funzione: Nessuno
  325. -------------------------------------------------------- */
  326.  
  327.  
  328. void CLASSIFICA()
  329. {
  330. unsigned int ii, jj;
  331. unsigned int max, temp;
  332.  
  333. for (ii=0; ii<3; ii++)
  334. {
  335. classif[ii] = vet[ii].punteggio;
  336. posiz[ii] = ii;
  337. }
  338.  
  339. for (ii=0; ii<2; ii++)
  340. {
  341. max = ii;
  342.  
  343. for (jj=ii+1; jj<3; jj++)
  344. {
  345. if (classif[jj] > classif[max])
  346. {
  347. max = jj;
  348. }
  349. }
  350.  
  351. temp = classif[max];
  352. classif[max] = classif[ii];
  353. classif[ii] = temp;
  354.  
  355. temp = posiz[max];
  356. posiz[max] = posiz[ii];
  357. posiz[ii] = temp;
  358.  
  359. }
  360.  
  361. printf("1. Posto - Giocatore %d - Colore %s - Punti %d\n", posiz[0]+1, vet[posiz[0]].colore, vet[posiz[0]].punteggio);
  362. printf("2. Posto - Giocatore %d - Colore %s - Punti %d\n", posiz[1]+1, vet[posiz[1]].colore, vet[posiz[1]].punteggio);
  363. printf("3. Posto - Giocatore %d - Colore %s - Punti %d\n", posiz[2]+1, vet[posiz[2]].colore, vet[posiz[2]].punteggio);
  364.  
  365. }
  366.  
  367.  
  368. /* --------------------------------------------------------
  369. Nome: main
  370. Descrizione: Main programma applicativo
  371. Var. di ingresso: Nessuna
  372. Var. di uscita: Nessuna
  373. Ritorno funzione: EXIT_SUCCESS se esecuzione corretta
  374. -------------------------------------------------------- */
  375.  
  376.  
  377. int main ()
  378. {
  379. unsigned int kk;
  380.  
  381. INITVAR();
  382. INPUTGIOCATORI();
  383.  
  384. for (kk=1; kk<=100; kk++)
  385. {
  386. CREAMAPPA();
  387. GIOCA();
  388. }
  389.  
  390. CLASSIFICA();
  391.  
  392. kk = kk; /* per mettere breakpoint */
  393.  
  394. return EXIT_SUCCESS;
  395. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement