做个记录
方便复制粘贴
Checkerboard
Chess_player
Referee
Main
// 棋盘类
// 棋盘类
public class Checkerboard {
/**
* 显示棋盘
* X轴 y轴 对边框进行轴叙述
* 对初始棋盘
* 棋局开始后接收棋手的落子
* 归环境类管,受裁判监控
*
* 显示棋子
*/
private int Vertical=16; //纵经
private int horizontal=16; //横纬
public int getVertical() {return Vertical; }
public int getHorizontal() { return horizontal; }
//建立五子棋双重数组
public int[][] chess = new int[this.horizontal][this.Vertical];
//棋盘初始化方法
public void initialization(){
// 对边框进行轴叙述
for (int i = 0; i<16; i++){
/*chess[0][i]= String.valueOf(i);
chess[i][0]= String.valueOf(i);*/
chess[0][i] = i;
chess[i][0] = i;
}
//对初始棋盘进行归零处理
for(int i = 1;i<16;i++) {
for(int j =1;j<16;j++) {
// chess[i][j]="┼";
chess[i][j] = 0;
}
}
}
//棋盘呈现方法
public void present(){
//打印出棋盘
for(int i = 0;i<16;i++) {
for(int j =0;j<16;j++) {
if((i==0&&j>=10)||(i>=10&&j==0)) {
System.out.print(chess[i][j]+" ");
}else {
System.out.print(chess[i][j]+" ");
}
}
System.out.println("");
}
}
//获得棋盘对象中的棋盘二维数组
public int[][] getChessboard(){
return this.chess;
}
/* public static void main(String[] args) {
//产生一个棋盘
Checkerboard c = new Checkerboard();
c.initialization();
c.present();
c.chess[3][3] = 2;
c.present();
}*/
}
// 棋手类
// 棋手类
public class Chess_player {
/**
* 下棋
* 选择非零幸运数字(1,2,3,4,5,6,7,8,9)
* 悔棋 3次机会
* 认输
* 记住自己下的每一步
*/
//下棋
public static void press(int[][] chess,int who,int x,int y){
// 1 黑 2 白
if (who == 1){
chess[x][y] = 1;
}else {
chess[x][y] = 2;
}
}
}
// 裁判类
import java.util.Random;
// 裁判类
public class Referee {
/**
* 有一个棋盘
* 判断先手,确定黑白
* 限时指定谁下,超时犯规,对方赢
* 怎么算犯规
* 下棋的地方有棋子
* 下棋的地方越界
* 判断谁赢
*
* 记录棋手可选择幸运数字(1,2,3,4,5,6,7,8,9)
* 记录回合数(最多(15*15)/2=112个回合)
*/
//建立校正X,Y范围是否合理的变量
//裁判心里有数
int x;
int y;
//建立黑方和白方的X,Y轴数据变量
int blackYInput = 0;
int blackXInput = 0;
int whiteYInput = 0;
int whiteXInput = 0;
//猜先
public int caixian(){
// 1 黑先 2 白先
Random r = new Random();
int a = r.nextInt(100);
if (a<49){return 1; }else { return 2; }
}
//限时棋手轮下
public void time() {
int time = 60;
while (time > 0) {
time--;
try {
Thread.sleep(1000);
int hh = time / 60 / 60 % 60;
int mm = time / 60 % 60;
int ss = time % 60;
System.out.println("还剩" + ss + "秒");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//犯规
public boolean fangui(int [][] chess, int who, int x, int y){
//判断越界
if (x<1 | x>15 | y<1 | y>15){
System.out.println("手别抖啊,都下出界了");
return false;
}
//判断有子,谁的子
if (chess[x][y] == 1 ){
if(who == 1){
System.out.println("黑哥,这里自己下过的自己不知道??");
return false;
}else {
System.out.println("白哥,这里已经有黑子了。。。");
return false;
}
}else if(chess[x][y] == 2){
if(who == 2){
System.out.println("白哥,这里自己下过的自己不知道??");
return false;
}else {
System.out.println("黑哥,这里已经有黑子了。。。");
return false;
}
}
else {
return true;
}
}
//判赢
public boolean panying(int[][] chess,int who,int x,int y){
int nums =1;
int a=0;
String p = "";
if (who==1){
p = "黑子赢";
a = who; } else {
p = "白子赢";
a =2; }
//横向五个连续棋子
for(int i = 1;i<16;i++) {
for(int j =1;j<15;j++) {
if(chess[i][j]==a&&chess[i][j+1]==a) {
nums++;
if(nums == 5) {
System.out.println(p);
return true;
}
}else {
nums = 1;
}
}
}
nums = 1;
//纵向五个连续棋子
for(int j = 1;j<16;j++) {
for(int i =1;i<15;i++) {
if(chess[i][j]==a &&chess[i+1][j]== a ) {
nums++;
if(nums == 5) {
System.out.println(p);
return true;
}
}else {
nums = 1;
}
}
}
nums = 1;
//右上斜5个棋子
for (int i = 1; i < 15; i++) {
for (int j = 1; j < 16 ; j++) {
judge:for(int k = 1;k<5;k++) {
if((j-k)>0&&(i+k)<16) {
if(chess[j][i]== a &&chess[j-k][i+k]== a ) {
nums++;
}else {
nums=1;
break judge;}
}else break judge;
}
if(nums==5) {
System.out.println(p);
return true;
}
}
}
nums = 1;
//左上斜五个棋子
for (int i = 1; i < 15; i++) {
for (int j = 1; j < 16 ; j++) {
judge:for(int k = 1;k<5;k++) {
if((j-k)>0&&(i-k)>0) {
if(chess[j][i]== a &&chess[j-k][i-k]== a ) {
nums++;
}else {
nums=1;
break judge;}
}else break judge;
}
if(nums==5) {
System.out.println(p);
return true;
}
}
}
return false;
}
/*public static void main(String[] args) {
System.out.println(caixian());
time();
}*/
}
Main 环境类
import java.util.Scanner;
public class Main {
//自己和自己下
// private static int[][] c;
public static void main(String[] args) {
//产生一个棋盘
Checkerboard c = new Checkerboard();
//产生一个棋手 下子权限
Chess_player player = new Chess_player();
//产生一个裁判 棋盘所有权限
Referee referee = new Referee();
//游戏开始
System.out.println("游戏开始!");
c.initialization();
c.present();
// int[][] chess = c.getChessboard();
System.out.println("棋盘就位,棋手就位,裁判就位,请猜先。");
int a = referee.caixian();
int p1,p2 = 0;
String s1,s2 = "";
if (a == 1){
p1 = 1;p2 = 2;s1 = "黑选手";s2 = "白选手";
System.out.println("黑先。");
}else {
p1 = 2;p2 = 1;s1 = "白选手";s2 = "黑选手";
System.out.println("白先。");
}
System.out.println("准备好了? 开始");
//建立回合变量step
int step = 1;
//建立输入变量
Scanner input = new Scanner(System.in);
//开始回合循环
win:do {
System.out.println('请' + s1 + "输入x坐标");
referee.x = input.nextInt();
System.out.println('请' + s1 +"输入y坐标");
referee.y = input.nextInt();
if (referee.fangui(c.chess,p1,referee.x, referee.y)){
player.press(c.chess,p1,referee.x, referee.y);
c.present();
if(referee.panying(c.chess,p1,referee.x, referee.y)){
System.out.println("比赛结束、、");
break ;
}
}
System.out.println('请' + s2 +"输入x坐标");
referee.x = input.nextInt();
System.out.println('请' + s2 +"输入y坐标");
referee.y = input.nextInt();
if (referee.fangui(c.chess,p2,referee.x, referee.y)){
player.press(c.chess,p2,referee.x, referee.y);
c.present();
if(referee.panying(c.chess,p2,referee.x, referee.y)){
System.out.println("比赛结束、、");
break ;
}
}
//一回合结束,step+1
step++;
}while(step<112);
/*
*注:因为共有15*15=225个棋子位,一轮下来黑方和白方共下两个棋子,
* 故准备(15*15)/2=112个回合。
*/
}
}
说明文档
checkerboard 棋盘类
显示棋盘
X轴 y轴 对边框进行轴叙述
对初始棋盘进行归零处理
棋局开始后接收棋手的落子
归环境类管,受裁判监控
显示棋子
chess_player 棋手类
下棋
选择非零幸运数字(1,2,3,4,5,6,7,8,9)
悔棋
认输
记住自己下的每一步
referee 裁判类
判断先手,确定黑白
限时指定谁下,超时犯规,对方赢
怎么算犯规
下棋的地方有棋子
下棋的地方越界
判断谁赢
提供棋手可选择幸运数字(1,2,3,4,5,6,7,8,9)
记录回合数(最多(15*15)/2=112个回合)
Main 环境类
一个棋盘
一个裁判
两个棋手
有的地方有BUG
可以考虑加一个倒计时
没有机器人
没有智能棋盘(棋盘+裁判)