Differences From Artifact [b27a6df805fe9112]:
- File
test.d
- 2012-07-13 14:16:22 - part of checkin [b59ee91407] on branch trunk - GUI version. (user: kinaba) [annotate]
To Artifact [ab6badd03b0f582a]:
- File
test.d
- 2012-07-13 14:32:47 - part of checkin [8f5135c552] on branch trunk - tenuki scoring. (user: kinaba) [annotate]
42 if(i) result ~= '\n'; 42 if(i) result ~= '\n';
43 result ~= s.idup; 43 result ~= s.idup;
44 } 44 }
45 return result; 45 return result;
46 } 46 }
47 } 47 }
48 48
49 void command_R() { move(0, +1); } | 49 int command_R() { return move(0, +1); }
50 void command_L() { move(0, -1); } | 50 int command_L() { return move(0, -1); }
51 void command_U() { move(-1, 0); } | 51 int command_U() { return move(-1, 0); }
52 void command_D() { move(+1, 0); } | 52 int command_D() { return move(+1, 0); }
53 void wait() { update(); } | 53 int wait() { update(); return -1; }
54 54
55 void move(int dy, int dx) { | 55 int move(int dy, int dx) {
56 foreach(y,s; data) 56 foreach(y,s; data)
57 foreach(x,c; s) 57 foreach(x,c; s)
58 if(c == 'R') 58 if(c == 'R')
59 return move(dy, dx, y, x); 59 return move(dy, dx, y, x);
> 60 assert(false);
60 } 61 }
61 62
> 63 int gained = 0; // TODO: atode naosu
62 void move(int dy, int dx, int y, int x) { | 64 int move(int dy, int dx, int y, int x) {
> 65 int score = 0;
> 66 if(data[y+dy][x+dx]=='\\') {
> 67 score += 25;
> 68 ++gained;
> 69 }
> 70 if(data[y+dy][x+dx]=='O')
> 71 score += gained*50;
> 72
63 if(data[y+dy][x+dx]==' ' || data[y+dy][x+dx]=='.' 73 if(data[y+dy][x+dx]==' ' || data[y+dy][x+dx]=='.'
64 || data[y+dy][x+dx]=='\\' || data[y+dy][x+dx]=='O') { 74 || data[y+dy][x+dx]=='\\' || data[y+dy][x+dx]=='O') {
65 data[y][x]=' '; 75 data[y][x]=' ';
66 data[y+dy][x+dx]='R'; 76 data[y+dy][x+dx]='R';
67 } else if(dy==0 && data[y+dy][x+dx]=='*' && data[y+2*dy][x+2*dx] 77 } else if(dy==0 && data[y+dy][x+dx]=='*' && data[y+2*dy][x+2*dx]
68 data[y][x]=' '; 78 data[y][x]=' ';
69 data[y+dy][x+dx]='R'; 79 data[y+dy][x+dx]='R';
70 data[y+2*dy][x+2*dx]='*'; 80 data[y+2*dy][x+2*dx]='*';
71 } 81 }
72 update(); 82 update();
> 83 return score-1;
73 } 84 }
74 85
75 void update() { 86 void update() {
76 char[][] next; 87 char[][] next;
77 foreach(y,s; data) 88 foreach(y,s; data)
78 next ~= s.dup; 89 next ~= s.dup;
79 90
................................................................................................................................................................................
110 data = next; 121 data = next;
111 } 122 }
112 } 123 }
113 124
114 class MyForm : Form 125 class MyForm : Form
115 { 126 {
116 Map m; 127 Map m;
> 128 int score;
> 129
117 this(Map m) 130 this(Map m)
118 { 131 {
119 noMessageFilter(); 132 noMessageFilter();
120 this.m = m; 133 this.m = m;
121 this.text = "Dark Integers"; 134 this.text = "Dark Integers";
122 this.keyDown ~= &myKey; 135 this.keyDown ~= &myKey;
> 136 this.score = 0;
123 } 137 }
124 override void onResize(EventArgs ev) { 138 override void onResize(EventArgs ev) {
125 invalidate(); 139 invalidate();
126 } 140 }
127 override void onPaint(PaintEventArgs ev) 141 override void onPaint(PaintEventArgs ev)
128 { 142 {
129 int Z = min(this.clientSize.width, this.clientSize.height) / max 143 int Z = min(this.clientSize.width, this.clientSize.height) / max
................................................................................................................................................................................
155 } 169 }
156 } 170 }
157 void myKey(Control c, KeyEventArgs ev) 171 void myKey(Control c, KeyEventArgs ev)
158 { 172 {
159 switch(ev.keyCode) 173 switch(ev.keyCode)
160 { 174 {
161 case Keys.DOWN: 175 case Keys.DOWN:
162 m.command_D(); | 176 score += m.command_D();
> 177 write("D");
> 178 stdout.flush();
163 break; 179 break;
164 case Keys.UP: 180 case Keys.UP:
165 m.command_U(); | 181 score += m.command_U();
> 182 write("U");
> 183 stdout.flush();
166 break; 184 break;
167 case Keys.LEFT: 185 case Keys.LEFT:
168 m.command_L(); | 186 score += m.command_L();
> 187 write("L");
> 188 stdout.flush();
169 break; | 189 break;
170 case Keys.RIGHT: 190 case Keys.RIGHT:
171 m.command_R(); | 191 score += m.command_R();
> 192 write("R");
> 193 stdout.flush();
172 break; 194 break;
173 case Keys.W: 195 case Keys.W:
174 m.wait(); | 196 score += m.wait();
> 197 write("W");
> 198 stdout.flush();
175 break; 199 break;
176 default: 200 default:
177 break; 201 break;
178 } 202 }
> 203 this.text = .text("Score: ", score);
179 invalidate(); 204 invalidate();
180 } 205 }
181 } 206 }
182 207
183 void main(string[] args) 208 void main(string[] args)
184 { 209 {
185 Form myForm = new MyForm(new Map(File(args[1]))); 210 Form myForm = new MyForm(new Map(File(args[1])));
186 Application.run(myForm); 211 Application.run(myForm);
187 } 212 }