| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 573 人关注过本帖
标题:井字游戏程序为什么组件显示有重复的,如图
只看楼主 加入收藏
xhay
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:26
专家分:7
注 册:2012-10-19
结帖率:44.44%
收藏
已结贴  问题点数:5 回复次数:6 
井字游戏程序为什么组件显示有重复的,如图
图片附件: 游客没有浏览图片的权限,请 登录注册
程序代码:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.BorderLayout;

import javax.swing.CellEditor;
import javax.swing.JApplet;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.border.LineBorder;

public class TicTacToe extends JApplet {
    private char whoseTurn = 'X';
    private Cell[][] cells = new Cell[3][3];
    private JLabel jlblStatus = new JLabel("X's turn to play");
    public TicTacToe(){
        JPanel p = new JPanel(new GridLayout(3, 3,0,0));
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                p.add(cells[i][j] = new Cell());
        p.setBorder(new LineBorder(Color.red, 1));
        jlblStatus.setBorder(new LineBorder(Color.yellow, 1));
        add(p,BorderLayout.CENTER);
        add(jlblStatus,BorderLayout.NORTH);
    }

    public boolean isFull(){
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                if(cells[i][i].getToken()==' ')
                    return false;
        return true;
    }
    public boolean isWon(char token){
        for(int i=0;i<3;i++)
            if((cells[i][0].getToken()==token)
                    &&(cells[i][1].getToken()==token)
                    &&(cells[i][2].getToken()==token)){
                return true;
            }
        
        for(int j=0;j<3;j++)
            if((cells[0][j].getToken()==token)
                    &&(cells[1][j].getToken()==token)
                    &&(cells[2][j].getToken()==token)){
                return true;
            }
        
        if((cells[0][0].getToken()==token)
                &&(cells[1][1].getToken()==token)
                &&(cells[2][2].getToken()==token)){
            return true;
        }
        if((cells[0][2].getToken()==token)
                &&(cells[1][1].getToken()==token)
                &&(cells[2][0].getToken()==token)){
            return true;
        }
        return false;
    }
    public class Cell extends JPanel{
        private char token = ' ';
        public Cell(){
            setBorder(new LineBorder(Color.black, 1));
            addMouseListener(new MyMouseListener());
        }
        public char getToken(){
            return token;
        }
        public void setToken(char c){
            token = c;
            repaint();
        }
        protected void paintComponent(Graphics g){
            super.paintChildren(g);
            if(token == 'X'){
                g.drawLine(10, 10, getWidth()-10, getHeight()-10);
                g.drawLine(getWidth()-10, 10, 10, getHeight()-10);
            }
            else if(token == 'O'){
                g.drawOval(10, 10, getWidth()-20, getHeight()-20);
            }
        }
        private class MyMouseListener extends MouseAdapter{
            public void mouseClicked(MouseEvent e){
                if(token == ' '&&whoseTurn != ' '){
                    setToken(whoseTurn);
                    if(isWon(whoseTurn)){
                        jlblStatus.setText(whoseTurn+" Won! The game is over!");
                        whoseTurn = ' ';
                    }
                else if(isFull()){
                        jlblStatus.setText("Draw! The game is over!");
                        whoseTurn = ' ';
                    }
                else{
                        whoseTurn = (whoseTurn=='X')?'O':'X';
                        jlblStatus.setText(whoseTurn+"'s turn");
                    }
                }
            }
        }
    }
}



每个方块只会出现圈或叉为什么两个都出现了,把最大化一下又会恢复正常。。怎么一回事儿?
搜索更多相关主题的帖子: 游戏程序 
2013-06-03 21:21
Kingbox_tang
Rank: 7Rank: 7Rank: 7
来 自:天津师范大学
等 级:黑侠
威 望:3
帖 子:146
专家分:677
注 册:2012-11-27
收藏
得分:0 
结贴率低,给分少,代码没注释。
别人怎么回答。。。

旨在提高编程水平,学有所用,学有所成,学有所为。
2013-06-04 12:26
xhay
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:26
专家分:7
注 册:2012-10-19
收藏
得分:0 
回复 2楼 Kingbox_tang
我错鸟嘛。。下次一定结贴,写注释。。。一定会做好的。。求解
2013-06-04 13:39
ren829
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:15
帖 子:255
专家分:1174
注 册:2006-3-11
收藏
得分:0 
显然是你没调用repaint方法,重绘组件,所以你最开始画出来的东西 虽然逻辑上消失了, 但是没有重画面板,所以在面板上没有消失,你可以增加一个线程来不停的重新绘制面板,或者定时调用repaint方法来重绘面板。
2013-06-04 21:54
xhay
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:26
专家分:7
注 册:2012-10-19
收藏
得分:0 
回复 4楼 ren829
线程没学,怎么办呢?
2013-06-05 12:30
ren829
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:15
帖 子:255
专家分:1174
注 册:2006-3-11
收藏
得分:5 
回复 5楼 xhay
用到了就学呗,还等什么。
2013-06-05 16:07
xhay
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:26
专家分:7
注 册:2012-10-19
收藏
得分:0 
回复 6楼 ren829
好吧。。说的也对
2013-06-06 14:27
快速回复:井字游戏程序为什么组件显示有重复的,如图
数据加载中...
 
   



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

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