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的缓存命 ...
随机推荐
- php核心:代际划分/运行环境等
不想在python一棵树上吊死,不是所有Python就一定得会人工智能大数据,so...... 何谓php?早期:personel homepage 是也!后期Hypertext preprocess ...
- python--数学运算函数
x=-100 y=abs(x) #求绝对值 y=divmod(9,4) #9/4之后获取整数与余数 #(2, 1) #返回一个元组(2, 1),第一个数是整数,第二个数是余数 y=round(3.14 ...
- 关于在react里面es6构建类的时候,一些开始的问题
一般来说我们写react代码,个人习惯 这个里面没有constructor和super的,这样写也没啥问题.因为他会默认加上 但是有的时候有人会加上这两个 可以不写constructor,一旦写了co ...
- Tarjan求LCA胡乱写的板子 x
首先Tarjan算法的基本思路: 1.任选一个点为根节点,从根节点开始. 2.遍历该点u所有子节点v,并标记这些子节点v已被访问过. 3.若是v还有子节点,继续搜索下去,否则下一步. 4.合并v到u上 ...
- codevs 5929 亲戚x
题目描述 Description 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. ...
- selenium实现chrome分屏截图的合并
selenium的截图功能在chrome下无法实现,但是可以操作滚动条来一屏一屏的截图,然后再合并成一张图,合并图片的代码在网上找的,十分感谢那位朋友,具体解决方案如下:直接上代码: def capt ...
- Android的SQLite基本操作
涉及SQLite的增删改查,结果用log显示 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ...
- Misplaced alignment tab character &
范例: 期望的标题效果:Literature review & Research set-up 在Latex里写的标题:\section{Literature Review & Res ...
- oracle ROW_NUMBER() OVER(PARTITION BY '分组' ORDER BY '排序' DESC) 用法
转载:https://blog.csdn.net/dbagaoshou/article/details/51330829 SELECT * FROM ( SELECT ROW_NUMBER() OVE ...
- php的mysql语法
php操作mysqli(示例代码) 更新时间:2013年10月28日 :: 作者: 我要评论 关注脚本之家微信公众号(jb51net) 每周都有大礼相送哦 php操作mysqli的示例代码.需要的朋友 ...