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的缓存命 ...
随机推荐
- Java-Web servlet控制器的引入
一.建包 二.建立实体类 参考二维表,考虑各个字段的名字.类型 private String id; private String name; private String address; publ ...
- grunt的安装及使用
windows下安装grunt需要先安装ruby和nodejsruby -v 测试ruby是否安装成功node -v 测试nodejs是否安装成功npm -v 测试npm是否安装成功(npm是node ...
- vuex , 简单入(liao)门(jie)
vuex什么 ? 官方的说法就是 vuex是专门为vue.js应用程序开发的 状态管理模式 .并采用集中式存储 , 管理应用的所有组件的状态 ,并以相同的规则保证状态以一种可预估的方式发生变化. 自己 ...
- Python实现PDF文件截取
python3截取PDF文件中的一部分. from PyPDF2 import PdfFileWriter, PdfFileReader # 开始页 start_page = 0 # 截止页 end_ ...
- (转载)Ant自动编译打包android项目
1 Ant自动编译打包android项目 1.1 Ant安装 ant的安装比较简单,下载ant压缩包 http://ant.apache.org (最新的为1.9.3版本),下载之后将其解压 ...
- CSS3的多列属性
CSS3 可以将文本内容设计成像报纸一样的多列布局 ㈠CSS3 多列属性 ㈡column-count 属性 ⑴语法:column-count: number|auto; ⑵值: ㈢c ...
- JS实现深拷贝的几种方法
引 如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力. 此篇文章中也会简单阐述到栈 ...
- 计蒜客 window画图
在 Windows 的"画图"工具里,可以绘制各种各样的图案.可以把画图当做一个标准的二维平面,在其上先后绘制了 nn 条颜色互不相同的线段. 输出格式 输出 qq 行,每行一个整 ...
- [2019杭电多校第一场][hdu6582]Path(最短路&&最小割)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6582 题意:删掉边使得1到n的最短路改变,删掉边的代价为该边的边权.求最小代价. 比赛时一片浆糊,赛后 ...
- create-react-app创建,ie11不兼容
按照官方文档使用yarn create react-app centre-app 创建工程,使用yarn start, chrome浏览器可正常访问 但在ie11下报如下图错误 解决方案如下: 1. ...