Jump to content

Generate random chess position: Difference between revisions

m (→‎{{header|REXX}}: changed/added comments and whitespace, changed indentations.)
(→‎{{header|Java}}: added Java)
Line 167:
b1Q1Bb1J/j1N1PpK1/PpB1P1Pp/2pp2PN/3nnk2/3J4/P6P/1N2Qb1J w - - 0 1
</lang>
 
 
=={{header|Java}}==
<lang java>import static java.lang.Math.abs;
import java.util.Random;
 
public class Fen {
static Random rand = new Random();
 
public static void main(String[] args) {
System.out.println(createFen());
}
 
static String createFen() {
char[][] grid = new char[8][8];
 
placeKings(grid);
placePiece(grid, "PPPPPPPP", 0);
placePiece(grid, "pppppppp", 7);
placePiece(grid, "RrNnBbQqBbNnRr", -1);
 
return toFen(grid);
}
 
static void placeKings(char[][] grid) {
int r1, c1, r2, c2;
while (true) {
r1 = rand.nextInt(8);
c1 = rand.nextInt(8);
r2 = rand.nextInt(8);
c2 = rand.nextInt(8);
 
if (grid[r2][c2] == 0 && grid[r2][c2] == 0
&& abs(r1 - r2) > 1 && abs(c1 - c2) > 1)
break;
}
grid[r1][c1] = 'K';
grid[r2][c2] = 'k';
}
 
static void placePiece(char[][] grid, String pieces, int blockedRank) {
int numToPlace = rand.nextInt(pieces.length());
for (int n = 0; n < numToPlace; n++) {
int r, c;
do {
r = rand.nextInt(8);
c = rand.nextInt(8);
} while (grid[r][c] != 0 || r == blockedRank);
 
grid[r][c] = pieces.charAt(n);
}
}
 
static String toFen(char[][] grid) {
for (char[] row : grid) {
for (char c : row)
System.out.printf("%2c ", c == 0 ? '.' : c);
System.out.println();
}
 
StringBuilder fen = new StringBuilder();
int countEmpty = 0;
for (int r = 0; r < 8; r++) {
for (int c = 0; c < 8; c++) {
char ch = grid[r][c];
if (ch == 0) {
countEmpty++;
} else {
if (countEmpty > 0) {
fen.append(countEmpty);
countEmpty = 0;
}
fen.append(ch);
}
}
if (countEmpty > 0) {
fen.append(countEmpty);
countEmpty = 0;
}
fen.append("/");
}
return fen.append(" w - - 0 1").toString();
}
}</lang>
<pre> . p R n b p . .
. p . B . . . P
P Q . . . . P .
. . . . . . p p
B . . r p . . .
. N . . K . . .
P p q . . . . .
. . . P . . P k
1pRnbp2/1p1B3P/PQ4P1/6pp/B2rp3/1N2K3/Ppq5/3P2Pk/ w - - 0 1</pre>
 
=={{header|Perl 6}}==
Anonymous user
Cookies help us deliver our services. By using our services, you agree to our use of cookies.