1 /**
2 * Copyright: © 2012-2014 Anton Gushcha
3 * License: Subject to the terms of the MIT license, as written in the included LICENSE file.
4 * Authors: NCrashed <ncrashed@gmail.com>,
5 * LeMarwin <lemarwin42@gmail.com>,
6 * Nazgull09 <nazgull90@gmail.com>
7 */
8 module main;
9
10 import std.stdio;
11 import std.process;
12 import std.conv;
13 import std.getopt;
14
15 import core.time, core.thread;
16
17 import devol.compiler;
18
19 import ant.progtype;
20 import ant.world;
21 import ant.app;
22
23 import derelict.sdl2.sdl;
24
25 alias Population!( getDefChars, Ant ) AntPopulation;
26
27 class MyCompilaton : GameCompilation
28 {
29 bool stopCond(ref int x, IndAbstract ind, WorldAbstract world) // stopCond
30 {
31 auto ai = cast(Ant)(ind);
32 auto aw = cast(AntWorld)(world);
33
34 if (ai.prevFoodCount < ai.FoodCount)
35 x = 0;
36 ai.prevFoodCount = ai.FoodCount;
37 return x > 5 || aw.Food <= ai.FoodCount;
38 }
39
40 void drawStep(IndAbstract ind, WorldAbstract world) // draw step
41 {
42 version(NoGraphicsOutput)
43 {
44
45 } else
46 {
47 auto ai = cast(Ant)(ind);
48 auto aw = cast(AntWorld)(world);
49 auto app = App.getSingleton();
50
51 app.clear();
52
53 foreach(uint j,ref l; aw.getMap() )
54 {
55 foreach(uint i,ref c; l)
56 {
57 if ( j == ai.x && i == ai.y )
58 {
59 app.draw(app.ants[ai.Direction], (j+1)*32u, (i+1)*32u, 32u, 32u);
60 }
61 else if (c)
62 app.draw(app.food, (j+1)*32u , (i+1)*32u, 32u, 32u);
63 else
64 app.draw(app.empty, (j+1)*32u , (i+1)*32u, 32u, 32u);
65 }
66 }
67
68 foreach( i; 0..aw.size+2)
69 app.draw(app.wall, i*32u, 0, 32u, 32u);
70 foreach( i; 0..aw.size+2)
71 app.draw(app.wall, i*32u, (aw.size+1)*32u, 32u, 32u);
72 foreach( i; 0..aw.size+2)
73 app.draw(app.wall, 0, i*32u, 32u, 32u);
74 foreach( i; 0..aw.size+2)
75 app.draw(app.wall, (aw.size+1)*32u, i*32u, 32u, 32u);
76
77 app.present();
78 }
79 }
80
81 void drawFinal(PopAbstract pop, WorldAbstract world)
82 {
83 // auto ap = cast(AntPopulation)(pop);
84 // auto aw = cast(AntWorld)(world);
85 }
86
87 int roundsPerInd()
88 {
89 return 1;
90 }
91 }
92
93 alias Compiler!(
94 MyCompilaton,
95 Evolutor,
96 AntProgType,
97 AntPopulation,
98 AntWorld)
99 AntCompiler;
100
101 void main(string[] args)
102 {
103 string savedPop;
104 getopt(args,
105 "saved", &savedPop
106 );
107
108 auto app = new App;
109 scope(exit) destroy(app);
110
111 auto comp = new AntCompiler(new MyCompilaton, new AntProgType);
112 auto tmng = TypeMng.getSingleton();
113 auto opmng = OperatorMng.getSingleton();
114
115 AntPopulation pop;
116 if(savedPop == "")
117 {
118 pop = comp.addPop(5);
119 } else
120 {
121 pop = comp.loadPopulation(savedPop);
122 }
123
124 while(!app.shouldExit) {comp.envolveGeneration(() => app.shouldExit, "saves", (d){}, () => false);}
125 }