1.五子棋要求
1.提供一个启动五子棋游戏的方法 初始化棋盘方法 打印棋盘方法 2.开始下棋,黑白棋交替下棋 3.判断坐标是否合法,是否重复 4.判断输赢
static String white = "☆";
static String black = "★";
static String[][] qp = new String[15][15];
static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
static String line = "十";
static boolean flag = true;
static Scanner scanner =new Scanner(System.in);
五子棋步骤
(1)提供一个启动五子棋游戏的方法
package day03;
public class startWZQ {
public static void main(String[] args) {
WZQ.startGame();
}
}
(2)初始化棋盘方法
//初始化棋盘
public static void init(){
for(int i=0;i< num.length;i++){
for(int j=0;j< num.length;j++){
qp[i][j]=line;
if(i==qp.length-1){
qp[i][j]=num[j];
}
if(j==qp.length-1){
qp[i][j]=num[i];
}
}
}
}
(3)打印棋盘方法
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();
}
}
}
(4)开始下棋,黑白棋交替下棋
public static void playgame(){
System.out.println("开始游戏");
while (true){
if(flag){
System.out.println("黑棋:");
System.out.println("请输入行");
int r=scanner.nextInt()-1;
System.out.println("请输入列");
int c = scanner.nextInt()-1;
boolean res = pand(r,c);
if(res){
qp[r][c]=black;
print();
boolean iswin=chack(r,c,black);
if(iswin){
System.out.println("黑棋赢了");
break;
}
flag=false;
}
else{
System.out.println("越界或重复");
flag=true;
continue;
}
flag=false;
}
else{
System.out.println("白棋:");
System.out.println("请输入行");
int r=scanner.nextInt()-1;
System.out.println("请输入列");
int c = scanner.nextInt()-1;
boolean res = pand(r,c);
if(res){
qp[r][c]=white;
print();
boolean iswin=chack(r,c,white);
if(iswin){
System.out.println("白棋赢了");
break;
}
flag=false;
}
else{
System.out.println("越界或重复");
flag=false;
continue;
}
flag=true;
}
}
}
(5).判断坐标是否合法,是否重复
public static boolean pand(int r,int c) {
if(r>=15||c>=15||r<0||c<0){
return false;
}
if(qp[r][c]!=line){
return false;
}
return true;
}
(6)判断输赢
.
代码如下
//判断输赢
public static boolean chack(int r,int c,String qz){
//水平判断
int sum=1;
for(int leftc=c-1;leftc>=0;leftc--){
if(qp[r][leftc]==qz){
sum++;
}
else{break;};
}
if(sum==5){
return true;
}
for(int rightc=c+1;rightc<=qp[r].length-1;rightc++){
if(qp[r][rightc]==qz){
sum++;
}
else{break;};
}
if(sum==5){
return true;
}
//垂直判断
int cont=1;
for(int upr=r-1;upr>=0;upr--){
if(qp[upr][c]==qz){
cont++;
}
else{break;};
}
if(cont==5){
return true;
}
for(int downr=r+1;downr<=qp.length-1;downr++){
if(qp[downr][c]==qz){
cont++;
}
else{break;};
}
if(cont==5){
return true;
}
//斜向1(左上右下)
int add=1;
for(int slopleft=r-1;slopleft>=0;slopleft--){
if(c==0&&qp[slopleft][0]==qz){
add++;
break;
}
if(c==0&&qp[slopleft][c]!=qz){
break;
}
if(qp[slopleft][--c]==qz){
add++;
}
else{break;};
}
if(add==5){
return true;
}
for(int slopleft=r+1;slopleft<= qp.length-1;slopleft++){
if(qp[slopleft][++c]==qz){
add++;
}
else{break;};
}
if(add==5){
return true;
}
//斜向2(右上左下)
int keep=1;
for(int slopright=r-1;slopright>=0;slopright--){
if(qp[slopright][++c]==qz){
keep++;
}
else{break;};
}
if(keep==5){
return true;
}//youwu
for(int slopright=r+1;slopright<= qp.length-1;slopright++){
if(c==0){
break;
}
if(qp[slopright][--c]==qz){
keep++;
}
else{break;};
}
if(keep==5){
return true;
}
return false;
}
整体代码如下
package day03;
import java.util.Scanner;
/*
* 五子棋
*/
public class WZQ {
/*
1.提供一个启动五子棋游戏的方法
初始化棋盘方法
打印棋盘方法
2.开始下棋,黑白棋交替下棋
3.判断坐标是否合法,是否重复
4.判断输赢
*/
static String white = "☆";
static String black = "★";
static String[][] qp = new String[15][15];
static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
static String line = "十";
static boolean flag = true;
static Scanner scanner =new Scanner(System.in);
//开始游戏
public static void playgame(){
System.out.println("开始游戏");
while (true){
if(flag){
System.out.println("黑棋:");
System.out.println("请输入行");
int r=scanner.nextInt()-1;
System.out.println("请输入列");
int c = scanner.nextInt()-1;
boolean res = pand(r,c);
if(res){
qp[r][c]=black;
print();
boolean iswin=chack(r,c,black);
if(iswin){
System.out.println("黑棋赢了");
break;
}
flag=false;
}
else{
System.out.println("越界或重复");
flag=true;
continue;
}
flag=false;
}
else{
System.out.println("白棋:");
System.out.println("请输入行");
int r=scanner.nextInt()-1;
System.out.println("请输入列");
int c = scanner.nextInt()-1;
boolean res = pand(r,c);
if(res){
qp[r][c]=white;
print();
boolean iswin=chack(r,c,white);
if(iswin){
System.out.println("白棋赢了");
break;
}
flag=false;
}
else{
System.out.println("越界或重复");
flag=false;
continue;
}
flag=true;
}
}
}
//启动五子棋游戏
public static void startGame(){
init();
print();
playgame();
}
//判断是否越界
public static boolean pand(int r,int c) {
if(r>=15||c>=15||r<0||c<0){
return false;
}
if(qp[r][c]!=line){
return false;
}
return true;
}
//判断输赢
public static boolean chack(int r,int c,String qz){
//水平判断
int sum=1;
for(int leftc=c-1;leftc>=0;leftc--){
if(qp[r][leftc]==qz){
sum++;
}
else{break;};
}
if(sum==5){
return true;
}
for(int rightc=c+1;rightc<=qp[r].length-1;rightc++){
if(qp[r][rightc]==qz){
sum++;
}
else{break;};
}
if(sum==5){
return true;
}
//垂直判断
int cont=1;
for(int upr=r-1;upr>=0;upr--){
if(qp[upr][c]==qz){
cont++;
}
else{break;};
}
if(cont==5){
return true;
}
for(int downr=r+1;downr<=qp.length-1;downr++){
if(qp[downr][c]==qz){
cont++;
}
else{break;};
}
if(cont==5){
return true;
}
//斜向1(左上右下)
int add=1;
for(int slopleft=r-1;slopleft>=0;slopleft--){
if(c==0&&qp[slopleft][0]==qz){
add++;
break;
}
if(c==0&&qp[slopleft][c]!=qz){
break;
}
if(qp[slopleft][--c]==qz){
add++;
}
else{break;};
}
if(add==5){
return true;
}
for(int slopleft=r+1;slopleft<= qp.length-1;slopleft++){
if(qp[slopleft][++c]==qz){
add++;
}
else{break;};
}
if(add==5){
return true;
}
//斜向2(右上左下)
int keep=1;
for(int slopright=r-1;slopright>=0;slopright--){
if(qp[slopright][++c]==qz){
keep++;
}
else{break;};
}
if(keep==5){
return true;
}//youwu
for(int slopright=r+1;slopright<= qp.length-1;slopright++){
if(c==0){
break;
}
if(qp[slopright][--c]==qz){
keep++;
}
else{break;};
}
if(keep==5){
return true;
}
return false;
}
//初始化棋盘
public static void init(){
for(int i=0;i< num.length;i++){
for(int j=0;j< num.length;j++){
qp[i][j]=line;
if(i==qp.length-1){
qp[i][j]=num[j];
}
if(j==qp.length-1){
qp[i][j]=num[i];
}
}
}
}
//打印棋盘
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();
}
}
}
最后实例