版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 26年银发护理质控要点总结课件
- 26年慢病老人饮食调理课件
- 2025年中广核笔试试题及答案
- 中小学教师副高级职称晋升讲课答辩真题附答案初中语文部分
- 房地产销售个人工作总结
- 财务成本专责个人工作总结
- 腹膜透析置管术前术后护理
- 残障人士现金业务办理指南
- 2025-2026学年鸡西市高三3月份模拟考试历史试题含解析
- 基于小学生体验式学习的城市垃圾分类政策实践探索教学研究课题报告
- 衡阳县岣嵝峰林场招聘社区网格员考试试题附答案详解
- 视频监控系统技术规范书
- 2026云南昆明市国和勘察规划设计院有限公司招聘工作人员3人考试备考试题及答案解析
- 低碳城市智慧路灯节能改造升级方案
- 第二轮土地承包到期后再延长30年试点工作意见政策解读
- 2026年监考人员培训试题及答案
- 2026年上海市奉贤区高三二模数学试卷及答案解析
- 医院屋顶光伏施工造价预算方案模板
- 从创意到创业知到智慧树章节测试课后答案2024年秋湖南师范大学
- 被动语态游戏教育课件
- 火花源原子发射光谱分析课件
评论
0/150
提交评论