elenhi, у меня есть наброски шахмат, когда-то писал, потом из-за недостатка времени забросил. Вот код:
Main.java
| Java | 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
| public class Main extends IOStream
{
public static void main(String[] args)
{
jar = false;
new Rook(Figure.Side.right, Figure.Color.white);
new Rook(Figure.Side.left, Figure.Color.white);
new Rook(Figure.Side.right, Figure.Color.black);
new Rook(Figure.Side.left, Figure.Color.black);
for(short i = 0; i < 8; ++i)
{
new Pawn(i, Figure.Color.black);
new Pawn(i, Figure.Color.white);
}
new Knight(Figure.Side.right, Figure.Color.white);
new Knight(Figure.Side.left, Figure.Color.white);
new Knight(Figure.Side.right, Figure.Color.black);
new Knight(Figure.Side.left, Figure.Color.black);
Figure.PrintBoard();
int m, h, v, h1, v1;
int i = 1;
for(;;)
{
Print("0 - Выход;\n1 - Следующий ход;\nВаш выбор:\n> ");
m = ReadInt(0, 1);
if(m == 0)
Exit();
else
{
Print("\nВведите координаты фигуры:\nВведите горизонталь\n> ");
h = ReadInt(1, 8);
Print("Введите вертикаль\n> ");
v = ReadInt(1, 8);
Print("\nВведите координаты хода:\nВведите горизонталь\n> ");
h1 = ReadInt(1, 8);
Print("Введите вертикаль\n> ");
v1 = ReadInt(1, 8);
if(Figure.Move(h, v, new Location(h1, v1), i))
++i;
Figure.PrintBoard();
}
}
}
} |
|
IOStream.java
| Java | 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
| class IOStream
{
static boolean jar;
static private java.io.BufferedReader jin =
new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
static private String buf;
static String ReadString()
{
try
{
buf = jin.readLine();
}
catch (java.io.IOException e)
{
buf = "null";
}
return buf;
}
static double ReadDouble()
{
double buf;
try
{
buf = Double.parseDouble(jin.readLine());
}
catch (java.io.IOException e)
{
buf = 0.0;
}
catch(NumberFormatException e)
{
Print("Введены некорректные данные, повторите ввод!\n");
buf = ReadDouble();
}
return buf;
}
static int ReadInt()
{
int buf;
try
{
buf = Integer.parseInt(jin.readLine());
}
catch (java.io.IOException e)
{
buf = 0;
}
catch(NumberFormatException e)
{
Print("Введены некорректные данные, повторите ввод!\n");
buf = ReadInt();
}
return buf;
}
static short ReadShort()
{
short buf;
try
{
buf = Short.parseShort(jin.readLine());
}
catch (java.io.IOException e)
{
buf = 0;
}
catch(NumberFormatException e)
{
Print("Введены некорректные данные, повторите ввод!\n");
buf = ReadShort();
}
return buf;
}
static byte ReadByte()
{
byte buf;
try
{
buf = Byte.parseByte((jin.readLine()));
}
catch (java.io.IOException e)
{
buf = 0;
}
catch(NumberFormatException e)
{
Print("Введены некорректные данные, повторите ввод!\n");
buf = ReadByte();
}
return buf;
}
static boolean ReadBool()
{
boolean buf1;
try
{
buf = jin.readLine();
if(Boolean.parseBoolean(buf))
return true;
else
if(buf.equalsIgnoreCase("false"))
return false;
else
throw new Exception();
}
catch (Exception e)
{
Print("Введены некорректные данные, повторите ввод!\n");
buf1 = ReadBool();
}
return buf1;
}
static void Print(String text)
{
if(jar)
System.out.print(Repl(text));
else
System.out.print(text);
}
static void PrintLine(String text)
{
if(jar)
System.out.println(Repl(text));
else
System.out.println(text);
}
static void PrintLine()
{
System.out.println();
}
static protected void Pause()
{
try
{
Print("\nДля продолжения нажмите Enter...");
buf = jin.readLine();
}
catch (java.io.IOException e)
{
}
}
static protected void Exit()
{
Print("Выход...");
Pause();
System.exit(0);
}
static short ReadShort(short infinum, short supremum)
{
short buf;
try
{
buf = Short.parseShort(jin.readLine());
if(buf < infinum || buf > supremum)
throw new NumberFormatException();
}
catch (java.io.IOException e)
{
buf = 0;
}
catch(NumberFormatException e)
{
Print("Введены некорректные данные, повторите ввод!\n");
buf = ReadShort(infinum, supremum);
}
return buf;
}
static byte ReadByte(byte infinum, byte supremum)
{
byte buf;
try
{
buf = Byte.parseByte((jin.readLine()));
if(buf < infinum || buf > supremum)
throw new NumberFormatException();
}
catch (java.io.IOException e)
{
buf = 0;
}
catch(NumberFormatException e)
{
Print("Введены некорректные данные, повторите ввод!\n");
buf = ReadByte(infinum, supremum);
}
return buf;
}
static int ReadInt(int infinum, int supremum)
{
int buf;
try
{
buf = Integer.parseInt(jin.readLine());
if(buf < infinum || buf > supremum)
throw new NumberFormatException();
}
catch (java.io.IOException e)
{
buf = 0;
}
catch(NumberFormatException e)
{
Print("Введены некорректные данные, повторите ввод!\n");
buf = ReadInt(infinum, supremum);
}
return buf;
}
static String Repl(String text)
{
String []LRus = {"а", "б", "в", "г", "д", "е", "ё", "ж", "з", "и", "й",
"к", "л", "м", "н", "о", "п", "р", "с", "т", "у", "ф",
"х", "ц", "ч", "ш", "щ", "ь", "ы", "ъ", "э", "ю", "я" };
String []URus = {"А", "Б", "В", "Г", "Д", "Е", "Ё", "Ж", "З", "И", "К",
"К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф",
"Х", "Ц", "Ч", "Ш", "Щ", "Ь", "Ы", "Ъ", "Э", "Ю", "Я" };
String []LEng = {"a", "b", "v", "g", "d", "e", "jo", "zh", "z", "i", "j", "k",
"l", "m", "n", "o", "p", "r", "s", "t", "u", "f", "kh", "ts",
"ch", "sh", "sch", "'", "y", "'", "e", "ju", "ja" };
String []UEng = {"A", "B", "V", "G", "D", "E", "Jo", "Zh", "Z", "I", "J", "K",
"L", "M", "N", "O", "P", "R", "S", "T", "U", "F", "Kh", "Ts",
"Ch", "Sh", "Sch", "'", "Y", "'", "E", "Ju", "Ja" };
byte index;
for(index = 0; index < 33; ++index)
{
text = text.replace(LRus[index], LEng[index]);
text = text.replace(URus[index], UEng[index]);
}
return text;
}
} |
|
Figure.java
| Java | 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
| public abstract class Figure
{
enum Side { right, left };
enum Color { white, black };
boolean IsALive() { return true; };
boolean Move(Location lc) { return true; };
void PrintPos(){};
void Die(){};
Location getLocation() { return (new Location(0, 0)); };
public Color getColor() { return Color.black; }
static protected String[][] Board = {{"--", "--", "--", "--", "--", "--", "--", "--"},
{"--", "--", "--", "--", "--", "--", "--", "--"},
{"--", "--", "--", "--", "--", "--", "--", "--"},
{"--", "--", "--", "--", "--", "--", "--", "--"},
{"--", "--", "--", "--", "--", "--", "--", "--"},
{"--", "--", "--", "--", "--", "--", "--", "--"},
{"--", "--", "--", "--", "--", "--", "--", "--"},
{"--", "--", "--", "--", "--", "--", "--", "--"}};
static Figure[][] _Figure = {{null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null}};
protected static void Matr(Figure fg)
{
Location lc = fg.getLocation();
_Figure[lc.h][lc.v] = fg;
}
static void PrintBoard()
{
IOStream.PrintLine("\nДоска");
for(int i = 0; i < 8; ++i, IOStream.PrintLine())
for(int j = 0; j < 8; ++j)
IOStream.Print(Board[i][j] + " ");
}
static void PrintF() // Debug Object
{
for(int i = 0; i < 8; ++i, IOStream.PrintLine())
for(int j = 0; j < 8; ++j)
if(_Figure[i][j] == null)
IOStream.Print("null\t");
else
IOStream.Print(_Figure[i][j].toString().split("@")[0].concat("\t"));
}
static boolean Move(int h, int v, Location loc, int i)
{
--h;
--v;
if(_Figure[h][v] != null)
if((_Figure[h][v].getColor() == Color.white && (i & 1) == 1) ||
(_Figure[h][v].getColor() == Color.black && (i & 1) == 0))
return _Figure[h][v].Move(loc);
else
{
IOStream.PrintLine("\nСейчас не ваш ход!");
return false;
}
else
{
IOStream.PrintLine("На этой клетке фигуры отсутствуют!");
return false;
}
}
} |
|
Rook.java
| Java | 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
| public class Rook extends Figure
{
private Location loc = new Location(0, 0);
private Color color;
public void setLocation(short h, short v)
{
loc.h = h;
loc.v = v;
}
public Location getLocation()
{
return loc;
}
public Color getColor()
{
return color;
}
Rook(Side sd, Color clr)
{
color = clr;
if(sd.equals(Side.right))
loc.v = 7;
else
loc.v = 0;
if(clr.equals(Color.white))
loc.h = 7;
else
loc.h = 0;
Board[loc.h][loc.v] = color.equals(Color.white) ? "WR" : "BR";
Matr(this);
}
Rook(int h, int v, Color clr)
{
loc.h = (short)(h - 1);
loc.v = (short)(v - 1);
color = clr;
Board[loc.h][loc.v] = color.equals(Color.white) ? "WR" : "BR";
Matr(this);
}
boolean IsALive()
{
return (loc.h != -1 && loc.v != -1) ? true : false;
}
void Die()
{
IOStream.PrintLine("\nЛадья убита!");
loc.h = loc.v = -1;
}
void PrintPos() // Debug Object
{
if(loc.h != -1)
{
IOStream.PrintLine("\nПоложение ладьи на доске:");
short i, j;
for(i = 0; i < 8; ++i, IOStream.PrintLine())
for(j = 0; j < 8; ++j)
if(i != loc.h || j != loc.v)
IOStream.Print("-- ");
else
IOStream.Print(color.equals(Color.white) ? "WR " : "BR ");
}
else
IOStream.PrintLine("\nЛадья уже мертва!");
}
boolean Move(Location lc)
{
--lc.h;
--lc.v;
if(lc.v >= 0 && lc.v < 8 && lc.h >= 0 && lc.h < 8 &&
((lc.h != loc.h && lc.v == loc.v) || (lc.v != loc.v && lc.h == loc.h)))
{
int i;
boolean fh = true, fv = true;
C: for(int j = 0; j < 1; ++j)
{
if(lc.v == loc.v && lc.h != loc.h)
if(loc.h > lc.h)
{
for(i = lc.h + 1; i < loc.h; ++i)
if(_Figure[i][loc.v] != null )
{
IOStream.PrintLine("\nХод невозможен, на пути стоит другая фигура!");
fh = false;
break C;
}
}
else
for(i = loc.h + 1; i < lc.h; ++i)
if(_Figure[i][loc.v] != null)
{
IOStream.PrintLine("\nХод невозможен, на пути стоит другая фигура!");
fh = false;
break C;
}
if(lc.v != loc.v && lc.h == loc.h)
if(loc.v > lc.v && fh)
{
for(i = lc.v + 1; i < loc.v; ++i)
if(_Figure[loc.h][i] != null)
{
IOStream.PrintLine("\nХод невозможен, на пути стоит другая фигура!");
fv = false;
break C;
}
}
else
for(i = loc.v + 1; i < lc.v; ++i)
if(_Figure[loc.h][i] != null)
{
IOStream.PrintLine("\nХод невозможен, на пути стоит другая фигура!");
fv = false;
break C;
}
if(!(fh && fv))
return false;
}
if(fh && fv && _Figure[lc.h][lc.v] != null &&
((_Figure[lc.h][lc.v].getColor().equals(Color.black) && color.equals(Color.white)) ||
(_Figure[lc.h][lc.v].getColor().equals(Color.white) && color.equals(Color.black))))
{
_Figure[lc.h][lc.v].Die();
Board[loc.h][loc.v] = "--";
_Figure[lc.h][lc.v] = _Figure[loc.h][loc.v];
_Figure[loc.h][loc.v] = null;
loc.h = lc.h;
loc.v = lc.v;
Board[loc.h][loc.v] = color.equals(Color.white) ? "WR" : "BR";
return true;
}
else
if(fh && fv && _Figure[lc.h][lc.v] == null)
{
Board[loc.h][loc.v] = "--";
_Figure[lc.h][lc.v] = _Figure[loc.h][loc.v];
_Figure[loc.h][loc.v] = null;
loc.h = lc.h;
loc.v = lc.v;
Board[loc.h][loc.v] = color.equals(Color.white) ? "WR" : "BR";
return true;
}
else
if(fh && fv)
{
IOStream.PrintLine("\nНевозможно убить свою фигуру");
return false;
}
}
else
{
IOStream.PrintLine("\nВведены неверные координаты!");
return false;
}
return false;
}
} |
|
Knight.java
| Java | 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
| public class Knight extends Figure
{
private Location loc = new Location(0, 0);
private Color color;
public void setLocation(short h, short v)
{
loc.h = h;
loc.v = v;
}
public Location getLocation()
{
return loc;
}
public Color getColor()
{
return color;
}
Knight(Side sd, Color clr)
{
color = clr;
if(sd.equals(Side.right))
loc.v = 6;
else
loc.v = 1;
if(clr.equals(Color.white))
loc.h = 7;
else
loc.h = 0;
Board[loc.h][loc.v] = color.equals(Color.white) ? "WK" : "BK";
Matr(this);
}
Knight(int h, int v, Color clr)
{
loc.h = (short)(h - 1);
loc.v = (short)(v - 1);
color = clr;
Matr(this);
}
boolean IsALive()
{
return (loc.h != -1 && loc.v != -1) ? true : false;
}
void Die()
{
IOStream.PrintLine("\nКонь убит!");
loc.h = loc.v = -1;
}
void PrintPos()
{
if(loc.h != -1)
{
IOStream.PrintLine("\nПоложение коня на доске:");
short i, j;
for(i = 0; i < 8; ++i, IOStream.PrintLine())
for(j = 0; j < 8; ++j)
if(i != loc.h || j != loc.v)
IOStream.Print("-- ");
else
IOStream.Print(color.equals(Color.white) ? "WK " : "BK ");
}
else
IOStream.PrintLine("\nКонь уже давно умер и без вас!");
}
boolean Move(Location lc)
{
--lc.h;
--lc.v;
if(lc.v >= 0 && lc.v < 8 && lc.h >= 0 && lc.h < 8)
{
boolean flag = true;
if((!(lc.h == loc.h - 1 && lc.v == loc.v - 2) && !(lc.h == loc.h - 2 && lc.v == loc.v - 1)) &&
(!(lc.h == loc.h - 2 && lc.v == loc.v + 1) && !(lc.h == loc.h - 1 && lc.v == loc.v + 2)) &&
(!(lc.h == loc.h + 1 && lc.v == loc.v + 2) && !(lc.h == loc.h + 2 && lc.v == loc.v + 1)) &&
(!(lc.h == loc.h + 2 && lc.v == loc.v - 1) && !(lc.h == loc.h + 1 && lc.v == loc.v - 2)))
flag = false;
if(flag)
if((_Figure[lc.h][lc.v].getColor().equals(Color.black) && color.equals(Color.white)) ||
(_Figure[lc.h][lc.v].getColor().equals(Color.white) && color.equals(Color.black)))
{
_Figure[lc.h][lc.v].Die();
Board[loc.h][loc.v] = "--";
_Figure[lc.h][lc.v] = _Figure[loc.h][loc.v];
_Figure[loc.h][loc.v] = null;
loc.h = lc.h;
loc.v = lc.v;
Board[loc.h][loc.v] = color.equals(Color.white) ? "WK" : "BK";
return true;
}
else
if(Board[lc.h][lc.v].equals("--"))
{
Board[loc.h][loc.v] = "--";
_Figure[lc.h][lc.v] = _Figure[loc.h][loc.v];
_Figure[loc.h][loc.v] = null;
loc.h = lc.h;
loc.v = lc.v;
Board[loc.h][loc.v] = color.equals(Color.white) ? "WK" : "BK";
return true;
}
else
{
IOStream.PrintLine("\nНевозможно убить свою фигуру");
return false;
}
else
{
IOStream.PrintLine("\nВведены неверные координаты!");
return false;
}
}
else
{
IOStream.PrintLine("\nВведены неверные координаты!");
return false;
}
}
} |
|
Pawn.java
| Java | 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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
| public class Pawn extends Figure
{
private Location loc = new Location(0, 0);
private Color color;
public void setLocation(short h, short v)
{
loc.h = h;
loc.v = v;
}
public Location getLocation()
{
return loc;
}
public Color getColor()
{
return color;
}
Pawn(short side, Color clr)
{
color = clr;
loc.v = side;
if(clr.equals(Color.white))
loc.h = 6;
else
loc.h = 1;
Board[loc.h][loc.v] = color.equals(Color.white) ? "WP" : "BP";
Matr(this);
}
Pawn(int h, int v, Color clr)
{
loc.h = (short)(h - 1);
loc.v = (short)(v - 1);
color = clr;
Board[loc.h][loc.v] = color.equals(Color.white) ? "WP" : "BP";
Matr(this);
}
boolean IsALive()
{
return (loc.h != -1 && loc.v != -1) ? true : false;
}
void Die()
{
IOStream.PrintLine("\nПешка убита!");
loc.h = loc.v = -1;
}
void PrintPos() // Debug Object
{
if(loc.h != -1)
{
IOStream.PrintLine("\nПоложение пешки на доске:");
short i, j;
for(i = 0; i < 8; ++i, IOStream.PrintLine())
for(j = 0; j < 8; ++j)
if(i != loc.h || j != loc.v)
IOStream.Print("-- ");
else
IOStream.Print(color.equals(Color.white) ? "WR " : "BR ");
}
else
IOStream.PrintLine("\nПешка уже мертва!");
}
boolean Move(Location lc)
{
--lc.h;
--lc.v;
if(lc.v >= 0 && lc.v < 8 && lc.h > 0 && lc.h < 7 &&
((loc.h == 1 && color.equals(Color.black) && lc.h == 3 && lc.v == loc.v &&
_Figure[3][lc.v] == null && _Figure[2][lc.v] == null) ||
(loc.h == 6 && color.equals(Color.white) && lc.h == 4 && lc.v == loc.v &&
_Figure[4][lc.v] == null && _Figure[5][lc.v] == null) ||
(loc.h >= 1 && color.equals(Color.black) && lc.h - loc.h == 1 && lc.v == loc.v &&
_Figure[lc.h][lc.v] == null) ||
(loc.h <= 6 && color.equals(Color.white) && loc.h - lc.h == 1 && lc.v == loc.v &&
_Figure[lc.h][lc.v] == null) ||
(loc.h >= 1 && color.equals(Color.black) &&
lc.h - loc.h == 1 && Math.abs(lc.v - loc.v) == 1 &&
_Figure[lc.h][lc.v] != null) ||
(loc.h <= 6 && color.equals(Color.white) &&
loc.h - lc.h == 1 && Math.abs(lc.v - loc.v) == 1 &&
_Figure[lc.h][lc.v] != null)))
{
if(_Figure[lc.h][lc.v] != null &&
((_Figure[lc.h][lc.v].getColor().equals(Color.black) && color.equals(Color.white)) ||
(_Figure[lc.h][lc.v].getColor().equals(Color.white) && color.equals(Color.black))))
{
_Figure[lc.h][lc.v].Die();
Board[loc.h][loc.v] = "--";
_Figure[lc.h][lc.v] = _Figure[loc.h][loc.v];
_Figure[loc.h][loc.v] = null;
loc.h = lc.h;
loc.v = lc.v;
Board[loc.h][loc.v] = color.equals(Color.white) ? "WP" : "BP";
return true;
}
else
if(_Figure[lc.h][lc.v] == null)
{
Board[loc.h][loc.v] = "--";
_Figure[lc.h][lc.v] = _Figure[loc.h][loc.v];
_Figure[loc.h][loc.v] = null;
loc.h = lc.h;
loc.v = lc.v;
Board[loc.h][loc.v] = color.equals(Color.white) ? "WP" : "BP";
return true;
}
else
{
IOStream.PrintLine("\nНевозможно убить свою фигуру");
return false;
}
}
else
{
IOStream.PrintLine("\nВведены неверные координаты!");
return false;
}
}
} |
|
Location.java
| Java | 1
2
3
4
5
6
7
8
9
10
| public class Location
{
short h;
short v;
Location(int h, int v)
{
this.h = (short)h;
this.v = (short)v;
}
} |
|
0
|