java界面小程序-模拟算卦六爻

六爻八卦预测,是古人观察大自然运行规律总结出来的一项法则。起源于西汉京房的纳甲体系。起初是用50根蓍草,到宋朝时才有了“以钱代蓍”。预测人将三枚铜钱放于手中,双手紧扣,思其所测之事,让所测信息融贯于铜钱之中,合掌摇晃后放入卦盘中,掷六次而成卦。配以卦爻,及动变以后。通过测卦当日的干支,配以六亲及六兽,主要依靠用神的五行生旺,结合易经的爻辞,而判断事物的发展过程和结果。六爻是民间流传最广的预测方法之一,其变化有梅花易数,以及文王六十四卦的断法。相对于正宗的六爻断法又要简单许多。

在这里插入图片描述

1. 代码拆分

  1. 按钮布局
  2. 图片位置
  3. 生成卦图位置
  4. 卦象详解
  5. 资源(图片来源于网络,只用于学习)
    在这里插入图片描述
    在这里插入图片描述

jar包
在这里插入图片描述
卦解文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/ab4af336a7094e47b2febc0a391d5d6e.png

2. 启动类

package com.it.liuyi;

import java.net.URL;

/**
 * @author 
 * @version 1.0
 */
public class Main {
    public static void main(String[] args) {
        new Swing();
    }
}

3. 界面类

package com.it.liuyi;

import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.URL;

/**
 * @author 
 * @version 1.0
 */
public class Swing extends JFrame implements ActionListener{
    //内容面板
    private JPanel contentPane;
    private Image image;
    JButton jbOk = new JButton("测算");
    JButton jbExit =new JButton("退出");
    JButton jButton = new JButton("重置");
//    private String path = this.getClass().getResource("").getPath();
    private URL url = Swing.class.getClassLoader().getResource("1.jpg");
    private URL url1 = Swing.class.getResource("2.jpeg");

//    InputStream input1= Swing.class.getResourceAsStream("2.jpeg");
    //对窗口进行初始化
    public Swing(){
        System.out.println("path="+url1);
        this.initFrame();
        jbOk.addActionListener(this);
        jbExit.addActionListener(this);
        jButton.addActionListener(this);
    }
    /**
     * 初始化窗口
     */
    private void initFrame(){
        InputStream  input= Swing.class.getResourceAsStream("1.jpg");
        //窗口标题
        setTitle("六爻(算卦神器)");
        //关闭退出
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        //窗口大小
        setSize(900,700);

        //固定窗口大小
        setResizable(false);
        //设置窗口左上角位置,打开时在屏幕中间
        setLocationRelativeTo(null);
        // 内容面板
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        // 设置布局
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        JPanel panel = new JPanel(new GridLayout(5, 2, 5, 10));//5行1列的表格布局
        panel.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
        contentPane.add(panel, BorderLayout.CENTER);//给panel添加边框
        //确定按钮
        JPanel panel_1 = new JPanel();
        panel.add(panel_1);
        panel_1.add(jbOk);
        //退出按钮
        JPanel panel_2 = new JPanel();
        panel_2.add(jbExit);
        panel.add(panel_2);
        //重置
        JPanel panel_3 = new JPanel();
        panel_3.add(jButton);
        panel.add(panel_3);
        try {
            image= ImageIO.read(input);
        } catch (IOException e) {
            e.printStackTrace();
        }
        setIconImage(image);
        //窗口可见
        setVisible(true);
    }

    public void paint(Graphics g) {
        super.paint(g);
        InputStream input1= Swing.class.getResourceAsStream("2.jpeg");
        Image bj = null;
        try {
            bj = ImageIO.read(input1);
        } catch (IOException e) {
            e.printStackTrace();
        }
        g.drawImage(bj,95,370,this);
    }

    public void actionPerformed(ActionEvent e){
        if (e.getSource()==jbOk){
                System.out.println("被点击的");
                update(getGraphics());
//                myImg(getGraphics());
        }else if (e.getSource()==jbExit){
            System.out.println("程序退出");
            System.exit(1);
        }else if (e.getSource()==jButton){
            System.out.println("重置窗口");
            repaint();
        }
    }
    @Override
    public void update(Graphics g) {
        super.update(g);

        int[] result = Algorithm.random();
        Graphics2D g2 = (Graphics2D) g;
        g2.setStroke(new BasicStroke(12.0f));
        int x = 100;
        int y = 70;
        Font font = new Font("黑体", Font.BOLD, 18);
        g2.setFont(font);
        g2.setColor(Color.red);
        String str =FileRead.piPei(result);
        String[] strings = str.split("\n");
        g2.drawString(strings[0],x,80);
        g2.drawString(strings[2],x+150,80);
        for (int i = 0; i < result.length; i++) {
//            int x1 = (i+1)*x;
            int y1 = (i+1)*45+y;
            switch (result[i]) {
                case 6:
                    g2.setColor(Color.BLACK);
                    g2.drawLine(x, y1, x+100, y1);
                    g2.drawLine(x+150, y1, x+250, y1);
                    System.out.println("--" + "\t老阴");
                    break;
                case 7:
                    g2.setColor(Color.red);
                    g2.drawLine(x, y1, x+250, y1);
                    System.out.println("——" + "\t少阳");
                    break;
                case 8:
                    g2.setColor(Color.BLACK);
                    g2.drawLine(x, y1, x+100, y1);
                    g2.drawLine(x+150, y1, x+250, y1);
                    System.out.println("--" + "\t少阴");
                    break;
                case 9:
                    g2.setColor(Color.red);
                    g2.drawLine(x, y1, x+250, y1);
                    System.out.println("——" + "\t老阳");
                    break;
            }
        }
        String strLine = strings[3].substring(0,1);
        int j=0;
        g2.setColor(Color.black);
        for (int i=1;i<strings[3].length();i++){
            if (i%15==0){
                g2.drawString(strLine,550,100+(j+1)*30);
                j++;
                strLine="";
            }else {
                strLine +=strings[3].substring(i,i+1);
            }
        }

    }

}

4. 生成卦图算法类

package com.it.liuyi;

import java.util.Arrays;
import java.util.Random;

/**
 * 生成六个随机数的算法
 * @author 
 * @version 1.0
 */
public class Algorithm {
    public static int[] random(){
        int[] result = new int[6];
        Random random = new Random();
        for (int i=result.length-1;i>=0;i--){
            // i-1
            int num1 = 2+random.nextInt(2);
//            System.out.println("num1="+num1);
            // i-2
            int num2 = 2+random.nextInt(2);
//            System.out.println("num2="+num2);
            // i-3
            int num3 = 2+random.nextInt(2);
//            System.out.println("num3="+num3);
            result[i] = num1+num2+num3;

        }
        return result;
    }

    public static void main(String[] args) {
        int[] result = random();
        for (int i=0;i<result.length;i++){
            switch (result[i]){
                case 6:
                    System.out.println("--"+"\t老阴");
                    break;
                case 7:
                    System.out.println("——"+"\t少阳");
                    break;
                case 8:
                    System.out.println("--"+"\t少阴");
                    break;
                case 9:
                    System.out.println("——"+"\t老阳");
                    break;
            }
        }
    }
}

5. 读取卦解文件类

package com.it.liuyi;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

/**
 * @author 
 * @version 1.0
 */
public class FileRead {


    private static URL url = Swing.class.getResource("64.xls");
    public static String piPei(int[] result){
        InputStream input= FileRead.class.getResourceAsStream("64.xls");
        System.out.println("xlspath="+ url);
        int i;
        Sheet sheet;
        Workbook workbook = null;
        Cell cell1 = null,cell2 = null,celli,cellm = null,celln = null;
        boolean flag =false;
        try {
//            workbook = Workbook.getWorkbook(new FileInputStream(String.valueOf(url)));
            workbook = Workbook.getWorkbook(input);
            sheet = workbook.getSheet(0);
            i=1;
            out:while (true){
                in:for (int j=3;j<=8;j++){
                    celli = sheet.getCell(j,i);
                    int num = new Integer(celli.getContents());
                    if (num!=result[j-3]%2){
                        i++;
                        break ;
                    }
                    if (j==8){
                        flag=true;
                    }
                }
                if (flag){
                    cell1 = sheet.getCell(1,i);
                    cell2 = sheet.getCell(2,i);
                    cellm = sheet.getCell(9,i);
                    celln = sheet.getCell(10,i);
                    break ;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (BiffException e) {
            e.printStackTrace();
        }finally {
            workbook.close();
        }
        return new StringBuilder(cell1.getContents()+"\n" +
                cell2.getContents()+"\n"+
                cellm.getContents()+"\n" +
                celln.getContents()).toString();
    }

    public static void main(String[] args) {
        int[] result = {6,6,6,6,6,6};
        String str=piPei(result);
        System.out.println(str);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值