#java五子棋写法
- 话不多说,先上代码:
import java.util.Scanner;
public class FiveClass {
//定义静态数组用作棋盘的动态化变化
static String[][] a=new String[15][15];
//定义棋子在棋盘中x的位置
static int n1=1;
//定义棋子在棋盘中y的位置
static int n2=1;
//1,2,3来定义黑棋在棋盘内横,竖,斜连续的数量
static int sum1=0;
static int sum2=0;
static int sum3=0;
//4,5,6来定义黑棋在棋盘内横,竖,斜连续的数量
static int sum4=0;
static int sum5=0;
static int sum6=0;
//创造初始界面的棋盘
public static void CreatCharm(){
//创建索引来把数字插入棋盘中
int k1=0;
int k2=0;
//定义棋盘数字数组
String[] num={"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
for(int i=0;i<a.length;i++){
if(i==14){
for(k2=0;k2<15;k2++)
a[i][k2]=num[k2];
}
else{
for(int j=0;j<a.length;j++){
if(j==14&&i<14){
a[i][j]=num[k1];
k1++;
}
else{
a[i][j]="十";
}
}
}
}
}
//对棋盘进行遍历展示
public static void Show(){
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length;j++){
System.out.print(a[i][j]);
}
System.out.println();
}
}
//判断输入错误的的解决方法
public static void exmine() {
Scanner scan1 = new Scanner(System.in);
while (true) {
System.out.println("输入错误");
System.out.println("请重新输入:");
n1 = scan1.nextInt();
n2 = scan1.nextInt();
if ((n1 < 15 && n1 > 0) && (n2 < 15 && n2 > 0)) {
break;
}
}
}
//判断获胜的条件
public static int win() {
//对于横着的情况
if(n2>1&&n2<14){
//如果和左边与右边连续的黑子,则黑子横向变量sum1+1;
if(a[n1-1][n2-2].equals("★")||a[n1-1][n2].equals("★")){
sum1+=1;
}
}
//对于纵向的情况
if(n1>1&&n1<14){
//如果和上边与下边连续的黑子,则黑子横向变量sum2+1;
if(a[n1-2][n2-1].equals("★")||a[n1][n2-1].equals("★")){
sum2+=1;
}
}
//对于斜向的情况
if(n1>1&&n2>1&&n1<14&&n2<14) {
//如果和左斜上边与右斜上边和左斜下边和右斜下边连续的黑子,则黑子横向变量sum3+1;
if (a[n1 - 2][n2 - 2].equals("★") || a[n1][n2].equals("★") || a[n1 ][n2 - 2].equals("★") || a[n1 - 2][n2].equals("★")) {
sum3 += 1;
}
}
//对于横着的情况
if(n1>1&&n1<14){
//如果和左边与右边连续的白子,则白子横向变量sum4+1;
if(a[n1-2][n2-1].equals("☆")||a[n1][n2-1].equals("☆")){
sum4+=1;
}
}
//对于纵向的情况
if(n1>1&&n1<14){
//如果和上边与下边连续的白子,则白子横向变量sum5+1;
if(a[n1-2][n2-1].equals("☆")||a[n1][n2-1].equals("☆")){
sum5+=1;
}
}
//对于斜向的情况
if(n1>1&&n2>1&&n1<14&&n2<14) {
//如果和左斜上边与右斜上边和左斜下边和右斜下边连续的黑子,则黑子横向变量sum6+1;
if (a[n1 - 2][n2 - 2].equals("☆") || a[n1][n2].equals("☆") || a[n1 ][n2 - 2].equals("☆") || a[n1 - 2][n2].equals("☆")) {
sum6 += 1;
}
}
//由于不算此时的棋子数量,故只需判断4个与它相同的棋子数即可
if(sum1==4){
System.out.println("黑子赢");
return -1;
}
if(sum2==4){
System.out.println("黑子赢");
return -1;
}
if(sum3==4){
System.out.println("黑子赢");
return -1;
}
if(sum4==4){
System.out.println("白子赢");
return -1;
}
if(sum5==4){
System.out.println("白子赢");
return -1;
}
if(sum6==4){
System.out.println("白子赢");
return -1;
}
return 0;
}
public static void main(String[] args) {
//创建初始棋盘
CreatCharm();
//展示初始棋盘
Show();
Scanner scan=new Scanner(System.in);
while(true){
System.out.println("请黑子下子:");
//输入黑棋的坐标
n1=scan.nextInt();
n2=scan.nextInt();
//如果输入的位置不在棋盘内进入报错方法内
if((n1>=15||n1<=0)||(n2>=15||n2<=0)){
exmine();
}
//如果输入的棋子重复了,也进入报错方法内
if(a[n1-1][n2-1]!="十"){
System.out.println("不能重复下子");
exmine();
}
//将输入的棋子放在棋盘中
a[n1-1][n2-1]="★";
//判断是否获胜
int x=win();
//如果获胜的情况:
if(x==-1){
//展示棋盘
Show();
System.out.println("游戏结束");
//结束程序
break;
}
Show();
//与上述黑子思想相同
System.out.println("请白子下子:");
n1=scan.nextInt();
n2=scan.nextInt();
if((n1>=15||n1<=0)||(n2>=15||n2<=0)){
exmine();
}
if(a[n1-1][n2-1]!="十"){
System.out.println("不能重复下子");
exmine();
}
a[n1-1][n2-1]="☆";
win();
if(x==-1){
Show();
System.out.println("游戏结束");
break;
}
Show();
}
}
}
- 先创建一个棋盘,在主方法中将棋盘展示,其次写出各种方法(棋盘要写成静态变量,方便继承之前的棋子),方法有判断棋子是否越界,棋子是否重复,最后判断谁先成五子并获胜,各种方法的细节在代码中有相应注释。