From 92253b2162706dc02ebad2d2809879b192340a0b Mon Sep 17 00:00:00 2001 From: Shadow15510 Date: Mon, 24 May 2021 09:33:41 +0200 Subject: [PATCH] Premier commit --- README.md | 88 ++++++ Sources/CMakeLists.txt | 41 +++ Sources/assets-fx/fonts/._plague.png | Bin 0 -> 4096 bytes Sources/assets-fx/fonts/plague.png | Bin 0 -> 1604 bytes Sources/assets-fx/fxconv-metadata.txt | 3 + Sources/assets-fx/icon-fx.png | Bin 0 -> 1375 bytes Sources/assets-fx/img/.DS_Store | Bin 0 -> 6148 bytes Sources/assets-fx/img/._.DS_Store | Bin 0 -> 4096 bytes Sources/assets-fx/img/._avions.png | Bin 0 -> 4096 bytes Sources/assets-fx/img/._fonds.png | Bin 0 -> 4096 bytes Sources/assets-fx/img/._muta.png | Bin 0 -> 4096 bytes Sources/assets-fx/img/._pieces.png | Bin 0 -> 4096 bytes Sources/assets-fx/img/._titre.png | Bin 0 -> 4096 bytes Sources/assets-fx/img/avions.png | Bin 0 -> 1509 bytes Sources/assets-fx/img/fonds.png | Bin 0 -> 11163 bytes Sources/assets-fx/img/muta.png | Bin 0 -> 4858 bytes Sources/assets-fx/img/pieces.png | Bin 0 -> 8760 bytes Sources/assets-fx/img/titre.png | Bin 0 -> 3894 bytes Sources/src/main.c | 428 ++++++++++++++++++++++++++ 19 files changed, 560 insertions(+) create mode 100644 README.md create mode 100644 Sources/CMakeLists.txt create mode 100644 Sources/assets-fx/fonts/._plague.png create mode 100644 Sources/assets-fx/fonts/plague.png create mode 100644 Sources/assets-fx/fxconv-metadata.txt create mode 100644 Sources/assets-fx/icon-fx.png create mode 100644 Sources/assets-fx/img/.DS_Store create mode 100644 Sources/assets-fx/img/._.DS_Store create mode 100644 Sources/assets-fx/img/._avions.png create mode 100644 Sources/assets-fx/img/._fonds.png create mode 100644 Sources/assets-fx/img/._muta.png create mode 100644 Sources/assets-fx/img/._pieces.png create mode 100644 Sources/assets-fx/img/._titre.png create mode 100644 Sources/assets-fx/img/avions.png create mode 100644 Sources/assets-fx/img/fonds.png create mode 100644 Sources/assets-fx/img/muta.png create mode 100644 Sources/assets-fx/img/pieces.png create mode 100644 Sources/assets-fx/img/titre.png create mode 100644 Sources/src/main.c diff --git a/README.md b/README.md new file mode 100644 index 0000000..c3a1686 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# Plague inc + +## Présentation + +De l'Anglais 'Plague' virus, ou peste et 'inc' diminutif de 'incorporated' peut être traduit par coopérative ou entreprise. Vous voila donc plongé dans 'L'Entreprise du Virus' un nom digne de 1984 : 'Le Ministère des Virus et de la Régulation Démographique' Ça nous fait un superbe acronyme : MVRD. J'aurais pu rajouter 'Et de la Santé Publique' on tape dans du très haut niveau là : MVRDESP aussi… Les Humains sont tellement fragiles, protégeons-les ! La plus grande menace pour l'Homme étant l'Homme, faites une bonne action : jouez à ce jeu ! + +Plague inc est donc un jeu de stratégie où le but est de réduire l'humanité à néant… Simple ? Non ! Il vous faudra manipuler avec dextérité et prudence un virus pour anéantir des humains qui ne sont pas super collaboratifs… Pire, ces petits rigolos veulent sauver leurs peaux et recherchent activement un remède à ce mystérieux virus inconnu… + +## Contrôles + +Lancez le jeu, et pressez n'importe quelle touche pour passer l'écran principal. Une fois sur l'écran représentant la Terre, plusieurs choix s'offrent à vous : + - [OPTN] permet d'afficher / cacher la barre en dessous du monde qui vous affiche vos points ADN et la barre de recherche des humains. + - [VARS] permet de passer au gros du jeu : les mutations. Ce menu vous affiche vos points ADN, mais aussi les mutations sélectionnées ainsi que vos point de contagion, de sévérité, et de létalité. Dans ce menu, vous pouvez modifier tout cela. + - [x^2] permet d'accéder au menu statistique qui vous affiche les stats sur les humains. La barre symbolise la popuation totale : donc la somme de toute les barre doit donné une seule barre entière. + +De manière générale, si vous êtes perdu, [EXIT] vous ramènera toujours sur la mappemonde. + +Dans le menu des mutations, vous pouvez modifier vos caractéristiques via les touches F1 à F6 comme suit : + - [F1] sert à changer les symptômes de votre maladie + - [F3] sert à changer les capacités d'adaptation de votre maladie + - [F5] sert à modifier les moyens de transmission de votre maladie + - [F6] sert à revenir au menu principal avec la mappemonde + +## Mutations + +Dans ce jeu, vous aurez le choix entre plusieurs mutations pour faire le plus de dégât possible parmis les humains ! Comme dans le jeu d'origine, celles-ci sont divisées en 3 catégories : Symptômes, Capacités, et Transmissions. + +Toutes les mutations ont plusieurs spécificités : + - Contagion qui détermine la proportion de personnes infectées + - Sévérité touche la recherche, on peut la comprendre de la manière suivante : si la sévérité est élevée, la maladie est grave, elle entraine par conséquent une recherche active de la part des Humains. Néanmoins, votre compteur de points ADN, augmente plus vite… + - Létalité détermine le taux de mortalité parmi les infectés… Une létalité élevée fera de votre maladie une veritable machine à tuer, mais cela vous dévoile au grand jour et accèlere la recherche ! + - ADN, du nom de la molècule qui compose le code génétique. Ici, rien à voir, les points ADN vous permettent d'acheter des mutations. + - Changement : certaines mutations par leur nature ralentissent la recherche, c'est ce ralentissement qui est symbolysé par changement. Concrétement, plus une maladie a de *changement* plus elle ralentit la recherche… + +### Symptômes + +Comme son nom l'indique, votre maladie aussi puissante soit-elle n'est pas invisible : elle présente certains symptômes qui ont leurs spécificités. Bien entendu, les symptômes présentés dans ce jeu font partie du jeu d'origines et leurs spécificités sont proches. + +|Nom|Coût ADN|Pt de contagion|Pt de sévérité|Pt de létalité|Changement| +|:---:|:---:|:---:|:---:|:---:|:---:| +|nausée|2|1|1|0|0,5 +|vomissement|4|3|2|0|0,5 +|tumeurs|15|4|2|5|1 +|pneumonie|4|2|2|0|0,5 +|toux|3|2|1|0|0,5 +|arrêt total des organes|30|0|20|25|2 +|folie|20|6|15|0|2 +|paranoïa|5|0|4|0|1 +|lésions|10|5|4|0|0,5 +|hémorragie|20|5|15|15|0,5 +|plaies|3|2|1|0|0,5 +|infections|17|6|7|6|0,5 +|immunodéficience|12|2|6|4|1 +|inflammation|5|2|2|2|0,5 + +### Capacités + +En mutant, votre maladie peut acquérir des capacités. Ces capacités lui permettent de mieux apréhender un milieu ou une situation, ainsi la capacité *Résistance au froid* donne un suplément de vigueur à votre virus dans les pays froid. Cela se traduit par une augmentation plus ou moins forte de la contagion dans ces régions du monde… + +|Nom|Pt de contagion|Pt de sévérité|Pt de létalité|Coût ADN| +|:---:|:---:|:---:|:---:|:---:| +|résistance au froid|+4|||10 +|résistance au chand|+7|||15 +|résistance à l'environnement|+10|||30 +|résistance aux médicaments||+2|+0,5|15 +|résistance génétique||+5|+1|25 +|mutation accélérée||+8|+2|30 + +### Moyens de transmissions + +Votre maladie aura tout le loisir de changer ses moyens de transmission ! Plus ou moins efficaces ceux-ci permettent à votre maladie d'accéder à des caractérestiques intéressantes qui lui permettront de coloniser le monde entier ! ;) + +|Nom|Pt de contagion|Coût ADN| +|:---:|:---:|:---:| +|air Nv 1|+2|9 +|air Nv 2|+5|15 +|air Nv 3|+8|20 +|air et eau|+10|30 +|eau Nv 1|+2|9 +|eau Nv 2|+3|12 +|eau Nv 3|+9|25 +|oiseau Nv 1|+3|12 +|oiseau Nv 2|+5|18 +|animaux Nv 1|+2|10 +|animaux Nv 2|+6|16 +|sang Nv 1|+1|8 +|sang Nv 2|+4|14 +|sang Nv 3|+9|20 diff --git a/Sources/CMakeLists.txt b/Sources/CMakeLists.txt new file mode 100644 index 0000000..25fd95d --- /dev/null +++ b/Sources/CMakeLists.txt @@ -0,0 +1,41 @@ +# Configure with [fxsdk build-fx] or [fxsdk build-cg], which provide the +# toolchain file and module path of the fxSDK + +cmake_minimum_required(VERSION 3.18) +project(MyAddin) + +include(GenerateG1A) +include(GenerateG3A) +include(Fxconv) +find_package(Gint 2.1 REQUIRED) + +set(SOURCES + src/main.c + # ... +) +# Shared assets, fx-9860G-only assets and fx-CG-50-only assets +set(ASSETS + # ... +) +set(ASSETS_fx + assets-fx/example.png + # ... +) +set(ASSETS_cg + assets-cg/example.png + # ... +) + +fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA) + +add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}}) +target_compile_options(myaddin PRIVATE -Wall -Wextra -Os) +target_link_libraries(myaddin Gint::Gint) + +if("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G) + generate_g1a(TARGET myaddin OUTPUT "MyAddin.g1a" + NAME "MyAddin" ICON assets-fx/icon.png) +elseif("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50) + generate_g3a(TARGET myaddin OUTPUT "MyAddin.g3a" + NAME "MyAddin" ICONS assets-cg/icon-uns.png assets-cg/icon-sel.png) +endif() diff --git a/Sources/assets-fx/fonts/._plague.png b/Sources/assets-fx/fonts/._plague.png new file mode 100644 index 0000000000000000000000000000000000000000..b6d673ad1bf4191cf191698763cc5b635c39cf4c GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt)MAgMTmK>)`Ie@l1c_f z1_J{NBWu$X6GICFV`J-p#LT>sq@vQ|4C}phjv&V{@Ov7ng6O1zoXp}91A_$|ARf?a zMhFcw0~K(7+VksHSNHq^r<($&=I5%k%uv3&Tj)NM;pTj^#CO4G)83Sw%My@z=rZRV zN6qF}a_{)0ABf*RCUkRN=Hj!Tv$z&*e7aPIH!ttA^~RV3@yl#lwl?pa?PIaD%>~t- zQQl|>jE2By2#kinXb6mkz-S1JhQMeDjE2By2n_EK0QI)uJubPBjLc$%qSWI2(xT*4 xg|z&lYz1HkE*04A%+E{A$*EMxNlhzJNXkjf%Lev^heODq`XBBi83wuk{{gNpk_`X= literal 0 HcmV?d00001 diff --git a/Sources/assets-fx/fonts/plague.png b/Sources/assets-fx/fonts/plague.png new file mode 100644 index 0000000000000000000000000000000000000000..6c25191589e47f73b0d3ab983da6774b14e5a107 GIT binary patch literal 1604 zcmZuw3sBTW7++E3&=@>LWlT-EzYiQxFcYf-Q4eGlk;oEGWKJrS#}X+%I7tD)P*Cs_ zFii=AQbSQZZ*dfS9UkC74v{CYJSIki(SYn!&}rHhoN++fnce;NKi{{%$G87|{(j4C zMok)p5VFBOssORah&e|#Qmm2BS{o4>j{JSsc!?wLpS*wL;>7y~V~kP?0E7^Xu_Q?h zA&L+nL=eIVNup}VC&mz^2mld+Fhlu3k4O2Q0kN~{K6#l$|6s(}Tl|Ev zI@iL;h@^VC%h*33T}icCg(?qU*uNvla{Puwon~!xK%+}lfHLw@RQ;n|_}k%eY1zSz ztJ~jau9^DkhVciJyrSzIRE24(6?>BHI&GY$p2-S`2s=5iYU$xzylQ@PgUi~PXK!0B z2>a^0UzOXOQx})-R8f1^?vVCHruxffh5Iq%;;i)=a#ko;6l>aY9wfPE(uSbL4rguKq=! zZqw{>R(gB;VQc-?-_I{NmbqZM!?NPpzPD17XmQnMq34*mV3c8=Y4zEn4ivc1E_XUlw0U)JPxHF z_wCf*+G1xihn?QilX$eXz9xI_?C>)s?^G6Tn6=Ks`nT=LmFnJrgtyE&mT~87-Qx=! z;pvFU`@cDza5B5YzUhufjpmaZEj#`*??UV4n46^WxeA8r>CcI-vRZ z--_*u(qTR8nq|h&kh%k&4WZix6WSi+mK5f7^!*dq%THCb HRFm`{A5RDj literal 0 HcmV?d00001 diff --git a/Sources/assets-fx/fxconv-metadata.txt b/Sources/assets-fx/fxconv-metadata.txt new file mode 100644 index 0000000..d435d5f --- /dev/null +++ b/Sources/assets-fx/fxconv-metadata.txt @@ -0,0 +1,3 @@ +example.png: + type: bopti-image + name: img_example diff --git a/Sources/assets-fx/icon-fx.png b/Sources/assets-fx/icon-fx.png new file mode 100644 index 0000000000000000000000000000000000000000..e323f42c84c8940468319651b76c2f7999524468 GIT binary patch literal 1375 zcmV-l1)%zgP)Hg1+lHrgWSWcKdPn90sKGrRqvPeo9CG3uKX#J{(IASm?@+di}}l?o-=)F3E6 zwD^Ni=!>T7nL9I?X}YoAW$t|Qo$sD|?zw001?ah|SeB6#0T!CBEf+H4bBB+JJu8re zhoBb*p;u8ID_yBf0ya+zcePvJL&AGs+11_tpRKn>9TgyPA7ZoSs0)aX0r00)%XR^J z`jH<$>RKN5V(7OqK*TS4xZz{h!*f1C3ECFkK$#7nA@pGN!$;%jYv zwjAKwmYb0gKL(K8-kPtb5${A?tlI~wzMrJ6wTdBr=Y%%%EaEMQ&o}4FQ^DA)s*}Z> z!FI&AHCpoWI|RUqx?7s@$8!5^Q=anY%X@i5{QA6kNcMelpE>R6eCYFpmMsVT zrI(b06~u#xf1yS}_UGdMvD``!0~u->P=lA4?YN`hilQ z|3tHka)7T{2CGqwjZfMwx$5irQN_*|e4l)UHmiYuz74Yp1t^#>hrJ3-SOXDcC_o0^ z7T9R1gAN8V6s;5)ieI5-7aQlmJn}lUna#nz!j%5V$X|o`xX!dHWQRV27P1=rj;t2b zW$~+pTw@bIek?ZvKPDL<64`^#UNTAck#RBsB6*5DP4<%UA_FqU$I>2EH_cM;u)Q~SI+rg`Rn{L z_AC5qq~L$#SMj%U$6Cz0vP{G5Y*=%5RT^yu;}-DInZ=349rJPVM6C3K^oO)8y(fJr{l>k`ead~!ea?NsT>_Ci%bnxC;Vy6= zb6>{xYV#Ue-+LB$7`JEXmTRm^AtP)R9u{)KHsMiWGV&)32xCG~*nyU<>-!d;FP=Re z4r3qYr~6#KE>;1F`>_J_P5xC?ROxV(DIHdCO*p$HRQI@7^PwV@Pvuf+ z5K}u-6REM(K@W$srgorh0{i?O)v0c>QtHxU-hBdD(>iYJ4b2sIOVX2K8m~4gmYVA5 zh^QEb$V`rCQ-|7ZS{nuL-t>?3n=-o(6I(7vocj#GzCZEo`!3>+v;dYIfPu#&ZWzzX z2i^rZ^Mu;6+rb@?NPG+6)c5T6zxpzGe*M(x+{AON=PiJ>H#?ob-|uwRK0yDg0B4PV z0id6JRRdfL?*IS+0ZBwbR7efQlM4#NAP_`r>HV*qc7!M6AaO}UD};^vnKu#Bj?a4h zVZAEM*4otetyk%lz@j=#gY4Z@B}Y#gyaHe-jUdj9*EzZYrfDTcj-fl^QzAH$Q`{=L znS@cxn0?x#MXz%0lRP}3q!!JJcQ5hAQQrlSXho|ZHD9M8zP>8pr@;&wUd#6mRuY$( zV4nl4y+A-$^;K?wRlEvK;fm=AjO*P|Q72+L4V>-!tyaSddgiXzX8)+tT$b`FKY$-HDf zlF5T68vtS1Z7zWYfH|9Bkj{vRdDL~3f(3)l@rnyn*rKf3k%^{glG;zu;*G7wLH*Bn zUDMX|UgHrBJvDWPHFwuy$M`L684BtK?`o?!eqh`VCG{Gg{E0W>Mm-<2mFQ@Tn*T!U zihR|&xXTTY72EG}P^C7Yc z<_UX4JvylL2|%3Dtiry$B_t;%%oFy8^iYDO5-l~PCq}Sz+GC2#6ZVFdj-V@Zp0x7* z@e*`(+M|Xe$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIhYCu0iY;W;207T zWIgNTe~1o-3apAo1xG_*Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLx9R5zz8%C zguy^ABqOs}p(wRDzqBYhRUs|EC|e;juOv0EBr`uRF(;=|AtyDhL?J0BF)tg~)rIOB Q(iE!y;a-tpko*510KSwTa{vGU literal 0 HcmV?d00001 diff --git a/Sources/assets-fx/img/._avions.png b/Sources/assets-fx/img/._avions.png new file mode 100644 index 0000000000000000000000000000000000000000..77928275ef5305e86c09136b7842565b64c39cd7 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt)MAgMTmK>)`Ie@l1c_f z1_J{NBWu$X6QdMU(sq@vQ|4C`$#{(v0AkU0M&IB=2*ax#lc3=9@QEG91X;E^j xLRx-NwgRvNmkR85=I15mNl2;a=^?9AqO`(SNn9aaEFJYeTzcFo#l_Fxmg0YK*k74yyq zfYrqqTwleoWum{W+{rj3%Jl9Ds@W?XL zamL=_TymvrCBl$vap1N+E$jh3fWt*yCN#$yetesbPS3Q+E|sV}ey0Fz`)J?{!zeIa z9G54#_N!XO&hz8d4K{+_``gf{U&=&j+kV&1y;l~6@p1%gFIl`=Ge0&QoJb15H~6p?1WbF5XL8psLf%caB>_AS}7bMD2S;98;ir>MX(XsBzq=g^T+I_@F}jh@)3Lp z8(+gG@Cl5wUhWRXQn+Ro!Z))!JG1$9AFS=H!wSHVhwO61Zdkj_9&F<00CZkZG4H$s zSbdDa3sekSCi-ig`Tmvr^wvyozz5che$}mFZuYwX+hLIncv(s@c&K^BbDiV@k1R7C zXY4M{C0DvuB8s>cdtTeq!X9t{u)nCwgyvYoPw&#<`GpqQwGx%j?-hV;pE&MubmWBC z#r1fS>!7Mt>?Xa>TWkcA*Y2Uwpp=Qyw*9$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIUt)MAgMTmK>)`Ie@l1c_f z1_J{NBWu$X6QdM!GgIq;#LT>sq@vQ|4C|AYZ$XY>@M_~01kp(aIhn;J1_lc_Ks=z; zj1U@V1}fnEB%uAE=#;CyP1vH~=c-962C$;uzxVL|1$pDbyvxF6b8|Ls0gT&b(QC8|B6 zywMOC4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7~UZO>TSV$Tyh~9nZ*i4sm1xFMaiiO xY57Ij3cwCrDzMv`pO=`EQ>l=XnpUEal#`g34eSdKhmb+_Kio$$408Yf0{|ygk8c0~ literal 0 HcmV?d00001 diff --git a/Sources/assets-fx/img/._titre.png b/Sources/assets-fx/img/._titre.png new file mode 100644 index 0000000000000000000000000000000000000000..2e062c840da4f68ac40dd81c56ad8a7ab4ab4f6c GIT binary patch literal 4096 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

l3#Dt=j-^@uQXRW5eXk{BI$;BiOOao( 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 literal 0 HcmV?d00001 diff --git a/Sources/assets-fx/img/muta.png b/Sources/assets-fx/img/muta.png new file mode 100644 index 0000000000000000000000000000000000000000..6970d18a53ebd4f71fccf084933d2ec9b1a5aaef GIT binary patch literal 4858 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 literal 0 HcmV?d00001 diff --git a/Sources/assets-fx/img/pieces.png b/Sources/assets-fx/img/pieces.png new file mode 100644 index 0000000000000000000000000000000000000000..985aedfc8bd2a1a0830c8c4773b10dccce247ae0 GIT binary patch literal 8760 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 S#y!dUv8Nydk}j46`~Mf4Fx{8{ literal 0 HcmV?d00001 diff --git a/Sources/assets-fx/img/titre.png b/Sources/assets-fx/img/titre.png new file mode 100644 index 0000000000000000000000000000000000000000..f0beb69a4245ae4f7e449a89036e2db7eb414947 GIT binary patch literal 3894 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 Ef@o*aaR2}S literal 0 HcmV?d00001 diff --git a/Sources/src/main.c b/Sources/src/main.c new file mode 100644 index 0000000..7067163 --- /dev/null +++ b/Sources/src/main.c @@ -0,0 +1,428 @@ +/* + Nom : Plague + Version : - dev- + Dernière modification : 28 Décembre 2019 + + Liste des choses à faire : + - Gestion des sélection dans les mutations et menu info + - Gestion des avions + - Moteurs du jeu (gestion du temps et sauvegarde) + - Gestion des pays à inclure dans le modèle infectieux + */ + +#include +#include +#include +#include + + +//display_barre : affiche les infos de la barre en dessous du monde +void display_barre (const int *adn, const int *recherche, const int *limite); + +//display_menu : affiche les données sur l'écran menu du jeu à partir duquel on peut modifier la maladie +void display_menu (const int *adn, const int *contagion, const int *severite, const int *letalite, const int *sel_symp, const int *sel_capa, const int *sel_trans); + +//display_info : affiche les infos sur la maladie selectionnée +void display_info (const char *nom, const int adn, const int conta, const int leta, const int sev); + +//display_stats : affiche les statistiques des humains +void display_stats(const double *sains, const double *infectes, const double *morts, const double *gueris, const double *total); + +//menu : gère les tableaux des mutations en fonction de la variable 'variable' +int menu (const int menu_muta, const image_t *img_fonds, const int nv_symp, const int nv_capa, const int nv_trans); + +//modele_infectieux : calcule la propagation de la maladie +void modele_infectieux (double *sains, double *infectes, double *morts, double *gueris, double *s_avant, double *i_avant, double *m_avant, double *g_avant, int *contagion, int *severite, int *letalite, int *changement); + +//floor : renvoie la partie entière d'une variable +double floor (double x); + +//init_mat : remplis la matrice dest à partir de src +void init_mat(int x, int y, int dest[][x], int src[][x]); + +//strcpy : copie une chaîne de caractère dans une autre +char * strcpy(char * dest, const char * src); + +//strtok : recherche les champs en fonction du séparateur +char * strtok(char * src, const char * separateur); + +//atof : convertit le texte en double +double atof(const char *nptr); + + +int main (void) +{ + extern const font_t font_plague; // Déclaration de la police custom + extern const image_t img_titre; // Déclaration de l'image-titre + extern const image_t img_fonds; // Déclaration des différents fonds du jeu + //extern const image_t img_avions; // Déclaration des avions + + dfont(&font_plague);// On change la police pour la police custom + + int fond = 1, fin = 0, key = 0, menu_muta = 0;//variables diverses pour le jeu + int recherche = 0, limite = 100, adn = 0, contagion = 0, severite = 0, letalite = 0, nv_symp = 1, nv_capa = 1, nv_trans = 1, sel_symp = 1, sel_capa = 1, sel_trans = 1;// Variables pour la maladie + double total = 10000000000, sains = total, infectes = 0, morts = 0, gueris = 0, s_avant, i_avant, m_avant, g_avant;// Variables pour les statistiques des humains + double changement = 0, priorite = 0;// Variables pour le modèle infectieux + + dclear(C_WHITE); + dimage(0, 0, &img_titre); + dupdate(); + getkey(); + // Fin de l'écran d'accueil + + while (fin == 0) + { + dclear(C_WHITE); + dsubimage(0, 0, &img_fonds, 0, 65 * (fond - 1), 128, 64, 0); + + switch (fond)// Affichage supplémentaires dépendant des fonds. + { + case 2: + display_barre(&adn, &recherche, &limite);// Monde avec la barre en dessous + break; + case 3: + display_menu(&adn, &contagion, &severite, &letalite, &sel_symp, &sel_capa, &sel_trans);// Menu de modification de la maladie + break; + case 6: + display_stats(&sains, &infectes, &morts, &gueris, &total);// Satistiques des humains + break; + } + + dupdate(); // Mise à jour de l'écran + key = getkey().key; + + switch (key) // Detection de la touche + { + case KEY_OPTN: + if (fond == 1) fond = 2; + else if (fond == 2) fond = 1; + break; + case KEY_VARS: + fond = 3; + break; + case KEY_SQUARE: + fond = 6; + break; + case KEY_F1: + if (fond == 3) menu_muta = 1; + break; + case KEY_F3: + if (fond == 3) menu_muta = 2; + break; + case KEY_F5: + if (fond == 3) menu_muta = 3; + break; + case KEY_F6: + if (fond == 3) fond = 1; + break; + case KEY_EXIT: + if (fond != 1) fond = 1; + else fin = 1; + break; + } + if (menu_muta != 0) menu_muta = menu(menu_muta, &img_fonds, nv_symp, nv_capa, nv_trans); + } + return 0; +} + + +void display_barre (const int *adn, const int *recherche, const int *limite) +{ + // Recherche (jauge = 74 pxl) donc : 74 * (recherche / 100) pour le pourcentage + int variable; + char string[100]; + variable = 74 * *recherche / *limite; + sprintf(string, "%d", *adn); + dtext(9, 58, string, C_BLACK, C_NONE); + dline(51, 60, 51 + variable, 60, C_BLACK); + dline(51, 59, 51 + variable, 59, C_BLACK); +} + + +void display_menu (const int *adn, const int *contagion, const int *severite, const int *letalite, const int *sel_symp, const int *sel_capa, const int *sel_trans) +{ + // toutes les jauges font 67 pxl de long. + extern const image_t img_muta; + int variable; + char string[100]; + sprintf(string, "%d", *adn); + dtext(102, 37, string, C_BLACK, C_NONE); + + variable = 67 * *contagion / 26; + dline(57, 48, 57 + variable, 48, C_BLACK); + dline(57, 49, 57 + variable, 49, C_BLACK); + + variable = 67 * *severite / 20; + dline(57, 54, 57 + variable, 54, C_BLACK); + dline(57, 55, 57 + variable, 55, C_BLACK); + + variable = 67 * *letalite / 33; + dline(57, 60, 57 + variable, 60, C_BLACK); + dline(57, 61, 57 + variable, 61, C_BLACK); + + dsubimage(5, 15, &img_muta, 0, 16 * (*sel_symp - 1), 15, 15, 0); + dsubimage(35, 15, &img_muta, 16, 16 * (*sel_capa - 1), 15, 15, 0); + dsubimage(65, 15, &img_muta, 32, 16 * (*sel_trans - 1), 15, 15, 0); +} + + +void display_info (const char *nom, const int adn, const int conta, const int leta, const int sev) +{ + char string[100]; + extern const image_t img_fonds; + extern const image_t img_muta; + + dclear(C_WHITE); + dsubimage(0, 0, &img_fonds, 0, 195, 128, 64, 0); + + dtext(47, 25, nom, C_BLACK, C_NONE); + sprintf(string, "%d", adn); + dtext(73, 33, string, C_BLACK, C_NONE); + + sprintf(string, "%d", conta); + dtext(81, 41, string, C_BLACK, C_NONE); + + sprintf(string, "%d", leta); + dtext(74, 49, string, C_BLACK, C_NONE); + + sprintf(string, "%d", sev); + dtext(75, 57, string, C_BLACK, C_NONE); + + dupdate(); + getkey(); +} + + +void display_stats (const double *sains, const double *infectes, const double *morts, const double *gueris, const double *total) +{ + // Toutes les jauges font 63 pxl + int variable; + + variable = 63 * *sains / *total; + dline(61, 31, 61 + variable, 31, C_BLACK); + dline(61, 32, 61 + variable, 32, C_BLACK); + + variable = 63 * *infectes / *total; + dline(61, 39, 61 + variable, 39, C_BLACK); + dline(61, 40, 61 + variable, 40, C_BLACK); + + variable = 63 * *morts / *total; + dline(61, 47, 61 + variable, 47, C_BLACK); + dline(61, 48, 61 + variable, 48, C_BLACK); + + variable = 63 * *gueris / *total; + dline(61, 55, 61 + variable, 55, C_BLACK); + dline(61, 56, 61 + variable, 56, C_BLACK); + +} + + +int menu (const int menu_muta, const image_t *img_fonds, const int nv_symp, const int nv_capa, const int nv_trans) +{ + extern const image_t img_muta; + extern const image_t img_pieces; + const char * sous_str; + int variable, contagion = 0, letalite = 0, severite = 0, cout_adn = 0; + double changement = 0.0; + int x = 0, y = 0, i, j, fin = 0, key = 0, lim = 0; + int tableau[4][8]; + + int symp_1[4][8] = {{1, 15, 15, 15, 3, 0, 0, 0},{0, 0, 15, 15, 0, 0, 0, 0},{0, 0, 15, 0, 15, 0, 0, 0},{0, 15, 15, 6, 15, 15, 0, 0}}; + int symp_2[4][8] = {{1, 2, 15, 4, 3, 0, 0, 0},{0, 0, 15, 15, 0, 0, 0, 0},{0, 0, 15, 0, 12, 0, 0, 0},{0, 15, 7, 6, 9, 15, 0, 0}}; + int symp_3[4][8] = {{1, 2, 5, 4, 3, 0, 0, 0},{0, 0, 15, 15, 0, 0, 0, 0},{0, 0, 15, 0, 12, 0, 0, 0},{0, 10, 7, 6, 9, 11, 0, 0}}; + int symp_4[4][8] = {{1, 2, 5, 4, 3, 0, 0, 0},{0, 0, 14, 13, 0, 0, 0, 0},{0, 0, 8, 0, 12, 0, 0, 0},{0, 10, 7, 6, 9, 11, 0, 0}}; + + int capa_1[4][8] = {{1, 0, 0, 0, 6, 0, 0, 0},{7, 7, 0, 7, 0, 0, 0, 0},{0, 0, 0, 0, 7, 0, 0, 0},{0, 0, 0, 0, 0, 0, 0, 0}}; + int capa_2[4][8] = {{1, 0, 0, 0, 6, 0, 0, 0},{2, 7, 0, 3, 0, 0, 0, 0},{0, 0, 0, 0, 7, 0, 0, 0},{0, 0, 0, 0, 0, 0, 0, 0}}; + int capa_3[4][8] = {{1, 0, 0, 0, 6, 0, 0, 0},{2, 5, 0, 3, 0, 0, 0, 0},{0, 0, 0, 0, 4, 0, 0, 0},{0, 0, 0, 0, 0, 0, 0, 0}}; + + int trans_1[4][8] = {{1, 14, 14, 0, 14, 5, 0, 0},{0, 0, 0, 14, 0, 0, 0, 11},{9, 14, 0, 0, 0, 0, 0, 14},{0, 0, 14, 14, 0, 0, 0, 14}}; + int trans_2[4][8] = {{1, 2, 14, 0, 6, 5, 0, 0},{0, 0, 0, 14, 0, 0, 0, 11},{9, 10, 0, 0, 0, 0, 0, 12},{0, 0, 0, 14, 14, 0, 0, 14}}; + int trans_3[4][8] = {{1, 2, 3, 0, 6, 5, 0, 0},{0, 0, 0, 14, 0, 0, 0, 11},{9, 10, 0, 0, 0, 0, 0, 12},{0, 0, 0, 7, 14, 0, 0, 13}}; + int trans_4[4][8] = {{1, 2, 3, 0, 6, 5, 0, 0},{0, 0, 0, 4, 0, 0, 0, 11},{9, 10, 0, 0, 0, 0, 0, 12},{0, 0, 0, 7, 8, 0, 0, 13}}; + + char element_sel[50], nom[50]; + const char *symptome[] = {"NAUSEE,1,1,0,0.5,2", "VOMISSEMENT,3,2,0,0.5,4", "TOUX,2,1,0,0.5,3", "PNEUMONIE,2,2,0,0.5,4", "TUMEURS,4,2,5,0.5,15", "PLAIE,2,1,0,0.5,3", "LESION,5,4,0,0.5,10", "HEMORAGIE,0,15,15,0.5,20", "INFLAMATION,2,2,2,0.5,5", "INFECTION,6,7,6,0.5,17", "SIDA,2,6,4,0.5,12", "PARANOIA,0,4,1,1,5", "FOLIE,6,15,0,2,20", "CYROSE,0,20,25,0,30"}; + + switch (menu_muta)// Remplissage de la matrice pour afficher les mutations + { + case 1: + lim = 15; + switch (nv_symp) + { + case 1: + init_mat(8, 4, tableau, symp_1); + break; + case 2: + init_mat(8, 4, tableau, symp_2); + break; + case 3: + init_mat(8, 4, tableau, symp_3); + break; + case 4: + init_mat(8, 4, tableau, symp_4); + break; + } + break; + + case 2: + lim = 7; + switch (nv_capa) + { + case 1: + init_mat(8, 4, tableau, capa_1); + break; + case 2: + init_mat(8, 4, tableau, capa_2); + break; + case 3: + init_mat(8, 4, tableau, capa_3); + break; + } + break; + + case 3: + lim = 14; + switch (nv_trans) + { + case 1: + init_mat(8, 4, tableau, trans_1); + break; + case 2: + init_mat(8, 4, tableau, trans_2); + break; + case 3: + init_mat(8, 4, tableau, trans_3); + break; + case 4: + init_mat(8, 4, tableau, trans_4); + break; + } + break; + } + + while (fin == 0) + { + dclear(C_WHITE); + dsubimage(0, 0, img_fonds, 0, 260, 128, 64, 0); + + for (i = 0 ; i <= 7 ; i++) + { + for (j = 0 ; j <= 3; j++) + { + if (tableau[j][i] != 0) dsubimage(16 * i, 16 * j, &img_muta, 16 * (menu_muta - 1), 16 * (tableau[j][i] - 1), 15, 15, 0); + } + } + + if (tableau[y][x] == lim) dsubimage(16 * x - 1, 16 * y - 1, &img_pieces, 0, 18, 17, 17, 0); + else dsubimage(16 * x - 1, 16 * y - 1, &img_pieces, 0, 0, 17, 17, 0); + dupdate(); + key = getkey().key; + + switch (key) + { + case KEY_LEFT: + if (x > 0) x -= 1; + break; + case KEY_RIGHT: + if (x < 7) x += 1; + break; + case KEY_UP: + if (y > 0) y -= 1; + break; + case KEY_DOWN: + if (y < 3) y += 1; + break; + case KEY_EXIT: + fin = 1; + break; + case KEY_EXE: + if (tableau[y][x] != lim && tableau[y][x] != 0) fin = 2; + else fin = 0; + break; + } + } + if (fin == 2) + { + switch(menu_muta) + { + case 1: + strcpy(element_sel, symptome[tableau[y][x] - 1]); + break; + } + variable = 0; + while(1) + { + if(variable == 0) sous_str = strtok(element_sel, ","); + else sous_str = strtok(NULL, ","); + variable ++; + + switch (variable) + { + case 1: + strcpy(nom, sous_str); + break; + case 2: + contagion = floor(atof(sous_str)); + break; + case 3: + severite = floor(atof(sous_str)); + break; + case 4: + letalite = floor(atof(sous_str)); + break; + case 5: + changement = atof(sous_str); + break; + case 6: + cout_adn = floor(atof(sous_str)); + break; + + + } + + if(sous_str == NULL) break; + } + display_info (nom, cout_adn, contagion, letalite, severite); + + + + } + + + + return 0; +} + + +void modele_infectieux (double *sains, double *infectes, double *morts, double *gueris, double *s_avant, double *i_avant, double *m_avant, double *g_avant, int *contagion, int *severite, int *letalite, int *changement) +{ + double r = *contagion / 2600, a = *severite / (200 - *changement), b = *letalite / 3300; + + *sains = floor(*s_avant - r * *s_avant); + *infectes = floor (*i_avant + r * *s_avant - *i_avant * b - *i_avant * a); + *morts = floor (*m_avant + *infectes * b); + *gueris = floor(*g_avant + *infectes * a); + + *s_avant = *sains; + *i_avant = *infectes; + *m_avant = *morts; + *g_avant = *gueris; +} + + +double floor (double x) +{ + return (int)x; +} + +void init_mat(int x, int y, int dest[][x], int src[][x]) +{ + for (int i = 0 ; i < x ; i++) + { + for (int j = 0 ; j < y ; j++) + { + dest[j][i] = src[j][i]; + } + } +}