




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
package org.liky.game.frame;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.imageio.ImageIO;import javax.swing.JFrame;import javax.swing.JOptionPane;public class FiveChessFrame extends JFrame implements MouseListener, Runnable /* * */声明一个程序的最终常量,防止环境升级而不可用。private static final long serialVersionUID = 1L;/ 取得屏幕的宽度int width = Toolkit.getDefaultToolkit().getScreenSize().width;/ 取得屏幕的高度int height = Toolkit.getDefaultToolkit().getScreenSize().height;/ 背景图片BufferedImage bgImage = null;/ 保存棋子的坐标int x = 0;int y = 0;/ 保存之前下过的全部棋子的坐标/ 其中数据内容 0: 表示这个点并没有棋子, 1: 表示这个点是黑子, 2:表示这个点是白子int allChess = new int1919;/ 标识当前应该黑棋还是白棋下下一步boolean isBlack = true;/ 标识当前游戏是否可以继续boolean canPlay = true;/ 保存显示的提示信息String message = 黑方先行;/ 保存最多拥有多少时间(秒)int maxTime = 0;/ 做倒计时的线程类Thread t = new Thread(this);/ 保存黑方与白方的剩余时间int blackTime = 0;int whiteTime = 0;/ 保存双方剩余时间的显示信息String blackMessage = 无限制;String whiteMessage = 无限制;SuppressWarnings(deprecation)public FiveChessFrame() / 设置标题this.setTitle(五子棋);/ 设置窗体大小this.setSize(500, 500);/ 设置窗体出现位置this.setLocation(width - 500) / 2, (height - 500) / 2);/ 将窗体设置为大小不可改变this.setResizable(false);/ 将窗体的关闭方式设置为默认关闭后程序结束this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/ 为窗体加入监听器this.addMouseListener(this);/ 将窗体显示出来this.setVisible(true);t.start();t.suspend();String imagePath = ;try imagePath = System.getProperty(user.dir)+/bin/image/background.jpg ;bgImage = ImageIO.read(new File(imagePath.replaceAll(, /); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();/ 刷新屏幕,防止开始游戏时出现无法显示的情况.this.repaint();public void paint(Graphics g) / 双缓冲技术防止屏幕闪烁BufferedImage bi = new BufferedImage(500, 500,BufferedImage.TYPE_INT_RGB);Graphics g2 = bi.createGraphics();g2.setColor(Color.BLACK);/ 绘制背景g2.drawImage(bgImage, 1, 20, this);/ 输出标题信息g2.setFont(new Font(黑体, Font.BOLD, 20);g2.drawString(游戏信息: + message, 130, 60);/ 输出时间信息g2.setFont(new Font(宋体, 0, 14);g2.drawString(黑方时间: + blackMessage, 30, 470);g2.drawString(白方时间: + whiteMessage, 260, 470);/ 绘制棋盘for (int i = 0; i 19; i+) g2.drawLine(10, 70 + 20 * i, 370, 70 + 20 * i);g2.drawLine(10 + 20 * i, 70, 10 + 20 * i, 430);/ 标注点位g2.fillOval(68, 128, 4, 4);g2.fillOval(308, 128, 4, 4);g2.fillOval(308, 368, 4, 4);g2.fillOval(68, 368, 4, 4);g2.fillOval(308, 248, 4, 4);g2.fillOval(188, 128, 4, 4);g2.fillOval(68, 248, 4, 4);g2.fillOval(188, 368, 4, 4);g2.fillOval(188, 248, 4, 4);/* * /绘制棋子 x = (x - 10) / 20 * 20 + 10 ; y = (y - 70) / 20 * 20 + 70 ; * /黑子 g.fillOval(x - 7, y - 7, 14, 14); /白子 g.setColor(Color.WHITE) ; * 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 = 10 & x = 70 & y = 400 & e.getX() = 70& e.getY() = 100) 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) blackMessage = maxTime / 3600 + :+ (maxTime / 60 - maxTime / 3600 * 60) + :+ (maxTime - maxTime / 60 * 60);whiteMessage = maxTime / 3600 + :+ (maxTime / 60 - maxTime / 3600 * 60) + :+ (maxTime - maxTime / 60 * 60);t.resume(); else blackMessage = 无限制;whiteMessage = 无限制;this.canPlay = true; 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) JOptionPane.showMessageDialog(this, 请输入正确信息,不允许输入负数!);if (maxTime = 0) int result = JOptionPane.showConfirmDialog(this,设置完成,是否重新开始游戏?);if (result = 0) for (int i = 0; i 19; i+) for (int j = 0; j 0) int result = JOptionPane.showConfirmDialog(this,设置完成,是否重新开始游戏?);if (result = 0) 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() = 5) flag = true; / 纵向的判断 int i2 = 1 ; int count2 = 1 ; * while (color = allChessx + 0y + i2) count2+; i2+; i2 = 1; * while (color = allChessx - 0y - i2) count2+; i2+; if * (count2 = 5) flag = true ; / 斜方向的判断(右上 + 左下) int i3 = 1 ; int * count3 = 1 ; while (color = allChessx + i3y - i3) count3+; * i3+; i3 = 1; while (color = allChessx - i3y + i3) count3+; * i3+; if (count3 = 5) flag = true ; / 斜方向的判断(右下 + 左上) int i4 = * 1 ; int count4 = 1 ; while (color = allChessx + i4y + i4) * count4+; i4+; i4 = 1; while (color = allChessx - i4y - i4) * count4+; i4+; if (count4 = 5) flag = true ; */ 判断横向count = this.checkCount(1, 0, color);if (count = 5) flag = true; else / 判断纵向count = this.checkCount(0, 1, color);if (count = 5) flag = true; else / 判断右上、左下count = this.checkCount(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 + 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;public void run() / TODO Auto-generated method stub/ 判断是否有时间限制if (maxTime 0) while (true) if (isBlack) blackTime-;if (blackTime = 0) JOptionPane.showMessageDialog(this, 黑方超时,游戏结束!); else whiteTime-;if (whiteTime = 0) JOptionPane.showMessageDialog(this, 白方超时,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程吊装合同协议书
- 居民用电合同协议书
- 定制家具转让协议书
- 小学无偿补课协议书
- 礼服租赁协议书
- 爱心托班协议书
- 社保承担协议书
- 2025年西班牙语SIELE考试听力专项模拟试卷(不同语速训练)-真实场景听力挑战
- 瓷砖贴牌协议书
- 涮碗外包协议书
- 杭州市2025年中考作文《勇敢自信》写作策略与范文
- 热点主题作文写作指导:古朴与时尚(审题指导与例文)
- 河南省洛阳市2025届九年级下学期中考一模英语试卷(原卷)
- 2025年入团考试各科目试题及答案分析
- 电网工程设备材料信息参考价2025年第一季度
- 成都设计咨询集团有限公司2025年社会公开招聘(19人)笔试参考题库附带答案详解
- 2025年上海市金融稳定发展研究中心招聘考试模拟测试
- 2025年高三高考冲刺主题教育班会:《高三考前心理调适指南:减压赋能 轻松备考》-2024-2025学年高中主题班会课件
- 学校设计施工及运营一体化(EPC+O)招标文件
- 《动物繁殖技术》课件
- 《胸部恶性肿瘤》课件
评论
0/150
提交评论