五子棋游戏(java)简易版
实现思路
- 首先设置需要使用的全局变量。
static String white = "☆";
static String black = "★";
static String[][] qp = new String[15][15];
static String[] num ={"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
static String line = "十";
- 先打印一个棋盘供用户落棋参考,同时初始化棋盘(大小为15x15)。
public static void init(){
for(int i=0;i< num.length;i++) {
for (int j=0;j< num.length;j++){
qp[i][j]=line;
System.out.print(""+line);
}
System.out.print(""+num[i]);
System.out.println();
}
for (int i=0;i< num.length;i++){
System.out.print(""+num[i]);
}
System.out.println();
}
效果如图:
-
初始化结束后可以开始棋局,棋局中黑方先行,其次白方再行,按次进行。
该方法同时实现了判断棋子所下位置是否重复。
注:最多能下225步,超过225还未分出胜负则是平局。
int step=0;
while(step<=225) {
Scanner scanf= new Scanner(System.in);
if (step % 2 == 0) {
System.out.print("输入黑棋放置的行:");
int a = scanf.nextInt()-1;
System.out.print("输入黑棋放置的列:");
int b = scanf.nextInt()-1;
if(qp[a][b]==black||qp[a][b]==white){
System.out.println("该地已有棋子,请重新选择");
continue;
}
qp[a][b] = black;
step++;
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
System.out.print("" + qp[i][j]);
}
System.out.print("" + num[i]);
System.out.println();
}
for (int i = 0; i < 15; i++) {
System.out.print("" + num[i]);
}
System.out.println();
if(win()){
return;
}
}//黑棋
if (step % 2 == 1) {
System.out.print("输入白棋放置的列:");
int c = scanf.nextInt()-1;
System.out.print("输入白棋放置的列:");
int d = scanf.nextInt()-1;
if(qp[c][d]==black||qp[c][d]==white){
System.out.println("该地已有棋子,请重新选择");
continue;
}
qp[c][d] = white;
step++;
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
System.out.print("" + qp[i][j]);
}
System.out.print("" + num[i]);
System.out.println();
}
for (int i = 0; i < 15; i++) {
System.out.print("" + num[i]);
}
System.out.println();
if(win()){
return;
}
}
}
- 棋局结束,判断胜负。该方法用于判断是否满足五子相连。
public static boolean win(){
int a=0,b=0,c=0,d=0,e=0,f=0;
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
b=0;a=0;c=0;d=0;e=0;f=0;
for(int k=0;k<5;k++){
if(qp[i][j+k]==white){
a++;
}//横向白棋,且白棋相连则a++
if(qp[i+k][j+k]==white){
b++;
}//斜向白棋,且白棋相连则b++
if (qp[i+k][j]==white){
c++;
}//纵向白棋,且白棋相连则c++
if(qp[i][j+k]==black){
d++;
}//横向黑棋,且黑棋相连则d++
if (qp[i+k][j+k]==black){
e++;
}//斜向黑棋,黑棋相连则e++
if(qp[i+k][j]==black){
f++;
}//纵向黑棋,黑棋相连则f++
}
if(a==5||b==5||c==5){
System.out.println("白棋胜!");
return true;
}
if (d==5||e==5||f==5){
System.out.println("黑棋胜!");
return true;
}//五子相连则胜利
}
}
return false;
}//返回布尔值,以便调用
完整代码
import java.util.Scanner;
public class WuZiQi {
static String white = "☆";
static String black = "★";
static String[][] qp = new String[15][15];
static String[] num = {"⒈","⒉","⒊","⒋","⒌","⒍","⒎","⒏","⒐","⒑","⒒","⒓","⒔","⒕","⒖"};
static String line = "十";
public static void start(){
int step=0;
while(step<225) {
Scanner scanf= new Scanner(System.in);
if (step % 2 == 0) {
System.out.print("输入黑棋放置的行:");
int a = scanf.nextInt()-1;
System.out.print("输入黑棋放置的列:");
int b = scanf.nextInt()-1;
if(qp[a][b]==black||qp[a][b]==white){
System.out.println("该地已有棋子,请重新选择");
continue;
}
qp[a][b] = black;
step++;
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
System.out.print("" + qp[i][j]);
}
System.out.print("" + num[i]);
System.out.println();
}
for (int i = 0; i < 15; i++) {
System.out.print("" + num[i]);
}
System.out.println();
if(win()){
return;
}
}//黑棋
if (step % 2 == 1) {
System.out.print("输入白棋放置的列:");
int c = scanf.nextInt()-1;
System.out.print("输入白棋放置的列:");
int d = scanf.nextInt()-1;
if(qp[c][d]==black||qp[c][d]==white){
System.out.println("该地已有棋子,请重新选择");
continue;
}
qp[c][d] = white;
step++;
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15; j++) {
System.out.print("" + qp[i][j]);
}
System.out.print("" + num[i]);
System.out.println();
}
for (int i = 0; i < 15; i++) {
System.out.print("" + num[i]);
}
System.out.println();
if(win()){
return;
}
}
}
if(step>255){
System.out.println("平局!");
}
}//白棋
//运行游戏
public static void init(){
for(int i=0;i< num.length;i++) {
for (int j=0;j< num.length;j++){
qp[i][j]=line;
System.out.print(""+line);
}
System.out.print(""+num[i]);
System.out.println();
}
for (int i=0;i< num.length;i++){
System.out.print(""+num[i]);
}
System.out.println();
}//打印棋盘;初始化棋盘;
public static boolean win(){
int a=0,b=0,c=0,d=0,e=0,f=0;
for(int i=0;i<11;i++){
for(int j=0;j<11;j++){
b=0;a=0;c=0;d=0;e=0;f=0;
for(int k=0;k<5;k++){
if(qp[i][j+k]==white){
a++;
}
if(qp[i+k][j+k]==white){
b++;
}
if (qp[i+k][j]==white){
c++;
}
if(qp[i][j+k]==black){
d++;
}
if (qp[i+k][j+k]==black){
e++;
}
if(qp[i+k][j]==black){
f++;
}
}
if(a==5||b==5||c==5){
System.out.println("白棋胜!");
return true;
}
if (d==5||e==5||f==5){
System.out.println("黑棋胜!");
return true;
}
}
}
return false;
}
public static void main(String[] args) {
init();
start();
}
}