fork download
  1. import java.util.*;
  2. import java.io.*;
  3. import java.lang.*;
  4.  
  5. class Figure
  6. {
  7. String color;
  8.  
  9. protected Figure(String color) {
  10. this.color = color;
  11. }
  12. public String getColor() {
  13. return this.color;
  14. }
  15. }
  16. class Pawn extends Figure
  17. {
  18. public Pawn(String color) {
  19. super(color);
  20. }
  21. public String toString() {
  22. return color.charAt(0) + "P";
  23. }
  24. }
  25. class Queen extends Figure
  26. {
  27. public Queen(String color) {
  28. super(color);
  29. }
  30. public String toString() {
  31. return color.charAt(0) + "Q";
  32. }
  33. }
  34. class None extends Figure
  35. {
  36. public None() {
  37. super("None");
  38. }
  39. public String toString() {
  40. return "__";
  41. }
  42. }
  43. class BoardRow
  44. {
  45. List<Figure> row = new ArrayList<>();
  46.  
  47. public BoardRow() {
  48. for (int i = 0; i < 10; i++) {
  49. row.add(new None());
  50. }
  51. }
  52. public boolean setFigure(int n, Figure figure) {
  53. if (n < row.size()) {
  54. row.set(n, figure);
  55. return true;
  56. } else {
  57. return false;
  58. }
  59. }
  60. public String checkFigure(int n) {
  61. return "Figure at " + n + " position is " + row.get(n);
  62. }
  63. public Figure getFigure(int n) {
  64. return row.get(n);
  65. }
  66. public String toString() {
  67. String s = "";
  68. for(int n = 0; n < row.size(); n++) {
  69. s += "|" + row.get(n);
  70. }
  71. s = s + "|";
  72. return s;
  73. }
  74. }
  75. class Board
  76. {
  77. private String figuresOnTop;
  78. BoardRow r = new BoardRow();
  79. List<BoardRow> board = new ArrayList<>();
  80. public Board() {
  81. for (int i = 0; i < 10; i++) {
  82. board.add(new BoardRow());
  83. }
  84. }
  85. public boolean setFigure(Figure f, int x, int y) {
  86. if ((x < board.size()) && (y < board.size())) {
  87. board.get(y).setFigure(x, f);
  88. return true;
  89. } else {
  90. return false;
  91. }
  92. }
  93. public Figure getFigure(int x, int y) {
  94. return board.get(y).row.get(x); // WTF
  95. }
  96. public int maxX() {
  97. return board.size() - 1;
  98. }
  99. public int maxY() {
  100. return r.row.size() - 1;
  101. }
  102. public void showBoard() {
  103. String columns[] = {"1 ", "2 ", "3 ", "4 ", "5 ", "6 ", "7 ", "8 ", "9 ", "10"};
  104. System.out.println("__|A |B |C |D |E |F |G |H |I |J |");
  105. for(int n = 0; n < board.size(); n++) {
  106. System.out.println(columns[n] + board.get(n));
  107. }
  108. }
  109. public void initBoard(String figuresOnTop) {
  110. if (figuresOnTop == "random") {
  111. Random randomize = new Random();
  112. int random = randomize.nextInt(2);
  113. if (random == 0) {
  114. figuresOnTop = "white";
  115. } else {
  116. figuresOnTop = "black";
  117. }
  118. }
  119. if (figuresOnTop == "white") {
  120. for(int i = 0; i < r.row.size(); i++) {
  121. setFigure(new Pawn("white"), i, 0);
  122. setFigure(new Pawn("white"), i, 2);
  123. setFigure(new Pawn("white"), i + 1, 1);
  124. setFigure(new Pawn("black"), i + 1, 7);
  125. setFigure(new Pawn("black"), i, 8);
  126. setFigure(new Pawn("black"), i+ 1, 9);
  127. i++;
  128. }
  129. }
  130. else if (figuresOnTop == "black") {
  131. for(int i = 0; i < r.row.size(); i++) {
  132. setFigure(new Pawn("black"), i, 0);
  133. setFigure(new Pawn("black"), i, 2);
  134. setFigure(new Pawn("black"), i + 1, 1);
  135. setFigure(new Pawn("white"), i + 1, 7);
  136. setFigure(new Pawn("white"), i, 8);
  137. setFigure(new Pawn("white"), i+ 1, 9);
  138. i++;
  139. }
  140. } else {
  141. System.out.println("Wrong command!");
  142. }
  143. this.figuresOnTop = figuresOnTop;
  144. }
  145. public String getFiguresOnTop() {
  146. return figuresOnTop;
  147. }
  148. }
  149. class Checkers
  150. {
  151. Board board;
  152. String player1;
  153. String player2;
  154. String currentTurn = "white";
  155. public Checkers(String player1, String player2, String figuresOnTop){
  156. board = new Board();
  157. board.initBoard(figuresOnTop);
  158. this.player1 = player1;
  159. this.player2 = player2;
  160. }
  161. public String getOppositeColor(String currentTurn) {
  162. return currentTurn.equals("black") ? "white" : "black";
  163. }
  164. private boolean possibleMove(int x1, int y1, int x2, int y2) {
  165. if (((x2 == x1+1) && (y2 == y1+1)) ||
  166. ((x2 == x1+1) && (y2 == y1-1)) ||
  167. ((x2 == x1-1) && (y2 == y1+1)) ||
  168. ((x2 == x1-1) && (y2 == y1-1))) {
  169. return true;
  170. } else {
  171. return false;
  172. }
  173. }
  174. private boolean possibleMoveOver(int x1, int y1, int x2, int y2) {
  175. boolean result = false;
  176. if ((x2 == x1 + 2) && (y2 == y1 + 2)) {
  177. Figure f = board.getFigure(x1+1, y1+1);
  178. if ((f instanceof Pawn || f instanceof Queen) &&
  179. (f.getColor().equals(getOppositeColor(currentTurn)))) {
  180. result = true;
  181. }
  182. } else if ((x2 == x1 + 2) && (y2 == y1 - 2)) {
  183. Figure f = board.getFigure(x1+1, y1-1);
  184. if ((f instanceof Pawn || f instanceof Queen) &&
  185. (f.getColor().equals(getOppositeColor(currentTurn)))) {
  186. result = true;
  187. }
  188. } else if ((x2 == x1 - 2) && (y2 == y1 + 2)) {
  189. Figure f = board.getFigure(x1-1, y1+1);
  190. if ((f instanceof Pawn || f instanceof Queen) &&
  191. (f.getColor().equals(getOppositeColor(currentTurn)))) {
  192. result = true;
  193. }
  194. } else if ((x2 == x1 - 2) && (y2 == y1 - 2)) {
  195. Figure f = board.getFigure(x1-1, y1-1);
  196. if ((f instanceof Pawn || f instanceof Queen) &&
  197. (f.getColor().equals(getOppositeColor(currentTurn)))) {
  198. result = true;
  199. }
  200. }
  201. return result;
  202. }
  203. private boolean isOnBoard(int x, int y) {
  204. if ((x >= 0) && (y >= 0) && (x <= board.maxX()) && (y <= board.maxY())) {
  205. return true;
  206. } else {
  207. return false;
  208. }
  209. }
  210. private boolean isEmpty(int x, int y) {
  211. if (board.getFigure(x, y) instanceof None) {
  212. return true;
  213. } else {
  214. return false;
  215. }
  216. }
  217. private boolean ownFigure(int x, int y) {
  218. Figure f = board.getFigure(x, y);
  219. if (f.getColor().equals(currentTurn)) {
  220. return true;
  221. } else {
  222. return false;
  223. }
  224. }
  225. public boolean move(int x1, int y1, int x2, int y2) {
  226. if ((possibleMove(x1, y1, x2, y2) || possibleMoveOver(x1, y1, x2, y2)) &&
  227. isOnBoard(x2, y2) &&
  228. isEmpty(x2, y2) &&
  229. ownFigure(x1, y1)) {
  230. //movement
  231. Figure start = board.getFigure(x1, y1);
  232. Figure end = board.getFigure(x2, y2);
  233. board.setFigure(start, x2, y2);
  234. System.out.println(start);
  235. return true;
  236. } else {
  237. return false;
  238. }
  239. }
  240. public void showBoard() {
  241. board.showBoard();
  242. }
  243. }
  244. class App
  245. {
  246. public static void main(String[] args) {
  247. Checkers checkers = new Checkers("play1","play2","white");
  248. checkers.showBoard();
  249. checkers.move(0, 2, 1, 3);
  250. checkers.board.setFigure(new Queen("black"), 0, 9);
  251. checkers.showBoard();
  252.  
  253. }
  254. }
Success #stdin #stdout 0.17s 2841600KB
stdin
Standard input is empty
stdout
__|A |B |C |D |E |F |G |H |I |J |
1 |wP|__|wP|__|wP|__|wP|__|wP|__|
2 |__|wP|__|wP|__|wP|__|wP|__|wP|
3 |wP|__|wP|__|wP|__|wP|__|wP|__|
4 |__|__|__|__|__|__|__|__|__|__|
5 |__|__|__|__|__|__|__|__|__|__|
6 |__|__|__|__|__|__|__|__|__|__|
7 |__|__|__|__|__|__|__|__|__|__|
8 |__|bP|__|bP|__|bP|__|bP|__|bP|
9 |bP|__|bP|__|bP|__|bP|__|bP|__|
10|__|bP|__|bP|__|bP|__|bP|__|bP|
wP
__|A |B |C |D |E |F |G |H |I |J |
1 |wP|__|wP|__|wP|__|wP|__|wP|__|
2 |__|wP|__|wP|__|wP|__|wP|__|wP|
3 |wP|__|wP|__|wP|__|wP|__|wP|__|
4 |__|wP|__|__|__|__|__|__|__|__|
5 |__|__|__|__|__|__|__|__|__|__|
6 |__|__|__|__|__|__|__|__|__|__|
7 |__|__|__|__|__|__|__|__|__|__|
8 |__|bP|__|bP|__|bP|__|bP|__|bP|
9 |bP|__|bP|__|bP|__|bP|__|bP|__|
10|bQ|bP|__|bP|__|bP|__|bP|__|bP|