+#include <stdlib.h>\r
+#include <process.h>\r
+#include <time.h>\r
+#include <stdio.h>\r
+#include <conio.h>\r
+#include <string.h>\r
+\r
+struct kreatura\r
+{\r
+ char nazwa[256];\r
+ unsigned short atak;\r
+ unsigned short obrona;\r
+ unsigned short hp;\r
+ unsigned char zabity;\r
+ unsigned char okaleczony;\r
+ unsigned char boss;\r
+};\r
+\r
+unsigned short kostka();\r
+\r
+unsigned char atak(\r
+ struct kreatura *gracz1,\r
+ struct kreatura *gracz2,\r
+ unsigned char *krytyk,\r
+ unsigned char interakt);\r
+\r
+unsigned char walka(\r
+ struct kreatura *gracz1,\r
+ struct kreatura *gracz2,\r
+ unsigned short hp,\r
+ unsigned char interakt);\r
+\r
+int main(\r
+ int argc,\r
+ char *argv[]);\r
+\r
+unsigned short kostka()\r
+{\r
+ return rand()%6+1;\r
+}\r
+\r
+unsigned char atak(\r
+ struct kreatura *gracz1,\r
+ struct kreatura *gracz2,\r
+ unsigned char *krytyk,\r
+ unsigned char interakt)\r
+{\r
+ unsigned short atak_k, obrona_k, atak_n, obrona_n;\r
+ \r
+ atak_k=kostka();\r
+ obrona_k=kostka();\r
+ \r
+ atak_n = gracz1->atak + atak_k;\r
+ obrona_n = gracz2->obrona + obrona_k;\r
+ \r
+ if(interakt)\r
+ fprintf(stdout,\r
+ "Atakuje %s\n Atak: %hu + %hu = %hu.\n Obrona:%hu + %hu = %hu.\n",\r
+ gracz1->nazwa,\r
+ atak_k,\r
+ gracz1->atak,\r
+ atak_n,\r
+ obrona_k,\r
+ gracz2->obrona,\r
+ obrona_n);\r
+ \r
+ if(atak_k==6)\r
+ {\r
+ if(interakt)\r
+ fputs("Trafia krytycznie",stdout);\r
+ ++(*krytyk);\r
+ if(((*krytyk) > 1) || (gracz1->boss))\r
+ {\r
+ if(interakt)\r
+ fputs(" i zabija",stdout);\r
+ gracz2->hp=0;\r
+ gracz2->zabity=1;\r
+ }\r
+ else\r
+ --(gracz2->hp);\r
+ }\r
+ else\r
+ {\r
+ \r
+ if(atak_n > obrona_n)\r
+ {\r
+ if(interakt)\r
+ fputs("Trafia",stdout);\r
+ if(*krytyk)\r
+ {\r
+ if(interakt)\r
+ fputs(" i okalecza",stdout);\r
+ gracz2->hp=0;\r
+ gracz2->okaleczony=1;\r
+ }\r
+ else\r
+ --(gracz2->hp);\r
+ }\r
+ else\r
+ {\r
+ if(interakt)\r
+ fputs("Nie trafia",stdout);\r
+ }\r
+ (*krytyk)=0;\r
+ }\r
+ if(gracz2->hp==0 && (!(*krytyk) || gracz2->okaleczony || gracz2->zabity) )\r
+ {\r
+ if(interakt)\r
+ fprintf(stdout,", %s wygrywa.\n\n",gracz1->nazwa);\r
+ return 1;\r
+ }\r
+ else\r
+ {\r
+ if (interakt)\r
+ fprintf(stdout,", %s ma %hu hp.\n\n",gracz2->nazwa,gracz2->hp);\r
+ return 0;\r
+ }\r
+}\r
+\r
+unsigned char walka(\r
+ struct kreatura *gracz1,\r
+ struct kreatura *gracz2,\r
+ unsigned short hp,\r
+ unsigned char interakt)\r
+{\r
+ unsigned char pierwszy=0;\r
+ unsigned char krytyk=0;\r
+ unsigned short runda;\r
+ \r
+ struct kreatura *atakuje, *broni;\r
+\r
+ if(!(gracz1->boss))\r
+ gracz1->hp=hp;\r
+ if(!(gracz2->boss))\r
+ gracz2->hp=hp;\r
+ gracz1->zabity=0;\r
+ gracz2->zabity=0;\r
+ gracz1->okaleczony=0;\r
+ gracz2->okaleczony=0;\r
+ \r
+ for(runda=1;1;++runda)\r
+ {\r
+ if(interakt)\r
+ {\r
+ getch();\r
+ fprintf(stdout,"RUNDA %hu\n\n",runda);\r
+ }\r
+ \r
+ if(!pierwszy)\r
+ {\r
+ atakuje=gracz1;\r
+ broni=gracz2;\r
+ }\r
+ else\r
+ {\r
+ atakuje=gracz2;\r
+ broni=gracz1;\r
+ }\r
+ \r
+ if(atak(atakuje, broni, &krytyk, interakt))\r
+ return pierwszy;\r
+ \r
+ if(!krytyk)\r
+ pierwszy=!pierwszy;\r
+ }\r
+} \r
+\r
+int main(\r
+ int argc,\r
+ char *argv[])\r
+{\r
+ struct kreatura gracz1;\r
+ struct kreatura gracz2;\r
+ char wy;\r
+ \r
+ unsigned short l;\r
+ unsigned short serduszka;\r
+ \r
+ unsigned long symulacje;\r
+ unsigned long iter;\r
+ unsigned long wygrane1;\r
+ unsigned long wygrane2;\r
+ unsigned long zabity1;\r
+ unsigned long zabity2;\r
+ unsigned long okaleczony1;\r
+ unsigned long okaleczony2;\r
+ \r
+ char napis[256];\r
+ \r
+ srand (time (NULL) + getpid());\r
+ setvbuf(stdout, NULL, _IONBF, 0);\r
+ //setvbuf(stdin, NULL, _IONBF, 0);\r
+ \r
+ fputs("KREATURY 3000",stdout);\r
+ \r
+ while(1)\r
+ {\r
+ fputs("\n\n A - Walka - 2\ 3\ 3\n B - Walka - 3\ 3\ 3\ 3\n C - Boss - 2\ 3\ 3\n D - Boss - 3\ 3\ 3\ 3\n E - Symulacje - 2\ 3\ 3\n F - Symulacje - 3\ 3\ 3\ 3\n",stdout);\r
+ do\r
+ { \r
+ wy=getch();\r
+ wy|=0x20;\r
+ }while (wy<'a'||wy>'f');\r
+ \r
+ fflush(stdin);\r
+ if(wy=='f'||wy=='e')\r
+ {\r
+ fputs("\nliczba symulacji: ",stdout);\r
+ fgets(napis,256,stdin);\r
+ symulacje=atol(napis);\r
+ }\r
+ \r
+ if(wy=='a'||wy=='e'||wy=='c')\r
+ serduszka=2;\r
+ else\r
+ serduszka=3;\r
+ \r
+ if(wy=='c'||wy=='d')\r
+ {\r
+ gracz2.boss=1;\r
+ gracz2.hp=serduszka;\r
+ fputs("\nboss:\n",stdout);\r
+ fputs("nazwa: ",stdout);\r
+ fgets(gracz2.nazwa,256,stdin);\r
+ l=strlen(gracz2.nazwa)-1;\r
+ if(gracz2.nazwa[l]=='\n')\r
+ gracz2.nazwa[l]='\0';\r
+ \r
+ fputs("atak: ",stdout);\r
+ fgets(napis,256,stdin);\r
+ gracz2.atak=atoi(napis);\r
+ \r
+ fputs("obrona:",stdout);\r
+ fgets(napis,256,stdin);\r
+ gracz2.obrona=atoi(napis);\r
+ }\r
+ else\r
+ {\r
+ gracz1.boss=0;\r
+ fputs("\nGracz1:\n",stdout);\r
+ if(wy=='b'||wy=='a')\r
+ {\r
+ fputs("nazwa: ",stdout);\r
+ fgets(gracz1.nazwa,256,stdin);\r
+ l=strlen(gracz1.nazwa)-1;\r
+ if(gracz1.nazwa[l]=='\n')\r
+ gracz1.nazwa[l]='\0';\r
+ }\r
+ \r
+ fputs("atak: ",stdout);\r
+ fgets(napis,256,stdin);\r
+ gracz1.atak=atoi(napis);\r
+ \r
+ fputs("obrona:",stdout);\r
+ fgets(napis,256,stdin);\r
+ gracz1.obrona=atoi(napis);\r
+ \r
+ gracz2.boss=0;\r
+ fputs("\nGracz2:\n",stdout);\r
+ if(wy=='b'||wy=='a')\r
+ {\r
+ fputs("nazwa: ",stdout);\r
+ fgets(gracz2.nazwa,256,stdin);\r
+ l=strlen(gracz2.nazwa)-1;\r
+ if(gracz2.nazwa[l]=='\n')\r
+ gracz2.nazwa[l]='\0';\r
+ }\r
+ \r
+ fputs("atak: ",stdout);\r
+ fgets(napis,256,stdin);\r
+ gracz2.atak=atoi(napis);\r
+ \r
+ fputs("obrona:",stdout);\r
+ fgets(napis,256,stdin);\r
+ gracz2.obrona=atoi(napis);\r
+ fputs("\n",stdout);\r
+ }\r
+ \r
+ fflush(stdin);\r
+ \r
+ if(wy=='c'||wy=='d')\r
+ {\r
+ for(iter=1; gracz2.hp>0; ++iter)\r
+ {\r
+ gracz1.boss=0;\r
+ fprintf(stdout,"\nGracz%lu:\n",iter);\r
+ \r
+ fputs("nazwa: ",stdout);\r
+ fgets(gracz1.nazwa,256,stdin);\r
+ l=strlen(gracz1.nazwa)-1;\r
+ if(!l)\r
+ {\r
+ fprintf(stdout,"\n%s wygrywa.\n\n",gracz2.nazwa);\r
+ break;\r
+ }\r
+ if(gracz1.nazwa[l]=='\n')\r
+ gracz1.nazwa[l]='\0';\r
+ \r
+ fputs("atak: ",stdout);\r
+ fgets(napis,256,stdin);\r
+ gracz1.atak=atoi(napis);\r
+ \r
+ fputs("obrona:",stdout);\r
+ fgets(napis,256,stdin);\r
+ gracz1.obrona=atoi(napis);\r
+ \r
+ fputs("\n\nWALKA:\n\n",stdout);\r
+ walka(&gracz1, &gracz2, 1, 1);\r
+ getch();\r
+ }\r
+ }\r
+ \r
+ else if(wy=='f'||wy=='e')\r
+ {\r
+ \r
+ printf("%s","\nSYMULACJA:");\r
+ wygrane1=0;\r
+ wygrane2=0;\r
+ zabity1=0;\r
+ zabity2=0;\r
+ okaleczony1=0;\r
+ okaleczony2=0;\r
+ for(iter=0;iter<symulacje;++iter)\r
+ {\r
+ if(walka(&gracz1, &gracz2, serduszka, 0))\r
+ {\r
+ ++wygrane2;\r
+ if(gracz1.zabity)\r
+ ++zabity1;\r
+ if(gracz1.okaleczony)\r
+ ++okaleczony1;\r
+ }\r
+ else\r
+ {\r
+ ++wygrane1;\r
+ if(gracz2.zabity)\r
+ ++zabity2;\r
+ if(gracz2.okaleczony)\r
+ ++okaleczony2;\r
+ }\r
+ if((iter&0xffff)==0xffff)\r
+ putchar('.');\r
+ }\r
+ fprintf(stdout,\r
+ "\n\nGracz 1 wygrywa %0.3f%%, w tym %0.3f%% zabija, a %0.3f%% okalecza.\nGracz 2 wygrywa %0.3f%%, w tym %0.3f%% zabija, a %0.3f%% okalecza.\nZabicia: %0.3f%%, okaleczenia: %0.3f%%\n\n",\r
+ ((float)wygrane1)*100/((float)symulacje),\r
+ ((float)zabity2)*100/((float)symulacje),\r
+ ((float)okaleczony2)*100/((float)symulacje),\r
+ ((float)wygrane2)*100/((float)symulacje),\r
+ ((float)zabity1)*100/((float)symulacje),\r
+ ((float)okaleczony1)*100/((float)symulacje),\r
+ ((float)(zabity2+zabity1))*100/((float)symulacje),\r
+ ((float)(okaleczony2+okaleczony1))*100/((float)symulacje));\r
+ getch();\r
+\r
+ }\r
+ else\r
+ {\r
+ fputs("\nWALKA:\n\n",stdout);\r
+ walka(&gracz1, &gracz2, serduszka, 1);\r
+ getch();\r
+ }\r
+ fputs("Jeszcze raz? (T/N)",stdout);\r
+ do\r
+ { \r
+ wy=getch();\r
+ wy|=0x20;\r
+ }while ((wy!='t')&&(wy!='n'));\r
+ if(wy=='n')\r
+ break;\r
+ }\r
+ return(0);\r
+}\r