用java实现简单五子棋人人对战,对于初学者还是比较好玩的。
接下来 看下我写的五子棋程序
我们将它分为三个类
1.主窗体类
2.鼠标事件处理器
3.判断一方是否胜利
比较简单,望大家多多指正
1.主窗体类
/**************************************************************************************************************************************/
package cn.lantian.Fivezq;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JFrame;
public class WuzqFrame extends JFrame {
/**
* 五子棋
*
* @兰天
*/
//入口主函数
public static void main(String[] args) {
WuzqFrame wzq = new WuzqFrame();
wzq.init();
}
public void init() {
chushi();// 初始化棋盘
//基本设置
this.setTitle("五子棋");
this.setSize(520, 535);
this.setDefaultCloseOperation(3);
//设置居中
this.setLocationRelativeTo(null);
//用户不可调整大小
this.setResizable(false);
this.setVisible(true);
//获取窗体的画布
Graphics g = this.getGraphics();
//定义鼠标监听类
wzqListener wzql = new wzqListener(g,this);
//添加鼠标监听
this.addMouseListener(wzql);
}
//对窗体进行重绘
public void paint(Graphics g) {
//调用父类的方法,super
super.paint(g);
//画棋盘
for (int i = 0; i < n + 1; i++) {
g.drawLine(x + i * size, y, x + i * size, y + n * size);
}
for (int i = 0; i < n + 1; i++) {
g.drawLine(x, y + i * size, x + n * size, y + i * size);
}
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
if (s[i][j]==1){
g.fillOval(x +i* WuzqFrame.size-WuzqFrame.size/2 , y + j*WuzqFrame.size-WuzqFrame.size/2 ,
WuzqFrame.qsize, WuzqFrame.qsize);
}else if (s[i][j]==-1){
//将颜色改为白色
g.setColor(Color.WHITE);
g.fillOval(x +i* WuzqFrame.size-WuzqFrame.size/2 , y + j*WuzqFrame.size-WuzqFrame.size/2 ,
WuzqFrame.qsize, WuzqFrame.qsize);
//定义黑色为初始色
g.setColor(Color.BLACK);
}
}
//定义起始直线坐标
public static int x = 30, y = 50;
//棋子的多少及格子大小
public static int n = 15, size = 30, qsize = 30;
//定义一个数组来存储棋子
public static int[][] s = new int[n][n];
//初始方法,数组全赋为0
public void chushi() {
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
s[i][j] = 0;
}
}
/**************************************************************************************************************************************/
2.鼠标事件处理器
/**************************************************************************************************************************************/
package cn.lantian.Fivezq;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
//棋盘鼠标监听器
public class wzqListener implements MouseListener {
private Graphics g;
//用来确定下什么棋
public static int t = 1;
private WuzqFrame wzq;
//构造器,将画布传过来
public wzqListener(Graphics g,WuzqFrame wzq) {
this.g = g;
this.wzq = wzq;
}
public void mousePressed(MouseEvent e) {
//获得要下的棋子的行和列
int x1=Math.round((float) (e.getX() - WuzqFrame.x) / WuzqFrame.size);
int y1=Math.round((float) (e.getY() - WuzqFrame.y) / WuzqFrame.size);
//判断行列是否出界,及是否放了棋子
if(x1>=0&&x1<WuzqFrame.n&&y1>=0&&y1<WuzqFrame.n&&WuzqFrame.s[x1][y1]==0){
//棋子放在棋盘上后,数组做相应标示
WuzqFrame.s[x1][y1] = t;
//重绘棋盘
wzq.repaint();
//调用QiziPd类中的方法,来判断输赢
QiziPd.pd(t, x1, y1,g,wzq);
//改变棋子颜色
t = -t;
}
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
}
/**************************************************************************************************************************************/
3.判断一方是否胜利
/**************************************************************************************************************************************/
package cn.lantian.Fivezq;
import java.awt.Graphics;
import javax.swing.JOptionPane;
//判断胜负
public class QiziPd {
// 将一些重要参数的值传过来
public static int[][] s = WuzqFrame.s;
private static int n = WuzqFrame.n;
// 构建两个移动数组(暂且这么说)
private static int[] a = { -1, -1, 0, 1, 1, 1, 0, -1 };
private static int[] b = { 0, 1, 1, 1, 0, -1, -1, -1 };
// 判断方法,z为棋子颜色的标志,x y 为下的棋子的行与列
public static void pd(int z, int x, int y, Graphics g, WuzqFrame wzq) {
// 四个方向横、竖、左斜、右斜
for (int i = 0; i < 4; i++) {
// 记录在一条直线上的棋子数(不包括下的棋子)
int temp = 0;
// 里面以棋子为界,又分两个方向
for (int j = 0; j < 2; j++) {
int x1 = x, y1 = y;
// 判断同一直线上的棋子数
while (temp < 4) {
// 算出那条直线上的棋子的坐标
x1 = x1 + a[i + 4 * j];
y1 = y1 + b[i + 4 * j];
// 如果在棋盘内,继续循环,否则退出循环
if (x1 < 0 || x1 >= n || y1 < 0 || y1 >= n)
break;
else {
// 如果这条直线上有自己颜色的棋子,则temp++,否则退出
if (s[x1][y1] == z) {
temp++;
} else
break;
}
}
// 如果连着的棋子数为4(没有包括自己,总数是五)
if (temp == 4) {
// 弹出谁赢了的提示框
if (z == 1) {
JOptionPane.showMessageDialog(null, "黑棋赢了,再来一盘吧!");
} else {
JOptionPane.showMessageDialog(null, "白棋赢了,再来一盘吧!");
}
//初始数组
wzq.chushi();
//重绘棋盘
wzq.repaint();
//先下的 棋子为黑子,t改为白子,后面的语句会改过来
wzqListener.t=-1;
break;
}
}
}
}
}
/**************************************************************************************************************************************/
- 大小: 18.3 KB
分享到:
相关推荐
本人亲自编写,经老师检查,成绩A+ 由于老师要求交程序实验报告手写板,所以没有做电子版。
用Java实现的五子棋的对战小游戏,实现了人人网络对战,人机对战,拥有界面,在使用的时候记得将src下面的所有素材放到bin目录下方可正常运行,导入Eclipse即可运行。
用java开发的五子棋,使用了java的awt和swing,其中没有AI,粗略的看了网上的AI算法,看的头都大了。
java五子棋的实现,适合学生的课程设计,希望能够帮到大家,实现人机对战,和人人对战功能模式,有时间统计
主要介绍了Java编程实现五子棋人人对战代码示例,具有一定借鉴价值,需要的朋友可以参考下。
NULL 博文链接:https://hafuokas.iteye.com/blog/1836195
帮同学做的,没有第一次发的功能强 由于老师要求交程序实验报告手写板,所以没有做电子版。
很好玩的小游戏,代码清晰明了,希望对大家能够有所帮助
五子棋,人人对战,可重置游戏, 代码是相当的简单,适合初学者阅读吧
本程序是用java语言开发的,功能有开始,重开,悔棋等,有计时功能,并且可以设置计时的时间限制。界面美观,按钮排列整齐
这是一个五子棋小代码,只有人人对战,没有智能.
人人对战的五子棋,比较简单的程序。希望大家看看
基于java实现的五子棋,可以实现人机对战,人人对战两种模式
java写的五子棋小程序,界面优美,人机对战,人人对战。
用java写的可视化五子棋,背景和棋子都是一张图片,用到了java1.5以后的双缓冲技术,实现人人对战,最简单的实现算法!
java做的五子棋,非常不错!总共三个还有算法!
本人也是初学者,仅实现了五子棋人人对战的简单功能,有再来一局的功能。相应的代码有注释,帮助理解,目前仍然在继续完善
五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成5子连线者获胜。 棋具与围棋通用,...
主要是一个五子棋游戏,利用java swing技术编写,总共只有一个类,两个内部类。人机对战
Java编写的五子棋程序,支持人人对战,包含5个文件,比较简单。