`
永远吃不饱
  • 浏览: 10147 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

打不了人机的简单五子棋

阅读更多
   
     简易五子棋的制作
     首先,设置出五子棋的基本属性,如棋盘行列,格子的大小,保存时的数组。
     public interface Config {
int X0 = 20,Y0 = 20;
int rows = 15,cols = 15;
int size = 30;
int CHESS_SIZE = 14;


//定义一个数组存储棋子的位置
int Chesses[][] = new int[rows][cols];
     } 
     然后,制作棋盘,需要重写JPanel中的paint方法。
      public class ChessUI extends JFrame implements Config {
public static void main(String[] args) {
ChessUI ui = new ChessUI();
ui.initChessUI();
}
      public void initChessUI() {
this.setTitle("五子棋");
this.setSize(600, 500);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel jpanel = new MyPanel();
jpanel.setBackground(new Color(128, 128, 128));
this.add(jpanel);

this.setVisible(true);

Graphics g = jpanel.getGraphics();

ChessListener clis = new ChessListener(g,jpanel);
jpanel.addMouseListener(clis);
}

class MyPanel extends JPanel {

@Override
public void paint(Graphics g) {
super.paint(g);
DrawQipan(g);
DrawQizi(g);
}

public void DrawQipan(Graphics g) {
for (int i = 0; i < rows; i++) {
g.drawLine(X0, Y0 + size * i, X0 + size * (cols - 1), Y0 + size
* i);
}
for (int j = 0; j < cols; j++) {
g.drawLine(X0 + size * j, Y0, X0 + size * j, Y0 + size
* (rows - 1));
}
}
                }
                设置Graphics的监听器,落下棋子即绘画出黑子或白子。
                创建ChessListener类并继承MouseAdapter和Config。
                public class ChessListener extends MouseAdapter implements Config,
ActionListener {

private Graphics g;
private int bool = 1;
private int r = 0, c = 0;
private boolean isover = true; //判断是否能够行棋
private JPanel jpanel;

public ChessListener(Graphics g, JPanel jpanel) {
this.g = g;
this.jpanel = jpanel;
}
                添加鼠标释放的实现。
                @Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
super.mouseReleased(e);
int x = e.getX();
int y = e.getY();

// 获得最近交叉点
r = (x - X0) / size;
c = (y - Y0) / size;

if ((x - X0) % size > size / 2) {
r++;
}
if ((y - Y0) % size > size / 2) {
c++;
}

if (isover && r >= 0 && r < size && c >= 0 && c < size
&& Chesses[r][c] == 0) {
int x1 = X0 + size * r;
int y1 = Y0 + size * c;

Chesses[r][c] = bool;

if (bool == 1) {
g.setColor(Color.BLACK);
bool = -1;
} else {
g.setColor(Color.WHITE);
bool = 1;
}

g.fillOval(x1 - CHESS_SIZE / 2, y1 - CHESS_SIZE / 2, CHESS_SIZE,
CHESS_SIZE);

}
win1(bool);
win2(bool);
win3(bool);
win4(bool);
}
                判断输赢。
                // 横
public void win1(int bool) {
int a = 1;
for (int i = 1; i < 5; i++) {
if (Chesses[r - i][c] == Chesses[r][c]) {
a++;
} else {
break;
}
for (int j = 1; j < 5; j++) {
if (Chesses[r + i][c] == Chesses[r][c] && r + i < cols) {
a++;
}
}
if (a >= 5) {
if (bool == 1) {
JOptionPane.showMessageDialog(null, "白字胜");
} else if (bool == -1) {
JOptionPane.showMessageDialog(null, "黑字胜");
}
isover = false;
}
}

}

public void win2(int bool) {
int a = 1;
for (int i = 1; i < 5; i++) {
if (Chesses[r][c - i] == Chesses[r][c]) {
a++;
} else {
break;
}
for (int j = 1; j < 5; j++) {
if (Chesses[r][c + i] == Chesses[r][c] && c + i < rows) {
a++;
}
}
if (a >= 5) {
if (bool == 1) {
JOptionPane.showMessageDialog(null, "白字胜");
} else if (bool == -1) {
JOptionPane.showMessageDialog(null, "黑字胜");
}
isover = false;
}
}

}

public void win3(int bool) {
int a = 1;
for (int i = 1; i < 5; i++) {
if (Chesses[r - i][c + i] == Chesses[r][c] && c + i < rows) {
a++;
} else {
break;
}
for (int j = 1; j < 5; j++) {
if (Chesses[r + i][c - i] == Chesses[r][c] && r + i < cols) {
a++;
}
}
if (a >= 5) {
if (bool == 1) {
JOptionPane.showMessageDialog(null, "白字胜");
} else if (bool == -1) {
JOptionPane.showMessageDialog(null, "黑字胜");
}
isover = false;
}
}

}

public void win4(int bool) {
int a = 1;
for (int i = 1; i < 5; i++) {
if (Chesses[r - i][c - i] == Chesses[r][c]) {
a++;
} else {
break;
}
for (int j = 1; j < 5; j++) {
if (Chesses[r + i][c + i] == Chesses[r][c] && r + i < cols
&& r + i < rows) {
a++;
}
}
if (a >= 5) {
if (bool == 1) {
JOptionPane.showMessageDialog(null, "白字胜");
} else if (bool == -1) {
JOptionPane.showMessageDialog(null, "黑字胜");
}
isover = false;
}
}

}
                这时已经可以人人对战了。
                添加重置按钮,清空棋局。
                需要将jpanel的布局设置为null,然后设置JButton的位置。
                jpanel.setLayout(null);

JButton jb = new JButton("刷新");
jb.setBounds(450, 350, 80, 50);
jpanel.add(jb);
                添加jb的动作映射。添加到ChessListener中。
                jb.addActionListener(clis);
                需要将jpanel传入到Chesslistener里重载paint方法。
                public void actionPerformed(ActionEvent e) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
Chesses[j][i] = 0;
}
}
        jpanel.paint(g);
        isover = true;
}
               
  • 大小: 54.7 KB
分享到:
评论

相关推荐

    MFC人机对战五子棋

    《MFC人机对战五子棋:探索与解析》 在计算机编程领域,MFC(Microsoft Foundation Classes)是微软提供的一套C++类库,用于构建Windows应用程序。本项目“MFC人机对战五子棋”充分利用了MFC框架,通过基于对话框的...

    visual C++写的人机对战五子棋游戏

    《基于Visual C++的人机对战五子棋游戏详解》 在编程领域,尤其是游戏开发中,实现人机对战的五子棋游戏是一项既有趣又有挑战性的任务。本项目利用Microsoft Foundation Classes (MFC) 框架,构建了一个功能完备、...

    人机版五子棋 源代码

    在这个项目中,开发者利用计算机编程技术,构建了一个简单易懂的游戏框架,使用户能够在Microsoft Visual C++(VC)环境下直接编译运行,享受五子棋的乐趣。 在五子棋游戏中,每一步棋的决策至关重要,对于人机对弈...

    Android 简单的人机对战五子棋游戏

    【Android 简单的人机对战五子棋游戏】是一个使用Android平台开发的互动娱乐应用,让玩家可以与计算机进行对弈。这个项目旨在提供一个基础的五子棋游戏框架,通过学习和理解,开发者可以进一步提升其Android编程技能...

    canvas制作的简易五子棋

    使用HTML5的canvas制作的非人机的简易五子棋使用HTML5的canvas制作的非人机的简易五子棋使用HTML5的canvas制作的非人机的简易五子棋使用HTML5的canvas制作的非人机的简易五子棋

    人机对战五子棋源代码(C语言控制台界面)

    本项目通过C语言实现了一个人机对战的五子棋游戏。虽然没有采用图形界面,但通过控制台界面依然能够提供良好的用户体验。此外,游戏还具备基本的计算机智能,使得游戏更具挑战性和趣味性。通过对该项目的学习和实践...

    基于Android实现的简单的人机对战五子棋游戏基于Android实现的简单的人机对战五子棋游戏

    在Android平台上实现一个简单的人机对战五子棋游戏,涉及到多个关键的技术点,包括UI设计、事件处理、游戏逻辑算法以及人机交互等。以下将详细解释这些知识点。 首先,**Android UI设计**是游戏界面的基础。开发者...

    Android应用源码之人机对战五子棋代源码-IT计算机-毕业设计.zip

    本文将详细解析一款基于Android平台的人机对战五子棋应用程序的源码,适用于计算机科学与技术专业的学生进行毕业设计学习。此应用源码涵盖了Android移动开发中的多种核心技术,包括界面设计、事件处理、游戏逻辑算法...

    人机对战五子棋完整源码

    【标题】"人机对战五子棋完整源码"涉及的是一个使用Python编程语言实现的人工智能与玩家对弈的五子棋游戏。在这个项目中,开发者通过编写代码使得计算机能够模拟玩家进行游戏,提供了丰富的交互体验。下面将详细阐述...

    Java实现具有界面的人机对战五子棋(很强)

    使用Java开发的人机对战五子棋,具有界面效果,总代码量500多行。界面使用awt,swing简单技术,机器落子算法是评分法,对572个五元组评分,思路简单,效果很好,机器胜率非常高。 笔者不仅打包了jar,而且打包的....

    人机对弈五子棋

    【人机对弈五子棋】是一款基于MFC框架在Visual Studio 2012环境下开发的棋类游戏,主要用于实现人类玩家与计算机之间的对战。这款游戏的核心是五子棋规则,即玩家双方轮流在15*15的棋盘上下棋,先形成连续五个同色...

    【Cocos Creator 实战教程(1)】——人机对战五子棋(节点事件相关)

    本实战教程将带你深入理解Cocos Creator引擎,并通过创建一个简单的人机对战五子棋游戏,来探讨节点事件的相关知识。在Cocos Creator中,节点事件是构建交互式游戏的关键元素,它们允许游戏对象之间进行通信,从而...

    C#实现人机对战五子棋

    在本项目中,"C#实现人机对战五子棋"是一个基于C#编程语言开发的五子棋游戏,支持玩家与计算机之间的对战以及玩家之间的竞技。五子棋是一种双人对弈的策略棋类游戏,目标是先在棋盘上形成连续的五颗同色棋子(水平、...

    基于QT的人机对弈五子棋小游戏

    【基于QT的人机对弈五子棋小游戏】是一款利用QTCreator进行开发的桌面应用程序,旨在为用户提供一个简单而有趣的五子棋游戏体验。在这个游戏中,用户可以通过鼠标操作与计算机进行对弈,享受智力对决的乐趣。它包含...

    人机对战五子棋 c++源码!

    在本项目中,我们讨论的是一个使用C++编程语言实现的人机对战五子棋游戏。这个源码项目对于理解游戏开发、C++编程以及设计模式的应用有着重要的学习价值。让我们深入探讨一下其中的关键知识点: 1. **C++语言基础**...

    Android人机对战五子棋游戏源码

    【Android人机对战五子棋游戏源码】是一个典型的Android平台上的游戏开发实例,它展示了如何构建一个简单但互动性强的对战游戏。在这个项目中,开发者将面临多个技术挑战,包括图形用户界面(GUI)设计、人工智能...

    人机对战五子棋-分难度

    总结起来,创建一个人机对战的五子棋程序涉及了计算机科学的多个方面,包括游戏规则的建模、搜索算法的设计(如Minimax和Alpha-Beta Pruning)、评估函数的构建以及难度级别的设定。通过这些技术的组合,AI可以与...

    VC++版 人机对弈 五子棋

    五子棋规则简单,但策略深奥,是研究人工智能的理想平台。 4. **GDI++**:GDI++是Windows图形设备接口(GDI)的增强版本,提供了丰富的图形绘制功能,如绘制线条、形状、文本、位图等。在这个五子棋项目中,GDI++被...

    wuziqi.rar_五子棋 人机_人机五子棋

    在这个项目中,我们将探讨一个基于简单的算法实现的人机对弈五子棋系统。这个系统旨在为初学者提供一个学习计算机博弈论的实践平台,对于高级玩家,可能略显基础。 首先,我们来理解“人机对弈”的概念。在计算机...

    AS3.0人机互动五子棋

    在本文中,我们将深入探讨如何使用AS3.0(ActionScript 3.0)实现一个10×10棋盘的五子棋人机对战系统。五子棋是一种深受人们喜爱的双人策略游戏,目标是先在棋盘上连成五子的玩家获胜。在AS3.0中开发这样的系统,...

Global site tag (gtag.js) - Google Analytics