五子棋(方法版)——末尾有完整代码
使用方法来写小项目,可以减少大量的代码冗余
1.先定义五子棋的属性:
即:
白棋符号、黑棋符号、棋盘符号、网格序号、棋盘宽度
public static final String BAI = "○";//白棋符号
public static final String HEI = "●";//黑棋符号
public static final String XX = "+";//棋盘符号
static String[] nums = {" ","⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖","⒗","⒘","⒙","⒚","⒛"};//网格序号
static int sum=16;//棋盘宽度
static String a[][]=new String[sum][sum];//定义数组,储存棋盘
2.写入需要使用到的方法
1.初始化,载入棋盘初始数据
//初始化,载入棋盘初始数据
public static void getGobang()
{
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++) {
if(i==0) {
a[i][j]=nums[j];
}
else if(j==0&&i!=0) {
a[i][j]=nums[i];
}
else a[i][j]=XX;
}
}
}
2.判断落子位置是否符合规则
//判断落子位置是否符合规则
public static boolean islocation(boolean flag,int x,int y)
{
if(x<1||y<1||x>=15) {
System.out.print("坐标不存在\n");
return false;
}
else if(a[x][y]!=XX) {
System.out.print("坐标已被占用\n");
return false;
}
else return true;
}
3.确定落子颜色
//确定落子颜色
public static void printGobang(String[][] a) {
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
System.out.print(" "+a[i][j]);
System.out.print("\n");
}
}
4.确定落子颜色
//确定落子颜色
public static void Move(boolean flag,int x,int y)
{
if(flag)
a[x][y]=HEI;
else
a[x][y]=BAI;
}
5.判断是否分出了胜负
//判断是否分出了胜负
public static boolean isVictory(int x,int y)
{
System.out.print("已输入"+a[x][y]);
System.out.print("\n");
int p=1;
int max=x,may=y;
while(max>=1&&a[x][y]==a[--max][may])
{
p++;
}
max=x;
while(max<15&&a[x][y]==a[++max][may])
p++;
max=x;
if(p>=5) return true;
else p=1;
//xxxxxxx
while(a[x][y]==a[max][--may]&&may>=1)
p++;
may=y;
while(a[x][y]==a[max][++may]&&may<15)
p++;
may=y;
if(p>=5) return true;
else p=1;
//yyyyyyyy
while(a[x][y]==a[--max][--may]&&max>=1&&may>=1)
p++;
max=x;
may=y;
while(a[x][y]==a[++max][++may]&&max<15&&may<15)
p++;
max=x;
may=y;
if(p>=5) return true;
else p=1;
//xxxxxyyyyy
while(a[x][y]==a[--max][++may]&&max>=1&&may<15)
p++;
max=x;
may=y;
while(a[x][y]==a[++max][--may]&&max<15&&may>=1)
p++;
max=x;
may=y;
if(p>=5) return true;
else p=1;
//yyyyyxxxxx
return false;
}
6.写入主方法,调用其他方法开始运行
public static void main(String[] args)
{
Scanner reader=new Scanner(System.in);
//初始化棋盘
getGobang();
System.out.print("游戏开始\n");
//打印棋盘
printGobang(a);
int x,y;//记录输入坐标
boolean flag=true;
while(true)
{
System.out.println("请"+(flag?"黑":"白")+"棋落子");
System.out.print("请输入落子坐标X,输入-1结束游戏");
x=reader.nextInt();
System.out.print("请输入落子坐标y,输入-1结束游戏");
y=reader.nextInt();
if(x==-1||y==-1) break;
if(islocation(flag,x,y)) {
Move(flag,x,y);
if(isVictory(x,y)) {
printGobang(a);
System.out.print(((flag)?"黑":"白")+"棋获胜!!游戏结束!\n");
break;
}
else {
flag=!flag;
printGobang(a);
}
}
else{
continue;
}
}
}
源码附上::
package com.Xu.bank;//包名,根据自己的包名修改或直接删掉
//XuWenXing
import java.util.Scanner;
public class Gobang
{
public static final String BAI = "○";
public static final String HEI = "●";
public static final String XX = "+";
static String[] nums = {" ","⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖","⒗","⒘","⒙","⒚","⒛"};
static int sum=16;
static String a[][]=new String[sum][sum];
boolean isBlack = true;
public static void main(String[] args)
{
Scanner reader=new Scanner(System.in);
//初始化棋盘
getGobang();
System.out.print("游戏开始\n");
//打印棋盘
printGobang(a);
int x,y;//记录输入坐标
boolean flag=true;
while(true)
{
System.out.println("请"+(flag?"黑":"白")+"棋落子");
System.out.print("请输入落子坐标X,输入-1结束游戏");
x=reader.nextInt();
System.out.print("请输入落子坐标y,输入-1结束游戏");
y=reader.nextInt();
if(x==-1||y==-1) break;
if(islocation(flag,x,y)) {
Move(flag,x,y);
if(isVictory(x,y)) {
printGobang(a);
System.out.print(((flag)?"黑":"白")+"棋获胜!!游戏结束!\n");
break;
}
else {
flag=!flag;
printGobang(a);
}
}
else{
continue;
}
}
}
//初始化,载入棋盘初始数据
public static void getGobang()
{
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++) {
if(i==0) {
a[i][j]=nums[j];
}
else if(j==0&&i!=0) {
a[i][j]=nums[i];
}
else a[i][j]=XX;
}
}
}
//判断落子位置是否符合规则
public static boolean islocation(boolean flag,int x,int y)
{
if(x<1||y<1||x>=15) {
System.out.print("坐标不存在\n");
return false;
}
else if(a[x][y]!=XX) {
System.out.print("坐标已被占用\n");
return false;
}
else return true;
}
//刷新棋盘,打印棋盘
public static void printGobang(String[][] a) {
for(int i=0;i<15;i++)
{
for(int j=0;j<15;j++)
System.out.print(" "+a[i][j]);
System.out.print("\n");
}
}
//确定落子颜色
public static void Move(boolean flag,int x,int y)
{
if(flag)
a[x][y]=HEI;
else
a[x][y]=BAI;
}
//判断是否分出了胜负
public static boolean isVictory(int x,int y)
{
System.out.print("已输入"+a[x][y]);
System.out.print("\n");
int p=1;
int max=x,may=y;
while(max>=1&&a[x][y]==a[--max][may])
{
p++;
}
max=x;
while(max<15&&a[x][y]==a[++max][may])
p++;
max=x;
if(p>=5) return true;
else p=1;
//xxxxxxx
while(a[x][y]==a[max][--may]&&may>=1)
p++;
may=y;
while(a[x][y]==a[max][++may]&&may<15)
p++;
may=y;
if(p>=5) return true;
else p=1;
//yyyyyyyy
while(a[x][y]==a[--max][--may]&&max>=1&&may>=1)
p++;
max=x;
may=y;
while(a[x][y]==a[++max][++may]&&max<15&&may<15)
p++;
max=x;
may=y;
if(p>=5) return true;
else p=1;
//xxxxxyyyyy
while(a[x][y]==a[--max][++may]&&max>=1&&may<15)
p++;
max=x;
may=y;
while(a[x][y]==a[++max][--may]&&max<15&&may>=1)
p++;
max=x;
may=y;
if(p>=5) return true;
else p=1;
//yyyyyxxxxx
return false;
}
}
整体代码展示 运行展示
创作不易,每天更新优质内容,各位路过给个关注。。。。