java五子棋源代码_第1页
java五子棋源代码_第2页
java五子棋源代码_第3页
java五子棋源代码_第4页
java五子棋源代码_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、package chess;import java.awt.Button;import java.awt.Color;import java.awt.Font;import java.awt.Graphics;import java.awt.Toolkit;import java.awt.event.MouseEvent;import java.awt.event.MouseListener;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException; import javax.image

2、io.ImageIO;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane; public class Chess extends JFrame implements MouseListener, Runnable private static final long serialVersionUID = 1L; int width = Toolkit.getDefaultToolkit().getScreenSize().width; int hight = Toolkit.get

3、DefaultToolkit().getScreenSize().height; / 背景图片 BufferedImage bjImage = null; / 保存棋子坐标 int x = 0; int y = 0; / 保存之前下过的棋子坐标 / 其中数据:0:表示这个点没有棋子 1:表示黑子 2:表示白子 int allChess = new int1919; / 标识当前是黑棋还是白旗下下一步 boolean isBlack = true; / 标识当前游戏是否可以继续 boolean canPlay = true; / 保存显示的提示信息 String message = 黑方先行;

4、/ 保存最多拥有多少时间(秒) int maxTime = 0; / 做倒计时的线程类 Thread t = new Thread(this); / 保存黑方与白方的剩余时间 int blackTime = 0; int whiteTime = 0; / 保存双方剩余时间的显示信息 String blackMessage = 无限制; String whiteMessage = 无限制; SuppressWarnings(deprecation) public Chess() this.setTitle(五子棋); this.setSize(500, 500); this.setLocatio

5、n(width - 500) / 2, (hight - 500) / 2); this.addMouseListener(this); / this.setResizable(false); this.setVisible(true); this.setLayout(null); t.start(); t.suspend();/ 线程挂起 / 刚打开的时候刷新屏幕,防止开始游戏时无法显示的问题 this.repaint(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try bjImage = ImageIO.read(new

6、File(C:UserscwbDesktoptimg.jpg); catch (IOException e) e.printStackTrace(); Override public void paint(Graphics g) / 双缓存技术 防止屏幕闪烁 但不知道为什么,使用双缓存技术以后,效果特不好,所以没用,如果使用的话,下面的 g 改为 g2 就可以了 /BufferedImage bi=new /BufferedImage(500,500,BufferedImage.TYPE_INT_ARGB); /Graphics g=bi.createGraphics(); g.drawIma

7、ge(bjImage, 0, 20, this); g.setFont(new Font(黑体, Font.BOLD, 20); g.drawString(游戏信息: + message, 120, 60); g.setFont(new Font(宋体, 0, 14); g.drawString(黑方时间: + blackMessage, 30, 470); g.drawString(白方时间: + whiteMessage, 260, 470); g.drawString(开始游戏, 400,100); g.drawString(游戏设置, 400,150); g.drawString(游戏

8、说明, 400,200); g.drawString(认 输, 400,300); g.drawString(关 于, 400,350); g.drawString(退 出, 400,400); / 绘制棋盘 for (int i = 0; i 19; i+) g.drawLine(10, 70 + 20 * i, 370, 70 + 20 * i); g.drawLine(10 + 20 * i, 70, 10 + 20 * i, 430); / 标注小圆点位 g.fillOval(68, 128, 4, 4); g.fillOval(308, 128, 4, 4); g.fillOval(

9、308, 368, 4, 4); g.fillOval(68, 368, 4, 4); g.fillOval(188, 128, 4, 4); g.fillOval(68, 248, 4, 4); g.fillOval(188, 368, 4, 4); g.fillOval(188, 248, 4, 4); g.fillOval(308, 248, 4, 4); / /绘制棋子 / x=(x-10)/20*20+10; /是为了取得交叉点的坐标 / y=(y-70)/20*20+70; / /黑子 / g.fillOval(x-7, y-7, 14, 14); / /白子 / g.setCol

10、or(Color.BLACK); / g.fillOval(x-7, y-7, 14, 14); / g.setColor(Color.BLACK); / g.drawOval(x-7, y-7, 14, 14); / 输出数组中所有数值 / 绘制全部棋子 for (int i = 0; i 19; i+) for (int j = 0; j = 5) flag = true; else / 判断纵向 count = this.checkCount(0, 1, color); if (count = 5) flag = true; else / 判断右上左下 count = this.chec

11、kCount(1, -1, color); if (count = 5) flag = true; else / 判断左下右上 count = this.checkCount(1, 1, color); if (count = 5) flag = true; return flag; / 判断棋子连接数量 private int checkCount(int xChange, int yChange, int color) int count = 1; int tempX = xChange; int tempY = yChange; while (x + xChange = 0 & x +

12、xChange = 0 & y + yChange 0) yChange+; else yChange-; xChange = tempX; yChange = tempY; while (x - xChange = 0 & x - xChange = 0 & y - yChange 0) yChange+; else yChange-; return count; Override public void mouseEntered(MouseEvent arg0) Override public void mouseExited(MouseEvent arg0) SuppressWarnin

13、gs(deprecation) Override public void mousePressed(MouseEvent e) if (canPlay = true) x = e.getX(); y = e.getY(); if (x = 10 & x = 70 & y = 400 & e.getX() = 70 & e.getY() = 100) int result = JOptionPane.showConfirmDialog(this, 是否重新开始游戏?); if (result = 0) / 现在重新开始游戏 / 重新开始所要做的操作:1)把棋盘清空,allChess数组中全部数据

14、归0; / 2)游戏相关信息显示初始化 / 3)将下一步下棋改为黑方 for (int i = 0; i 19; i+) for (int j = 0; j 0) blackMessage = maxTime / 3600 + : + (maxTime / 60 - maxTime / 3600 * 60) + : + (maxTime - maxTime / 60 * 60); whiteMessage = maxTime / 3600 + : + (maxTime / 60 - maxTime / 3600 * 60) + : + (maxTime - maxTime / 60 * 60)

15、; t.resume(); else blackMessage = 无限制; whiteMessage = 无限制; this.repaint();/ 如果不重新调用,则界面不会刷新 / 点击 游戏设置 按钮 if (e.getX() = 400 & e.getX() = 120 & e.getY() = 150) String input = JOptionPane .showInputDialog(请输入游戏的最多时间(单位:分钟),如果输入0 ,表示没有时间限制); try maxTime = Integer.parseInt(input) * 60; if (maxTime 0) JO

16、ptionPane.showMessageDialog(this, 请正确提示信息,不允许输入负数); if (maxTime = 0) int result = JOptionPane.showConfirmDialog(this, 设置完成,是否重新开始游戏?); if (result = 0) / 现在重新开始游戏 / 重新开始所要做的操作:1)把棋盘清空,allChess数组中全部数据归0; / 2)游戏相关信息显示初始化 / 3)将下一步下棋改为黑方 for (int i = 0; i 19; i+) for (int j = 0; j 0) int result = JOption

17、Pane.showConfirmDialog(this, 设置完成,是否重新开始游戏?); if (result = 0) / 现在重新开始游戏 / 重新开始所要做的操作:1)把棋盘清空,allChess数组中全部数据归0; / 2)游戏相关信息显示初始化 / 3)将下一步下棋改为黑方 for (int i = 0; i 19; i+) for (int j = 0; j = 400 & e.getX() = 170 & e.getY() = 400 & e.getX() = 270 & e.getY() = 400 & e.getX() = 320 & e.getY() = 400 & e.getX() = 370 & e.getY() 0) while (true) if (isBlack) blackTime-; if (blackTime = 0) JOptionPane.show

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论