「java怎么玩五子棋」java做五子棋游戏

博主:adminadmin 2022-12-01 07:05:06 68

今天给各位分享java怎么玩五子棋的知识,其中也会对java做五子棋游戏进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JAVA如何实现下五子棋的第二步

把c定义成全局静态变量,for循环仅第一次输入坐标时执行(用一静态变量判断是否第一次输入),再次输入时只为c[x][y]赋值

五子棋的Java算法

五子棋的算法是比较简单的。

把棋盘当作一个 2 维数组。 用2维数组来当作棋盘的坐标系

当落子 之后。 把落子,插入到 数组中 获得 棋盘 的数组, 循环刚才数组, 判断,

刚才 数组元素 的 横向坐标 -5 到刚才 数组元素坐标 + 5 是否都是 一个数字(黑子代表 1 ,白子代表0) 只要其中 有连续 5个 都是 黑子,或者白子, 则黑子或白子 赢了。

判断,刚才元素 纵向坐标 -5 到 + 5 如上判断。

判断 右斜线。 判断 横向坐标 -5 y -5 到 横向坐标 + 5 y + 5

判断 y + 5 x + 5 到 y-5 x -5

简单来说。

用2维数组 来代表 棋盘 , 每次在 界面上, 由白子,或黑子 落子之后, 在数组相应坐标,放入 1 或者0 。

然后循环数组判断, 数组横向 竖向 右斜线 左斜线 是否是 黑子或者白子 连续的。 如果是,则获胜。

JAVA高手接招————— 五子棋双人对弈程序

新建一个chess类,其中代码如下

package work;

import java.awt.Color;

public class Chess {

public static final int diamter=30;

private int x;//在网格中的索引,0~15

private int y;//在网格中的索引,0~15

private Color color;

public Color getColor() {

return color;

}

public void setColor(Color color) {

this.color = color;

}

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public Chess(int x, int y, Color color) {

super();

this.x = x;

this.y = y;

this.color = color;

}

}

然后在同一个包中新建FirstFrame类。代码如下

package work;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

//主函数

public class FirstFrame{

public static void main(String[] args) {

FirstFrame1 f=new FirstFrame1();

f.setVisible(true);

}

}

//窗体函数

class FirstFrame1 extends JFrame implements ActionListener{

JMenuBar menuBar;

JMenu sysMenu;

JMenuItem startMenuItem;

JMenuItem backMenuItem;

JMenuItem exitMenuItem;

DrawPanel myPanel=new DrawPanel();

public FirstFrame1(){

super("娃哈哈");

add(myPanel);

menuBar=new JMenuBar();

setJMenuBar(menuBar);

sysMenu=new JMenu("系统(s)");

sysMenu.setMnemonic('s');

menuBar.add(sysMenu);

startMenuItem=new JMenuItem("开始");

backMenuItem=new JMenuItem("悔棋");

exitMenuItem=new JMenuItem("退出");

sysMenu.add(startMenuItem);

sysMenu.add(backMenuItem);

sysMenu.addSeparator();

sysMenu.add(exitMenuItem);

startMenuItem.addActionListener(this);

backMenuItem.addActionListener(this);

exitMenuItem.addActionListener(this);

super.setSize(600,650);

super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void actionPerformed(ActionEvent e){

Object obj=e.getSource();

if(obj==startMenuItem){

myPanel.start(); //DrawPanel p=new DrawPanel();是错的;

}else if(obj==backMenuItem){

myPanel.back();

}else{

System.exit(0);

}

}

}

最后新建一个DrawPanel类代码如下

package work;

import java.awt.Color;

import java.awt.Cursor;

import java.awt.Graphics;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import sun.awt.geom.AreaOp.AddOp;

//画柄;

class DrawPanel extends JPanel implements MouseListener,MouseMotionListener{

final int MARGIN_TOP=60;

final int MARGIN_LEFT=30;

final int CELL_WIDTH=35;

final int COLS=15;

final int ROWS=15;

Chess[] chessList=new Chess[(COLS+1)*(ROWS+1)];

int chessCount=0;

boolean isBlack=true;

boolean gameOver=false;

public DrawPanel(){ //构造函数

Color color=new Color(200,250,200);

setBackground(color);

this.addMouseMotionListener(this);

this.addMouseListener(this);

}

public void start(){

for(int i=0;ichessList.length;i++)

chessList[i]=null;

isBlack=true;

gameOver=false;

chessCount=0;

repaint();

}

public void back(){

if (chessCount==0||gameOver==true)

return;

chessList[chessCount-1]=null;

chessCount--;

isBlack=!isBlack;

repaint();

}

@Override

protected void paintComponent(Graphics g) { //方法重写

// TODO Auto-generated method stub

super.paintComponent(g);

for(int i=0;i=ROWS;i++){

g.drawLine(MARGIN_LEFT, MARGIN_TOP+i*CELL_WIDTH, MARGIN_LEFT+COLS*CELL_WIDTH, MARGIN_TOP+i*CELL_WIDTH);

}

for(int i=0;i=COLS;i++){

g.drawLine(MARGIN_LEFT+i*CELL_WIDTH, MARGIN_TOP, MARGIN_LEFT+i*CELL_WIDTH, MARGIN_TOP+ROWS*CELL_WIDTH);

}

for(int i=0;ichessCount;i++){ //绘制棋子数组

Chess chess=chessList[i];

int xPos=MARGIN_LEFT+CELL_WIDTH*chess.getX()-Chess.diamter/2;

int yPos=MARGIN_TOP+CELL_WIDTH*chess.getY()-Chess.diamter/2;

g.setColor(chess.getColor());

g.fillOval(xPos,yPos, Chess.diamter, Chess.diamter);

if(i==chessCount-1){

g.setColor(Color.red);

g.drawRect(xPos, yPos, Chess.diamter, Chess.diamter);

}

}

if(isBlack)

g.setColor(Color.black);

else

g.setColor(Color.white);

g.fillOval(8*CELL_WIDTH, CELL_WIDTH/2,Chess.diamter, Chess.diamter);

String colorStr=isBlack==false?"白方下":"黑方下";

g.setColor(Color.blue);

g.drawString(colorStr+" 第"+chessCount/2+"步", 9*CELL_WIDTH, CELL_WIDTH);

}

public void mouseClicked(MouseEvent e) {}

public void mouseEntered(MouseEvent e) {}

public void mouseExited(MouseEvent e) {}

public void mouseReleased(MouseEvent e) {}

public void mouseDragged(MouseEvent e) {}

public void mouseMoved(MouseEvent e) {

// TODO Auto-generated method stub

super.setCursor(new Cursor(Cursor.HAND_CURSOR));

int x=(e.getX()-MARGIN_LEFT+Chess.diamter/2)/CELL_WIDTH;

int y=(e.getY()-MARGIN_TOP+Chess.diamter/2)/CELL_WIDTH;

if(x0||y0||xCOLS||yROWS) //超出棋盘边界

super.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));

if(findChess(x,y)) //下过的地方不能再下

super.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));

if(gameOver)

super.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));

}

public void mousePressed(MouseEvent e) {

int x=(e.getX()-MARGIN_LEFT+Chess.diamter/2)/CELL_WIDTH;

int y=(e.getY()-MARGIN_TOP+Chess.diamter/2)/CELL_WIDTH;

if(x0||y0||xCOLS||yROWS) //超出棋盘边界

return;

Color color=Color.black;

if(!isBlack) // 变颜色

color=Color.white;

if(findChess(x,y)) //下过的地方不能再下

return;

if(gameOver)

return;

chessList[chessCount]=new Chess(x,y,color);

repaint(); //重绘

isBlack=!isBlack;

chessCount++;

String colorStr=color==Color.white?"白方":"黑方";

int[] count={0,0,0,0};

for(int i=x-1;i=0;i--){

if(findChess(i,y,color)){

count[0]++;

}

else

break;

}

for(int i=x+1;i=COLS;i++){

if(findChess(i,y,color)){

count[0]++;

}

else

break;

}

for(int i=y-1;i=0;i--){

if(findChess(x,i,color)){

count[1]++;

}

else

break;

}

for(int i=y+1;i=ROWS;i++){

if(findChess(x,i,color)){

count[2]++;

}

else

break;

}

for(int i=x+1,j=y+1;i=COLSj=ROWS;i++,j++){

if(findChess(i,j,color)){

count[3]++;

}

else

break;

}

for(int i=x-1,j=y-1;i=0j=0;i--,j--){

if(findChess(i,j,color)){

count[3]++;

}

else

break;

}

for(int i=x+1,j=y-1;i=COLSj=0;i++,j--){

if(findChess(i,j,color)){

count[3]++;

}

else

break;

}

for(int i=x-1,j=y+1;i=0j=ROWS;i--,j++){

if(findChess(i,j,color)){

count[3]++;

}

else

break;

}

for(int i=0;i4;i++){

if(count[i]=4){

gameOver=true;

JOptionPane.showMessageDialog(this, "恭喜"+colorStr+"胜利");

return;

}

}

System.out.println(e.getX()+","+e.getY());

}

public boolean findChess(int x,int y){

for(int i=0;ichessCount;i++){

if(chessList[i].getX()==x chessList[i].getY()==y)

return true;

}

return false;

}

public boolean findChess(int x,int y,Color color){

for(int i=0;ichessCount;i++){

if(chessList[i].getX()==x chessList[i].getY()==y chessList[i].getColor()==color)

return true;

}

return false;

}

}

如果不行就hi我

通过Java控制台程序完成一个五子棋游戏,能够实现黑白子交互下棋,程序自动判断输赢(需要完成判断输赢

import java.util.Scanner;

public class FiveChessGame {

public static void display(char[][] arr) {// 图形显示函数

System.out.print("  ");

for (char i = '0'; i = '9'; i++)

// 打印行号0~9

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

for (char j = 'a'; j = 'f'; j++)

// 打印行号a~f

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

System.out.println();

char c = '0';

for (int i = 0; i  10; i++) {

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

for (int j = 0; j  16; j++) {

System.out.print(arr[i][j] + " ");

}

System.out.println();

}

c = 'a';

for (int i = 10; i  16; i++) {

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

for (int j = 0; j  16; j++) {

System.out.print(arr[i][j] + " ");

}

System.out.println();

}

}

public static int getNum(char c) {

int num;

switch (c) {

case '0':

num = 0;

break;

case '1':

num = 1;

break;

case '2':

num = 2;

break;

case '3':

num = 3;

break;

case '4':

num = 4;

break;

case '5':

num = 5;

break;

case '6':

num = 6;

break;

case '7':

num = 7;

break;

case '8':

num = 8;

break;

case '9':

num = 9;

break;

case 'a':

case 'A':

num = 10;

break;

case 'b':

case 'B':

num = 11;

break;

case 'c':

case 'C':

num = 12;

break;

case 'd':

case 'D':

num = 13;

break;

case 'e':

case 'E':

num = 14;

break;

case 'f':

case 'F':

num = 15;

break;

default:

System.out.println("输入有错误!");

return -1;

}

return num;

}

public static int isWinner(char c, char[][] arr, int a, int b) {

if (c == '@') {

int count = 0;

for (int i = 0; i  16; i++) {

if (arr[a][i] == '@') {

count++;

if (count = 5) {

return 1;

}

} else {

count = 0;

}

}

count = 0;

for (int i = 0; i  16; i++) {

if (arr[i][b] == '@') {

count++;

if (count = 5) {

return 1;

}

} else {

count = 0;

}

}

count = 0;

if (a = b) {

int j = 0;

for (int i = a - b; i = 15 - a + b; i++) {

if (arr[i][j] == '@') {

count++;

j++;

if (count = 5) {

return 1;

}

} else {

count = 0;

j++;

}

}

} else {

int j = 0;

for (int i = b - a; i = 15 - b + a; i++) {

if (arr[j][i] == '@') {

count++;

j++;

if (count = 5) {

return 1;

}

} else {

count = 0;

j++;

}

}

}

int j = a + b;

count = 0;

if (a + b = 15) {

for (int i = 0; i = a + b; i++) {

if (arr[i][j] == '@') {

count++;

j--;

if (count = 5) {

return 1;

}

} else {

count = 0;

j--;

}

}

} else {

j = 15;

for (int i = a + b - 15; i = 15; i++) {

if (arr[i][j] == '@') {

count++;

j--;

if (count = 5) {

return 1;

}

} else {

count = 0;

j--;

}

}

}

} else {// 判断白色胜

int count = 0;

for (int i = 0; i  16; i++) {

if (arr[a][i] == 'O') {

count++;

if (count = 5) {

return 2;

}

} else {

count = 0;

}

}

count = 0;

for (int i = 0; i  16; i++) {

if (arr[i][b] == 'O') {

count++;

if (count = 5) {

return 2;

}

} else {

count = 0;

}

}

count = 0;

if (a = b) {

int j = 0;

for (int i = a - b; i = 15 - a + b; i++) {

if (arr[i][j] == 'O') {

count++;

j++;

if (count = 5) {

return 2;

}

} else {

count = 0;

j++;

}

}

} else {

int j = 0;

for (int i = b - a; i = 15 - b + a; i++) {

if (arr[j][i] == 'O') {

count++;

j++;

if (count = 5) {

return 2;

}

} else {

count = 0;

j++;

}

}

}

int j = a + b;

count = 0;

if (a + b = 15) {

for (int i = 0; i = a + b; i++) {

if (arr[i][j] == 'O') {

count++;

j--;

if (count = 5) {

return 2;

}

} else {

count = 0;

j--;

}

}

} else {

j = 15;

for (int i = a + b - 15; i = 15; i++) {

if (arr[i][j] == 'O') {

count++;

j--;

if (count = 5) {

return 2;

}

} else {

count = 0;

j--;

}

}

}

}

return 0;

}

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner sc = new Scanner(System.in);

char[][] arr = new char[16][16];

for (int i = 0; i  16; i++)

// 二维数组初始化

for (int j = 0; j  16; j++)

arr[i][j] = '.';

display(arr);

int i = 0;

while (true) {

if (i % 2 == 0) {

System.out.println("请黑方落子:");

String in = sc.next();

char c1 = in.charAt(0);

char c2 = in.charAt(1);

int a = getNum(c1);

int b = getNum(c2);

if (arr[a][b] != '.') {

System.out.println("该位置已经有棋子,请重新输入!");

} else {

arr[a][b] = '@';

display(arr);

int result = isWinner('@', arr, a, b);

if (result == 1) {

System.out.println("黑方获胜!");

return;

}

i++;

}

} else {

System.out.println("请白方落子:");

String in = sc.next();

char c1 = in.charAt(0);

char c2 = in.charAt(1);

int a = getNum(c1);

int b = getNum(c2);

if (arr[a][b] != '.') {

System.out.println("该位置已经有棋子,请重新输入!");

} else {

arr[a][b] = 'O';

display(arr);

int result = isWinner('O', arr, a, b);

if (result == 2) {

System.out.println("白方获胜!");

return;

}

i++;

}

}

}

}

}

java 五子棋人机对战如何实现?

楼下那个在瞎扯,,,那个视频我看过,是人直接操作的。。。

你这个当然设计AI了。。。具体做到什么程度看你需要电脑智商多高。

大体思路这样。。主要是分数的衡量。。

首先。人走过之后,电脑扫描整个棋盘,判断哪些地方会有连三、连四

(专业术语叫什么我就不知道了。。嘿嘿)。。然后你自己定义一个分值表,给这些点打上分,并选择最有威胁的点“试探性”的走上一步,这里说的试探,其实就是递归搜索啦。。好像专业棋手一般要20层,具体多少要看你想要什么难度的。

所以难得地方,就在于棋力的衡量,我五子棋没什么研究,不过我知道,专业的五子棋软件都是自带定式库的。。这个你个人是不可能实现了,象征性的做个定式表就行了,弄上常见的像什么活三、死三之类的。

然后难度就在于怎么对搜索加速了,我觉得至少也得递归七八层吧。。。具体算法就不知道了,反正肯定不会是简单的DFS啦~~~嘿嘿。。。。。

我在CSDN上看到一个特别有名的帖子。。推荐你去看看。。貌似和我说的差不多,不过也没什么什么名堂出来,不过他里面提到过什么软件,你可以下载了看一看

那个帖子粘出来你肯定一顿bs。。你自己搜下吧。。。

还有这个帖

有基本思路和数据结果,主要是还有一个打分的标准,可以参考一下

关于java怎么玩五子棋和java做五子棋游戏的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-01,除非注明,否则均为首码项目网原创文章,转载请注明出处。