Java实现简单五子棋
目录
1.设计思路
1.启动五子棋游戏 调用一个方法
初始化棋盘(开始之初初始化一次,对二维数组进行赋值) -- 初始化方法
打印出五子棋棋盘(重复使用多次) -- 打印棋盘方法
2.下棋 黑白双方交替下棋
输入坐标(黑棋,白棋哪个先下棋)
判断坐标是否合法,判断是否重复
判断输赢
2.代码实现
1.初始化需要的变量
static String white = "☆";
static String black = "★";
static String[][] qp = new String[15][15];
static String[] num = {"⒈", "⒉", "⒊", "⒋", "⒌", "⒍", "⒎", "⒏", "⒐", "⒑", "⒒", "⒓", "⒔", "⒕", "⒖"};
static String line = "十";
2.初始化棋盘和打印棋盘的方法
/**
* 初始化棋盘
*/
public static void qipan(){
qp[14]=num;//棋盘最后一行为数字
int t=0;
for (int i = 0; i < qp.length-1; i++) {//循环14行即可
for (int j = 0; j < qp.length; j++) {//每一列
if (j == 14) {
qp[i][j] = num[i];//最后一列为数字
} else {
qp[i][j] = line;
}
}
}
}
/**
* 打印棋盘
*/
public static void print(){
/*输出棋盘*/
for (int i = 0; i <15 ; i++) {
for (int j = 0; j < 15; j++) {
System.out.print(qp[i][j]);
}
System.out.println();
}
}
3.判断胜利的方法
分别判断垂直、水平、左斜、右斜四个方向。只要满足某个方向连续5个棋子颜色相同,即胜利
代码如下:
private static boolean shuying(int x, int y, String qz) {
//判断水平输赢
int spsum = 0;
for (int i = y; i >= 0; i--) {//判断向左
if (qp[x][i] == qz) {
spsum++;
} else break;
}
for (int i = y + 1; i < qp.length - 1; i++) {//判断向右
if (qp[x][i] == qz) {
spsum++;
} else break;
}
if (spsum >= 5)
return true;
//判断垂直输赢
int czsum = 0;
for (int i = x; i >= 0; i--) {//判断向上
if (qp[i][y] == qz) {
czsum++;
} else break;
}
for (int i = x + 1; i < qp.length - 1; i++) {//判断向下
if (qp[i][y] == qz) {
czsum++;
} else break;
}
if (czsum >= 5)
return true;
//判断左斜
int zxsum=0;
for (int i = x,j=y; i >=0&&j>=0; i--,j--) {//判断左上
if(qp[i][j]==qz){
zxsum++;
}else break;
}
for (int i = x+1,j=y+1; i <qp.length-1&&j<qp[0].length-1; i++,j++) {//判断右下
if(qp[i][j]==qz){
zxsum++;
}else break;
}
if(zxsum>=5){
return true;
}
//判断右斜
int yxsum=0;
for(int i=x,j=y;i>=0&&j<qp[0].length-1;i--,j++){//判断右上
if(qp[i][j]==qz){
yxsum++;
}else break;
}
for(int i=x+1,j=y-1; i<qp.length-1&&j>=0;i++,j--){//判断左下
if(qp[i][j]==qz){
yxsum++;
}else break;
}
if(yxsum>=5){
return true;
}
else return false;
}
4.开始下棋
黑子先下,然后调用打印棋盘方法,将棋盘打印出来,再判断黑棋是否胜利;
白棋下子,然后打印棋盘,判断胜负,一直重复下棋。知道一方胜利,游戏结束
注:没下一步需要判断棋子的坐标是否合法
判断输赢代码
public static boolean panduan(int x,int y){
if(x>=14||y>=14||qp[x][y]!=line){
System.out.println("输入的不合法");
return false;
}
else return true;
}
开始下棋代码
public static void xiaqi() {
boolean flag = true;
Scanner s = new Scanner(System.in);
while (true) {
if (flag) {
System.out.println("请黑子下棋");
int x = s.nextInt() - 1;
int y = s.nextInt() - 1;
boolean b = panduan(x, y);
if (b) {
qp[x][y] = black;
print();
boolean win = shuying(x, y, black);
if (win) {
System.out.println("黑棋胜利");
break;
}
flag = false;
}
} else {
System.out.println("请白子下棋");
int x = s.nextInt() - 1;
int y = s.nextInt() - 1;
boolean b = panduan(x, y);
if (b) {
qp[x][y] = white;
print();
boolean win = shuying(x, y, white);
if (win) {
System.out.println("白棋胜利");
break;
}
flag = true;
}
}
}
}
5.总体代码
import java.util.Scanner;
/**
* 1.先初始化棋盘;
* 2.判断下棋的位置是否合法,合法将棋盘打印出来
* 3.判断输赢
*/
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) {
qipan();//初始化棋盘
print();//打印棋盘
xiaqi();//开始下棋
}
/**
* 开始下棋
*/
public static void xiaqi() {
boolean flag = true;
Scanner s = new Scanner(System.in);
while (true) {
if (flag) {
System.out.println("请黑子下棋");
int x = s.nextInt() - 1;
int y = s.nextInt() - 1;
boolean b = panduan(x, y);
if (b) {
qp[x][y] = black;
print();
boolean win = shuying(x, y, black);
if (win) {
System.out.println("黑棋胜利");
break;
}
flag = false;
}
} else {
System.out.println("请白子下棋");
int x = s.nextInt() - 1;
int y = s.nextInt() - 1;
boolean b = panduan(x, y);
if (b) {
qp[x][y] = white;
print();
boolean win = shuying(x, y, white);
if (win) {
System.out.println("白棋胜利");
break;
}
flag = true;
}
}
}
}
private static boolean shuying(int x, int y, String qz) {
//判断水平输赢
int spsum = 0;
for (int i = y; i >= 0; i--) {//判断向左
if (qp[x][i] == qz) {
spsum++;
} else break;
}
for (int i = y + 1; i < qp.length - 1; i++) {//判断向右
if (qp[x][i] == qz) {
spsum++;
} else break;
}
if (spsum >= 5)
return true;
//判断垂直输赢
int czsum = 0;
for (int i = x; i >= 0; i--) {//判断向上
if (qp[i][y] == qz) {
czsum++;
} else break;
}
for (int i = x + 1; i < qp.length - 1; i++) {//判断向下
if (qp[i][y] == qz) {
czsum++;
} else break;
}
if (czsum >= 5)
return true;
//判断左斜
int zxsum=0;
for (int i = x,j=y; i >=0&&j>=0; i--,j--) {//判断左上
if(qp[i][j]==qz){
zxsum++;
}else break;
}
for (int i = x+1,j=y+1; i <qp.length-1&&j<qp[0].length-1; i++,j++) {//判断右下
if(qp[i][j]==qz){
zxsum++;
}else break;
}
if(zxsum>=5){
return true;
}
//判断右斜
int yxsum=0;
for(int i=x,j=y;i>=0&&j<qp[0].length-1;i--,j++){//判断右上
if(qp[i][j]==qz){
yxsum++;
}else break;
}
for(int i=x+1,j=y-1; i<qp.length-1&&j>=0;i++,j--){//判断左下
if(qp[i][j]==qz){
yxsum++;
}else break;
}
if(yxsum>=5){
return true;
}
else return false;
}
/**
* 初始化棋盘
*/
public static void qipan(){
qp[14]=num;//棋盘最后一行为数字
int t=0;
for (int i = 0; i < qp.length-1; i++) {//循环14行即可
for (int j = 0; j < qp.length; j++) {//每一列
if (j == 14) {
qp[i][j] = num[i];//最后一列为数字
} else {
qp[i][j] = line;
}
}
}
}
/**
* 打印棋盘
*/
public static void print(){
/*输出棋盘*/
for (int i = 0; i <15 ; i++) {
for (int j = 0; j < 15; j++) {
System.out.print(qp[i][j]);
}
System.out.println();
}
}
public static boolean panduan(int x,int y){
if(x>=14||y>=14||qp[x][y]!=line){
System.out.println("输入的不合法");
return false;
}
else return true;
}
}
6运行结果
十十十十十十十十十十十十十十⒈
十十十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请黑子下棋
1 1
★十十十十十十十十十十十十十⒈
十十十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请白子下棋
2 1
★十十十十十十十十十十十十十⒈
☆十十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请黑子下棋
1 2
★★十十十十十十十十十十十十⒈
☆十十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请白子下棋
2 2
★★十十十十十十十十十十十十⒈
☆☆十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请黑子下棋
1 3
★★★十十十十十十十十十十十⒈
☆☆十十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请白子下棋
2 3
★★★十十十十十十十十十十十⒈
☆☆☆十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请黑子下棋
1 4
★★★★十十十十十十十十十十⒈
☆☆☆十十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请白子下棋
2 4
★★★★十十十十十十十十十十⒈
☆☆☆☆十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
请黑子下棋
1 5
★★★★★十十十十十十十十十⒈
☆☆☆☆十十十十十十十十十十⒉
十十十十十十十十十十十十十十⒊
十十十十十十十十十十十十十十⒋
十十十十十十十十十十十十十十⒌
十十十十十十十十十十十十十十⒍
十十十十十十十十十十十十十十⒎
十十十十十十十十十十十十十十⒏
十十十十十十十十十十十十十十⒐
十十十十十十十十十十十十十十⒑
十十十十十十十十十十十十十十⒒
十十十十十十十十十十十十十十⒓
十十十十十十十十十十十十十十⒔
十十十十十十十十十十十十十十⒕
⒈⒉⒊⒋⒌⒍⒎⒏⒐⒑⒒⒓⒔⒕⒖
黑棋胜利
Process finished with exit code 0