Differences From Artifact [e84cacd6262f93a7]:
- File
src/gui.d
- 2012-07-15 11:17:59 - part of checkin [ff0ab77d3d] on branch trunk - new game class. (user: kinaba) [annotate]
To Artifact [d4577900b4db97c1]:
- File
src/gui.d
- 2012-07-15 02:37:41 - part of checkin [c2c105fda0] on branch trunk - Support 'G' at any timing. (user: kinaba) [annotate]
- 2012-07-15 12:14:10 - part of checkin [e02668367d] on branch trunk - Revert redesign in the trunk. (user: kinaba) [annotate]
4 import driver; 4 import driver;
5 5
6 class GUI(Solver) : Form, GameObserver 6 class GUI(Solver) : Form, GameObserver
7 { 7 {
8 this(in Game g) 8 this(in Game g)
9 { 9 {
10 this.solver = new Solver(g); 10 this.solver = new Solver(g);
11 setup_size(g.W, g.H); | 11 setup_size(g.map.W, g.map.H);
12 setup_resources(g); 12 setup_resources(g);
13 draw(g); 13 draw(g);
14 } 14 }
15 15
16 private void delegate(char c) fn; 16 private void delegate(char c) fn;
17 void set_fn(F)(F f) { this.fn = f; } 17 void set_fn(F)(F f) { this.fn = f; }
18 18
................................................................................................................................................................................
79 this.render['\\'] = "λ"; 79 this.render['\\'] = "λ";
80 this.render['R'] = "☃"; 80 this.render['R'] = "☃";
81 this.render['d'] = "☠"; 81 this.render['d'] = "☠";
82 this.render['L'] = "☒"; 82 this.render['L'] = "☒";
83 this.render['O'] = "☐"; 83 this.render['O'] = "☐";
84 this.render['W'] = "ꔣ"; 84 this.render['W'] = "ꔣ";
85 this.render['!'] = "✄"; 85 this.render['!'] = "✄";
> 86 foreach(c,tp; g.map.tr_target) {
> 87 char d = g.map[tp];
86 foreach(char c; 'A'..'J') this.render[c] = [cast(dchar)('☢'+g.tr | 88 this.render[c] = [cast(dchar)('☢'+d-'1')].to!string();
> 89 }
87 foreach(char c; '1'..':') this.render[c] = [cast(dchar)('☢'+c-'1 90 foreach(char c; '1'..':') this.render[c] = [cast(dchar)('☢'+c-'1
88 this.paint ~= (Control c, PaintEventArgs ev) { 91 this.paint ~= (Control c, PaintEventArgs ev) {
89 graphicContext.copyTo(ev.graphics, Rect(0,0,this.clientS 92 graphicContext.copyTo(ev.graphics, Rect(0,0,this.clientS
90 }; 93 };
91 } 94 }
92 95
93 void draw(in Game g) 96 void draw(in Game g)
................................................................................................................................................................................
99 graphicContext.fillRectangle(this.backColor, Rect(0,0,scrW,scrH) 102 graphicContext.fillRectangle(this.backColor, Rect(0,0,scrW,scrH)
100 103
101 // Fill water. 104 // Fill water.
102 int w = g.water_level(); 105 int w = g.water_level();
103 graphicContext.fillRectangle(this.colors['w'], Rect(0, scrH-cell 106 graphicContext.fillRectangle(this.colors['w'], Rect(0, scrH-cell
104 107
105 // Paint map. 108 // Paint map.
106 for(int y=1; y<=g.H; ++y) | 109 for(int y=1; y<=g.map.H; ++y)
107 for(int x=1; x<=g.W; ++x) { | 110 for(int x=1; x<=g.map.W; ++x) {
108 Rect r = Rect(cell*(x-1), scrH-cell*y, cell, cell); 111 Rect r = Rect(cell*(x-1), scrH-cell*y, cell, cell);
109 char c = g[y,x]; | 112 char c = g.map[y,x];
110 if( c != ' ' ) { 113 if( c != ' ' ) {
111 if( c == 'R' && g.dead ) 114 if( c == 'R' && g.dead )
112 c = 'd'; 115 c = 'd';
113 graphicContext.drawText(this.render[c], font, th 116 graphicContext.drawText(this.render[c], font, th
114 } 117 }
115 } 118 }
116 119
117 // Update textual info. 120 // Update textual info.
118 this.text = .text( 121 this.text = .text(
119 "Score: ", g.score, 122 "Score: ", g.score,
120 " Air: ", g.hp, 123 " Air: ", g.hp,
121 " Tide: ", g.water_until_rise, 124 " Tide: ", g.water_until_rise,
122 " Wadler: ", g.hige_until_rise, 125 " Wadler: ", g.hige_until_rise,
123 " Razor: ", g.num_razor); | 126 " Razor: ", g.map.razor);
124 invalidate(); 127 invalidate();
125 } 128 }
126 129
127 private: 130 private:
128 void setup_keyhandling() 131 void setup_keyhandling()
129 { 132 {
130 noMessageFilter(); 133 noMessageFilter();