| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 715 人关注过本帖
标题:帮忙解释一下这些代码?
只看楼主 加入收藏
mijia
Rank: 2
等 级:论坛游民
帖 子:55
专家分:86
注 册:2010-5-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
帮忙解释一下这些代码?
class PaintPanel  extends JPanel{//定义一个PaintPanel类来输入信息
   // 创建一个具有指定标题和指定所有者对话框的无模式对话框
    JDialog labHeiQi = new JDialog(new JFrame() ,"胜利",false);
//创建一个JLabel可以显示文本
    //JLabel jbm1=new JLabel("★★★★★★★★★★★★★★★★★");
    JLabel jb1=new JLabel("★★★★★恭喜,你赢了!!★★★★★");

    JDialog labHongQi = new JDialog(new JFrame(),"失败",false);

    //JLabel jbm2=new JLabel("★★★★★★★★★★★★★★★★");
    JLabel jb2=new JLabel("★★★你输了,请继续努力!★★★");

    public int [][]map;//定义一个二维数组来作为棋盘的方格
    public int[]cp;
    public int isSuccess=0;

    ArrayList Items = new ArrayList();//构造一个初始容量为的空列表。

    public PaintPanel() {
        //布局
    setLayout(new BorderLayout());//创建一个边界布局布置容器
    ButtonPanel buttonPanel = new ButtonPanel();
    add(buttonPanel, BorderLayout.SOUTH);//按钮的位置
    addMouseListener(new MouseHandler());//向按钮添加一个 MouseHandler
    map=new int [19][19];//棋盘作为十九行,十九列
    for(int i=0;i<19;i++){
    for(int j=0;j<19;j++){
    map[i][j]=-1;
    }
    }
    cp=new int [2];
    cp[0]=-1;
    cp[1]=-1;
    }
    public void lab(int k){

    labHeiQi.setLayout(new BorderLayout());
    labHeiQi.add("Center",jb1);
    //labHeiQi.add("North",jbm1);
    labHeiQi.pack();

    labHongQi.setLayout(new BorderLayout());
    labHongQi.add("Center",jb2);
    //labHongQi.add("North",jbm2);
    labHongQi.pack();

    if(k==1){

    labHeiQi.setVisible(true);
    }
    else{

    if(k==2)
    labHongQi.setVisible(true);
    }
    }
    public void paintComponent(Graphics g) {
        //此 Paint 接口定义如何为 Graphics2D 操作生成颜色模式
    int startX = 50;
    int startY = 50;
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;
    for(int i=0; i<19; i++) {
    g2.draw(new Line2D.Double(startX, startY+20*i, startX+360, startY+20*i));
    g2.draw(new Line2D.Double(startX+20*i, startY, startX+20*i, startY+360));
    }
    for(int i=0; i<Items.size(); i++) {
    int k=(i+2)%2;
    if(k==0){
    g2.setColor(Color.BLACK);
    if(isSuccess==1){
    lab(1);
    }
    }
    else{
    g2.setColor(Color.RED);
    if(isSuccess==2){
    lab(2);
    }
    }
    g2.fill((Ellipse2D)Items.get(i));
    }
    }
    void myRepaint() {
    repaint();
    }
    void reset(){
    isSuccess=0;
    for(int i=0;i<19;i++){
    for(int j=0;j<19;j++){
    map[i][j]=-1;
    }
    }
    }

     class MouseHandler extends MouseAdapter {

    public void mousePressed(MouseEvent event) {
    int x = event.getX();
    int y = event.getY();
    x=(x-50)/20;
    y=(y-50)/20;
    if(chessExist(x,y)&&isSuccess==0){
    paintItem(x, y);
    isSuccess=Success(x,y,1);
    map[x][y]=1;
    repaint();
    if(isSuccess==0){
    computer();
    int q=cp[0];
    int r=cp[1];
    paintItem(q,r);
    isSuccess=Success(q,r,2);
    map[q][r]=2;
    repaint();
    }
    }
    }
    public void paintItem(int x, int y) {
    x=x*20+50;
    y=y*20+50;
    if(x >30 && x <430 && y >30 && y <430) {
    int X = x / 20;
    int Y = y / 20;
    int centerX = X*20 + 10;
    int centerY = Y*20 + 10;
    Ellipse2D ellipse = new Ellipse2D.Double();
    ellipse.setFrameFromCenter(centerX, centerY, centerX+8, centerY+8);
    Items.add(ellipse);
    }
    }
    public void computer(){ //计算机走棋
    int maxblack,maxHong,maxtemp,max=0;
    for(int i=1;i<18;i++){
    for(int j=1;j<18;j++){
    if(chessExist(i,j)){//判断是否可以下子
    maxblack=CheckMax(i,j,1);
    maxHong=CheckMax(i,j,2);
    maxtemp=Math.max(maxblack,maxHong);
    if(maxtemp>max){
    max=maxtemp;
    cp[0]=i;
    cp[1]=j;
    }
    }
    }
    }
    }
    public int CheckMax(int x,int y,int person){//判断某一点四个方向上棋子的最大值
    int maxnum=0;
    int up,down,left,right;
    left=right=x;
    up=down=y;

    do{
    up++;
    }
    while(up>=0&&map[x][up]==person);

    do{
    down--;
    }
    while(down<19&&map[x][down]==person);

    if((up-down)>maxnum){
    maxnum=up-down;
    }

    int align;
    do{
    right++;
    }
    while(right<19&&map[align=right][y]==person);

    do{
    left--;
    }
    while(left>=0&&map[align=left][y]==person);

    if((right-left)>maxnum){
    maxnum=right-left;
    }

    left=right=x;
    down=up=y;
    do{
    right++;
    down++;
    }
    while(right<19&&down<19&&map[align=right][down]==person);

    do{
    left--;
    up--;
    }
    while(left>=0&&up>=0&&map[align=left][up]==person);

    if((right-left)>maxnum){
    maxnum=right-left;
    }

    left=right=x;
    down=up=y;
    do{
    right++;
    down--;
    }
    while(right<19&&down>=0&&map[align=right][down]==person);

    do{
    left--;
    up++;
    }
    while(left>=0&&up<19&&map[align=left][up]==person);

    if((right-left)>maxnum){
    maxnum=right-left;
    }
    return maxnum;
    }


    public int Success(int x,int y,int person){ //判断胜负
    int up,down,left,right;
    left=right=x;
    up=down=y;
    do{
    up++;
    }
    while(up>=0&&map[x][up]==person);

    do{
    down--;
    }
    while(down<19&&map[x][down]==person);

    if((up-down)>5){
    return person;
    }
    else{
    int align;
    do{
    right++;
    }
    while(right<19&&map[align=right][y]==person);

    do{
    left--;
    }
    while(left>=0&&map[align=left][y]==person);

    if((right-left)>5){
    return person;
    }
    else{
    left=right=x;
    down=up=y;
    do{
    right++;
    down++;
    }
    while(right<19&&down<19&&map[align=right][down]==person);

    do{
    left--;
    up--;
    }
    while(left>=0&&up>=0&&map[align=left][up]==person);

    if((right-left)>5){
    return person;
    }
    else{
    left=right=x;
    down=up=y;
    do{
    right++;
    down--;
    }
    while(right<19&&down>=0&&map[align=right][down]==person);

    do{
    left--;
    up++;
    }
    while(left>=0&&up<19&&map[align=left][up]==person);

    if((right-left)>5){
    return person;
    }
    else{
    return 0;
    }
    }
    }
    }
    }
    public boolean chessExist(int i,int j){//判断该格是否有棋子
    if(map[i][j]==-1)
    return true;
    else
    return false;
    }
    }
    class ButtonPanel extends JPanel{
    public ButtonPanel() {
    JButton reset = new JButton("新游戏");
    add(reset);
    JButton quit = new JButton("退出");
    add(quit);

    ResetEvent listenerR = new ResetEvent();
    reset.addMouseListener(listenerR);

    QuitEvent listenerQ = new QuitEvent();
    quit.addMouseListener(listenerQ);
    }
     class QuitEvent extends MouseAdapter {//离开游戏
    public void mouseClicked(MouseEvent event) {
    System.exit(1);
    }
    }
    class ResetEvent extends MouseAdapter { //重新开始游戏
    public void mouseClicked(MouseEvent event) {
    Items.clear();
    myRepaint();
    reset();
    }
    }
    }
    }
/* class GameFrame extends JFrame {
        public GameFrame() {
        setTitle("五子棋");
        setSize(500, 600);
        setResizable(false);
        PaintPanel panel = new PaintPanel();
        getContentPane().add(panel);
        }
        
        //public class Game {
        public static void main(String[] args) {
        GameFrame frame = new GameFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.show();
        }
搜索更多相关主题的帖子: 代码 解释 
2010-06-14 20:43
mijia
Rank: 2
等 级:论坛游民
帖 子:55
专家分:86
注 册:2010-5-13
收藏
得分:0 
怎么都没有人理的呀?
2010-06-17 18:15
baifenghan
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:258
专家分:952
注 册:2006-3-17
收藏
得分:10 
为什么别人把代码写好了,你都不愿意去仔细调试和理解下?我真是不明白,大家只有百行代码就这样,那么又为什么要怪别人不录取自己去做开发?

我想打些必要的断点,跟一下,不到一个小时应该就明白了。
2010-06-19 13:00
lampeter123
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:2508
专家分:6424
注 册:2009-1-30
收藏
得分:10 
五子棋游戏

你的优秀和我的人生无关!!!!
    
    我要过的,是属于我自己的生活~~~
2010-06-19 23:07
神丶不可一世
Rank: 2
等 级:论坛游民
帖 子:45
专家分:47
注 册:2010-6-11
收藏
得分:0 
在看懂一点点   看来不能满足于学校学的了  去书店加强自己了要
2010-06-20 23:47
快速回复:帮忙解释一下这些代码?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018374 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved