java带图形界面的五子棋
Main:
package BlackWhite; import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel; public class Main { public static void main(String[] args)
{
new Game().startGame(); //layout(); // JFrame mainWindow=new JFrame("黑白棋");
// mainWindow.setLayout(new FlowLayout());//布局器
// mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出时关闭
// mainWindow.setSize(400,300);//大小
// mainWindow.setVisible(true);//显示
//
// JButton button=new JButton("点我");
//
// mainWindow.add(button);//这里按钮铺满了 }
public static void layout() {
JFrame mainWindow=new JFrame("黑白棋");
mainWindow.setLayout(new BorderLayout());
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWindow.setSize(400,300);
mainWindow.setVisible(true); JButton southButton=new JButton("South");
JButton NorthButton=new JButton("North");
JButton eastButton=new JButton("east");
JButton westButton=new JButton("west");
JButton centerButton=new JButton("center");
//
// mainWindow.add(southButton,BorderLayout.SOUTH);
// mainWindow.add(NorthButton,BorderLayout.NORTH);
// mainWindow.add(eastButton,BorderLayout.EAST);
// mainWindow.add(westButton,BorderLayout.WEST);
// mainWindow.add(centerButton,BorderLayout.CENTER); JPanel centerPanel=new JPanel();
centerPanel.setLayout(new FlowLayout());//布局
centerPanel.setBackground(Color.black);//背景颜色
centerPanel.add(centerButton); JPanel southPanel=new JPanel();
southPanel.setLayout(new FlowLayout());
southPanel.setBackground(Color.white);
southPanel.add(southButton); mainWindow.add(centerPanel,BorderLayout.CENTER);
mainWindow.add(southPanel,BorderLayout.SOUTH); }
}
Game:判断五子相连还有问题
package BlackWhite; import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel; public class Game { private JFrame mainWindow;//JFrame是顶层容器
private JPanel centerPanel;//放置棋盘
private JPanel sourthPanel;//信息提示框
private JLabel playInforLabel_1;
private JLabel playInforLabel_2;
private JButton newGameButton;
private Insets margins=new Insets(0,0,0,0);
private static JButton[][] buttonArray=new MyButton[25][25];
private int type=1;//1黑2白
private boolean isWin=false; public Game() {
mainWindow=new JFrame("五子棋");
mainWindow.setLayout(new BorderLayout());
mainWindow.setSize(600, 750);
mainWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainWindow.setResizable(false); centerPanel=new JPanel();
centerPanel.setLayout(new GridLayout(25,25));
for(int y=0;y<buttonArray.length;y++) {
for(int x=0;x<buttonArray[0].length;x++) {
buttonArray[y][x]=new MyButton(y,x);
buttonArray[y][x].setText("");
buttonArray[y][x].setMargin(margins);//
myButtonAddEvent((MyButton) buttonArray[y][x]);
centerPanel.add(buttonArray[y][x]);
}
}
sourthPanel=new JPanel();
sourthPanel.setLayout(new FlowLayout());
playInforLabel_1=new JLabel("黑方下棋");
playInforLabel_2=new JLabel("等待一方获胜");
newGameButton=new JButton("再来一局");//构建按钮
//newGameButton.setEnabled(false);
newGameButtonAddEvent( newGameButton);
mainWindow.add(centerPanel, BorderLayout.CENTER);
mainWindow.add(sourthPanel, BorderLayout.SOUTH);
sourthPanel.add(playInforLabel_1);
sourthPanel.add(playInforLabel_2);
sourthPanel.add(newGameButton); } public void startGame() {
mainWindow.setVisible(true);//显示
} public void myButtonAddEvent(MyButton button) {
button.addMouseListener(new MouseListener() {//MouseListener()是接口 @Override
public void mouseClicked(MouseEvent e) {
MyButton button =(MyButton)e.getComponent();
String butttonText=button.getText();
if(!butttonText.equals("")) {
return;
}
if(type==1) {
button.setText("●");
int x=button.getxIndex();
int y=button.getyIndex();
buttonArray[y][x].setText("●");
System.out.println(buttonArray[y][x].getText());
if(whoWin(1,y,x)) {
System.out.println("黑方获胜");
};
System.out.print(("坐标"+(button.getyIndex()+1)));
System.out.println((button.getxIndex()+1));
type=2;
playInforLabel_1.setText("白方下棋");
}else {
button.setText("○"); int x=button.getxIndex();
int y=button.getyIndex();
buttonArray[y][x].setText("○");
System.out.println(buttonArray[y][x].getText());
if(whoWin(2,y,x)) {
System.out.println("白方获胜");
};
System.out.print(("坐标"+(button.getyIndex()+1)));
System.out.println((button.getxIndex()+1));
type=1;
playInforLabel_1.setText("黑方下棋");
} } @Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub } @Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub } @Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub } @Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub } });
}
public void newGameButtonAddEvent(JButton button) {
newGameButton.addMouseListener(new MouseListener() { @Override
public void mouseClicked(MouseEvent e) {
//棋盘初始化
for(int y=0;y<buttonArray.length;y++) {
for(int x=0;x<buttonArray[0].length;x++) {
//buttonArray[y][x]=new MyButton(y,x);
buttonArray[y][x].setText("");
}
}
type=1;//回到游戏开始的黑方下棋
isWin=false;
playInforLabel_1.setText("黑方下棋");
} @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 } @Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub } });
} public static boolean whoWin(int type,int y,int x){
//判断 是否已经获胜
String qizi = null;
switch(type){
case 1 : qizi = "●"; break ;
case 2 : qizi = "○"; break ;
} //判断纵向是否5子相连
int count = 1;
for(int i = y + 1 ; i < buttonArray.length ; i++){ if(buttonArray[i][x].getText().equals(qizi)){
count ++;
}else{
break ;
}
}
for(int i = y - 1 ; i >= 0 ; i--){
if(buttonArray[i][x].getText().equals(qizi)){
count ++;
}else{
break ;
}
} if(count >= 5){
System.out.println("|相连了");
return true;
} //判断横向是否5子相连
count = 1;
for(int i = x + 1 ; i < buttonArray[0].length ; i++){
//System.out.println(buttonArray[0].length);
if(buttonArray[i][x].getText().equals(qizi)){
count ++;
}else{
break ;
}
}
for(int i = x - 1 ; i >= 0 ; i--){
if(buttonArray[i][x].getText().equals(qizi)){
System.out.println(buttonArray[i][x].getText());
count ++;
}else{
break ;
}
} if(count >= 5){
System.out.println("---相连");
return true;
} //判断/是否相连System.out.println("判断/是否相连");
count = 1;
for(int i = y + 1 , j = x + 1; i < buttonArray.length && j < buttonArray[0].length ; i++ , j++){
if(buttonArray[i][x].getText().equals(qizi)){
System.out.println(buttonArray[i][x].getText());
count ++;
}else{
break ;
}
}
for(int i = y - 1 , j = x - 1; i >=0 && j >= 0 ; i-- , j--){
if(buttonArray[i][x].getText().equals(qizi)){
System.out.println(buttonArray[i][x].getText());
count ++;
}else{
break ;
}
} if(count >= 5){
System.out.println("/相连");
return true;
} //判断\是否相连
count = 1;
for(int i = y + 1 , j = x - 1; i < buttonArray.length && j >=0 ; i++ , j--){
if(buttonArray[i][x].getText().equals(qizi)){
System.out.println(buttonArray[i][x].getText());
count ++;
}else{
break ;
}
}
for(int i = y - 1 , j = x + 1; i >=0 && j < buttonArray[0].length ; i-- , j++){
if(buttonArray[i][x].getText().equals(qizi)){
System.out.println(buttonArray[i][x].getText());
count ++;
}else{
break ;
}
} if(count >= 5){
System.out.println("\\相连");
return true;
} return false;
} }
Mybutton:
package BlackWhite;
import javax.swing.JButton;
public class MyButton extends JButton {
private int yIndex;
private int xIndex;
public MyButton(int yIndex,int xIndex) {
this.xIndex=xIndex;
this.yIndex=yIndex;
}
public int getyIndex() {
return yIndex;
}
public void setyIndex(int yIndex) {
this.yIndex = yIndex;
}
public int getxIndex() {
return xIndex;
}
public void setxIndex(int xIndex) {
this.xIndex = xIndex;
}
}
java带图形界面的五子棋的更多相关文章
- Java的图形界面依然是跨平台的
Awt:抽象窗口工具箱,它由三部分组成: ①组件:界面元素: ②容器:装载组件的容器(例如窗体): ③布局管理器:负责决定容器中组件的摆放位置. 图形界面的应用分四步: ① 选择一个容器: ⑴wind ...
- Java自学-图形界面 容器
Swing 的容器 JFrame和JDialog java的图形界面中,容器是用来存放 按钮,输入框等组件的. 窗体型容器有两个,一个是JFrame,一个是JDialog 步骤 1 : JFrame ...
- Java Swing 图形界面开发(目录)
Java Swing 图形界面开发(目录) 2017年05月30日 23:50:42 阅读数:5228 本文链接: http://blog.csdn.net/xietansheng/article/d ...
- Java Swing图形界面开发
本文转自xietansheng的CSDN博客内容,这是自己见过的最通俗易懂.最适合快速上手做Java GUI开发的教程了,这里整合一下作为自己以后复习的笔记: 原文地址:https://blog.cs ...
- 【计项02组01号】Java版图形界面计算器
Java版图形界面计算器1.0版本 项目分析[1.0] 组成部分 代码结构 (1)窗口的创建 在<JDK 核心 API>中我们提到,创建一个窗口需要使用 JFrame 类.在本实验中,我们 ...
- Java GUI图形界面开发工具
Applet 应用程序 一种可以在 Web 浏览器中执行的小程序,扩展了浏览器中的网页功能. 缺: 1.需要下载 Applet 及其相关文件 2.Applet 的功能是受限制的 优: 3.无需 ...
- JAVA与图形界面开发(Applet应用程序、AWT库、Swing)
Applet 1)简单说,Applet就是嵌入到网页中的小程序,Java代码. 2)编写Applet程序,要继承JApplet类,并根据自己需要覆写相关方法(init.start.stop.destr ...
- Java自学-图形界面 Swing中的线程
Swing中的线程 步骤 1 : 三种线程 在Swing程序的开发中,需要建立3种线程的概念 初始化线程 初始化线程用于创建各种容器,组件并显示他们,一旦创建并显示,初始化线程的任务就结束了. 事件调 ...
- memcache的带图形界面监控工具memcachephp
memcache也有一款图形界面的监控工具(memcachephp),可以通过这个工具查看到局域网内所有部署memcache机器或者端口的memcache的运行情况,对我们监控memcache的缓存命 ...
随机推荐
- Gym - 101908H Police Hypothesis (树链剖分/LCT+字符串哈希)
题意:有一棵树,树上每个结点上有一个字母,有两种操作: 1)询问树上两点u,v间有向路径上有多少个字母和某个固定的字符串相匹配 2)将结点u的字母修改为x 树剖+线段,暴力维护前缀和后缀哈希值(正反都 ...
- UVA - 10829 L-Gap Substrings (后缀自动机+线段树启发式合并)
题意:统计一段字符串中形如UVU的子串个数(其中V的长度固定为g). 问题等价于求满足$g+1\leqslant |j-i|\leqslant g+LCP(i,j)$的后缀(i,j)的对数,即$\su ...
- centos7安装python3x,使用virtualenv创建python3的隔离环境
centos7默认python程序是2x,如果要使用3x可以使用EPEL仓库安装.同时为了使用隔离的python环境可以安装virtualenv. 1.启用EPEL sudo yum install ...
- DEDE怎么让栏目列表以权重拍排列
方法/步骤 进入后台到栏目里,新发布文章也行,编辑文章也行,你会看到有个权重值,不管你怎么改变保存后依然没有变化. 修改权重值,打开dede\album_edit.php文件,找到 UPD ...
- dockerfile:python-cuda-nvidia-cudnn
centos7 FROM centos:7 MAINTAINER yon@DataExa.com RUN yum -y install make wget \ && wget -O / ...
- 2018 计蒜之道 初赛 第五场 A 贝壳找房搬家
贝壳找房换了一个全新的办公室,每位员工的物品都已经通过搬家公司打包成了箱子,搬进了新的办公室了,所有的箱子堆放在一间屋子里(这里所有的箱子都是相同的正方体),我们可以把这堆箱子看成一个 x*y*z 的 ...
- CF 354 D 迷宫与门的旋转 BFS +状态压缩 一定要回头看看
D. Theseus and labyrinth time limit per test 3 seconds memory limit per test 256 megabytes input sta ...
- matplotlib绘图时显示额外的“figure”浮窗
引自 https://blog.csdn.net/weixin_41571493/article/details/82690052 问题:现在默认的Pycharm绘图时,都会出现下面的情况: 不能弹出 ...
- sklearn pca降维
PCA降维 一.原理 这篇文章总结的不错PCA的数学原理. PCA主成分分析是将原始数据以线性形式映射到维度互不相关的子空间.主要就是寻找方差最大的不相关维度.数据的最大方差给出了数据的最重要信息. ...
- Apicloud_(模板)登陆注册功能模板
项目已托管到Github上 传送门 不需要使用任何图片资源,需要用到SHA1.js库文件, Apicloud_(接口验证)用户注册头部信息X-APICloud-AppKey生成 传送门 项目全代码放到 ...