Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 589|回复: 0

[Java游戏学习]java版2048游戏

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-16 15:06:43 | 显示全部楼层 |阅读模式
    效果图:
      
      
       
       

         
       

         
       
      
    代码:(1)Block.java
    1. import javax.swing.*;
    2. import java.awt.*;
    3. @SuppressWarnings("serial")
    4. public class Block extends JLabel {
    5.         private int value;
    6.         public Block() {
    7.                 value = 0;
    8.                 setFont(new Font("font", Font.PLAIN, 40));
    9.                 setBackground(Color.gray);
    10.         }
    11.         public int getValue() {
    12.                 return value;
    13.         }
    14.         public void setValue(int value) {
    15.                 this.value = value;
    16.                 String text = String.valueOf(value);
    17.                 if (value != 0)
    18.                         setText(text);
    19.                 else
    20.                         setText("");
    21.                 setColor();
    22.         }
    23.         public void setColor() {
    24.                 if (this.value == 0)
    25.                         setBackground(Color.gray);
    26.                 else if (this.value == 2)
    27.                         setBackground(new Color(238, 228, 218));
    28.                 else if (this.value == 4)
    29.                         setBackground(new Color(238, 224, 198));
    30.                 else if (this.value == 8)
    31.                         setBackground(new Color(243, 177, 116));
    32.                 else if (this.value == 16)
    33.                         setBackground(new Color(243, 177, 116));
    34.                 else if (this.value == 32)
    35.                         setBackground(new Color(248, 149, 90));
    36.                 else if (this.value == 64)
    37.                         setBackground(new Color(249, 94, 50));
    38.                 else if (this.value == 128)
    39.                         setBackground(new Color(239, 207, 108));
    40.                 else if (this.value == 256)
    41.                         setBackground(new Color(239, 207, 99));
    42.                 else if (this.value == 512)
    43.                         setBackground(new Color(239, 203, 82));
    44.                 else if (this.value == 1024)
    45.                         setBackground(new Color(239, 199, 57));
    46.                 else if (this.value == 2048)
    47.                         setBackground(new Color(239, 195, 41));
    48.                 else if (this.value == 4096)
    49.                         setBackground(new Color(255, 60, 57));
    50.         }
    51. }
    复制代码
    (2)My2048.java
    1. import java.awt.*;
    2. import java.awt.event.KeyEvent;
    3. import java.awt.event.KeyListener;
    4. import java.awt.event.MouseAdapter;
    5. import java.awt.event.MouseEvent;
    6. import javax.swing.*;
    7. @SuppressWarnings("serial")
    8. public class My2048 extends JFrame implements KeyListener {
    9.         Block[] block;
    10.         JPanel panel;
    11.         boolean numFlag;
    12.         int moveFlag;
    13.         public My2048() {
    14.                 numFlag = true;
    15.                 moveFlag = 0;
    16.                 block = new Block[16];
    17.                 setTitle("2048");
    18.                 setSize(400, 400);
    19.                 setLocation(500, 200);
    20.                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    21.                 panel = (JPanel) getContentPane();
    22.                 panel.setLayout(new GridLayout(4, 4, 5, 5));
    23.                 addBlock();
    24.                 for (int i = 0; i < 2; i++)
    25.                         appearBlock();
    26.                 this.addKeyListener(this);
    27.                 this.setVisible(true);
    28.         }
    29.         public void addBlock() {
    30.                 for (int i = 0; i < 16; i++) {
    31.                         block[i] = new Block();
    32.                         block[i].setHorizontalAlignment(JLabel.CENTER);
    33.                         // 不透明
    34.                         block[i].setOpaque(true);
    35.                         panel.add(block[i]);
    36.                 }
    37.         }
    38.         public void appearBlock() {
    39.         while(numFlag) {
    40.                         int index = (int) (Math.random() * 16);
    41.                         if (block[index].getValue() == 0) {
    42.                                 if (Math.random() < 0.5)
    43.                                         block[index].setValue(2);
    44.                                 else
    45.                                         block[index].setValue(4);
    46.                                 break;
    47.                         }
    48.                 }
    49.         }
    50.         public void judgeAppear() {
    51.                 int sum = 0;
    52.                 for (int i = 0; i < 16; i++) {
    53.                         if (block[i].getValue() != 0)
    54.                                 sum++;
    55.                 }
    56.                 if (sum == 16)
    57.                         numFlag = false;
    58.         }
    59.         public void upBlock() {
    60.                 for (int i = 12; i < 16; i++) {
    61.                         int index = i;
    62.                         for (int j = i - 4; j >= i - 12; j -= 4) {
    63.                                 int valueI = block[index].getValue(), valueJ = block[j]
    64.                                                 .getValue();
    65.                                 if (valueJ == 0) {
    66.                                         block[index].setValue(0);
    67.                                         block[j].setValue(valueI);
    68.                                 } else {
    69.                                         if (valueI == valueJ) {
    70.                                                 block[index].setValue(0);
    71.                                                 block[j].setValue(valueI + valueJ);
    72.                                                 if (valueI + valueJ == 4096)
    73.                                                         win();
    74.                                                 numFlag = true;
    75.                                                 moveFlag = 0;
    76.                                         } else if (numFlag == false)
    77.                                                 moveFlag += 1;
    78.                                 }
    79.                                 index = j;
    80.                         }
    81.                 }
    82.         }
    83.         public void downBlock() {
    84.                 for (int i = 0; i < 4; i++) {
    85.                         int index = i;
    86.                         for (int j = i + 4; j <= i + 12; j += 4) {
    87.                                 int valueI = block[index].getValue(), valueJ = block[j]
    88.                                                 .getValue();
    89.                                 if (valueJ == 0) {
    90.                                         block[index].setValue(0);
    91.                                         block[j].setValue(valueI);
    92.                                 } else {
    93.                                         if (valueI == valueJ) {
    94.                                                 block[index].setValue(0);
    95.                                                 block[j].setValue(valueI + valueJ);
    96.                                                 if (valueI + valueJ == 4096)
    97.                                                         win();
    98.                                                 numFlag = true;
    99.                                                 moveFlag = 0;
    100.                                         } else if (numFlag == false)
    101.                                                 moveFlag += 1;
    102.                                 }
    103.                                 index = j;
    104.                         }
    105.                 }
    106.         }
    107.         public void rightBlock() {
    108.                 for (int i = 0; i <= 12; i += 4) {
    109.                         int index = i;
    110.                         for (int j = i + 1; j <= i + 3; j++) {
    111.                                 int valueI = block[index].getValue(), valueJ = block[j]
    112.                                                 .getValue();
    113.                                 if (valueJ == 0) {
    114.                                         block[index].setValue(0);
    115.                                         block[j].setValue(valueI);
    116.                                 } else {
    117.                                         if (valueI == valueJ) {
    118.                                                 block[index].setValue(0);
    119.                                                 block[j].setValue(valueI + valueJ);
    120.                                                 if (valueI + valueJ == 4096)
    121.                                                         win();
    122.                                                 numFlag = true;
    123.                                                 moveFlag = 0;
    124.                                         } else if (numFlag == false)
    125.                                                 moveFlag += 1;
    126.                                 }
    127.                                 index = j;
    128.                         }
    129.                 }
    130.         }
    131.         public void leftBlock() {
    132.                 for (int i = 3; i <= 15; i += 4) {
    133.                         int index = i;
    134.                         for (int j = i - 1; j >= i - 3; j--) {
    135.                                 int valueI = block[index].getValue(), valueJ = block[j]
    136.                                                 .getValue();
    137.                                 if (valueJ == 0) {
    138.                                         block[index].setValue(0);
    139.                                         block[j].setValue(valueI);
    140.                                 } else {
    141.                                         if (valueI == valueJ) {
    142.                                                 block[index].setValue(0);
    143.                                                 block[j].setValue(valueI + valueJ);
    144.                                                 if (valueI + valueJ == 4096)
    145.                                                         win();
    146.                                                 numFlag = true;
    147.                                                 moveFlag = 0;
    148.                                         } else if (numFlag == false)
    149.                                                 moveFlag += 1;
    150.                                 }
    151.                                 index = j;
    152.                         }
    153.                 }
    154.         }
    155.         @Override
    156.         public void keyPressed(KeyEvent e) {
    157.                 switch (e.getKeyCode()) {
    158.                 case KeyEvent.VK_UP:
    159.                         upBlock();
    160.                         judgeAppear();
    161.                         appearBlock();
    162.                         over();
    163.                         break;
    164.                 case KeyEvent.VK_DOWN:
    165.                         downBlock();
    166.                         judgeAppear();
    167.                         appearBlock();
    168.                         over();
    169.                         break;
    170.                 case KeyEvent.VK_LEFT:
    171.                         leftBlock();
    172.                         judgeAppear();
    173.                         appearBlock();
    174.                         over();
    175.                         break;
    176.                 case KeyEvent.VK_RIGHT:
    177.                         rightBlock();
    178.                         judgeAppear();
    179.                         appearBlock();
    180.                         over();
    181.                         break;
    182.                 }
    183.         }
    184.         public void over() {
    185.                 if (!numFlag && moveFlag >= 36) {
    186.                         block[4].setText("G");
    187.                         block[5].setText("A");
    188.                         block[6].setText("M");
    189.                         block[7].setText("E");
    190.                         block[8].setText("O");
    191.                         block[9].setText("V");
    192.                         block[10].setText("E");
    193.                         block[11].setText("R");
    194.                        
    195.                         block[11].addMouseListener(new MouseAdapter() {
    196.                                 @Override
    197.                                 public void mousePressed(MouseEvent e) {
    198.                                         reStart();
    199.                                 }
    200.                         });
    201.                 }
    202.         }
    203.    
    204.         public void win() {
    205.                
    206.                 block[0].setText("Y");
    207.                 block[1].setText("O");
    208.                 block[2].setText("U");
    209.                 block[13].setText("W");
    210.                 block[14].setText("I");
    211.                 block[15].setText("N");
    212.                
    213.                 block[15].addMouseListener(new MouseAdapter() {
    214.                         @Override
    215.                         public void mousePressed(MouseEvent e) {
    216.                                 reStart();
    217.                         }
    218.                 });
    219.         }
    220.     public void reStart(){
    221.             numFlag=true;
    222.                 moveFlag=0;
    223.                 for(int i=0;i< 16;i++)
    224.                         block[i].setValue(0);
    225.             for (int i = 0; i < 2; i++)
    226.                         appearBlock();
    227.     }
    228.         @Override
    229.         public void keyTyped(KeyEvent e) {
    230.         }
    231.         @Override
    232.         public void keyReleased(KeyEvent e) {
    233.         }
    234.   public static void main(String args[]) {
    235.         JFrame.setDefaultLookAndFeelDecorated(true);
    236.      new My2048();
    237.         }
    238. }
    复制代码


      
      
       
       

         
       

         
       
      
    复制代码

    源码下载:http://file.javaxxz.com/2014/10/16/150643250.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-6-16 05:44 , Processed in 0.327990 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表