五子棋游戏
先对全局变量进行定义,赋值,方便后面五子棋棋盘的创建。
static String white = "☆";
static String black = "★";
static String[][] a = new String[15][15];
static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
static String line = "十";
static Scanner scanner = new Scanner(System.in);
static boolean flag = true;```
```java
使用init方法对棋盘进行初始化
public static void init(){
//初始化棋盘
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length ; j++) {
a[i][j]=line;
if(j==a[i].length-1){
a[i][j]=num[i];
}
if(i== a.length-1){
a[i][j] = num[j];
}
}
}
}
使用print方法对棋盘进行输出
public static void print(){
for (int i = 0; i < a.length ; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]);
}
System.out.println();
}
}
使用input方法来实现五子棋的落点
private static void input() {
print();
boolean flag = true;
Scanner scanner = new Scanner(System.in);
while (true) {
if (flag) {
System.out.println("请黑子下子:");
int black1 = scanner.nextInt()-1;
int black2 = scanner.nextInt()-1;
boolean result = check(black1, black2);
if (!result) {
System.out.println("输入有误,请重新输入:");
black1 = scanner.nextInt()-1;
black2 = scanner.nextInt()-1;
}
a [black1][black2] = black;
print();
boolean blackwin = iswin(black1, black2, black);
if (blackwin) {
System.out.println("黑棋获胜!");
break;
} else {
flag = false;
}
} else {
System.out.println("请白子下子:");
int white1 = scanner.nextInt()-1;
int white2 = scanner.nextInt()-1;
boolean result1 = check(white1, white2);
if (!result1) {
System.out.println("输入有误,请重新输入:");
white1 = scanner.nextInt()-1;
white2 = scanner.nextInt()-1;
}
a[white1][white2] = white;
print();
boolean whitewin = iswin(white1, white2, white);
if (whitewin) {
System.out.println("白棋获胜!");
break;
} else {
flag = true;
}
}
}
}
使用check方法来判断是否越界,是否重复
public static boolean check(int x,int y){
//判断是否越界,是否重复
if(x<0 || y<0 || y>=14 || x>=14){
return false;
}
if(!a[x][y].equals(line)){
return false;
}
return true;
}
使用iswin判断哪方获胜:
private static boolean iswin(int x, int y, String qizi) {
//水平查找
int spsum = 1;
//水平向左边找
for (int lefty = y-1; lefty>=0 ; lefty--) {
if(a [x][lefty].equals(qizi)){
spsum++;
}else{
break;
}
}
if (spsum>=5){
return true;
}
//水平向右找
for (int righty = y+1; righty < a.length; righty++) {
if(a[x][righty].equals(qizi)){
spsum++;
}else{//一旦不连续了就终止
break;
}
}
if (spsum>=5){
return true;
}
//斜向 \
int xx1sum = 1;
for(int xx=x-1,xy=y-1;xx>=0&&xy>=0;xx--,xy--){//向当前棋子的左边查找
if(a[xx][xy].equals(qizi)){
xx1sum++;
}else{
break;//一旦遇到不是自己的棋子,不连续 终止
}
}
if(xx1sum>=5){
return true;
}
for(int xx=x+1,xy=y+1;xx<a.length-1 && xy< a.length-1;xx++,xy++){
if(a[xx][xy].equals(qizi)){
xx1sum++;
}else{
break;
}
}
if(xx1sum>=5){
return true;
}
return false;
}
最后我们看看代码
package day4;
import java.util.Scanner;
public class WZQ1 {
static String white = "☆";
static String black = "★";
static String[][] a = new String[15][15];
static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
static String line = "十";
static Scanner scanner = new Scanner(System.in);
static boolean flag = true;
public static void main(String[] args) {
init();
input();
}
public static void init(){
//初始化棋盘
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length ; j++) {
a[i][j]=line;
if(j==a[i].length-1){
a[i][j]=num[i];
}
if(i== a.length-1){
a[i][j] = num[j];
}
}
}
}
public static void print(){
for (int i = 0; i < a.length ; i++) {
for (int j = 0; j < a[i].length; j++) {
System.out.print(a[i][j]);
}
System.out.println();
}
}
private static void input() {
print();
boolean flag = true;
Scanner scanner = new Scanner(System.in);
while (true) {
if (flag) {
System.out.println("请黑子下子:");
int black1 = scanner.nextInt()-1;
int black2 = scanner.nextInt()-1;
boolean result = check(black1, black2);
if (!result) {
System.out.println("输入有误,请重新输入:");
black1 = scanner.nextInt()-1;
black2 = scanner.nextInt()-1;
}
a [black1][black2] = black;
print();
boolean blackwin = iswin(black1, black2, black);
if (blackwin) {
System.out.println("黑棋获胜!");
break;
} else {
flag = false;
}
} else {
System.out.println("请白子下子:");
int white1 = scanner.nextInt()-1;
int white2 = scanner.nextInt()-1;
boolean result1 = check(white1, white2);
if (!result1) {
System.out.println("输入有误,请重新输入:");
white1 = scanner.nextInt()-1;
white2 = scanner.nextInt()-1;
}
a[white1][white2] = white;
print();
boolean whitewin = iswin(white1, white2, white);
if (whitewin) {
System.out.println("白棋获胜!");
break;
} else {
flag = true;
}
}
}
}
public static boolean check(int x,int y){
//判断是否越界,是否重复
if(x<0 || y<0 || y>=14 || x>=14){
return false;
}
if(!a[x][y].equals(line)){
return false;
}
return true;
}
private static boolean iswin(int x, int y, String qizi) {
//水平查找
int spsum = 1;
//水平向左边找
for (int lefty = y-1; lefty>=0 ; lefty--) {
if(a [x][lefty].equals(qizi)){
spsum++;
}else{
break;
}
}
if (spsum>=5){
return true;
}
//水平向右找
for (int righty = y+1; righty < a.length; righty++) {
if(a[x][righty].equals(qizi)){
spsum++;
}else{//一旦不连续了就终止
break;
}
}
if (spsum>=5){
return true;
}
//斜向 \
int xx1sum = 1;
for(int xx=x-1,xy=y-1;xx>=0&&xy>=0;xx--,xy--){//向当前棋子的左边查找
if(a[xx][xy].equals(qizi)){
xx1sum++;
}else{
break;//一旦遇到不是自己的棋子,不连续 终止
}
}
if(xx1sum>=5){
return true;
}
for(int xx=x+1,xy=y+1;xx<a.length-1 && xy< a.length-1;xx++,xy++){
if(a[xx][xy].equals(qizi)){
xx1sum++;
}else{
break;
}
}
if(xx1sum>=5){
return true;
}
return false;
}
}
```java