SHOW:
|
|
- or go back to the newest paste.
| 1 | #include <Grapic.h> | |
| 2 | #include <ctime> | |
| 3 | #include <cmath> | |
| 4 | #include <iostream> | |
| 5 | #include <math.h> | |
| 6 | #include <iostream> | |
| 7 | #include <stdlib.h> | |
| 8 | #include <stdio.h> | |
| 9 | #include <time.h> | |
| 10 | ||
| 11 | using namespace std; | |
| 12 | using namespace grapic; | |
| 13 | ||
| 14 | ||
| 15 | const int DIMW = 1000; | |
| 16 | const int MAXX = 100; | |
| 17 | const int MAXY = 100; | |
| 18 | ||
| 19 | struct cell | |
| 20 | {
| |
| 21 | int etat; | |
| 22 | }; | |
| 23 | ||
| 24 | ||
| 25 | struct jeu_de_la_vie | |
| 26 | {
| |
| 27 | struct cell tab[MAXX][MAXY]; | |
| 28 | int dx,dy; | |
| 29 | int alive; | |
| 30 | int dead; | |
| 31 | Image im; | |
| 32 | }; | |
| 33 | ||
| 34 | void init(jeu_de_la_vie &jeu) | |
| 35 | {
| |
| 36 | int i,j; | |
| 37 | jeu.dx = 50; | |
| 38 | jeu.dy = 50; | |
| 39 | jeu.im = image("data/vert.jpg", true, 255, 255, 255, 255);
| |
| 40 | for (i=0;i<jeu.dx;i++) | |
| 41 | {
| |
| 42 | for (j=0;j<jeu.dy;j++) | |
| 43 | {
| |
| 44 | jeu.tab[i][j].etat = 0; | |
| 45 | } | |
| 46 | } | |
| 47 | } | |
| 48 | ||
| 49 | void etat_initial(jeu_de_la_vie &jeu) | |
| 50 | {
| |
| 51 | int i; | |
| 52 | int l,c; | |
| 53 | jeu.alive = 1000; | |
| 54 | jeu.dead = jeu.dx*jeu.dy-jeu.alive; | |
| 55 | for (i=0;i<jeu.alive;i++) | |
| 56 | {
| |
| 57 | do{
| |
| 58 | l = rand()%(jeu.dx-2)+1; | |
| 59 | c = rand()%(jeu.dy-2)+1; | |
| 60 | }while (jeu.tab[l][c].etat != 0); | |
| 61 | jeu.tab[l][c].etat = 1; | |
| 62 | } | |
| 63 | } | |
| 64 | ||
| 65 | void etat_suivant(jeu_de_la_vie &jeu) | |
| 66 | {
| |
| 67 | int i,j; | |
| 68 | int a; | |
| 69 | for (i=0;i<jeu.dx;i++) | |
| 70 | {
| |
| 71 | for (j=0;j<jeu.dy;j++) | |
| 72 | {
| |
| 73 | a = 0; | |
| 74 | if (jeu.tab[i-1][j-1].etat == 1) | |
| 75 | a=a+1; | |
| 76 | if (jeu.tab[i-1][j].etat == 1) | |
| 77 | a=a+1; | |
| 78 | if (jeu.tab[i-1][j+1].etat == 1) | |
| 79 | a=a+1; | |
| 80 | if (jeu.tab[i][j-1].etat == 1) | |
| 81 | a=a+1; | |
| 82 | if (jeu.tab[i][j+1].etat == 1) | |
| 83 | a=a+1; | |
| 84 | if (jeu.tab[i+1][j-1].etat == 1) | |
| 85 | a=a+1; | |
| 86 | if (jeu.tab[i+1][j].etat == 1) | |
| 87 | a=a+1; | |
| 88 | if (jeu.tab[i+1][j+1].etat == 1) | |
| 89 | a=a+1; | |
| 90 | if (jeu.tab[i][j].etat == 0 && a == 3) | |
| 91 | {
| |
| 92 | jeu.tab[i][j].etat = 2; | |
| 93 | jeu.alive = jeu.alive+1; | |
| 94 | jeu.dead = jeu.dead-1; | |
| 95 | } | |
| 96 | if (jeu.tab[i][j].etat == 1 && a > 3) | |
| 97 | {
| |
| 98 | jeu.tab[i][j].etat = 0; | |
| 99 | jeu.alive = jeu.alive-1; | |
| 100 | jeu.dead = jeu.dead+1; | |
| 101 | } | |
| 102 | if (jeu.tab[i][j].etat == 1 && a < 2) | |
| 103 | {
| |
| 104 | jeu.tab[i][j].etat = 0; | |
| 105 | jeu.alive = jeu.alive-1; | |
| 106 | jeu.dead = jeu.dead+1; | |
| 107 | } | |
| 108 | } | |
| 109 | } | |
| 110 | for (i=0;i<jeu.dx;i++) | |
| 111 | {
| |
| 112 | for (j=0;j<jeu.dy;j++) | |
| 113 | {
| |
| 114 | if (jeu.tab[i][j].etat == 2) | |
| 115 | jeu.tab[i][j].etat = 1; | |
| 116 | } | |
| 117 | } | |
| 118 | } | |
| 119 | ||
| 120 | ||
| 121 | void draw (jeu_de_la_vie &jeu) | |
| 122 | {
| |
| 123 | int i,j; | |
| 124 | for (i=0;i<jeu.dy;i++) | |
| 125 | {
| |
| 126 | line(0,i*20,DIMW,i*20); | |
| 127 | line(i*20,0,i*20,DIMW); | |
| 128 | } | |
| 129 | for(i=0;i<jeu.dx;i++) | |
| 130 | {
| |
| 131 | for(j=0;j<jeu.dy;j++) | |
| 132 | {
| |
| 133 | if (jeu.tab[i][j].etat == 1) | |
| 134 | {
| |
| 135 | image_draw(jeu.im,(20*i),(20*j),20,20); | |
| 136 | } | |
| 137 | } | |
| 138 | } | |
| 139 | if (isKeyPressed('s'))
| |
| 140 | {
| |
| 141 | delay(100); | |
| 142 | etat_suivant(jeu); | |
| 143 | } | |
| 144 | ||
| 145 | } | |
| 146 | ||
| 147 | ||
| 148 | int main(int , char** ) | |
| 149 | {
| |
| 150 | bool stop=false; | |
| 151 | winInit("terrain", DIMW, DIMW);
| |
| 152 | backgroundColor(255,255,255); | |
| 153 | jeu_de_la_vie jeu; | |
| 154 | init(jeu); | |
| 155 | etat_initial(jeu); | |
| 156 | setKeyRepeatMode(true); | |
| 157 | while(!stop){
| |
| 158 | winClear(); | |
| 159 | draw(jeu); | |
| 160 | stop=winDisplay(); | |
| 161 | } | |
| 162 | winDisplay(); | |
| 163 | pressSpace(); | |
| 164 | winQuit(); | |
| 165 | return 0; | |
| 166 | } |