Java实现简单连连看游戏

本文实例为大家分享了Java实现连连看游戏的具体代码,供大家参考,具体内容如下

大二时做的Java课程设计,拿了个优秀,用了icon来模拟做了个简单的连连看,代码量不多,仅供参考。

课设要求是实现连连看最基本的功能,所以这里写了个简单的初始界面和经典模式的一个界面。

初始界面

代码如下:

public class PictureMatching {
    JButton classical = new JButton("经典模式");
    JButton about = new JButton("关于游戏");
    JButton exit= new JButton("退出游戏");
    JFrame menus = new JFrame("连连看");
    public PictureMatching(){
         menus.setLayout(new FlowLayout(FlowLayout.CENTER,40,40));//布局
         JLabel label = new JLabel("连连看");
 
        //设置字体
         Font font = new Font("黑体",Font.PLAIN,26);
            label.setFont(font);        
            classical.setFont(font); 
            about.setFont(font);
            exit.setFont(font);
           //组件放入容器中
            menus.add(label);
            menus.add(classical);
            menus.add(about);
            menus.add(exit);
 
            Buttonlistener listener = new Buttonlistener();
            classical.addActionListener(listener);
            about.addActionListener(listener);
            exit.addActionListener(listener);
            menus.setSize(300, 450);
            menus.setLocationRelativeTo(null);
            menus.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            menus.setVisible(true);
    }
    public class Buttonlistener implements ActionListener{//初始界面的监听器
        @Override
        public void actionPerformed(ActionEvent e) {
            if((JButton)e.getSource() == classical){
                new Classical();
            }
            else if ((JButton)e.getSource() == about) {
                new About();
            }
            else if((JButton)e.getSource() == exit)
                System.exit(0);
        }
    }
   //主函数
    public static void main(String args[]){
        try{
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }catch (Exception e) {}
        new PictureMatching();
    }
}

“关于游戏"界面可以写一些信息,这里不多赘述。

经典模式的界面如下:

代码如下:

class Classical extends JFrame implements ActionListener{
    Piture piture[][]=new Piture[12][12];
    Check check;JLabel label,time,score,rule,prop,win,lose;
    Time timer;
    CardLayout card = new CardLayout();
    JPanel panel = new JPanel(card);
    JPanel addpanel1 = new JPanel();//按钮面板
    JPanel addpanel2 = new JPanel();//暂停面板
    JPanel addpanel3 = new JPanel();//win面板
    JPanel addpanel4 = new JPanel();//lose面板
    private int s = 0;//分数 
    private int best = 0; //最高分
    JButton tip,reform,exit,stop,restart;
    int t = 3,r = 1;//提示次数,重置次数
    Path path = Paths.get("D://课程设计//最高分.txt");
    public Classical(){
        setTitle("经典模式");
        setLayout(null);
        label = new JLabel("经典模式");
        Font font = new Font("黑体", Font.PLAIN, 40);
        label.setFont(font);
        tip = new JButton("提示X3");
        reform = new JButton("重置X1");
        exit = new JButton("返回");
        stop = new JButton("暂停");
        restart = new JButton("重新开始");
        time = new JLabel();
        Font song = new Font("宋体", Font.PLAIN, 24);
        time.setFont(song);    
        score = new JLabel("分数:"+s);
        score.setFont(song);
        add(label);add(tip);add(reform);add(exit);add(stop);add(time);add(restart);add(score);add(panel);
        addpanel1.setLayout(null);
        addpanel2.setLayout(null);
        addpanel3.setLayout(null);
        addpanel4.setLayout(null);
        label.setBounds(410,50,200, 50);
        tip.setBounds(300,125,80,50);
        reform.setBounds(400,125,80,50);
        exit.setBounds(500,125,80,50);
        restart.setBounds(600,125, 100, 50);
        stop.setBounds(150,125,80,50);
        time.setBounds(80,70,250,50);
        score.setBounds(800,125,250,50);
        panel.setBounds(100, 210, 900,770);
        try(OutputStream output = Files.newOutputStream(path, StandardOpenOption.CREATE)){//读取最高分
            java.io.InputStream input = Files.newInputStream(path,StandardOpenOption.READ);
            DataInputStream in = new DataInputStream(new BufferedInputStream(input)); 
            best = in.readInt();
        } catch (IOException e) {
        }
        tip.addActionListener(this);
        reform.addActionListener(this);
        exit.addActionListener(this);
        stop.addActionListener(this);
        restart.addActionListener(this);
        //初始化所有的Piture类对象
        for(int i = 0;i<12;i++){
            for(int j = 0;j<12;j++){
                piture[i][j] = new Piture();
                piture[i][j].setX(i);
                piture[i][j].setY(j);
                if(i>=1&&i<=10&&j>=1&&j<=10)
                    piture[i][j].setK(true);
            }
         }
        ImageIcon icons[] = new ImageIcon[28];
        for(int q = 0;q<28;q++){
            icons[q] = new ImageIcon("D://课程设计//图标//图标//"+(q+1)+".png");//图标路径
        }
        //用循环将按钮赋予图标
        for(int i = 1; i < 11;i++){
            for(int j = 1;j<11;j+=2){
                int l = (int) (Math.random()*28);
                piture[i][j].setBtn(new JButton(icons[l]));
                piture[i][j+1].setBtn(new JButton(icons[l]));
            }
        }
        check = new Check();
        Reform();
        buttonclick listener = new buttonclick();
        //用循环将按钮装上监听器
        for(int i = 1; i < 11;i++){
            for(int j = 1;j<11;j++){
                piture[i][j].getBtn().addActionListener(listener);
                addpanel1.add(piture[i][j].getBtn());
                piture[i][j].getBtn().setBounds(80*(j-1),70*(i-1),80,70);
            }
        }
        rule = new JLabel("<html>规则介绍:<br><font>连连看是一个把相同两张牌连线后<br><font>消除的益智游戏,游戏时请注意,<br></font>两张牌间连线的拐点不能超过两个。</font></html>

prop = new JLabel("<html>道具介绍:<br><font>提示:自动消除一对相同的卡牌<br><font>重置:用于重新洗牌的道具");
        win = new JLabel();
        lose = new JLabel();
        rule.setFont(song);
        prop.setFont(song);
        win.setFont(song);win.setBounds(350,200, 200, 200);
        lose.setFont(song);lose.setBounds(350,200, 200, 200);
        addpanel2.setLayout(new FlowLayout(FlowLayout.CENTER,20,20));
        addpanel2.add(rule);addpanel2.add(prop);
        addpanel3.add(win);
        addpanel4.add(lose);
        panel.add(addpanel1,"p1");panel.add(addpanel2,"p2");panel.add(addpanel3,"p3");panel.add(addpanel4, "p4");
        setSize(1000,1000);
        setResizable(false);
        setLocationRelativeTo(null);
        setVisible(true);timer =new Time();
    }
    //时间类
    class Time {
        private int minute = 0;
        private int second = 0;
        private int totalSeconds;
        Timer t=new Timer();
        TimerTask task;
        private boolean Run = true;
        private boolean minuteNotAlready = false;
        private boolean secondNotAlready = false;
        public Time(){
            totalSeconds = 60 * 3;            
            initData(totalSeconds);
            t.schedule(task = new TimerTask() {
                public void run() {
                    if(Run){
                        if (secondNotAlready) {
                            startCount();
                        } else {
                            cancel();
                            best = best>s?best:s;
                            lose.setText("<html>You are lose!<br><font>分数:"+s+"<br><font>最高分:"+best);
                            card.show(panel, "p4");
                            try(OutputStream output = Files.newOutputStream(path, StandardOpenOption.CREATE);
                                    DataOutputStream dataOutputStream = new DataOutputStream(new BufferedOutputStream(output))){
                                dataOutputStream.writeInt(best);
                            }catch (Exception e3) {
                            }
                        }
                    }
                }
            }, 0, 1000);
        }
        //初始化赋值
        private void initData(int totalSeconds) {
            minute = 0;
            second = 0;
            minuteNotAlready = false;
            secondNotAlready = false;
            if (totalSeconds > 0) {
                secondNotAlready = true;
                second = totalSeconds;
                if (second >= 60) {
                    minuteNotAlready = true;
                    minute = second / 60;
                    second = second % 60;
                }
            }
            time.setText("剩余时间:"+minute+"分钟"+second+"秒");
        } 
        //计算各个值的变动
        public void startCount() {
            if (secondNotAlready) {
                if (second > 0) {
                    second--;
                    if (second == 0 && !minuteNotAlready) {
                        secondNotAlready = false;
                    }
                } else {
                    if (minuteNotAlready) {
                        if (minute > 0) {
                            minute--;
                            second = 59;
                            if (minute == 0) {
                                minuteNotAlready = false;
                            }
                        }
                    }
                }
            }
            time.setText("剩余时间:"+minute+"分钟"+second+"秒");
        }
     
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        if((JButton)e.getSource() == tip){
            if(t>0){
                Tip();
                t--;
                tip.setText("提示X"+ t );
            }
        }
        else if((JButton)e.getSource() == reform){
            if(r>0){
                Reform();
                r--;
                reform.setText("重置X"+r);
            }
        }
        else if((JButton)e.getSource() == stop){
                if(stop.getText().equals("暂停")){
                    timer.Run = false;
                    stop.setText("开始");
                    card.show(panel, "p2");//显示暂停面板,即游戏规则
                    return;
                }
                else if (stop.getText().equals("开始")) {
                    timer.Run = true;
                    stop.setText("暂停");
                    card.show(panel, "p1");
                    return;
                }
        }
        else if((JButton)e.getSource() == exit){
            setVisible(false);
            }
        else if((JButton)e.getSource() == restart){
            setVisible(false);
            Classical classical = new Classical();
        }
    }
    //图案的匹配消除监听器
    public class buttonclick implements ActionListener{
        int x1,y1,x2,y2;//分别表示第一个卡牌和第二个卡牌的坐标
        public buttonclick () {
            x1 = -1;//初始化
            x2 = -1;
            y1 = -1;
            y2 = -1;
        }
        @Override
        public void actionPerformed(ActionEvent e) {
            if(x1 == -1){//如果第一个卡牌的坐标为初始值,将此时点击的按钮的内容赋予第一个卡牌
                for(int i = 1; i < 11;i++){
                    for(int j = 1;j<11;j++){     
                        if((JButton)e.getSource()==piture[i][j].getBtn()){
                            x1 = i;y1 = j;//将卡牌坐标赋予第一个卡牌
                        }
                    }
                }
            }
            else{//如果第一个卡牌的坐标不为初始值,将此时点击的按钮的内容赋予第er个卡牌
                for(int i = 1; i < 11;i++){
                    for(int j = 1;j<11;j++){
                        if((JButton)e.getSource()==piture[i][j].getBtn()){
                            if(x1!=i||y1!=j){
                                x2 = i;y2 = j;//将
                            }
                        }
                    }
                }
            }
            
            if(x1 != -1&&x2 != -1){//当两个卡牌的值都不为初始值
                if(piture[x1][y1].getBtn().getIcon() == piture[x2][y2].getBtn().getIcon()){//比较两个按钮的图标
                    boolean w = check.isMatch(new Point(x1, y1),new Point(x2,y2));//比较是否匹配
                    if(w){
                        addpanel1.remove(piture[x1][y1].getBtn());
                        piture[x1][y1].setK(false);
                        addpanel1.remove(piture[x2][y2].getBtn());
                        piture[x2][y2].setK(false);
                        x1 = -1;y1 = -1;
                        x2 = -1;y2 = -1;
                        s = s + 200;
                        score.setText("分数:"+s);
                        setVisible(false);
                        setVisible(true);
                    }
                }
                x1 = x2;
                y1 = y2;
                x2 = -1;
                y2 = -1;
            }
            try {
                if(isReform())
                    Reform();
            } catch (Exception e2) {
                timer.Run = false;
                s = s + (timer.minute*60+timer.second)*100;
                best = best>s?best:s;
                win.setText("<html>You are win!<br><font>分数:"+s+"<br><font>最高分:"+best);
                card.show(panel, "p3");//显示win面板
                //将最高分写入文件
                try(OutputStream output = Files.newOutputStream(path, StandardOpenOption.CREATE);
                        DataOutputStream dataOutputStream = new DataOutputStream(new BufferedOutputStream(output))){
                    dataOutputStream.writeInt(best);
                }catch (Exception e3) {
                }
                
            }
            
        }
    }
    //提示功能
    public void Tip(){
        int p=0,p1 = 0;
        for(int i = 0;i<12;i++){
            for(int j = 0;j<12;j++){
                if(piture[i][j].isK()){
                    p++;
                }
            }
        }
        Piture pit[] = new Piture[p];
        for(int i = 1;i<12;i++){
            for(int j = 1;j<12;j++){
                if(piture[i][j].isK()){
                    pit[p1] = piture[i][j];
                    p1++;
                }
            }
        }
        //检测匹配的卡牌,消除找到的第一对卡牌
        for(int m = 0;m<pit.length-1;m++){
            for(int n = m+1;n<pit.length;n++){
                if(pit[m].getBtn().getIcon() == pit[n].getBtn().getIcon())
                    if(check.isMatch(new Point(pit[m].getX(),pit[m].getY()), new Point(pit[n].getX(),pit[n].getY()))){
                        addpanel1.remove(pit[m].getBtn());
                        pit[m].setK(false);
                        addpanel1.remove(pit[n].getBtn());
                        pit[n].setK(false);
                        s = s + 200;
                        score.setText("分数:"+s);
                        setVisible(false);            
                        setVisible(true);
                        return;
                    }
            }
        }
        
    }
    //重置功能
    public void Reform() {
        int p=0,p1 = 0;
        //将有图案的放入一个数组中
        for(int i = 0;i<12;i++){
            for(int j = 0;j<12;j++){
                if(piture[i][j].isK()){
                    p++;
                }
            }
        }
        Piture pit[] = new Piture[p];
        for(int i = 1;i<12;i++){
            for(int j = 1;j<12;j++){
                if(piture[i][j].isK()){
                    pit[p1] = piture[i][j];
                    p1++;
                }
            }
        }
        //将图案进行打乱
        for(int k = 0;k<=pit.length/2;k++){
            int l = (int)(Math.random()*pit.length);
            Piture t = new Piture();
            t.getBtn().setIcon(pit[k].getBtn().getIcon()); 
            pit[k].getBtn().setIcon(pit[l].getBtn().getIcon());
            pit[l].getBtn().setIcon(t.getBtn().getIcon());
        }
        setVisible(false);
        setVisible(true);
        try {
            if(isReform())
            Reform();
        } catch (Exception e) {
        }
        
    }
    //检测是否需要重置
    public boolean isReform(){
        boolean is = true;
        int p=0,p1 = 0;
        //将有图案的放入一个数组中
        for(int i = 0;i<12;i++){
            for(int j = 0;j<12;j++){
                if(piture[i][j].isK()){
                    p++;
                }
            }
        }
        Piture pit[] = new Piture[p];
        for(int k = 1;k<12;k++){
            for(int l = 1;l<12;l++){
                if(piture[k][l].isK()){
                    pit[p1] = piture[k][l];
                    p1++;
                }
            }
        }
        for(int m = 0;m<pit.length-1;m++)
            for(int n =m+1;n<pit.length;n++)
                if(check.isMatch(new Point(pit[m].getX(),pit[m].getY()), new Point(pit[n].getX(),pit[n].getY())))
                    is = false;
        return is;
    }
    class Check{
        public boolean isMatch(Point a,Point b){    //检测是否匹配
            boolean b1,b2,b3;
            b3 = this.noCorner(a,b);
            b1 = this.oneCorner(a, b);
            b2 = this.twoCorner(a, b);
            if(b1||b2||b3)
                return true;
            else
                return false;
        }
        boolean horizonMatch(Point a,Point b){//横线上的扫描
            int i,j;
            i=a.y>b.y?a.y:b.y;
            j=a.y>b.y?b.y:a.y;
            boolean hor = true;
            for(int y = j+1;y<i;y++){
                if(piture[a.x][y].isK()){
                    hor = false;break;
                }
            }
            return hor;
        }
        boolean verticalMatch(Point a,Point b){//竖线上的扫描
            int i,j;
            i=a.x>b.x?a.x:b.x;
            j=a.x>b.x?b.x:a.x;
            boolean ver = true;
            for(int x = j+1;x<i;x++){
                if(piture[x][a.y].isK()){
                    ver = false;break;}
            }
            return ver;
        }
        boolean noCorner(Point a,Point b){
            if(a.x == b.x){
                if(this.horizonMatch(a, b)){
                    return true;
                }
            }
            else if(a.y == b.y){
                if(this.verticalMatch(a, b)){
                    return true;
                }
            }
            return false;
        }
        boolean oneCorner(Point a,Point b){ //一个拐点
            Point c,d;
            boolean isMatch;
            c = new Point(a.x,b.y);
            d = new Point(b.x,a.y);
            if(piture[c.x][c.y].isK() == false){
                isMatch = horizonMatch(a,c)&&verticalMatch(b,c); 
                if(isMatch){
                    return isMatch;
                }
            }
            if(piture[d.x][d.y].isK() == false){
                return isMatch = horizonMatch(b,d)&&verticalMatch(a,d);
            }
            else
                return false;
        }
        boolean twoCorner(Point a,Point b){//两个拐点
            boolean v = false;
            //扫描a点左边的所有线
            for(int y = a.y-1;y>=0;y--){
                if((!piture[a.x][y].isK())&&(!piture[b.x][y].isK())&&horizonMatch(a, new Point(a.x, y))&&horizonMatch(b, new Point(b.x, y))&&verticalMatch(new Point(a.x,y),new Point(b.x,y))){
                    v = true;break;
                }
            }
            //扫描a点右边的所有线
            for(int y = a.y+1;y<12;y++){
                if((!piture[a.x][y].isK())&&(!piture[b.x][y].isK())&&horizonMatch(a, new Point(a.x, y))&&horizonMatch(b, new Point(b.x, y))&&verticalMatch(new Point(a.x,y),new Point(b.x,y))){
                                v = true;break;
                }
            }
            //扫描a点上面的所有线
            for(int x = a.x-1;x>=0;x--){
                if((!piture[x][a.y].isK())&&(!piture[x][b.y].isK())&&verticalMatch(a, new Point(x, a.y))&&verticalMatch(b,new Point(x, b.y))&&horizonMatch(new Point(x,a.y),new Point(x,b.y))){
                            v = true;break;
                }
            }
            //扫描a点下面的所有线
            for(int x = a.x+1;x<12;x++){
                if(!piture[x][a.y].isK()&&!piture[x][b.y].isK()&&verticalMatch(a, new Point(x, a.y))&&verticalMatch(b,new Point(x, b.y))&&horizonMatch(new Point(x,a.y),new Point(x,b.y))){
                    v = true;break;
                }
            }
            return v;
        }
        
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java实现连连看算法

    连连看是个经典的小游戏,规则是:两图案相同的方块在2折以内的线连接下可以消除.里面的算法还是非常有趣,今天来研究一下. 初始化棋盘 假设有一个8*8的棋盘,我们要将其扩充至10*10,为什么?因为这样外围的连接就可以不用越界了. 消除基本条件 判断是否具备消除的基本条件有 3 个 两个方块不能是同一个坐标 两个方块必须是同种类型(图案) 两个方块中不能有任何一个已经消除过的(消除过后的值用 mark 表示) // 判断是否具备消除的基本条件:两个方块不能是同一个坐标:两个方块必须是同种类型:两个

  • java基于swing实现的连连看代码

    本文实例讲述了java基于swing实现连连看代码.分享给大家供大家参考. 主要功能代码如下: 复制代码 代码如下: package llkan; import javax.swing.*; import java.awt.*; import java.awt.event.*; /**  * 连连看游戏  * @author Administrator  *2014年10月17日  */ public class MainGame implements ActionListener {     

  • java仿QQ连连看游戏

    关于这个项目,真的是花了很多心思在上面,从开始构思,到最后完成,真的是花了整整一个月.大概是11月初开始学java swing的时候有的想法,然后开始构思整个思路,相关算法讨论以及调试. 最开始先对连连看基础算法进行测试,就用一般的二维数组,然后就用控制台输入两个点的坐标进行删除,这一步就调试了我整整一个星期,基础算法搞完了 终于开始设计界面了,反正也不知道那时候花了多长时间才把界面给设计好,反正还设计的特别丑(至今也如此). 功能如下: 运行程序后有背景音乐 菜单栏有:重新开始,提示,炸弹,排

  • java实现连连看游戏

    本文实例为大家分享了java实现连连看游戏的具体代码,供大家参考,具体内容如下 代码会实现共享的,这个是截图 代码: package com.lr.bean; import java.util.Scanner; import java.util.Random; import com.lr.bean.Point; public class Link{ public static void main(String[] args){ Scanner sc=new Scanner(System.in);

  • java连连看游戏菜单设计

    本文实例为大家分享了java连连看游戏菜单的具体实现代码,供大家参考,具体内容如下 先写GUI. 首先初始化框架,菜单,按钮,需要把菜单和按钮都添加在框架中.注意添加的顺序,首先要设置菜单,再设置框架,再设置按钮,如果交换了设置菜单和框架的顺序,会导致菜单显示不出,被框架挡住.对菜单设置了三个选项,第一个选项有五个下拉按键,用循环添加,第二个和第三个选项的下拉按键直接添加. GUI代码如下: package gui; import java.awt.Font; import javax.swin

  • Java实现简单连连看游戏

    本文实例为大家分享了Java实现连连看游戏的具体代码,供大家参考,具体内容如下 大二时做的Java课程设计,拿了个优秀,用了icon来模拟做了个简单的连连看,代码量不多,仅供参考. 课设要求是实现连连看最基本的功能,所以这里写了个简单的初始界面和经典模式的一个界面. 初始界面 代码如下: public class PictureMatching {     JButton classical = new JButton("经典模式");     JButton about = new

  • java实现简单扫雷游戏

    本文实例为大家分享了java实现简单扫雷游戏的具体代码,供大家参考,具体内容如下 package com.test.swing; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.JButton; import javax.

  • java实现简单扑克牌游戏

    本文实例为大家分享了java实现简单扑克牌游戏的具体代码,供大家参考,具体内容如下 扑克牌小游戏: 游戏玩法简介:定义五个People在玩扑克牌游戏,玩法是5个人从一副没有大小王的扑克牌中各抽取4张,牌的类型有四种:♥,♣,♠,♦.牌的大小为从1~13.(此处为了简单,只取1 -5). 1.黑桃♠A在哪名玩家手中,哪名玩家就获胜. package poker; import java.util.ArrayList; import java.util.Collections; import jav

  • Java实现简单猜拳游戏

    本文实例为大家分享了Java实现简单猜拳游戏的具体代码,供大家参考,具体内容如下 看网上的猜拳游戏那么多,但都是用switch输入数字,所以用if嵌套,写一个简单的猜拳游戏 package Game; import java.util.Scanner; import java.util.Random;//生成随机数,利用switch生成随机的石头,剪刀或者布 public class CaiQuan { public static void main(String[] args) { while

  • java实现简单石头剪刀布游戏

    本文实例为大家分享了java实现简单石头剪刀布游戏的具体代码,供大家参考,具体内容如下 问题描述 Alice, Bob和Cindy一起玩猜拳的游戏.和两个人的猜拳类似,每一轮,他们会从石头.剪刀.布中各自选一个出拳,基本的胜负规则是石头赢剪刀.剪刀赢布.布赢石头.如果一轮中正好可以分成胜负两边,则负边的每个人要支付给胜边的每个人一块钱.如果无法分成胜负两边,则都不出钱.比如,如果Alice出石头,而Bob和Cindy都出布,则Alice要分支付Bob和Cindy一块钱.再如,如果Alice出石头

  • Java实现简单台球游戏

    Java实现简单台球桌问题,供大家参考,具体内容如下 需求: 使小球可以在桌面上移动,移动到桌面边缘将被弹回,显示小区的移动 素材: 小球照片 桌球照片 程序源代码: package 桌球游戏; import java.awt.*; import javax.swing.*; public class BallGame extends JFrame { Image ball=Toolkit.getDefaultToolkit().getImage("image/ball.png");

  • java实现简单的五子棋游戏

    本文实例为大家分享了java实现简单五子棋游戏的具体代码,供大家参考,具体内容如下 一.主要界面 1.登录界面:2.游戏选择界面:3.五子棋下棋界面 它们间的逻辑关系为先通过登录界面登录跳转到游戏选择界面,再通过游戏选择界面进入到五子棋下棋界面. 二.功能概况 1.登录界面:a.设置一定的布局和添加一些组件:b.通过点击登录按钮判断账号和密码是否正确,正确则成功登录,反之则弹出一个提示账号或密码输入错误的窗口:c.在窗口中添加一个按钮,在点击此按钮后关闭当前窗口,并在第三次输入错误后弹出提示并关

随机推荐