技术讨论群: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