八皇后棋盘游戏课设(含gui代码)
1.题目及设计说明
本次课程设计题目是《八皇后棋盘》。
八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。这次课程设计基于回溯优化算法,判断每一步的是否冲突,从而得出是否成功。
2.主要面板及其功能
程序有三个面板,一个是游戏主界面面板,第二个是调制棋盘颜色的面板,第三个是八皇后棋盘游戏界面。
游戏主界面的主要功能有:
①初始化游戏数据;
②读取设置背景图片;
③设计游戏主界面;
④“棋盘颜色”按钮实现跳转颜色调制器面板
⑤“开始游戏”按钮跳转八皇后棋盘面板
⑥注册鼠标监视器来监视鼠标的点击状态等。
页面跳转代码:
b3.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubsetVisible(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 stubr = 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() { @Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubflag=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);//②校验当前行前面的行}
}
只是课设的一部分内容,若有需要评论私我,我会将完整代码发给你!哈哈祝你学业愉快
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
