八皇后棋盘游戏课设(含gui代码)

链接:https://pan.baidu.com/s/1eLiAg5SKPztx74l0VQTpEw 
提取码:1111

1.题目及设计说明

本次课程设计题目是《八皇后棋盘》。

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。这次课程设计基于回溯优化算法,判断每一步的是否冲突,从而得出是否成功。

2.主要面板及其功能

程序有三个面板,一个是游戏主界面面板,第二个是调制棋盘颜色的面板,第三个是八皇后棋盘游戏界面。

游戏主界面的主要功能有:

①初始化游戏数据;

②读取设置背景图片;

③设计游戏主界面;

④“棋盘颜色”按钮实现跳转颜色调制器面板

⑤“开始游戏”按钮跳转八皇后棋盘面板

⑥注册鼠标监视器来监视鼠标的点击状态等。

页面跳转代码:


b3.addActionListener(new ActionListener() {
                @Override
                  public void actionPerformed(ActionEvent e) {
                      // TODO Auto-generated method stub
                    setVisible(true);
                      
                     new Toning_device();
                     
                  }
                });//实现用b3按钮跳转调色页面并且游戏原主页面可见
                  //实则用事件监听器实现跳转

调制界面的主要功能有:

①设置red,green,blue三个滑动条并显示各值。

②根据red,green,blue滑动条的值调制并显示出用户需求的色块。

③确定按钮传值到游戏主界面。

代码


//设置一个面板,存放滑块
     JPanel jp_slide = new JPanel(new GridLayout(3,2));
     add(jp_slide);
    
   //设置另一个面板,存放显示色号的控件
     JPanel jp_color = new JPanel(new GridLayout(3,1));
     add(jp_color);

   //设置按钮面板
     JPanel  button=new JPanel();

     js_red = new JSlider(0,255,0); //设置红色滑块
     js_green = new JSlider(0,255,0); //设置绿色滑块
     js_blue = new JSlider(0,255,0); //设置蓝色滑块

public void stateChanged(ChangeEvent e) {
   // TODO Auto-generated method stub
     r = js_red.getValue(); //获取到红色滑块的RGB值
     g = js_green.getValue(); //获取到绿色滑块的RGB值
     b = js_blue.getValue(); //获取到蓝色滑块的RGB值
    
   //将三种颜色的RGB值在窗体进行显示
     jt_red.setText(Integer.toString(r));
     jt_green.setText(Integer.toString(g));
     jt_blue.setText(Integer.toString(b));
    
   //将对应的颜色进行显示
   colorLB.setBackground(new Color(r, g, b));
   }
queding.addActionListener(new ActionListener() {                                                
                                                                                     
                                                                             
           @Override
           public void actionPerformed(ActionEvent e) {                                             
       // TODO Auto-generated method stub
               
               flag=true;
               r1=r;
               b1=b;
               g1=g;
               
           }
         });//设置r1,b1,g1为全局变量,将确定按钮绑定传值事件
  

检验皇后棋子的合法性代码:


//校验皇后放的位置合法性
       private  boolean checkLegal(int n, int j)  {

           if (n ==MAX_QUEEN_LENGTH||n<0) {

               return true;
           }

         for (int k = 0; k < MAX_QUEEN_LENGTH; k++) {
               //校验当前行所有的列及当前列所有的行
            if (lastLine==n){
                   if(queenMap[n][k].unConflict==1||queenMap[k][j].unConflic=1) {
                       return  false;
                   }
               }
               else {
                   //校验对角线
                   if (Math.abs(j-k)==Math.abs(lastLine-n)) {
                       if (queenMap[n][k].unConflict == 1) {
                           return false;
                       }
                   }
               }
           }

           //校验当前行后面的行①
           checkedLen++;
           if (!isChecked&&!checkLegal(n+1,j)) {
               return false;
           }

           //这里定位到①位置递归开始的位置,否则②位置又从n=7的位置开始向上递归,这是完全不必要的因为这些位置已经在①步骤检查过了
           isChecked=true;
           System.out.println(n);
           return checkLegal(MAX_QUEEN_LENGTH-checkedLen - 1, j);//②校验当前行前面的行
      }
}

只是课设的一部分内容,若有需要评论私我,我会将完整代码发给你!哈哈祝你学业愉快

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值