此处用的方法是面向过程,调用方法
public class RunWZQ {
public static void main(String[] args) {
WZQ.RUN();
}
}
这是调用方法的代码
同时需要再另外编写具体步骤的方法
package day2;
import java.util.Scanner;
public class WZQ {
static String white = "☆";
static String black = "★";
static String[][] qp = new String[15][15];
static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑",
"⒒", "⒓", "⒔", "⒕", "⒖"};
static String line = "十";
/* public static void main(String[] args) {
*/
启动游戏
初始化棋盘(开局初始一次)
打印棋盘(每落子一次都要打印一次棋盘)
输入坐标
判断输入的坐标是否合法 判断坐标输入是否重复
判断八个方向的输赢(水平向左,水平向右,竖直向上,竖直向上,竖直向下,左上,右下,左
下,右上)
/*
}*/
/*
启动游戏
*/
public static void RUN() {
WZQ.init();
WZQ.print();
WZQ.startGame();
}
/*
初始化棋盘
*/
public static void init() {
for (int i = 0; i < qp.length; i++) {
for (int j = 0; j < qp[i].length; j++) {
qp[i][j] = line;//每个位置都赋值成十字线
if (j == qp[i].length - 1) {
qp[i][j] = num[i];
}
if (i == qp.length - 1) {
qp[i][j] = num[j];
}
}
}
}
/*
打印棋盘
*/
public static void print() {
for (int i = 0; i < qp.length; i++) {
for (int j = 0; j < qp[i].length; j++) {
System.out.print(qp[i][j]);
}
System.out.println();
}
}
/*
开始下棋
*/
public static void startGame() {
boolean flag = true;//决定谁落子,true是黑棋,false是白棋
Scanner scanner = new Scanner(System.in);
while (true) {
if (flag) {
System.out.println("黑棋落子");
//行
int y = scanner.nextInt() - 1;
//列
int x = scanner.nextInt() - 1;
//判断坐标是否合法
boolean result = WZQ.check(y, x);
if (result) {
qp[y][x] = black;
WZQ.print();
//判断输赢
boolean win = IsWin(y, x, black);
if (win) {
System.out.println("黑棋胜利");
break;
}
flag = false;//当落子合法时才继续执行白棋落子
}
} else {//白棋落子
System.out.println("白棋落子");
//行
int y = scanner.nextInt() - 1;
//列
int x = scanner.nextInt() - 1;
boolean result = WZQ.check(y, x);
if (result) {
qp[y][x] = white;
WZQ.print();
//判断输赢
boolean win = IsWin(y, x, white);
if (win) {
System.out.println("白棋胜利");
break;
}
flag = true;
}
}
}
}
/*
检查输入坐标是否合法
*/
public static boolean check(int y, int x) {
if (y < 0 || y > 15 || x < 0 || x > 15) {
System.out.println("输入坐标有误请重新输入");
return false;
}
if (qp[y][x] != line) {
System.out.println("此位置已经落子,请重新输入");
return false;
}
return true;
}
/*
判断输赢
*/
public static boolean IsWin(int y,int x,String qz){
//判断水平方向的输赢
int shuipingsum = 1;//水平方向
//先向左找
for(int i = 0;i>=0;i--){
if (qp[y][i]==qz){
shuipingsum++;
}
else
break;
if (shuipingsum>=5){
return true;
}
}
//再向右找
for (int i=0;i>=0;i++){
if (qp[y][i]==qz){
shuipingsum++;
}
else
break;
}
if (shuipingsum>=5){
return true;
}
int shuzhisum =1;//竖直方向
//先向上找
for(int j = 0;j>=0;j--){
if (qp[j][x]==qz){
shuzhisum++;
}
else
break;
}
//再向下找
for (int j=0;j>=0;j++){
if (qp[j][x]==qz){
shuzhisum++;
}
else
break;
}
if (shuzhisum>=5) {
return true;
}
//左上右下判断
int zsyxsum = 1;
for (int i=y-1,j=x-1;i>=0&&j>=0;i--,j--) {
if (qp[i][j] == qz) {
zsyxsum++;
} else
break;
if (zsyxsum >= 5) {
return true;
}
}
for(int i=y+1,j=x+1;j<qp.length-1&&i<qp[0].length;i++,j++){
if (qp[i][j]==qz){
zsyxsum++;
}else
break;
}
if (zsyxsum>=5){
return true;
}
//左下右上判断
int yxzssum = 1;
for (int i=y+1,j=x-1;j>=0&&i<= qp[0].length;i--,j++) {
if (qp[i][j] == qz) {
yxzssum++;
} else
break;
if (yxzssum >= 5) {
return true;
}
}
for(int i=y-1,j=x+1;i>=0&&j<qp.length-1;i++,j++){
if (qp[i][j]==qz){
yxzssum++;
}else
break;
}
if (yxzssum>=5){
return true;
}
return false;
}
}