有点老了,突然写起这个还是有点奇怪。下面是代码,相应的图标和音乐文件都是放在c盘目录下。然后改成你想要的就可以了。图标,我建议去阿里矢量图库找一下。音乐,建议把格式转换成wav的。其他格式需要转码工具类。没有添加包名请自行添加。

以下是代码:

import sun.audio.AudioPlayer;
import sun.audio.AudioStream;import javax.swing.*;
import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.FileInputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Vector;public class WuZiQiCode extends JFrame implements MouseListener {public static void main(String[] args) {WuZiQiCode wuZiQiCode = new WuZiQiCode();}//Vector 可以实现自动增长的对象数组,用来存下面的步数信息。Vector v = new Vector();    //所有的每步走棋信息Vector white = new Vector(); //白方走棋信息Vector black = new Vector(); //黑方走棋信息boolean b; //用来判断白旗还是黑棋int whiteCount, blackCount; //计算悔棋步数int w = 25;    //间距大小int px = 150, py = 150;int pxw = px + w, pyw = py + w;int width = w * 16, height = w * 16;int vline = width + px;    //垂直线的长度int hline = height + py; //水平线的长度
JButton jb;JButton reset;JButton send1;JButton send2;TextArea ta = new TextArea(10, 40);TextField tf1 = new TextField(20);TextField tf2 = new TextField(20);/*** 构造方法*/public WuZiQiCode() {super("Five-in-a-row");Container con = this.getContentPane();con.setLayout(null);//创建按钮jb=new JButton("悔棋");Icon back = new ImageIcon("C:\\res\\button.png");jb.setIcon(back);Font f=new Font("宋体",Font.BOLD,20);//根据指定字体名称、样式和磅值大小,创建一个新 Font。
        jb.setFont(f);jb.setBackground(Color.ORANGE);jb.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {jbClicked();}});jb.setVisible(true);jb.setBounds(600,250,150,45);reset=new JButton("重开");Icon resets = new ImageIcon("C:\\res\\button.png");reset.setIcon(resets);reset.setFont(f);reset.setBackground(Color.pink);reset.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {reset();}});reset.setVisible(true);reset.setBounds(600,350,150,45);send1=new JButton("发送");Icon iconSend1 = new ImageIcon("C:\\res\\button.png");send1.setIcon(iconSend1);send1.setFont(f);send1.setBackground(Color.CYAN);send1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {send1();}});send1.setVisible(true);send1.setBounds(0,650,150,45);send2=new JButton("发送");Icon iconSend2 = new ImageIcon("C:\\res\\button.png");send2.setIcon(iconSend2);send2.setFont(f);send2.setBackground(Color.CYAN);send2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {send2();}});send2.setVisible(true);send2.setBounds(600,650,150,45);tf1.setBounds(0,550,150,50);tf2.setBounds(600,550,150,50);ta.setBounds(200,550,300,200);ta.setBackground(Color.lightGray);con.add(jb);con.add(reset);con.add(send1);con.add(send2);con.add(tf1);con.add(tf2);con.add(ta);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭按钮
playMusic();this.addMouseListener(this);//添加监听this.setSize(800, 800);////this.setIconImage(new ImageIcon("D:\\20190625095140.jpg").getImage());//this.setBackground(Color.lightGray);this.setVisible(true);int width = Toolkit.getDefaultToolkit().getScreenSize().width;int height = Toolkit.getDefaultToolkit().getScreenSize().height;this.setBounds((width - 800) / 2,(height - 800) / 2, 800, 800);}public void send1(){String tf_str = tf1.getText().trim();tf1.setText("");tf_str = "左边:"+tf_str;ta.append(tf_str+"\r\n");tf2.requestFocus();}public void send2(){String tf_str = tf2.getText().trim();tf2.setText("");tf_str = "右边:"+tf_str;ta.append(tf_str+"\r\n");tf1.requestFocus();}static void playMusic(){//背景音乐播放try {URL cb;File f = new File("C:\\res\\music.wav"); // 引号里面的是音乐文件所在的路径cb = f.toURL();AudioClip aau;aau = Applet.newAudioClip(cb);aau.play();aau.loop();//循环播放
//            FileInputStream fileau=new FileInputStream("C:\\res\\music.mp3");
//            AudioStream as=new AudioStream(fileau);
//            AudioPlayer.player.start(as);System.out.println("可以播放");// 循环播放 aau.play()//单曲 aau.stop()停止播放
} catch (Exception e) {e.printStackTrace();}}public void reset(){this.v.clear();this.black.clear();this.white.clear();this.repaint();}public void jbClicked(){if (v.isEmpty()) {JOptionPane.showMessageDialog(this, "没有棋可悔");} else {if (v.size() % 2 == 0) {    //判断是白棋悔棋,还是黑棋悔棋int i =JOptionPane.showConfirmDialog(null, "黑棋要悔棋", "询问",JOptionPane.YES_NO_OPTION);if(i==1){blackCount++;if (blackCount > 3) {JOptionPane.showMessageDialog(this, "黑棋已经悔了"+blackCount+"步");} else {v.remove(v.lastElement());this.repaint();}}} else {int i =JOptionPane.showConfirmDialog(null, "白棋要悔棋", "询问",JOptionPane.YES_NO_OPTION);if(i==0){whiteCount++;if (whiteCount > 3) {JOptionPane.showMessageDialog(this, "白棋已经悔了"+whiteCount+"步");} else {v.remove(v.lastElement());this.repaint();}}}}}/*** 画棋盘和棋子* @param*/public void paint(Graphics g) {g.setFont(new Font("宋体", Font.BOLD, 24));g.clearRect(0, 0, this.getWidth(), this.getHeight());//清除画板g.drawImage(new ImageIcon("C:\\res\\backs.jpg").getImage(),0,0,800,800,null);g.setColor(Color.BLACK);//绘制网格颜色g.drawRect(px, py, width, height);//网格大小g.drawString("Five-in-a-row", 240, 90);for (int i=0; i<15; i++) {//循环画出g.drawLine(pxw+i*w, py, pxw+i*w, hline);//每条横线和竖线g.drawLine(px, pyw+i*w, vline, pyw+i*w);}for (int x=0; x<v.size(); x++) {String str = (String)v.get(x);String tmp[] = str.split("-");int a = Integer.parseInt(tmp[0]);int b = Integer.parseInt(tmp[1]);a = a * w + px;b = b * w + py;if (x%2 == 0) {g.setColor(Color.WHITE);} else {g.setColor(Color.BLACK);}g.fillArc(a-w/2, b-w/2, w, w, 0, 360);}jb.repaint();reset.repaint();send1.repaint();send2.repaint();tf1.repaint();tf2.repaint();ta.repaint();}@Overridepublic void mouseClicked(MouseEvent e) {//鼠标点击事件也就是左键或者右键点击if (e.getButton() == e.BUTTON1) {int x = e.getX();int y = e.getY();x = (x - x % w) + (x % w > w / 2 ? w : 0);y = (y - y % w) + (y % w > w / 2 ? w : 0);x = (x - px) / w;y = (y - py) / w;if (x >= 0 && y >= 0 && x <= 16 && y <= 16) {if (v.contains(x+"-"+y)) {JOptionPane.showMessageDialog(this,"已经有棋了!");} else {v.add(x+"-"+y);this.repaint();if (v.size() % 2 == 0) {black.add(x+"-"+y);//这里加了个黑棋this.victory(x, y, black);} else {white.add(x+"-"+y);//加了个白棋this.victory(x, y, white);}}} else {}}}/*** 判断胜利的方法* @param x* @param y* @param contain*/private void victory(int x, int y, Vector contain) {int cv = 0;    //垂直方向棋子数量int ch = 0;    //水平方向棋子数量int ci1 = 0; //斜面方向棋子数量1int ci2 = 0; //斜面方向棋子数量2//计算水平方向棋子数量for (int i=1; i<5; i++) {if (contain.contains((x+i)+"-"+y)) {ch++;} else {break;}}for (int i=1; i<5; i++) {if (contain.contains((x-i)+"-"+y)) {ch++;} else {break;}}//计算垂直方向棋子数量for (int i=1; i<5; i++) {if (contain.contains(x+"-"+(y+i))) {cv++;} else {break;}}for (int i=1; i<5; i++) {if (contain.contains(x+"-"+(y-i))) {cv++;} else {break;}}//计算45°斜面方向棋子数量for (int i=1; i<5; i++) {if (contain.contains((x+i)+"-"+(y+i))) {ci1++;} else {break;}}for (int i=1; i<5; i++) {if (contain.contains((x-i)+"-"+(y-i))) {ci1++;} else {break;}}//计算135°斜面方向棋子数量for (int i=1; i<5; i++) {if (contain.contains((x+i)+"-"+(y-i))) {ci2++;} else {break;}}for (int i=1; i<5; i++) {if (contain.contains((x-i)+"-"+(y+i))) {ci2++;} else {break;}}if (ch>=4 || cv>=4 ||ci1>=4 ||ci2>=4) {System.out.println(v.size()+"步棋");if (v.size() % 2 == 0) {//判断是黑棋赢,还是白棋赢JOptionPane.showMessageDialog(null, "黑棋赢了");} else {JOptionPane.showMessageDialog(null, "白棋赢了");}this.v.clear();this.black.clear();this.white.clear();this.repaint();}}@Overridepublic void mouseEntered(MouseEvent e) {// TODO Auto-generated method stub
}@Overridepublic void mouseExited(MouseEvent e) {// TODO Auto-generated method stub
}@Overridepublic void mousePressed(MouseEvent e) {// TODO Auto-generated method stub
}@Overridepublic void mouseReleased(MouseEvent e) {// TODO Auto-generated method stub
}
}

转载于:https://www.cnblogs.com/Congratulate/p/11088197.html

Java使用Swing实现五子棋。相关推荐

  1. java drawboard_java Swing实现五子棋游戏

    本文实例为大家分享了java实现五子棋项目,供大家参考,具体内容如下 运行结果 视频经过压缩画质略显粗糙. 标题 1)绘制网格棋盘: 重写JPanel的paint(Graphics g)方法,绘制16 ...

  2. Java swing 单机版五子棋

    一.此五子棋是基于java的swing开发,是单机版,源码见git:https://github.com/zhangliqingyun/FiveChess.git,先看效果图 二.功能介绍 1.首先建 ...

  3. Java Swing实现五子棋程序

    首先感谢08年MLDN出的这个培训视频,我把代码和文档整理了一下,发布出来给需要学习Swing的朋友. 源码地址: https://gitee.com/indexman/gobang 一.知识点准备: ...

  4. Java+Swing实现五子棋游戏

    目录 一.系统介绍 1.开发环境 2.技术选型 3.系统功能 二.系统展示 1.首页 2.黑棋走 3.白棋走 三.部分代码 AI.java Chess.java Gobang.java GobangL ...

  5. Swing实现五子棋

    根据http://blog.csdn.net/cnlht/article/details/8176130衍生.增加了悔棋只可毁一次. 一.先设计棋子类 棋子类要包括下的位置和棋子的颜色,即x.y坐标与 ...

  6. Java小程序 —— 简单五子棋

    看到好多后台留言问背景图片的问题,在这里统一补充一下:所有的图片都是读取的本地图片文件,图片文件可以去网上下载,有一大堆(记得调好长宽),代码中的路径只是当时我的电脑的图片路径,你们运行的时候记得修改 ...

  7. 做一个简单的java小游戏--单机版五子棋

    做一个简单的java小游戏–单机版五子棋 学了java有一段时间了,今天就来搞一个简单的单机版五子棋游戏. 实现功能:那必须能进行基础的输赢判断.还有重新开始的功能,悔棋的功能,先手设置的功能和退出的 ...

  8. 面向对象程序设计(Java)课程设计——五子棋小游戏

    目录 一.团队成员及任务 二.项目简介 三.功能设计图 四.运行结果截图 五.核心源码 六.课程设计感想与展望 一.团队成员及任务 队长:管俊杰  计科(智能)22-1 202203200037 负责 ...

  9. Java小程序——简单五子棋(人机对战)

    有关五子棋人人对战的代码,以及其他一些我想说的话请参考 Java小程序 -- 简单五子棋_如切如磋,如琢如磨-CSDN博客_java小程序 由于某些原因,这里我给出的AI算法算是比较简单的,所以导致了 ...

最新文章

  1. Visual Studio Code 玩MS SQL
  2. Android的.apk软件安装到sd卡的方法
  3. matlab中二维插值函数interp2的使用
  4. SQA计划和验收测试规程设计
  5. html两个布局并列居中,CSS布局-将两个div并排居中并对齐
  6. 用c语言判断计算机是大端模式还是小端模式
  7. c# 代码编辑器 支持多种语言,支持多种编程语言与系统的跨平台代码编辑器——微软 Visual Studio Code...
  8. Mysql数据库版本高低引起的group by问题
  9. 华为nova8计算机功能在,华为nova8隐藏功能怎么开启(华为nova8的隐藏功能)
  10. 【备忘】【不定时更新】那些有用有趣的网站君们~~
  11. 如何保证网络安全,常见的网络安全技术
  12. 正大国际期货:做期货主帐户有什么风险?
  13. qduoj 韬韬说做出这个泥萌就AK辣
  14. 汽车创新人士Rick Tewell晋升为Velodyne Lidar首席运营官
  15. 《攻壳机动队》+押井守
  16. HTML5七夕情人节表白网页(幻化3D相册) HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白
  17. 如何安装nginx第三方模块--add-module
  18. todo---callback
  19. 我的左脚疼,你的右脚会疼吗?
  20. upc 2022/2/27 校赛+洛谷6599

热门文章

  1. Scrum立会报告+燃尽图(Final阶段第四次)
  2. python-docx表格样式列表
  3. js动态创建元素和删除
  4. [jQuery]回到顶部
  5. ASP.NET程序中常用代码汇总(五)
  6. HIT Software Construction Review Notes(1-2 Quality Objectives of Software Construction)
  7. 【零基础学Java】—抽象方法和抽象类(二十二)
  8. 二叉树期权定价python代码_欧式和美式期权的二叉树和Greek(1)——PYTHON
  9. 一程序员反应职场怪现象
  10. win10我的电脑在哪里找到