-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathScreen.java
More file actions
76 lines (61 loc) · 2.44 KB
/
Screen.java
File metadata and controls
76 lines (61 loc) · 2.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package roguelike.Inventory;
import java.awt.event.KeyEvent;
public class Screen {
public Screen respondToUserInput(KeyEvent key) {
char c = key.getKeyChar();
Item[] items = player.inventory().getItems();
if (letters.indexOf(c) > -1
&& items.length > letters.indexOf(c)
&& items[letters.indexOf(c)] != null
&& isAcceptable(items[letters.indexOf(c)]))
return use(items[letters.indexOf(c)]);
else if (key.getKeyCode() == KeyEvent.VK_ESCAPE)
return null;
else
return this;
}
protected boolean isAcceptable(Item item) {
return true;
}
protected Screen use(Item item) {
player.drop(item);
return null;
}
private Screen subscreen;
if (subscreen != null)
subscreen.displayOutput(terminal);
public Screen respondToUserInput(KeyEvent key) {
if (subscreen != null) {
subscreen = subscreen.respondToUserInput(key);
} else {
switch (key.getKeyCode()){
case KeyEvent.VK_ESCAPE: return new LoseScreen();
case KeyEvent.VK_ENTER: return new WinScreen();
case KeyEvent.VK_LEFT:
case KeyEvent.VK_H: player.moveBy(-1, 0, 0); break;
case KeyEvent.VK_RIGHT:
case KeyEvent.VK_L: player.moveBy( 1, 0, 0); break;
case KeyEvent.VK_UP:
case KeyEvent.VK_K: player.moveBy( 0,-1, 0); break;
case KeyEvent.VK_DOWN:
case KeyEvent.VK_J: player.moveBy( 0, 1, 0); break;
case KeyEvent.VK_Y: player.moveBy(-1,-1, 0); break;
case KeyEvent.VK_U: player.moveBy( 1,-1, 0); break;
case KeyEvent.VK_B: player.moveBy(-1, 1, 0); break;
case KeyEvent.VK_N: player.moveBy( 1, 1, 0); break;
case KeyEvent.VK_D: subscreen = new DropScreen(player); break;
}
switch (key.getKeyChar()){
case 'g':
case ',': player.pickup(); break;
case '<': player.moveBy( 0, 0, -1); break;
case '>': player.moveBy( 0, 0, 1); break;
}
}
if (subscreen == null)
world.update();
if (player.hp() < 1)
return new LoseScreen();
return this;
}
}