java五子棋的算法_Java控制台五子棋(纯算法)

Java五子棋小游戏

本方案是基于控制台写的一个代码

没有花里胡哨的界面,只为研究算法

仅仅用了200行代码

下面是的是运行结果

游戏运行结果

这里我就很简单的复制了一个结果

第9回合,下子方:玩家2(白)

请输入你要下的位置(空格隔开) 例如 10 5

9 5

玩家2(白)赢得了胜利

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 · · · · · · · · · · · · · · · ·

1 · · · · · · · · · · · · · · · ·

2 · · · · · · · · · · · · · · · ·

3 · · · · · · · · · · · · · · · ·

4 · · · · · · · · · · · · · · · ·

5 · · · · · 白 黑 · · · · · · · · ·

6 · · · · · 白 · · · 黑 · · · · · ·

7 · · · · · 白 黑 · · · · · · · · ·

8 · · · · · 白 黑 · · · · · · · · ·

9 · · · · · 白 · · · · · · · · · ·

10 · · · · · · · · · · · · · · · ·

11 · · · · · · · · · · · · · · · ·

12 · · · · · · · · · · · · · · · ·

13 · · · · · · · · · · · · · · · ·

14 · · · · · · · · · · · · · · · ·

15 · · · · · · · · · · · · · · · ·

游戏结束

下面是Java代码

有什么地方还有问题欢迎评论

import java.util.Scanner;

/**

* 控制台五子棋游戏

*/

public class Gobang {

private boolean gameover = false;

//15*15棋盘

private char[][] table = new char[16][16];

//两个玩家

private Player p1,p2;

//回合

private int huihe = 0;

public void createGame(Player p1,Player p2){

this.p1=p1;

this.p2=p2;

}

/** 展示棋局 **/

private void show(){

int xx =0;

System.out.println(" 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ");

for(char[] cs :table){

System.out.print(" "+xx+(xx>9?"":" ")+" ");

for(char c : cs){

if(c==0) System.out.print("·");

System.out.print(c+" ");

}

System.out.println();

xx++;

}

}

/** 获取下一个走棋的 **/

private Player getPlayer(){

//黑子先走

if (huihe==0) return p1.color=='黑'? p1 : p2;

//根据回合判断棋子颜色

if (huihe%2!=0) return p1.color=='白'? p1 : p2;

return p1.color=='黑'? p1 : p2;

}

/** 判断是否获胜 **/

private boolean isWin(int x,int y,char c){

/*

* 7 8 9

* 4 5 6

* 1 2 3

*/

int xx = 0,yy=0;

for (int i =1 ;i<9 ;i++ ){

switch (i){

case 1:

xx=-1;yy=-1;

break;

case 2:

xx=-1;yy=1;

break;

case 3:

xx=1;yy=-1;

break;

case 4:

xx=1;yy=1;

break;

case 5:

xx = 0;yy = 1;

break;

case 6:

xx = 1 ;yy = 0;

break;

case 7:

xx = 0 ;yy = -1;

break;

case 8:

xx = -1;yy= 0;

break;

}

if ( (x<4&&xx==-1) || (y<4&&yy==-1)){

}else if((x>12&&xx==1) || (y>12&&yy==1)){

}else if(x<4&&y<4&&(xx!=-1&&yy!=-1)){

if (ishas(x, y, xx, yy, 4, c))

return true;

}else if(x>12&&y>12&&(xx!=1&&yy!=1)){

if (ishas(x, y, xx, yy, 4, c))

return true;

}else if(xx==0||yy==0){

if (ishas(x, y, xx, yy, 4, c))

return true;

}

if(x>2&&y>2&&x<14&&y<14) {

if (ishas(x, y, xx, yy, 2, c)&&ishas(x, y, -xx, -yy, 2, c)) {

return true;

}

}

if(x>3&&y>3&&x<15&&y<15) {

if (ishas(x, y, xx, yy, 3, c)&&ishas(x, y, -xx, -yy, 1, c)) {

return true;

}

}

if(x>1&&y>1&&x<13&&y<13) {

if (ishas(x, y, xx, yy, 1, c)&&ishas(x, y, -xx, -yy, 3, c)) {

return true;

}

}

}

return false;

}

/**

* 检测是否有棋子

* @param x x坐标

* @param y y坐标

* @param xx x方向

* @param yy y方向

* @param num 缓存

* @return

*/

private boolean ishas(int x,int y,int xx,int yy,int num,char c){

if(num==1){

if(table[x+xx][y+yy] == c)return true;

}else if(table[x+xx][y+yy] == c){

return ishas(x+xx,y+yy,xx,yy,num-1,c);

}

return false;

}

/** 下棋 **/

public boolean put(int x,int y,Player p){

if (table[x][y]==0) {

table[x][y] = p.getColor();

if(isWin(x,y,p.color)){

gameover = true;

System.out.println(p.username+"("+p.color+")赢得了胜利");

}

return true;

}

return false;

}

/** 游戏运行 **/

public void start(){

Player p = null;

Scanner scan = new Scanner(System.in);

String[] strArr = new String[2];

while (!gameover){

if(p==null)p=getPlayer();

System.out.println("第"+(huihe/2+1)+"回合,下子方:"+p.getUsername()+"("+p.getColor()+")");

System.out.println("请输入你要下的位置(空格隔开) 例如 10 5");

//下棋失败重新开始本回合

try {

String in = scan.nextLine().trim();

if ("exit".equals(in)) break;

strArr = in.split(" ");

if (!put( Integer.parseInt(strArr[0]),Integer.parseInt(strArr[1]),p))continue;

}catch (Exception e){

e.printStackTrace();

}

show();

p=null;

huihe++;

}

System.out.println("游戏结束");

}

/** 游戏入口 */

public static void main(String[] args) {

Gobang game = new Gobang();

Player p1 = new Player("玩家1",'黑');

Player p2 = new Player("玩家2",'白');

game.createGame(p1,p2);

game.start();

}

}

/** 玩家类 **/

class Player{

String username;

char color;

public Player(String username, char color) {

this.username = username;

this.color = color;

System.out.println(username+"携带"+color+"颜色的棋子加入游戏");

}

public String getUsername() {

return username;

}

public char getColor() {

return color;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值