import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.GridPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
import javafx.util.Duration;
public class Exercise16_15Extra extends Application {
private Cell[][] cells = new Cell[6][7];
private Timeline flashAnimation = new Timeline(
new KeyFrame(Duration.millis(400), e -> {
setFourCellColor();
}));
private Label lblStatus = new Label();
@Override // Override the start method in the Application class
public void start(Stage primaryStage) {
flashAnimation.setCycleCount(Timeline.INDEFINITE);
GridPane gridPane = new GridPane();
gridPane.setAlignment(Pos.CENTER);
gridPane.setHgap(5);
gridPane.setVgap(5);
gridPane.setStyle("-fx-background-color: green");
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 7; j++) {
cells[i][j] = new Cell(i, j);
gridPane.add(cells[i][j], j, i);
}
}
BorderPane pane = new BorderPane();
pane.setBottom(lblStatus);
BorderPane.setAlignment(lblStatus, Pos.CENTER);
pane.setCenter(gridPane);
// Create a scene and place it in the stage
Scene scene = new Scene(pane, 200, 200);
primaryStage.setTitle("Exercise16_15"); // Set the stage title
primaryStage.setScene(scene); // Place the scene in the stage
primaryStage.show(); // Display the stage
}
private void startOver() {
nextDisc = 'R';
result = null;
for (int i = 0; i < cells.length; i++) {
for (int j = 0; j < cells[i].length; j++) {
cells[i][j].token = ' ';
}
}
}
private char nextDisc = 'R';
private int[][] result;
private Button btStartOver = new Button("Start Over");
class Cell extends Circle {
char token = ' ';
int i, j;
boolean isFlashing;
private boolean available() {
return (token == ' ' && (i == 5 || cells[i + 1][j].token != ' '));
}
public Cell(int i, int j) {
super(10, 10, 20);
this.setFill(Color.WHITE);
this.setStroke(Color.BLACK);
this.i = i;
this.j = j;
this.setOnMousePressed(e -> {
if (result != null) {
return; // Game is over
}
if (available()) {
token = nextDisc;
if (token == 'Y') {
this.setFill(Color.YELLOW);
} else if (token == 'R') {
this.setFill(Color.RED);
}
result = isConsecutiveFour(cells);
if (result != null) {
flashAnimation.play();
} else if (nextDisc == 'R') {
nextDisc = 'Y';
} else {
nextDisc = 'R';
}
// Check if there is a draw?
if (isDraw()) {
lblStatus.setText("A draw, no winner, start over");
startOver();
}
}
});
}
}
private boolean isDraw() {
for (int i = 0; i < cells.length; i++) {
for (int j = 0; j < cells[i].length; j++) {
if (cells[i][j].token == ' ') {
return false;
}
}
}
return true;
}
public static int[][] isConsecutiveFour(Cell[][] cells) {
char[][] values = new char[cells.length][cells[0].length];
for (int i = 0; i < cells.length; i++) {
for (int j = 0; j < cells[i].length; j++) {
values[i][j] = cells[i][j].token;
}
}
return isConsecutiveFour(values);
}
/**
* Return null if no consecutive four; otherwise, return the locations of the
* four consecutive cells. The locations are in (result[0][0], result[0][1]),
* (result[1][0], result[1][1]), (result[2][0], result[2][1]), and
* (result[3][0], result[3][1])
*/
public static int[][] isConsecutiveFour(char[][] values) {
int numberOfRows = values.length;
int numberOfColumns = values[0].length;
// Check rows
for (int i = 0; i < numberOfRows; i++) {
if (isConsecutiveFour(values[i]) != null) {
int[][] result = new int[4][2];
result[0][0] = result[1][0] = result[2][0] = result[3][0] = i;
int k = isConsecutiveFour(values[i]);
result[0][1] = k;
result[1][1] = k + 1;
result[2][1] = k + 2;
result[3][1] = k + 3;
return result;
}
}
// Check columns
for (int j = 0; j < numberOfColumns; j++) {
char[] column = new char[numberOfRows];
// Get a column into an array
for (int i = 0; i < numberOfRows; i++) {
column[i] = values[i][j];
}
if (isConsecutiveFour(column) != null) {
int[][] result = new int[4][2];
result[0][1] = result[1][1] = result[2][1] = result[3][1] = j;
int k = isConsecutiveFour(column);
result[0][0] = k;
result[1][0] = k + 1;
result[2][0] = k + 2;
result[3][0] = k + 3;
return result;
}
}
// Check major diagonal (lower part)
for (int i = 0; i < numberOfRows - 3; i++) {
int numberOfElementsInDiagonal = Math.min(numberOfRows - i, numberOfColumns);
char[] diagonal = new char[numberOfElementsInDiagonal];
for (int k = 0; k < numberOfElementsInDiagonal; k++) {
diagonal[k] = values[k + i][k];
}
if (isConsecutiveFour(diagonal) != null) {
int[][] result = new int[4][2];
int k = isConsecutiveFour(diagonal);
result[0][0] = k + i;
result[1][0] = k + 1 + i;
result[2][0] = k + 2 + i;
result[3][0] = k + 3 + i;
result[0][1] = k;
result[1][1] = k + 1;
result[2][1] = k + 2;
result[3][1] = k + 3;
return result;
}
}
// Check major diagonal (upper part)
for (int j = 1; j < numberOfColumns - 3; j++) {
int numberOfElementsInDiagonal = Math.min(numberOfColumns - j, numberOfRows);
char[] diagonal = new char[numberOfElementsInDiagonal];
for (int k = 0; k < numberOfElementsInDiagonal; k++) {
diagonal[k] = values[k][k + j];
}
if (isConsecutiveFour(diagonal) != null) {
int[][] result = new int[4][2];
int k = isConsecutiveFour(diagonal);
result[0][0] = k;
result[1][0] = k + 1;
result[2][0] = k + 2;
result[3][0] = k + 3;
result[0][1] = k + j;
result[1][1] = k + 1 + j;
result[2][1] = k + 2 + j;
result[3][1] = k + 3 + j;
return result;
}
}
// Check sub-diagonal (left part)
for (int j = 3; j < numberOfColumns; j++) {
int numberOfElementsInDiagonal = Math.min(j + 1, numberOfRows);
char[] diagonal = new char[numberOfElementsInDiagonal];
for (int k = 0; k < numberOfElementsInDiagonal; k++) {
diagonal[k] = values[k][j - k];
}
if (isConsecutiveFour(diagonal) != null) {
int[][] result = new int[4][2];
int k = isConsecutiveFour(diagonal);
result[0][0] = k;
result[1][0] = k + 1;
result[2][0] = k + 2;
result[3][0] = k + 3;
result[0][1] = j - k;
result[1][1] = j - k - 1;
result[2][1] = j - k - 2;
result[3][1] = j - k - 3;
return result;
}
}
// Check sub-diagonal (right part)
for (int i = 1; i < numberOfRows - 3; i++) {
int numberOfElementsInDiagonal = Math.min(numberOfRows - i, numberOfColumns);
char[] diagonal = new char[numberOfElementsInDiagonal];
for (int k = 0; k < numberOfElementsInDiagonal; k++) {
diagonal[k] = values[
没有合适的资源?快使用搜索试试~ 我知道了~
java语言程序设计第十版课后答案
共634个文件
java:634个
需积分: 43 26 下载量 117 浏览量
2018-12-26
21:39:21
上传
评论 6
收藏 467KB ZIP 举报
温馨提示
java语言程序设计第十版课后答案!!!!!!!!!!
资源推荐
资源详情
资源评论
收起资源包目录
java语言程序设计第十版课后答案 (634个子文件)
Exercise16_15Extra.java 10KB
Exercise16_31.java 10KB
Exercise15_05Extra.java 8KB
Exercise16_14Extra.java 8KB
Exercise18_33.java 8KB
Exercise16_30.java 8KB
Exercise17_09.java 7KB
Exercise15_09Extra.java 7KB
Exercise18_32.java 7KB
Exercise16_09Extra.java 7KB
Exercise15_32.java 7KB
Exercise14_28.java 6KB
Exercise16_09.java 6KB
Exercise16_13Extra.java 6KB
Exercise14_27.java 6KB
Exercise18_26.java 6KB
Exercise16_16Extra.java 6KB
Exercise15_07Extra.java 6KB
Exercise16_29.java 6KB
Exercise17_21.java 5KB
Exercise15_33.java 5KB
Exercise13_19.java 5KB
Exercise16_08.java 5KB
Exercise15_10Extra.java 5KB
Exercise13_15.java 5KB
Exercise08_14.java 5KB
Exercise08_20.java 5KB
Exercise16_25.java 5KB
Exercise07_36UsingContinueStatement.java 5KB
Exercise16_19.java 5KB
Exercise10_08.java 5KB
Exercise10_12.java 5KB
Exercise15_21.java 5KB
Exercise07_05.java 4KB
Exercise16_04Extra.java 4KB
Exercise03_13.java 4KB
Exercise15_35.java 4KB
Exercise18_37.java 4KB
Exercise16_06Extra.java 4KB
Exercise09_06.java 4KB
Exercise15_34.java 4KB
Exercise16_18.java 4KB
Exercise16_11.java 4KB
Exercise08_19.java 4KB
Exercise06_34.java 4KB
Exercise18_27.java 4KB
Exercise15_20.java 4KB
Exercise16_11Extra.java 4KB
Exercise15_28.java 4KB
Exercise16_27.java 4KB
Exercise14_07Extra.java 4KB
Exercise17_20.java 3KB
Exercise16_02.java 3KB
Exercise13_14.java 3KB
Exercise18_35.java 3KB
Exercise16_03Extra.java 3KB
Exercise18_36.java 3KB
Exercise18_19.java 3KB
Exercise18_28.java 3KB
Exercise15_06Extra.java 3KB
Exercise10_27.java 3KB
Exercise14_04Extra.java 3KB
Exercise14_06Extra.java 3KB
Exercise18_34.java 3KB
Exercise15_29.java 3KB
Exercise11_08.java 3KB
Exercise16_24.java 3KB
Exercise13_05.java 3KB
Exercise14_23.java 3KB
Exercise18_39.java 3KB
Exercise16_10Extra.java 3KB
Exercise06_15.java 3KB
Exercise12_04Extra.java 3KB
Exercise16_23.java 3KB
Exercise15_17.java 3KB
Exercise13_17.java 3KB
Exercise06_24.java 3KB
Exercise16_14.java 3KB
Exercise16_08Extra.java 3KB
Exercise15_25.java 3KB
Exercise14_29.java 3KB
Exercise15_31.java 3KB
Exercise16_20.java 3KB
Exercise16_01.java 3KB
Exercise16_03.java 3KB
Exercise15_05.java 3KB
Exercise17_11.java 3KB
Exercise16_05Extra.java 3KB
Exercise12_33.java 3KB
Exercise10_09.java 3KB
Exercise18_38.java 3KB
Exercise05_29.java 3KB
Exercise15_02Extra.java 3KB
Exercise15_04Extra.java 3KB
Exercise16_06.java 3KB
Exercise15_16.java 3KB
Exercise16_01Extra.java 3KB
Exercise15_04.java 3KB
Exercise10_13.java 3KB
Exercise05_28.java 3KB
共 634 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论
weixin_43212280
- 粉丝: 3
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功