链接: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滑动条的值调制并显示出用户需求的色块。
③确定按钮传值到游戏主界面。
![](https://i-blog.csdnimg.cn/blog_migrate/040d2b6f0d37a6e7e229e6d759f19a9a.png)
代码
//设置一个面板,存放滑块
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);//②校验当前行前面的行
}
}
只是课设的一部分内容,若有需要评论私我,我会将完整代码发给你!哈哈祝你学业愉快