Java Swing制作2048小游戏【完整版】

本文档详细介绍了如何使用Java Swing库来创建一个完整的2048小游戏。内容涵盖Swing组件的使用、游戏逻辑实现及界面交互等关键点。
摘要由CSDN通过智能技术生成

技术讨论群:1005611884 可获取各种资料/代码,群内有Java/Python/C++/C#方向大佬,妹子多

/**
 * 技术 Swing
 * 实现思路:
 * 1. 绘制窗口
 * 2. 初始化游戏界面
 *    创建所有卡片
 *    随机创建一个卡片 和 显示的数字 2或者4
 * 3.根据键盘的方向,处理数字的移动和相同数字的合并
 * 4.游戏结束的判断
 */
public class Game2048{
    public static  JFrame gameFrame;
    public static void main(String[] args) {
        gameFrame = new JFrame();
        gameFrame.setSize(370,400);
        gameFrame.setTitle("2048游戏");
        gameFrame.setLocationRelativeTo(null);
        gameFrame.add(new GamePanel());
        gameFrame.setVisible(true);
    }
}
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;

//画布
class GamePanel extends JPanel {
    public GamePanel(){
        //1. 初始化所有卡片
        initCard();
        //2.随机创建一个卡片
        createRandcard();
        //3. 创建键盘监听
        createKeyListener();
    }

    ///键盘监听
    private void createKeyListener() {
        Game2048.gameFrame.addKeyListener(new KeyAdapter() {
            @Override
            public void keyPressed(KeyEvent e) {
                //清理卡片的合并标记
                for (int i = 0; i <4; i++) {
                    for (int j = 0; j < 4; j++) {
                        Card card =allCards[i][j];
                        card.hebing = false;
                    }
                }

                //获取按键的code
                int key = e.getKeyCode();
                switch (key){
                    case KeyEvent.VK_UP: //向上
                        moveCardTop(true);
                        break;
                    case KeyEvent.VK_DOWN: //向下
                        moveCardDown(true);
                        break;
                    case KeyEvent.VK_LEFT: //向左
                        moveCardLeft(true);
                        break;
                    case KeyEvent.VK_RIGHT: //向右
                        moveCardRight(true);
                        break;
                }
                createRandcard();
                repaint();//重绘
                isgameOver();
            }
        });
    }

    //判断游戏是否结束
    private void isgameOver() {
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4 ; j++) {
                if(allCards[i][j].num == 2048){//其中有个数字是2048
                    JOptionPane.sh
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

写代码赚钱买包包

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

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

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

打赏作者

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

抵扣说明:

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

余额充值