package orgMygameJFrame;
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 FiveChrseFrame extends JFrame implements MouseListener,Runnable {
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 [][] allChese =new int [19][19];
//标识当前是黑棋还是白棋下下一步
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 = "无限制";
//背景图片初始化
public FiveChrseFrame(){
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();
//解决黑屏
this.repaint();
try {
bgImage = ImageIO.read(new File("E:/java/110011122付豪/wuziqi/image/五子棋4.jpg"));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void paint(Graphics g){
//双缓冲技术,防止屏幕闪烁
BufferedImage bi=new BufferedImage(500,500,BufferedImage.TYPE_INT_ARGB);
Graphics g2 = bi.createGraphics();
g2.drawImage(bgImage, 1, 27, this);
//绘制背景
g2.setColor(Color.BLACK);
g2.setFont(new Font("黑体",Font.BOLD,20));
g2.drawString("游戏信息:"+message, 30, 60);
//输出标题信息
g2.setFont(new Font("宋体",0,12));
g2.drawString("黑方时间:"+blackMessage, 30, 465);
g2.drawString("白方时间:"+whiteMessage, 255, 465);
//输出时间信息
/**
* 绘制棋盘
**/
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(68, 368, 4, 4);
g2.fillOval(308, 368, 4, 4);
g2.fillOval(188, 248, 4, 4);
g2.fillOval(188, 128, 4, 4);
g2.fillOval(188, 368, 4, 4);
g2.fillOval(68, 248, 4, 4);
g2.fillOval(308, 248, 4, 4);
/*
//绘制棋子
x = ( x - 10 ) / 20*20+10;
y = ( y - 70 ) / 20*20+70;
//黑子
g2.fillOval(x- 7, y- 7, 14, 14);
//白子
g2.setColor(Color.WHITE);
g2.fillOval(x- 7, y- 7, 14, 14);
g2.setColor(Color.BLACK);
g2.drawOval(x- 7, y- 7, 14, 14);
*/
//绘制全部棋子
for(int i=0;i<19;i++){
for(int j=0;j<19;j++){
if(allChese[i][j]==1){
//黑子
int tempX=i*20+10; //得到最近焦点的精确坐标
int tempY=j*20+70;
g2.fillOval(tempX - 7, tempY - 7, 14, 14);
}
if(allChese[i][j]==2){
//白子
int tempX=i*20+10;
int tempY=j*20+70;
g2.setColor(Color.WHITE);
g2.fillOval(tempX - 7, tempY - 7, 14, 14);
g2.setColor(Color.BLACK);
g2.drawOval(tempX - 7, tempY - 7, 14, 14);
}
}
}
g.drawImage(bi, 0, 0, this);
}
@Override
public void mouseClicked(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
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
/*System.out.println("鼠标点击位置:X-->"+e.getX());
System.out.println("鼠标点击位置:Y-->"+e.getY());*/
if(canPlay==true){
x = e.getX();
y = e.getY();
if(x>=10&&x<=370&&y>=70&&y<=430){
x=(x-10)/20;//得到最近焦点的位置
y=(y-70)/20;
//判断当前位置是否已经有棋子,如果有给出提示
if(allChese[x][y]==0){
//判断当前要下的是什么颜色的棋子
if(isBlack==true){
allChese[x][y]=1;
isBlack=false;
message ="轮到白方走棋";
}else{
allChese[x][y]=2;
isBlack=true;
message ="轮到黑方走棋";
}
//判断这个棋子是否和其他的棋子连成五连,判断游戏是否结束
boolean winFlag=this.checkWin();
if (winFlag==true){
JOptionPane.showMessageDialog(this, "游戏结束!"+(allChese[x][y]==1?"黑方":"白方")+"获胜!");
canPlay = false;
}
}else{
JOptionPane.showMessageDialog(this, " 当前位置已经有棋子,请重落子! ");
}
this.repaint();// 重新执行一遍paint()方法
}
}
//点击开始游戏按钮
if(e.getX()>=400&&e.getX()<=470 && e.getY()>=70&&e.getY()<=100){
int result = JOptionPane.showConfirmDialog(this, "是重新开始游戏?");
if(result==0){
//现在重新开始游戏
//重新开始所要做的操作 1)把棋盘清空,allChese这个数组中的全部数据归零
//2)将游戏信息:的显示改回到开始位置
//3)将下一步下棋的人改为黑方
for(int i=0;i<19;i++){
for(int j=0;j<19;j++){
allChese[i][j]=0;
}
}
//另一种方式 allChese =new int[19][19];
message ="黑方先行";
isBlack=true;
blackTime = maxTime;
whiteTime = maxTime;
if(maxTime>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.repaint();
}
}
//点击游戏设置按钮
if(e.getX()>=400&&e.getX()<=470 && e.getY()>=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<19;j++){
allChese[i][j]=0;
}
}
//另一种方式 allChese =new int[19][19];
message ="黑方先行";
isBlack=true;
blackTime = maxTime;
whiteTime = maxTime;
blackMessage = "无限制";
whiteMessage = "无限制";
this.repaint();
}
}
if(maxTime>0){
int result = JOptionPane.showConfirmDialog(this,"设置完成,是否重新开始游戏");
if(result==0){
for(int i=0;i<19;i++){
for(int j=0;j<19;j++){
allChese[i][j]=0;
}
}
//另一种方式 allChese =new int[19][19];
message ="黑方先行";
isBlack=true;
blackTime = maxTime;
whiteTime = maxTime;
blackMessage = maxTime/3600+":"+(maxTime/60-maxTime/3600*60)+":"+(maxTime-maxTime/60*60);
whiteMessage = maxTime/3600+":"+(maxTime
wuziqi.rar_五子棋gui
版权申诉
61 浏览量
2022-09-14
20:29:01
上传
评论
收藏 550KB RAR 举报
小波思基
- 粉丝: 70
- 资源: 1万+
最新资源
- # 微信小程序-健康菜谱 基于微信小程序的一个查找检索菜谱的应用 ### 效果 !动态图(./res/gif/demo
- zabbix-get命令包资源
- 毕业设计,基于PyQt5实现的可视化界面的Python车牌自动识别系统源码
- 26-朴素贝叶斯分类.rar
- 没有安Matlab 也可以 生成FIR抽头系数工具.py
- python烟花代码.rar
- 实验目的: 1.构建基于verilog语言的组合逻辑电路和时序逻辑电路; 2.掌握verilog语言的电路设计技巧 3.完成如
- 扩展卡尔曼滤波matlab仿真
- 3_base.apk.1
- 躺赢者PRO飞控常见典型问题合集(续一)无名小哥 余义 20240501待修
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈