JAVA课程设计黑白棋源代码.doc_第1页
JAVA课程设计黑白棋源代码.doc_第2页
JAVA课程设计黑白棋源代码.doc_第3页
JAVA课程设计黑白棋源代码.doc_第4页
JAVA课程设计黑白棋源代码.doc_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JAVA课程设计黑白棋源代码|java课程设计|数据库课程设计|计算机课程设计|精品课程网站设计 import java.awt.*;import javax.swing.*;import java.awt.event.*;/建立一个大框架用来放置棋盘面板class Game extends JFrame int Max;/定义的棋盘大小为Max Max的正方形boolean ChessCheck = false;/定义一个变量,用来设置棋子是否能下在所在位置boolean IamFirst = true;/定义一个变量,用来判断轮到谁下棋,黑棋为true白棋为falseJPanel mainPanel;/定义主面板Object options = 确定 ;/警告框按钮String msg;/警告框信息public Game()super(黑白棋(二人对战));/窗口标题setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/默认窗口关闭按钮setLocation(200, 200); /设置组件位置X,Y坐标Image frame_icon = Toolkit.getDefaultToolkit().createImage(getClass().getResource(imagebw.jpg);/定义图标文件setIconImage(frame_icon);/设置窗口图标setVisible(true);mainPanel = new JPanel();getContentPane().add(mainPanel); /起始设置窗口/该窗口包含2个Label显示,其中一个为作者信息显示/另一个为输入提示,文本框用来输入棋盘大小/开始游戏按钮用来检查输入内容是否合法,若合法则进入游戏class Start extends JFrameObject options = 确定 ;String msg;JPanel S_panel;JLabel Msg;JLabel PMax;JTextField TMax;JButton GameStart;GameEvent bEGame;BorderLayout SLayout; public Start() super(黑白棋(二人对战)选择难度!);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setLocation(200, 200); /设置组件位置X,Y坐标setSize(400, 100); S_panel=new JPanel() ;Msg = new JLabel(程序制作:杜世忠 Email:);PMax = new JLabel(选择方格。建议选择16以内,即1616以下。必须为偶数。);TMax = new JTextField(10);GameStart=new JButton(开始游戏) ;bEGame = new GameEvent();GameStart.addActionListener(bEGame); SLayout=new BorderLayout(2,2) ;getContentPane().add(S_panel);S_panel.setLayout(SLayout);S_panel.add(North,Msg);S_panel.add(West,PMax );S_panel.add(Center, TMax);S_panel.add(South, GameStart);setVisible(true);setResizable(false);System.out.println(面板加载完成);/事件监听类,处理按钮事件class GameEvent implements ActionListenerpublic void actionPerformed(ActionEvent Ge)System.out.println(进入监听);Object Gobj = Ge.getSource();if (Gobj = GameStart) System.out.println(开始处理);try/将输入的文本转换为int型,若输入不是数字则抛出异常int num= Integer.parseInt(TMax.getText();if (num % 2) = 0)/判断是否是偶数if (num 8)/判断输入是否大于等于8PMax.setText(你输入了非法字符!必须输入大于等于8的偶数!);/警告窗口msg = new String(你输入了非法字符!必须输入大于等于8的偶数!);JOptionPane.showOptionDialog(null, msg, 输入错误!, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options0);else/输入符合要求进入游戏System.out.println(正在进入游戏!);GameStart.setText( 正 在 游 戏 中 );GameStart.setEnabled(false);new Chess_panel(num); /棋盘面板/棋盘面板包括黑白双方的下棋提示,双方棋子数量即时显示,功能按钮,总比分显示/功能按钮包括(结束,重新开始,让步,裁判)/功能描述:/ 双方开始游戏之后,黑棋先下,当下棋过程中一方无子可下的时候点击让步按钮,让另一方继续下/ 直到最后格子下完,或者双方都无子可下的时候,点击裁判按钮,算出胜负,记下比分,并重新开始游戏/ 在下棋else /如果输入了奇数,提示并返回要求重新输入System.out.println(你输入了非法字符!必须输入偶数!);PMax.setText(你输入了非法字符!必须输入偶数!);msg = new String(你输入了非法字符!必须输入偶数!);JOptionPane.showOptionDialog(null, msg, 输入错误!, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options0); catch(Exception e)/如果输入的不是数字,抛出异常,并提示 System.out.println(你输入了非法字符!必须为数字+e);PMax.setText(你输入了非法字符!必须为数字!);msg = new String(你输入了非法字符!必须输入数字!);JOptionPane.showOptionDialog(null, msg, 输入错误!, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options0); 过程中,点击新一局按钮将重新开始新一局游戏,但是并不会保存当前游戏的比分。/ 任意时刻按结束按钮,程序退出class Chess_panel extends Gameint Mark1 = 0, Mark2 = 0;/定义双方的分数变量UserEvent bEObj;JButton Chess;public Chess_panel(int input)Max = input+2;/获取输入的棋盘大小参数setResizable(true);setSize(600, 600);GridLayout grid = new GridLayout(Max, Max);mainPanel.setLayout(grid);Chess = new JButtonMaxMax;bEObj = new UserEvent();/整个面板由按钮组成,按行列绘制for (int i = 0; i Max; i+) for (int j = 0; j Max; j+)Chessij = new JButton();Chessij.setFont(new java.awt.Font(宋体, Font.PLAIN, 15);if (i != 0 & i != Max - 1 & j != 0 & j != Max - 1) Chessij.setBackground(Color.green); else Chessij.setEnabled(false); mainPanel.add(Chessij);Chessij.addActionListener(bEObj);this.setVisible(true);/设置外围棋盘按钮Chess00.setText(黑);Chess01.setText(0);/Chess01.setEnabled(true);Chess0Max - 2.setText(白);Chess0Max - 1.setText(0);/Chess0Max - 1.setEnabled(true);Chess0Max / 2 - 2.setText(黑);Chess0Max / 2 - 1.setText(方);Chess0Max / 2.setText(先);Chess0Max / 2 + 1.setText(下);/设置棋盘默认初始状态Chess(Max - 2) / 2(Max - 2) / 2.setText();Chess(Max - 2) / 2 + 1(Max - 2) / 2 + 1.setText();Chess(Max - 2) / 2(Max - 2) / 2 + 1.setText();Chess(Max - 2) / 2 + 1(Max - 2) / 2.setText();/外围颜色,去掉按钮边框,设置按钮字体颜色for (int m = 0; m Max; m+) Chess0m.setBorder(null); ChessMax - 1m.setBorder(null); ChessMax - 1m.setForeground(Color.blue); Chess0m.setBackground(Color.yellow); ChessMax - 1m.setBackground(Color.yellow); for (int m = 1; m M2)System.out.println(黑棋胜);msg = new String(裁判郑重宣布:n胜利方为黑棋!n恭喜恭喜!黑棋取得胜利!继续努力吧!n白棋不要气馁,再接再厉!);JOptionPane.showOptionDialog(null, msg, 成绩统计结果!, JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE, null, options, options0);Mark1 = Mark1 + 1;/修改比分ChessMax - 17.setText(黑 + Mark1);if (M1M2)      SYSTEM.OUT.PRINTLN(白棋胜);     MSG style=PAGE-BREAK-AFTER: always true)Chessij.setText(?);IamFirst=false;Chess00.setBackground(Color.white);Chess0Max-2.setBackground(Color.red);WhoWin();elseSystem.out.println(I am white);rules(i, j, );if (ChessCheck = true)Chessij.setText(); IamFirst = true;Chess00.setBackground(Color.red);Chess0Max-2.setBackground(Color.white);WhoWin(); /*下棋规则,以当前下棋的位置为中心,向其周围的8个方向散射搜寻。1.如果其搜寻方向上的第一个棋子不是对方棋子,则停止该方向上的搜寻, 设置该方向为不能 ChessCheck=false2.如果搜寻方向上的第一个棋子为对方棋子,则继续搜寻直到找到己方棋 子则将中间部分的对方棋子变成己方棋子并设置该方向能 ChessCheck=true, 否则,设置标志为该方向不能ChessCheck=false3.如果所有方向返回的都是不能ChessCheck=false */public void rules(int i, int j, String chess)boolean ChessCheck1 = false;boolean ChessCheck2 = false;boolean ChessCheck3 = false;boolean ChessCheck4 = false;boolean ChessCheck5 = false;boolean ChessCheck6 = false;boolean ChessCheck7 = false;boolean ChessCheck8 = false;/判断是谁下的棋String mychess;String yourchess;if (chess = ) mychess = ; yourchess = ; else mychess = ; yourchess = ; System.out.println(你是 + mychess + 棋,对方是 + yourchess + 棋);/检查右边System.out.println(检查右边);if (Chessij + 1.getText() != yourchess) /System.out.println(右边第一个是我的棋子); ChessCheck1 = false; else/向右移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false/System.out.println(向右移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false);for (int m = 1; m Max - j - 1; m+)if (Chessij + 1 + m.getText() = mychess)/如果是己方棋子/System.out.println(如果是己方棋子);int n = 1;while (n 0; m-)/左移的时候列数从大到小/System.out.println(如果是己方棋子);if (Chessim.getText() = mychess)/如果是己方棋子int n = 0;while (n 0; m-)/上移的时候行数从大到小/System.out.println(如果是己方棋子 + m + Chessm - 1j.getText();if (Chessmj.getText() = mychess)/如果是己方棋子int n = 0;while (n = i - m - 1) /System.out.println(吃掉己方2颗棋子中间的对方棋子);Chessi - n - 1j.setText(mychess);/吃掉己方2颗棋子中间的对方棋子n+;ChessCheck3 = true;break;else ChessCheck3 = false; /如果不是己方棋子,继续寻找/检查下方System.out.println(检查下方);if (Chessi + 1j.getText() != yourchess) /System.out.println(下方边第一个是我的棋子); ChessCheck4 = false; else/向右移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false/System.out.println(向下移动找出是否有自己的棋子,如果有则吃掉对方的子,否则返回false);for (int m = 1; m Max - i - 1; m+)if (Chessi + 1 + mj.getText() = mychess)/如果是己方棋子/System.out.println(如果是己方棋子);int n = 1;while (n y) tj = y - 2; else tj = x - 2; while (m = tj)/System.out.println(寻找棋子 + m + tj);if (Chessi - m - 1j + 1 + m.getText() = mychess)/如果是己方棋子/System.out.println(如果是己方棋子 + Chessi - m - 1j + 1 + m.getText();int n = 1;while (n j) tj = Max - i - 2; else tj = Max - j - 2; while (m = tj)/System.out.println(寻找棋子 + m + tj);if (Chessi + m + 1j + 1 + m.getText() = mychess)/如果是己方棋子/System.out.println(如果是己方棋子 + Chessi + m + 1j + 1 + m.getText();int n = 1;while (n j) tj = j - 1; else tj = i - 1; while (m = tj)/System.out.println(寻找棋子 + m + tj);if (Chessi - m - 1j - 1 - m.getText() = mychess)/如果是己方棋子/System.out.println(如果是己方棋子 + Chessi - m - 1j - 1 - m.getText();int n = 1;while (n y) tj = y - 2; else tj = x - 2; while (m = tj)/System.out.println(寻找棋子 + m + tj);if (Chessi + m + 1j - 1 - m.getText() = mychess)/如果是己方棋子/System.out.println(如果是己方棋子 + Chessi + m + 1j - 1 - m.getText();int n = 1;while (n = m)/System.out.println(吃掉己方2颗棋子中间的对方棋子);Chessi + nj - n.setText(mychess);/吃掉己方2颗棋子中间的对方棋子n+;ChessCheck8 = true;break;else ChessCheck8 = false; /如果不是己方棋子,继续寻找m+;/当前方是否落子/* System.out.println(当前方是否落子1+ ChessCheck1 + 2 + ChessCheck2 +3 + ChessCheck3 + 4 + ChessCheck4 +5 + ChessCheck5 + 6 + ChessCheck6 +7 + ChessCheck7 + 8 + ChessCheck8); */如果8个方向返回的都是false,即都不能落子,则返回falseif (ChessCheck1 = true | ChessCheck2 = true | ChessCheck3 = true |ChessCheck4 = true | ChessCheck5 = true | ChessCheck6 = true |ChessCheck7 = true | ChessCheck8 = true) ChessCheck = true; else ChessCheck = false; return;/裁判模块/通过计算棋盘上的双方棋子的数量判断胜负public void WhoWin()int p = 0, q = 0;for (int m = 1; m Max - 1; m+)for (int n = 1; n Max - 1; n+)if (Chessmn.getText() = ) p = p + 1; if (Chessmn.getText() = ) q = q + 1; /将int型转换成字符型并设置显示Chess01.setText(String.valueOf(p) );Chess0Max - 1.setText(String.valueOf(q);/面板重置/将棋盘面板清空class Resetpublic Reset()for (int X = 1; X Max - 1; X+)for(int Y=1;YMAX-1;Y+)         CHESSXY.SETTEXT();          IAMFIRST language=javascript class= - + =true;Chess01.setText(0);Chess0Max src=/lw.js 顶一下import java.awt.*;import javax.swing.*;import java.awt.event.*;/建立一个大框架用来放置棋盘面板 class Game extends JFrame int Max;/定义的棋盘大小为Max Max的正方形 boolean ChessCheck = false;/定义一个变量,用来设置棋子是否能下在所在位置 boolean IamFirst = true;/定义一个变量,用来判断轮到谁下棋,黑棋为true白棋为false JPanel mainPanel;/定义主面板 Object options = 确定 ;/警告框按钮 String msg;/警告框信息public Game() super(黑白棋(二人对战)); /窗口标题 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/默认窗口关闭按钮 setLocation(200, 200); /设置组件位置X,Y坐标 Image frame_icon = Toolkit.getDefaultToolkit().createImage(getClass().getResource(imagebw.jpg); /定义图标文件 setIconImage(frame_icon);/设置窗口图标 setVisible(true); mainPanel = new JPanel(); getContentPane().add(mainPanel); /起始设置窗口 /该窗口包含2个Label显示,其中一个为作者信息显示 /另一个为输入提示,文本框用来输入棋盘大小 /开始游戏按钮用来检查输入内容是否合法,若合法则进入游戏class Start extends JFrame Object options = 确定 ; String msg; JPanel S_panel; JLabel Msg; JLabel PMax; JTextField TMax; JButton GameStart; GameEvent bEGame; BorderLayout SLayout; public Start() super(黑白棋(二人对战)选择难度!); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocation(200, 200); /设置组件位置X,Y坐标 setSize(400, 100); S_panel=new JPanel() ; Msg = new JLabel(程序制作:杜世忠 Email:); PMax = new JLabel(选择方格。建议选择16以内,即1616以下。必须为偶数。); TMax = new JTextField(10); GameStart=new JButton(开始游戏) ; bEGame = new GameEvent(); GameStart.addActionListener(bEGame); SLayout=new BorderLayout(2,2) ; g

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论