「java怎么玩五子棋」java做五子棋游戏
今天给各位分享java怎么玩五子棋的知识,其中也会对java做五子棋游戏进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、JAVA如何实现下五子棋的第二步
- 2、五子棋的Java算法
- 3、JAVA高手接招————— 五子棋双人对弈程序
- 4、通过Java控制台程序完成一个五子棋游戏,能够实现黑白子交互下棋,程序自动判断输赢(需要完成判断输赢
- 5、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做五子棋游戏的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-01,除非注明,否则均为
原创文章,转载请注明出处。