Java拼图小游戏—大一新生也能看懂的小游戏代码[含完整代码]

成为编程高手的第一步

一、先要把整体大纲列出来

效果图:

f4f6eaa5ef81459fb7a6bd0718d02ac5.jpeg

 游戏,肯定是要有一个游戏界面,这是主要的,其次就是用户登录界面用户注册界面。明白这些后就知道接下来我们应该要做些什么了,那就废话少说,直接打开我们心爱的idea,上才艺!!!


二、先搞定游戏界面(这是最重要的一部分)

完整代码请看我的gitee 的仓库——看完整代码就点开这里

        由于篇幅有限,这里我只展示拼图游戏界面最重要的几段逻辑代码。上代码!!

  1. 如何把图片放进去。

(这里我事先将图片处理成16张小图片,并将他以1、2...、14、15的格式来命名) 

这段代码的逻辑就是先创建一个二维数组,然后通过遍历来将图片放进二维数组中(这里用遍历的原因是减少代码量,你也可以将图片挨个放到数组中。我相信聪明的你哪种效率更高)

for(int i=0;i<4;i++){
            for(int j=0;j<4;j++){
                //获取当前要加载图片的序号
                int num=data[i][j];
                //创建JLabel的对象(管理容器)
                //相对路径
                ImageIcon image=new ImageIcon(path+num+".jpg");
                JLabel jLabel=new JLabel(image);
                //指定图片位置
                jLabel.setBounds(105*j+42,105*i+170,105,105);
                //给图片添加边框
                //LOWERED:让图片凹起
                //RAISED:让图片凸下去
                jLabel.setBorder(new BevelBorder(BevelBorder.RAISED));
                //把管理容器添加到界面
                this.getContentPane().add(jLabel);
            }
        }

     2. 打乱小图片

        我代码的注释很详细吧。↓

//定义一个一维数组
        int[] tempArr={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};
        //打乱数组中的数据顺序
        //遍历数组,得到每一个元素,拿着每一个元素跟随机索引上面的数据进行交换
        Random r=new Random();
        for(int i=0;i<tempArr.length;i++){
            //提取随机索引
            int index=r.nextInt(tempArr.length);
            //拿着遍历到的每一个数据,跟随机索引上的数据进行交换
            int temp=tempArr[i];
            tempArr[i]=tempArr[index];
            tempArr[index]=temp;
        }

        //遍历一维数组中的元素,在添加到二维数组中
        for(int i=0;i<tempArr.length;i++){
            if(tempArr[i]==0){
                x=i/4;
                y=i%4;
            }
                data[i/4][i%4]=tempArr[i];
        }
    

这就是游戏界面的主要代码 

三、用户登录界面

用户登录无非就是你输入账号密码,然后提交给数据库(这里我是用集合存储用户信息)去做对比,再去做判断。

这里主要的细节就是我用了stream流去遍历账号和密码,符合条件的就存储到matchUserList集合中,再交给下面去判断。这样的目的也是为了代码简洁和美观。

//获取输入的用户名和密码
        String inputname=inputUsername.getText();
        String inputword=inputPassword.getText();
        List<Game.User> matchUserList = list.stream().filter(s -> s.getUsername().equals(inputname) && s.getPassword().equals(inputword)).toList();
        if (matchUserList.size() > 0) {
            checkcode();
        } else {
               //创建弹窗报错提醒
               JDialog jDialog=new JDialog();
               jDialog.setTitle("输入异常");
               //取消默认居中(让窗体里面的所有组件都相对于一个坐标放置)
               jDialog.setLayout(null);

               JLabel wrong=new JLabel("用户名或密码输入错误,请重新登录");
               wrong.setForeground(Color.red);
               Font font=new Font("微软雅黑",0,13);
               wrong.setFont(font);
               wrong.setBounds(22,3,222,22);
              jDialog.getContentPane().add(wrong);

               jDialog.setSize(282,66);
               //让弹框置顶
               jDialog.setAlwaysOnTop(true);
               //让弹框居中
               jDialog.setLocationRelativeTo(null);
               //弹框不关闭则无法进行下面的界面
               jDialog.setModal(true);
               //让弹框显示出来
               jDialog.setVisible(true);
           }

  简单吧!

四、注册页面 

这里也是简单的遍历和判断。

String newName=inputName.getText();
        String password1=inputPassword.getText();
        String password2=againPassword.getText();
        User user=new User(newName,password1);
        //先查找用户名相同的用户,找到就提示并退出
        //List <User> matchUser = list0.stream().filter(s->s.getUsername().equals(newName)).collect(Collectors.toList());
        for (int i = 0; i < list0.size(); i++) {
            if (list0.get(i).getUsername().equals(newName)) {
                createDialogMessage("该用户名已被使用,请换一个吧");
                return;
            }
        }
        if(newName.equals("")){
            createDialogMessage("请输入用户名");
        }else if(password1.equals("")){
            createDialogMessage("请输入密码");
        }else if(!password2.equals(password1)){
            createDialogMessage("两次密码输入不一致,请重新输入");
        }else{
            list0.add(user);
            this.setVisible(false);
            LoginJFrame.getInstance().setVisible(true);
        }

五、看到这里,你会觉得很简单吧!其实这拼图小游戏真正的难点不在于他的逻辑,而在于Java swing窗体的各种设置,创建,隐藏,显示和注销等等。具体代码可以点开下面的链接查看

                                     完整代码        

有不懂的地方可以在评论区提问,或私聊我。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
这是一个 Java 写的拼图小游戏完整代码示例: ``` import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.Collections; public class PuzzleGame extends JFrame implements ActionListener { private JButton startButton; // 开始按钮 private JPanel gamePanel; // 游戏面板 private JButton[] buttons; // 拼图按钮 private ImageIcon[] icons; // 拼图图片 private int blankLocation; // 空白块位置 public PuzzleGame() { // 初始化窗口 setTitle("拼图小游戏"); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); // 初始化开始按钮 startButton = new JButton("开始游戏"); startButton.addActionListener(this); add(startButton, BorderLayout.NORTH); // 初始化游戏面板 gamePanel = new JPanel(); gamePanel.setLayout(new GridLayout(3, 3)); add(gamePanel, BorderLayout.CENTER); // 初始化拼图按钮和图片 buttons = new JButton[9]; icons = new ImageIcon[9]; for (int i = 0; i < 9; i++) { icons[i] = new ImageIcon("image" + i + ".jpg"); buttons[i] = new JButton(); buttons[i].addActionListener(this); } setVisible(true); } public void startGame() { // 随机打乱拼图顺序 ArrayList<Integer> list = new ArrayList<>(); for (int i = 0; i < 9; i++) { list.add(i); } Collections.shuffle(list); // 将拼图加入游戏面板 for (int i = 0; i < 9; i++) { gamePanel.add(buttons[list.get(i)]); buttons[list.get(i)].setIcon(icons[list.get(i)]); if (list.get(i) == 0) { blankLocation = i; } } } @Override public void actionPerformed(ActionEvent e) { // 点击开始按钮 if (e

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

钞人本仁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值