没有合适的资源?快使用搜索试试~ 我知道了~
JAVA课程设计黑白棋源代码.doc
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 113 浏览量
2022-06-10
20:15:33
上传
评论
收藏 250KB DOC 举报
温馨提示
试读
35页
JAVA课程设计黑白棋源代码
资源推荐
资源详情
资源评论
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("ima
ge\bw.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(20
0, 200); //设置组件位置 X,Y 坐标 setSize(400, 100); S_panel=new
JPanel() ;Msg = new JLabel("程序制作:杜世忠
Email:dushizhong@gmail.com");PMax = new JLabel("选择方格。建议
选择 16 以内,即 16×16 以下。必须为偶数。");TMax = new
JTextField("10");GameStart=new JButton("开始游戏") ;bEGame =
new GameEvent();GameStart.addActionListener(bEGame);
SLayout=new
BorderLayout(2,2) ;getContentPane().add(S_panel);S_panel.setLa
yout(SLayout);S_panel.add("North",Msg);S_panel.add("West",PMa
x );S_panel.add("Center", TMax);S_panel.add("South",
GameStart);setVisible(true);setResizable(false);System.out.printl
n("面板加载完成");}//事件监听类,处理按钮事件 class GameEvent
implements ActionListener{public 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)//判断输入是否大于等于
8{PMax.setText("你输入了非法字符!必须输入大于等于 8 的偶
数!");//警告窗口 msg = new String("你输入了非法字符!必须输
入大于等于 8 的偶数!");JOptionPane.showOptionDialog(null, msg,
"输入错误!", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE, null, options,
options[0]);}else{//输入符合要求进入游戏 System.o
ut.println("正在进入游戏!");GameStart.setText(" 正 在 游
戏 中 ");GameStart.setEnabled(false);new
Chess_panel(num);}}
}}}}}//棋盘面板//棋盘面板包括黑白双方的下棋提示,双方棋子数
量即时显示,功能按钮,总比分显示//功能按钮包括(结束,重新开始,让步,
裁判)//功能描述:// 双方开始游戏之后,黑棋先下,当下棋过程中
一方无子可下的时候点击让步按钮,让另一方继续下// 直到最后格子
下完,或者双方都无子可下的时候,点击裁判按钮,算出胜负,记下比分,并
重新开始游戏// 在下棋 else //如果输入了奇数,提示并返回要求重
新输入 {System.out.println("你输入了非法字符!必须输入偶数!");
PMax.setText("你输入了非法字符!必须输入偶数!");msg = new
String("你输入了非法字符!必须输入偶数!");JOptionPane.showOpti
onDialog(null, msg, "输入错误!", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE, null, options, options[0]);
}}catch(Exception e){//如果输入的不是数字,抛出异常,并
提示 System.out.println("你输入了非法字符!必须为数
字"+e);PMax.setText("你输入了非法字符!必须为数字!");msg =
new String("你输入了非法字符!必须输入数字!");
JOptionPane.showOptionDialog(null, msg, "输入错误!",
JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,
null, options, options[0]);
过程中,点击新一局按钮将重新开始新一局游戏,但是并不会保存当前游戏的
比分。// 任意时刻按结束按钮,程序退出 class Chess_panel
extends Game{int 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
JButton[Max][Max];bEObj = new UserEvent();//整个面板由按钮组成,
按行列绘制 for (int i = 0; i < Max; i++){
for (int j = 0; j < Max; j++){Chess[i][j] = new
JButton();Chess[i][j].setFont(new java.awt.Font("宋体", Font.PLAIN,
15));if (i != 0 && i != Max - 1 && j != 0 && j != Max -
1){ Chess[i][j].setBackground(Color.green); }else { Chess[i]
[j].setEnabled(false); }mainPanel.add(Chess[i][j]);Chess[i]
[j].addActionListener(bEObj);this.setVisible(true);}}//设置外围
棋盘按钮 Chess[0][0].setText("黑");Chess[0][1].setText("0");//
Chess[0][1].setEnabled(true);Chess[0][Max - 2].setText("白");
Chess[0][Max - 1].setText("0");//Chess[0][Max -
1].setEnabled(true);Chess[0][Max / 2 - 2].setText("黑");Chess[0]
[Max / 2 - 1].setText("方");Chess[0][Max / 2].setText("先");
Chess[0][Max / 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++) { Chess[0][m].setBorder(null); Chess[Max - 1]
[m].setBorder(null); Chess[Max - 1][m].setForeground(Color.blue);
Chess[0][m].setBackground(Color.yellow); Chess[Max - 1]
[m].setBackground(Color.yellow); }for (int m = 1; m < Max - 1; m+
+) { Chess[m][0].setBorder(null); Chess[m][Max -
1].setBorder(null);/* Chess[m][0].setText("◎"); Chess[m][Max -
1].setText("◎"); */Chess[m][0].setBackground(Color.yellow);
Chess[m][Max - 1].setBackground(Color.yellow); }//功能按
钮 Chess[Max - 1][1].setEnabled(true);Chess[Max - 1]
[2].setEnabled(true);Chess[Max - 1]
[3].setEnabled(true);Chess[Max - 1]
[4].setEnabled(true);Chess[Max - 1][1].setText("结束");Chess[Max
- 1][2].setText("新一局");Chess[Max - 1][3].setText("让步");
Chess[Max - 1][4].setText("裁判");//比分显示 Chess[Max - 1]
[6].setText("总比分");Chess[Max - 1]
[7].setText("黑"+Mark1);Chess[Max - 1]
[8].setText("白"+Mark2);Chess[0][1].setBackground(Color.white);
Chess[0][Max - 1].setBackground(Color.white);}//设置功能按钮的事件
侦听事件 class UserEvent implements ActionListener{public void
actionPerformed(ActionEvent e){Object obj =
e.getSource();//System.out.println("you have pressed a area");if
(obj == Chess[Max - 1][1]) { System.exit(1); }//退出按钮 if (obj ==
Chess[Max - 1][2]) { new Reset(); }//退出按钮 if (obj == Chess[Max
- 1][3])//让步按钮 {if (IamFirst == false)//如果白棋让步
{IamFirst = true;Chess[0]
[0].setBackground(Color.red);Chess[0][Max-
2].setBackground(Color.white);}else //如果黑棋让步
{IamFirst = false;Chess[0]
[0].setBackground(Color.white);Chess[0][Max-
2].setBackground(Color.red);}}if(obj == Chess[Max - 1][4])//
如果按裁判按钮,计算成绩 {int M1 = 0, M2 = 0;M1 =
Integer.parseInt(Chess[0][1].getText());M2 =
Integer.parseInt(Chess[0][Max - 1].getText());if (M1>M2)
{System.out.println("黑棋胜");msg = new String("裁判郑重宣布:
\n 胜利方为黑棋!\n 恭喜恭喜!黑棋取得胜利!继续努力吧!\n 白棋不要气馁,
再接再厉!");JOptionPane.showOptionDialog(null, msg, "成绩统计结
果!", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE, null, options,
options[0]);Mark1 = Mark1 + 1;//修改比分 Chess[Max - 1]
[7].setText("黑" + Mark1);}if (M1<M2)
{&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;SYSTEM.OUT.PRINTLN
("白棋胜");&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;MSG style="PAGE-
BREAK-AFTER: always" true){Chess[i][j].setText(?
●?);IamFirst="false;Chess[0]
[0].setBackground(Color.white);Chess[0][Max-
2].setBackground(Color.red);WhoWin();}}< j="1;"
(int System.out.println(?line:?+i);for i++){ 循环侦听棋盘上按钮
事件 for 调用重设棋盘方法 } Reset(); options[0]);}new
options, null, JOptionPane.WARNING_MESSAGE,
JOptionPane.DEFAULT_OPTION, ?成绩统计结果!?, msg, String(?裁判郑
重宣布:\n 双方战平!\n 大家水平相当!努力吧,争取下次打倒对手!?);J
OptionPane.showOptionDialog(null, System.out.println(?双方战
平?);msg="new" M2){ (M1="=" Mark1);}if 1][8].setText(?
白? 1;Chess[Max options[0]);Mark2="Mark2" String(?裁判郑重
宣布:\n 胜利方为白棋!\n 恭喜恭喜!白棋取得胜利!继续努力吧!\n 黑棋不
要气馁,再接再厉!?);JOptionPane.showOptionDialog(null,
="new">
else{System.out.println("I am white");rules(i, j,
"○");if (ChessCheck == true){Chess[i]
[j].setText("○"); IamFirst = true;Chess[0]
[0].setBackground(Color.red);Chess[0][Max-
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 (Chess[i][j + 1].getText() != yourchess) {
//System.out.println("右边第一个是我的棋子"); ChessCheck1 = false;
}else{//向右移动找出是否有自己的棋子,如果有则吃掉对方的子,否
则返回 false//System.out.println("向右移动找出是否有自己的棋子,如
果有则吃掉对方的子,否则返回 false");for (int m = 1; m < Max - j - 1;
m++){if (Chess[i][j + 1 + m].getText() == mychess)//如果是己
方棋子 {//System.out.println("如果是己方棋子");int n =
1;while (n <= m){//System.out.println("吃掉己方 2 颗棋子
中间的对方棋子");Chess[i][j + n].setText(mychess);//吃掉己方 2 颗
棋子中间的对方棋子 n++;}ChessCheck1 =
true;break;}else { ChessCheck1 = false; }//如果不是己方棋
子,继续寻找 }}//检查左边 System.out.println("检查左边");if
(Chess[i][j - 1].getText() != yourchess) { ChessCheck2 =
false; }else{//向左移动找出是否有自己的棋子,如果有则吃掉对方的
子,否则返回 false//System.out.println("向左移动找出是否有自己的棋
子,如果有则吃掉对方的子,否则返回 false");//System.out.println("左
移的时候列数从大到小");for (int m = j - 2; m > 0; m--)//左移的时候列
数从大到小 {//System.out.println("如果是己方棋子");if (Chess[i]
[m].getText() == mychess)//如果是己方棋子 {int n =
0;while (n <= j - m - 1){//System.out.println("吃掉己方 2
颗棋子中间的对方棋子");Chess[i][j - n - 1].setText(mychess);//吃掉
己方 2 颗棋子中间的对方棋子 n++;}ChessCheck2 =
true;break;}else { ChessCheck2 = false; }//如果不是己方棋
子,继续寻找 }}//检查上方 System.out.println("检查上方");if
(Chess[i - 1][j].getText() != yourchess) { ChessCheck3 =
false; }else{//向上移动找出是否有自己的棋子,如果有则吃掉对方的
子,否则返回 false//System.out.println("向上移动找出是否有自己的棋
子,如果有则吃掉对方的子,否则返回 false");//System.out.println("上
移的时候行数从大到小");for (int m = i - 2; m > 0; m--)//上移的时候行
数从大到小 {//System.out.println("如果是己方棋子" + m +
Chess[m - 1][j].getText());if (Chess[m][j].getText() == mychess)//
如果是己方棋子 {int n = 0;while (n <= i - m - 1){
//System.out.println("吃掉己方 2 颗棋子中间的对方棋子");Chess
[i - n - 1][j].setText(mychess);//吃掉己方 2 颗棋子中间的对方棋子 n+
+;}ChessCheck3 = true;break;}else
{ ChessCheck3 = false; }//如果不是己方棋子,继续寻找 }}//检查下
方 System.out.println("检查下方");if (Chess[i + 1][j].getText() !=
yourchess) {//System.out.println("下方边第一个是我的棋子");
ChessCheck4 = false; }else{//向右移动找出是否有自己的棋子,如果
有则吃掉对方的子,否则返回 false//System.out.println("向下移动找出
是否有自己的棋子,如果有则吃掉对方的子,否则返回 false");for (int m
= 1; m < Max - i - 1; m++){if (Chess[i + 1 + m][j].getText()
== mychess)//如果是己方棋子 {//System.out.println("如果是己方
棋子");int n = 1;while (n <=
m){//System.out.println("吃掉己方 2 颗棋子中间的对方棋子");
Chess[i + n][j].setText(mychess);//吃掉己方 2 颗棋子中间的对方棋
子 n++;}ChessCheck4 = true;break;}else
剩余34页未读,继续阅读
资源评论
omyligaga
- 粉丝: 54
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 毕业项目:网上图书订阅管理系统的设计与开发(ASP.NET技术+程序源代码+毕业文档)
- zjk-1.ipynb
- Delphi 12 控件之EhLib.v10.2.42 for Delphi 5-12.src.rar
- cloudreve3.8.3的docker镜像
- RB108A-SOT23-5封装 单节锂电池保护IC 深圳市可芯电子有限公司.pdf
- Apache Maven的安装与配置.pdf
- 2024高质量PS练习教程,全程干货无废话
- TPLINK TL-NVR6116K-L 升级包
- RB301A-SOT23-5 单节锂电池保护IC 深圳市可芯电子有限公司.pdf
- scrt-x64-bsafe.9.5.2.3325.exe
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功