`
香煎马鲛鱼
  • 浏览: 109596 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

我的五子棋(一)源代码

    博客分类:
  • java
阅读更多
我的五子棋(一)
五子棋代码什么的,网上都有一堆了,不过既然是自己写的,都觉得好好的,然后我将会分四节跟大家讲解我是怎么用java做五子棋的,包括其中所用的方法和类:
这一节先上源代码哈:
全局变量:文件:Config.java;
import java.util.ArrayList;
import java.util.List;




public class Config {
public static int X0 = 50;//初始X坐标
public static int Y0 = 50;//初始Y坐标
public static int size = 35;//格子长宽
public static int size_H = 15;//行数
public static int size_L = 15;//列数
public static int count = 0;//所下步数;
public static int regret = 0;
public static List<Integer> listx = new ArrayList<Integer>();
public static List<Integer> listy = new ArrayList<Integer>();
//public static List listcount = new ArrayList();
}


主类代码:主类:Draw.java
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionListener;
import java.awt.event.MouseListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JSeparator;


public class Draw extends JFrame {//新建界面Draw类,继承JFrame,它拥有JFrame

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
        Draw a = new Draw();
        a.Getguit();
    a.repaint();//刷新界面
}

public void Getguit()
    {
    this.setTitle("欢乐五子棋");
    this.setSize(740,600);
    this.setDefaultCloseOperation(3);//关闭窗体就退出程序
    this.setLocationRelativeTo(null);//窗体显示在中央
//
    ImageIcon backgroundImage = new ImageIcon("picture/backlove.jpg");
        JLabel Imagebg = new JLabel(backgroundImage);
        Imagebg.setBounds(0, 0, backgroundImage.getIconWidth(),backgroundImage.getIconHeight());
        this.getLayeredPane().add(Imagebg,new Integer(Integer.MIN_VALUE));//添加窗体的LayeredPane面板到最底层
        JPanel contentPanel = (JPanel)this.getContentPane();//获取窗体的第一层面板
contentPanel.setOpaque(false);//设置第一层面板为透明
//
        JPanel eastPanel = new JPanel();//初始化面板(窗口东部)
        JPanel eastPanelup = new JPanel();//初始化面板(窗口东部上部)
        JPanel eastPanelmin = new JPanel();//初始化面板中部
        eastPanelup.setPreferredSize(new Dimension(70,90));//(窗口东部上部留空部分)
        eastPanelmin.setPreferredSize(new Dimension(100,100));//(窗口东部中部留空中间)
        eastPanel.setLayout(new BorderLayout());//设置布局方式——边框布局
        eastPanelmin.setLayout(new FlowLayout(FlowLayout.CENTER,10,38));
        JButton jbtopen = new JButton("开始新游戏");//设置按钮1
        JButton jbthui = new JButton("悔棋");//按钮2
        JButton jbtvsplayer = new JButton("玩家对战");//按钮3
        JButton jbtvscomputer = new JButton("人机对战");//按钮4
        eastPanelmin.add(jbtopen);//放置按钮1
        eastPanelmin.add(jbthui);//放置按钮2
        eastPanelmin.add(jbtvsplayer);//放置按钮3
        eastPanelmin.add(jbtvscomputer);//放置按钮4
        eastPanel.add(eastPanelup,BorderLayout.NORTH);//放置面板eastPanelup至eastPanel北部
        eastPanel.add(eastPanelmin,BorderLayout.CENTER);//放置面板eastPanelmin至eastPanel北部
        this.add(eastPanel,BorderLayout.EAST);//放置面板eastPanel至this
        //设置菜单栏
        JMenuBar jme = new JMenuBar();
        JMenu menuV = new  JMenu("查看(V)");//实例化菜单栏对象
        JMenuItem jmiT = new JMenuItem("帮助");
        JMenuItem JmiS = new JMenuItem("作者信息");
        menuV.add(jmiT);
        JSeparator jse = new JSeparator();
        menuV.add(jse);
        menuV.add(JmiS);
        jme.add(menuV);
        //
       this.setVisible(true);//窗体可见
    Graphics g = this.getGraphics();//窗体可见后获取画布对象
    MouseListener dl = new DrawListener(g,this);//实例化事件处理类的对象
    this.addMouseListener(dl);//
    ActionListener jbtopen2 = new OpenListener(this);//
        jbtopen.addActionListener(jbtopen2);//给按钮1加监视器
    ActionListener jbthui2 = new RegretListener(this);//
        jbthui.addActionListener(jbthui2);//给按钮2加监视器

    }
    public void paint(Graphics g){
    //调用父类的重绘方法
    super.paint(g);
    //绘制棋盘
    //绘制15条
    //横线
    for(int i = 0;i<=Config.size_H;i++){
    g.drawLine(Config.X0,Config.Y0+i*Config.size,575,Config.Y0+i*Config.size);
    }
    //竖线
    for(int i = 0;i<=Config.size_L;i++){
    g.drawLine(Config.X0+i*Config.size,Config.Y0,Config.X0+i*Config.size,575);
    }
    //重绘棋盘上的棋子
    for(int i = 6;i<Config.size_H+12;i++){
    for(int j = 6;j<Config.size_L+12;j++){
                 if(DrawListener.reclocation[i][j]==1){
         g.setColor(Color.WHITE);
         g.fillOval((Config.size*(j+1-6)),(Config.size*(i+1-6)), Config.size-5, Config.size-5);
                 }
                 if(DrawListener.reclocation[i][j]==-1){
          g.setColor(Color.BLACK);
          g.fillOval((Config.size*(j+1-6)),(Config.size*(i+1-6)), Config.size-5, Config.size-5);
                 }
    }
    }
    }
    }
   

鼠标监视器:(监视棋盘上的动作)文件:DrawListener.java

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;

import javax.swing.JOptionPane;

import com.sun.xml.internal.bind.v2.schemagen.xmlschema.List;

public class DrawListener implements MouseListener {
private int x2, y2;//坐标
private Graphics g;//画图类
private Draw a;
    public int state = 1;//控制下棋的顺序
    private int k2,m2;//将棋子显示在格子中央
    public static int reclocation[][] = new int[Config.size_L+12][Config.size_H+12];//元素默认值为零
private int input = 9;//避免下在重复的位置而导致覆盖
DrawListener(){

}
DrawListener(Graphics g,Draw a) {
this.g = g;
this.a = a;
}

@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
}

@Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
x2 = e.getX();
y2 = e.getY();
k2 = (x2-Config.X0)/Config.size;//计算格子在第几行
if((x2-Config.X0)%Config.size>(Config.size/2))
{
k2 = k2+1;
}
m2 = (y2-Config.Y0)/Config.size;//计算格子在第几列
if((y2-Config.X0)%Config.size>(Config.size/2))
{
m2 = m2+1;
}
int x3 = (Config.size*(k2+1));//棋子坐标x
int y3 = (Config.size*(m2+1));//棋子坐标y
if(state == 1){//黑子下
this.judgment();//判断下在此位置是否合法
g.setColor(Color.BLACK);
          System.out.println("黑棋state: "+state);
}if(state == -1){//白子下
this.judgment();//判断下在此位置是否合法
g.setColor(Color.WHITE);
          System.out.println("白棋state: "+state);


}
        if(input == 9){//如果合法;在界面中绘出该点
            System.out.println("改变state前: "+state);
            System.out.println("state改变后: "+state);
            System.out.println("++++++++++++++++++++++++++++++");
    this.changeState();
    g.fillOval(x3,y3, Config.size-5, Config.size-5);
        reclocation[m2+6][k2+6] = state;//在此位置做标记,表示此位置已经有子
        }
        if(Config.regret==1){
       reclocation[m2+6][k2+6]=0;
       a.repaint();
       Config.regret=0;
        }
        this.judgmentwin();

}//方法封装


public void judgment(){//判断下在此位置是否合法
if(reclocation[m2+6][k2+6]==1||reclocation[m2+6][k2+6]==-1||m2>15||k2>15){//如果有子
System.out.println("下错位置咯");
input = 10;//判断为非法,无法下在此位置
}else{
input = 9;
Config.count = Config.listx.size()+1;
Config.listx.add(k2+6);
Config.listy.add(m2+6);
}
     }//judgment函数结束
public void judgmentwin(){
int i;
int  win = 0;//计数器水平方向
int win2 = 0;//计数器竖直方向
int win3 = 0;//计数器45度
int win4 = 0;//计数器135度
for(i = 0;i<=5;i++){
for(int j = i-5;j<i;j++){
win=win+reclocation[m2+6][k2+6+j];//检查水平方向
win2=win2+reclocation[m2+6+j][k2+6];//检查竖直方向
win3=win3+reclocation[m2+6+j][k2+6+j];//检查45°方向
win4=win4+reclocation[m2+6-j][k2+6+j];//检查135°方向
}//内部循环结束
if(win>=5||win2>=5||win3>=5||win4>=5){
JOptionPane.showMessageDialog(null,"恭喜,白棋胜利了");break;
}else if(win<=-5||win2<=-5||win3<=-5||win4<=-5){
JOptionPane.showMessageDialog(null,"恭喜,黑棋胜利了");break;
}else{//计数器全归零,重新计算
win = 0;
     win2 = 0;
win3 = 0;
win4 = 0;
}
}
}//方法
public int getState(){//获取步骤
return state;
}
public void changeState(){//获取步骤
          state = state*(-1);
          System.out.println("使用悔棋后state: "+state);
}
}//类的封装


再来一局:文件:OpenListener.java

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class OpenListener implements  ActionListener {

private Draw a;
public OpenListener(Draw a){
this.a = a;
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
for(int i = 6;i<Config.size_H+12;i++){
    System.out.println();
    for(int j = 6;j<Config.size_L+12;j++){
    DrawListener.reclocation[i][j] = 0;//重置所有棋子
    System.out.print("   "+DrawListener.reclocation[i][j]);//
    }//内循环结束;
    }//外循环结束
a.repaint();//刷新界面
Config.count = 0;
Config.listx.clear();
Config.listy.clear();
}

}

悔棋操作:文件:RegretListener.java
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JOptionPane;


public class RegretListener implements ActionListener {
private Draw a;
public RegretListener(Draw a){
this.a = a;

}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
DrawListener b = new DrawListener();
if(Config.count>=1){//如果步数大于1,可执行悔棋操作
    int x = Config.listx.get(Config.count-1);//获取要悔棋的点的坐标x
int y = Config.listy.get(Config.count-1);//获取要悔棋的点的坐标y
DrawListener.reclocation[y][x]=0;//
System.out.println("reclocation[x][y]"+"  "+y+"  "+x+"  :"+DrawListener.reclocation[y][x]);//
Config.count--;//界面棋子数-1
Config.regret=1;
}//
else{//如果棋盘上没有棋子
JOptionPane.showMessageDialog(null,"已经是最后一步了");//
}//
a.repaint();//刷新
}
}

0
1
分享到:
评论

相关推荐

    计网课程设计Java写的五子棋源代码.zip

    计网课程设计Java写的五子棋源代码计网课程设计Java写的五子棋源代码计网课程设计Java写的五子棋源代码计网课程设计Java写的五子棋源代码计网课程设计Java写的五子棋源代码计网课程设计Java写的五子棋源代码计网课程...

    java小游戏 (源码)swing五子棋源代码

    java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源代码java小游戏 (源码)swing五子棋源...

    五子棋MFC源代码

    五子棋MFC源代码是一款基于Microsoft Foundation Class (MFC) 库开发的简单游戏程序,主要用于C++编程初学者理解和学习MFC框架。MFC是微软提供的一套面向对象的类库,它封装了Windows API,使得开发者可以更高效地...

    C语言五子棋游戏源代码

    本篇将深入解析一个用C语言编写的五子棋游戏源代码。该程序适用于初学者学习,代码中包含了丰富的功能,如玩家交互、游戏逻辑处理等。接下来,我们将详细探讨代码中的关键部分及其工作原理。 #### 宏定义与常量 1....

    c++五子棋的源代码

    【C++五子棋源代码解析】 五子棋是一种经典的双人对弈游戏,源代码实现可以帮助我们理解C++编程语言的基本语法、面向对象编程思想以及游戏逻辑的构建。在这个项目中,我们可以学习到以下几个重要的知识点: 1. **...

    用VC编写的一个五子棋:五子棋源代码

    《五子棋源代码解析与VC开发经验分享》 五子棋,又称连珠,是一种简单却富有策略性的双人对弈游戏。在计算机编程领域,实现五子棋的源代码是一个经典的练习项目,它涉及到图形用户界面设计、游戏逻辑算法以及事件...

    五子棋java全套源代码

    【五子棋Java全套源代码】是一个基于Java Swing开发的桌面应用程序,专为五子棋爱好者设计。在这款游戏中,玩家可以与计算机进行对弈,体验经典的五子棋玩法。Swing是Java的一个图形用户界面(GUI)工具包,它允许...

    五子棋java源代码

    在“五子棋java源代码”中,我们可以学习到如何使用Java来实现一个交互式的人机对战游戏。下面将详细探讨这个项目中涉及的Java编程知识点。 1. **图形用户界面(GUI)**:为了创建一个用户友好的五子棋界面,开发者...

    五子棋C++源代码

    这个C++源代码实现了基本的五子棋游戏功能,包括玩家之间的交互、棋盘状态的更新和判断胜负等。 首先,从编程语言的角度来看,C++是一种强大的、面向对象的编程语言,以其效率和灵活性著称。在实现五子棋这样的游戏...

    五子棋源代码(五子棋源代码)

    五子棋源代码是一款基于Java编程语言开发的桌面游戏,主要功能是实现两人对弈的五子棋游戏。在这个项目中,我们可以深入学习到Java语言在游戏开发中的应用,以及如何构建基本的游戏逻辑和交互界面。 1. **Java基础...

    python课程作业设计五子棋游戏源代码.zip

    python课程作业设计五子棋游戏源代码。该项目使用了python语言,并通过pygame库创造游戏的窗口、实现鼠标点击下棋、棋盘右侧实时显示下棋方、显示胜负信息、显示开局时间、播放背景音乐(如果引起不适可以事先关闭...

    彩色五子棋游戏源代码

    彩色五子棋游戏源代码是一款基于VC6.0开发环境的棋盘游戏程序,适合初学者和有经验的开发者用来研究和学习游戏编程技术。该程序提供了五子棋的完整实现,包括游戏规则、交互界面以及胜负判断等功能,为开发者提供了...

    BV做的五子棋游戏源代码五子棋游戏源代码

    用VB.NET做的五子棋游戏源代码用VB.NET做的五子棋游戏源代码用VB.NET做的五子棋游戏源代码用VB.NET做的五子棋游戏源代码用VB.NET做的五子棋游戏源代码用VB.NET做的五子棋游戏源代码用VB.NET做的五子棋游戏源代码用VB...

    五子棋c语言源代码

    本文将详细解析一个使用C语言编写的五子棋游戏源代码,帮助读者理解其背后的逻辑和算法。 首先,源代码中包含了几个重要的头文件,如`#include &lt;stdio.h&gt;`,`#include &lt;stdlib.h&gt;`,`#include &lt;conio.h&gt;`,`#...

    五子棋源代码(C#源代码)

    "五子棋源代码(C#源代码)"就是一个很好的学习资源,它允许开发者直接查看并理解五子棋游戏的实现细节。下面,我们将详细探讨这个项目中的关键知识点。 首先,C#是一种面向对象的编程语言,由微软公司开发,广泛应用...

    C++ 五子棋源代码

    首先,"C++ 五子棋源代码"是一个实际运行的五子棋游戏项目,用户在下载后,通过解压工具如“好压”打开,即可直接运行游戏。这表明游戏的执行文件已经包含在压缩包中,用户无需编译即可体验。对于编程学习者,这是一...

    五子棋游戏源代码(VC++)

    《五子棋游戏源代码解析(VC++实现)》 五子棋,又称连珠,是一种深受人们喜爱的双人对弈策略游戏。在计算机科学领域,将这种游戏转化为程序,是学习图形用户界面(GUI)、游戏算法以及事件驱动编程等技术的好方式...

    基于java的开发源码-Java网络五子棋的源代码.zip

    基于java的开发源码-Java网络五子棋的源代码.zip 基于java的开发源码-Java网络五子棋的源代码.zip 基于java的开发源码-Java网络五子棋的源代码.zip 基于java的开发源码-Java网络五子棋的源代码.zip 基于java的开发...

    五子棋游戏源代码.rar

    五子棋游戏是一种深受人们喜爱的双人对弈策略游戏,源代码的提供为我们揭示了游戏背后的编程原理和实现方式。下面将详细讲解五子棋游戏的开发涉及到的知识点。 首先,五子棋游戏的基本规则是,玩家轮流在棋盘上下...

Global site tag (gtag.js) - Google Analytics