羊了羊-新手项目-最终代码(待完善)

 资源包

【免费】java-新手项目-羊了羊资源包资源-CSDN文库

思路总结

1.新建一个窗口

2.定义一个JLael(绘制背景版)

3.定义一个Jbutton(设置一个(胡桃)图片)

4.封装一个数组(存(胡桃)图片的名称-)

5.新建一个集合(存储一个胡桃的JButton)

6.封装一个方法(存一个Jbutton的样式(图片名称和地址))并导入到集合去

7.集合打乱顺序-分层(第一层48张,第二层36张,第三层35张,第四层24张)

8.压牌(界限判定)

9.在准备一个集合(用于用户操作JButton)

10.添加点击事件

最后总的项目代码(待完善)

package yang;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.util.Collections;
import java.util.LinkedList;

/**
 * 目标
 * 设计isCovered 压牌逻辑
 */

public class UsingYang {
    public static void main(String[] args) {
        JFrame frame = new JFrame("My Swing Window");
        JPanel panel = new JPanel();
        panel.setLayout(null);
        PaintBackground(panel);
        // 设置窗口的默认关闭操作(退出程序)
//设置 画一张卡牌
//JButton card = new JButton(new ImageIcon("img1/胡桃1.jpeg"));
//        card.setSize(59,66);
//        card.setLocation(20,50);
//        //填充
//        card.setName("胡桃搞笑");
//        card.setBorderPainted(true);//设置绘制的边框
//        card.setContentAreaFilled(false);
//        panel.add(card,0);


//        遍历数组
        LinkedList<JButton> cards = createCards();
        shuffleCollection(cards);//打乱集合
        collectionPutCard(panel,cards);//放置卡牌
        allCover(cards);
    //再来一个集合存储
        LinkedList<JButton> belowCards = new LinkedList<>();

        //添加一个点击事件
        addClickAction(cards,belowCards,panel);

//        //第一层 7*7=49张卡牌
//        for (int i = 0; i < 49; i++) {
//            JButton card = cards.get(i);
//            card.setSize(59,66);
//            card.setLocation(30+(i%7)*59,100+(i/7)*63);
//            card.setBorderPainted(true);//设置绘制的边框
//            card.setContentAreaFilled(false);
//            panel.add(card,0);
//
//        }
//        //第二层 6*6=36张卡牌
//        for (int i = 0; i < 36; i++) {
//            JButton card = cards.get(i+49);
//            card.setSize(59,66);
//            card.setLocation(59+(i%6)*59,130+(i/6)*63);
//            card.setBorderPainted(true);//设置绘制的边框
//            card.setContentAreaFilled(false);
//            panel.add(card,0);
//
//        }
        第三层 5*7=35
//        for (int i = 0; i < 35; i++) {
//            JButton card = cards.get(i+49+36);
//            card.setSize(59,66);
//            card.setLocation(30+(i%7)*59,160+(i/7)*63);
//            card.setBorderPainted(true);//设置绘制的边框
//            card.setContentAreaFilled(false);
//            panel.add(card,0);
//
//        }
//        //        第四层 6*4=24
//        for (int i = 0; i < 24; i++) {
//            JButton card = cards.get(i+49+36+35);
//            card.setSize(59,66);
//            card.setLocation(60+(i%6)*59,195+(i/6)*63);
//            card.setBorderPainted(true);//设置绘制的边框
//            card.setContentAreaFilled(false);
//            panel.add(card,0);
//
//        }






        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 设置窗口的大小
        frame.setSize(496, 840);

        // 设置窗口的位置(可选)
        frame.setLocationRelativeTo(null); // 居中显示

        // 让窗口可见
        frame.setVisible(true);
        frame.setResizable(false);




    }
    public static void PaintBackground(JPanel panel){
        JLabel jLabel1 = new JLabel(new ImageIcon("img/背景.jpg"));
        jLabel1.setSize(480,800);
        jLabel1.setLocation(0,0);
        panel.add(jLabel1);
    }
//
    public static LinkedList<JButton> createCards(){
        LinkedList<JButton> cards = new LinkedList<>();
        String []name = {"胡桃1","胡桃2","胡桃3","胡桃4","胡桃5","胡桃6","胡桃7","胡桃8","胡桃9","胡桃10","胡桃11","胡桃12","胡桃13","胡桃14","胡桃15","胡桃16"};
        for (int j =0 ;j<9;j++) {
            for (int i = 0; i < name.length; i++) {
                JButton card = new JButton(new ImageIcon("img1/"+name[i]+".jpeg"));
              card.setDisabledIcon(new ImageIcon("img1/"+name[i]+"-1.jpeg"));
//                card.setSize(59,66);
//                    card.setLocation(30+(i%7)*59,100+(i/7)*63);
                //填充
                card.setName(name[i]);
                cards.add(card);

//                card.setBorderPainted(true);//设置绘制的边框
//                card.setContentAreaFilled(false);
//                panel.add(card,0);

            }
        }
        return cards;
    }
    //绘制每一层的次数
    public static void putCards(int count , int offset ,int cols,int x,int y ,JPanel panel, LinkedList<JButton> cards  ){
        for (int i = 0; i < count; i++) {
            JButton card = cards.get(i+offset);
            card.setSize(59,66);
            card.setLocation(x+(i%cols)*59,y+(i/cols)*63);
            card.setBorderPainted(true);//设置绘制的边框
            card.setContentAreaFilled(false);
            panel.add(card,0);

        }

    }
    public static boolean isCovered(JButton top,JButton bottom){
        int x1 = bottom.getX()-59;
        int x2 = bottom.getX()+59;
        int y1 = bottom.getY()-63;
        int y2 = bottom.getY()+63;
        int x = top.getX();//x:top的x坐标
        int y = top.getY();//y:top的y坐标
        return x>x1 && x<x2 && y>y1 && y<y2;
    }
    public static void addClickAction(LinkedList<JButton> cards, LinkedList<JButton> belowCards, JPanel panel){
        for(int i=0;i<cards.size();i++){ //遍历所有卡牌
            JButton card = cards.get(i); //获取每一张卡牌
            card.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) { //点击卡牌时自动执行
                    if(belowCards.size()<7){ //卡槽中的卡牌不够7,则正常操作
                        JButton current = (JButton)e.getSource(); //获取被点击的卡牌
                        cards.remove(current); //1)将当前卡牌从cards中删除
                        int num = belowCards.size(); //想插入卡牌的下标位置
                        for(int index=0;index<belowCards.size();index++){ //遍历卡槽集合
                            JButton card = belowCards.get(index); //获取卡槽中的每张卡牌
                            if(card.getName().equals(current.getName())){ //若卡槽中有相同卡牌
                                num = index; //修改要插入卡牌的位置
                                break; //结束循环
                            }
                        }
                        belowCards.add(num,current); //2)将当前卡牌存入到belowCards卡槽集合中
                        /*
                          若num位置后面的第2个位置卡牌的名字与当前点击的卡牌名字相同,
                          说明3张卡牌连续了,则需要将它们从卡槽中删除
                         */
                        if(num+2<belowCards.size()){ //说明num后面最少有2张卡牌
                            JButton card = belowCards.get(num+2); //获取当前卡牌后面的第2张卡牌
                            //若当前卡牌后面的第2张卡牌的名称相同,说明三连了
                            if(card.getName().equals(current.getName())){
                                //将下标num的元素从卡槽集合中删除,并返回被删除的卡牌存到c1中
                                JButton c1 = belowCards.remove(num);
                                JButton c2 = belowCards.remove(num);
                                JButton c3 = belowCards.remove(num);
                                panel.remove(c1); //将c1从面板中删除
                                panel.remove(c2);
                                panel.remove(c3);
                            }
                        }
                        panel.updateUI(); //刷新面板,若不刷新则可能删掉的卡牌还在卡槽中显示(窗口自身问题)

                        for(int i=0;i<belowCards.size();i++){ //3.遍历卡槽中的所有卡牌
                            //+64而不是+59原因为仅仅是为了和槽子的格式对齐了好看
                            belowCards.get(i).setLocation(20+i*64,640); //设置卡槽中卡牌的位置
                        }
                        allCover(cards); //重新实现压牌操作
                        current.removeActionListener(current.getActionListeners()[0]); //删除卡牌点击事件(不要求掌握)
                    }else{ //够7了,则弹框提示游戏结束
                        JOptionPane.showMessageDialog(panel,"槽子已满,游戏结束"); //弹出提示框(不要求掌握)

                    }
                }




            });
        }
    }


        public static void allCover(LinkedList<JButton> cards){
            for(int index=0;index<cards.size();index++){ //遍历所有卡牌
                JButton bottom = cards.get(index); //获取下标为index的卡牌
                for(int i=index+1;i<cards.size();i++){ //遍历当前卡牌后面的所有卡牌
                    JButton top = cards.get(i); //获取后面的卡牌
                    boolean cov = isCovered(top,bottom); //判断是否压住
                    if(cov){ //若压住了
                        bottom.setEnabled(false); //设置按钮不可用
                        break; //结束循环,若不结束则后面的卡牌没压住走else又点亮了
                    }else{ //没压住
                        bottom.setEnabled(true); //设置按钮可用
                    }
                }
            }
        }
        public static void shuffleCollection(LinkedList<JButton> cards){
             cards = createCards();
            Collections.shuffle(cards);//第一次乱序
        }
        public static void collectionPutCard(JPanel panel,LinkedList<JButton> cards){
            putCards(49,0,7,30,100,panel,cards);
            putCards(36,49,6,60,130,panel,cards);
            putCards(35,49+36,7,30,160,panel,cards);
            putCards(24,49+36+35,6,60,195,panel,cards);

        }
        public static void restart(LinkedList<JButton> cards,JPanel panel,LinkedList<JButton> belowCard){
        cards.clear();
        belowCard.clear();
        panel.updateUI();

        collectionPutCard(panel,cards);
            allCover(cards);
            //再来一个集合存储
            LinkedList<JButton> belowCards = new LinkedList<>();
            //添加一个点击事件
            addClickAction(cards,belowCards,panel);

        }







        }

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 根据mybatis-plus分页查询的条件,具体的代码可以参考以下示例:Page<User> page = new Page<User>(1, 10); QueryWrapper<User> queryWrapper = new QueryWrapper<User>(); queryWrapper.eq("status", "1"); IPage<User> userIPage = userMapper.selectPage(page, queryWrapper); // 分页查询结果 List<User> userList = userIPage.getRecords(); ### 回答2: Mybatis-Plus是一个在Mybatis基础上进行封装的工具,用于快速、方便地操作数据库。其中的分页查询功能可以通过添加条件来实现。 首先,需要导入mybatis-plus的相关依赖包,并在配置文件中配置相应的数据库连接信息。 在具体的代码中,可以通过使用`Page`类来实现分页查询。首先,创建一个`Page`对象,指定需要查询的页码和每页显示的数量: ``` Page<User> page = new Page<>(pageNum, pageSize); ``` 然后,使用`selectPage`方法进行分页查询,并传入分页对象和查询条件: ``` IPage<User> userPage = userMapper.selectPage(page, queryWrapper); ``` `selectPage`方法会自动将查询结果封装到`userPage`对象中。可以通过`userPage.getRecords()`方法获取查询结果的列表,通过`userPage.getTotal()`方法获取总记录数。 最后,可以根据需要对查询结果进行处理,比如打印结果或进行其他操作: ``` List<User> userList = userPage.getRecords(); for (User user : userList) { System.out.println(user); } ``` 以上就是使用Mybatis-Plus进行分页查询的基本步骤。在实际应用中,可以根据具体的数据库和查询条件进行相应的调整和优化。 ### 回答3: Mybatis-Plus是一款基于Mybatis的增强工具,它提供了很多便捷的功能,其中包括分页查询。 要使用Mybatis-Plus进行分页查询,首先需要引入Mybatis-Plus的相关依赖。然后,在需要进行分页查询的Mapper接口方法上加上`@SelectPage`注解,指定分页查询的参数。例如: ```java @SelectPage IPage<User> selectUserPage(Page<User> page, @Param("username") String username); ``` 在上述代码中,`selectUserPage`方法使用了`@SelectPage`注解,参数`Page<User> page`表示分页查询的具体参数,`@Param("username") String username`表示查询条件。 接着,在Service层中调用该Mapper方法进行分页查询。例如: ```java @Override public IPage<User> getUserPage(int current, int size, String username) { Page<User> page = new Page<>(current, size); return userMapper.selectUserPage(page, username); } ``` 以上代码中,`getUserPage`方法接收当前页码`current`、每页显示数量`size`和查询条件`username`,创建`Page<User>`对象,并调用Mapper中的`selectUserPage`方法进行分页查询。 最后,在Controller层使用Service提供的分页查询方法。例如: ```java @GetMapping("/users") public IPage<User> getUsers(@RequestParam("page") int page, @RequestParam("size") int size, @RequestParam("username") String username) { return userService.getUserPage(page, size, username); } ``` 通过以上代码,我们可以实现基于Mybatis-Plus的分页查询功能。使用Mybatis-Plus进行分页查询,可以简化代码,减少重复开发工作,提高开发效率。同时,Mybatis-Plus还提供了其他便捷的功能,如自动注入等,可以进一步提升开发体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值