`
木有鸟的脚
  • 浏览: 5095 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

Java版2048小游戏

阅读更多
前段时间刚刚学习事件监听器,于是便选择比较经典的2048小游戏来找一下感觉 

实现的大致思路如下:
    1.先定义一个500*500的窗口,可以在上面把当前分数,最高分,游戏区及开始按钮画出来;
//初始化game2048游戏界面的方法
public void initUI(){

this.setTitle("2048_PC版");
this.setSize(500, 500);
this.setLocationRelativeTo(null);
this.setResizable(false);
this.setDefaultCloseOperation(3);

FlowLayout fl = new FlowLayout();
this.setLayout(fl);

//Graphics g = this.getGraphics();

//添加当前分数标签
JLabel jl=new JLabel("分数:");
jl.setFont(new Font("黑体",Font.BOLD,24));
jl.setFocusable(false);
this.add(jl);
JTextField jf=new JTextField ();
jf.setFocusable(false);
jf.setPreferredSize(new Dimension(100,30));
//设置文本框大小
jf.setBackground(new Color(230,230,250));
//设置文本框的背景色
jf.setFont(new Font("黑体",Font.BOLD,25));
jf.setBorder(new LineBorder( new Color(230,230,250)));
//设置文本框的边框颜色
jf.setEditable(false);
//文本框不可编辑
this.add(jf);
                      。。。
                      this.setVisible(true);
}



     2.在游戏区实现4*4的网格,用来放数字(当然,数字要存在数组中,可以定义不同数字拥有不同的颜色字体大小等);


//重绘窗体的方法
public void paint(Graphics g){
   
super.paint(g);//重绘初始化界面 代表调用父类的方法
this.Numbers(g);//绘制数字和格子
this.test();
}

  我在这里是把画数字和格子写成了一个方法,然后在重绘方法中调用,如果不用重绘方法的话,当你把窗口拖出屏幕后会发现原来的数字和格子会全部消失了,哈哈,很神奇吧。

//画出数字以及方格的方法
public void Numbers(Graphics g){


    g.setColor(java.awt.Color.magenta);
    g.drawRoundRect(50,70,400,400,15,15);//画大矩形

    //画16个小矩形
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
//g.setColor(java.awt.Color.green);
g.drawRoundRect(57+i*100, 78+j*100, 85, 85, 15, 15);
}
}
//在随机方格放入随机数字(2或4)
for(int i=0;i<4;i++){
    for(int j=0;j<4;j++){
        if(num[i][j]!=0){
switch( num[i][j] ){
case 2:
g.setColor(new Color(250,250,20));
    g.fillRoundRect(57+i*100, 78+j*100, 85, 85, 15, 15);
    g.setColor(Color.BLACK);
    g.setFont(new Font("宋体",Font.BOLD,46));
    g.drawString(num[i][j]+"",54+100*i+32,

74+100*j+60);
    break;
         case 4:
    g.setColor(new Color(240,10,230));
    g.fillRoundRect(57+i*100, 78+j*100, 85, 85,

15, 15);
    g.setColor(Color.BLACK);
    g.setFont(new Font("宋体",Font.BOLD,46));
    g.drawString(num[i][j]+"",54+100*i+32,

74+100*j+60);
      break;
    case 8:
                  ...                   break;
         ...
    default: break;
}
}}}}
    //随机数字结束
   
     为了验证随机的数字与位置是正确的,我在这里添加了一个test()方法,来检查数组里的数字:

          //用于检测数组中的数字
public void test(){
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
System.out.println("num["+i+"]"+"["+j+"]"+"="+num[i]

[j]);
}
}
}

运行一下,嗯,数组里的数字和位置与输出是对应的,很好!继续~  



    3.添加事件监听器,实现开始按钮的功能:点击可以随机两个位置来放两个随机数字(2或4);
//添加监听器
ButtonListener bl = new ButtonListener(this,num,jf);//通过构造方法传参
bt_start.addActionListener(bl);
this.addKeyListener(bl);

//构造函数对game初始化,g获得画笔对象,等
public ButtonListener(Game2048 game,int num[][],JTextField jf) {
this.game=game;
this.num=num;
this.jf=jf;
// TODO Auto-generated constructor stub
}


     4.在监听器中可以通过构造方法把要用到的参数传到监听器类中;然后实现上下左右键的操作算法;

这是左键操作的方法:先向左移动一次数字,然后判断是否有相同的数字可以合并,最后在判断能否左移;

switch(e.getKeyCode()){
case 37: //按左方向键
    //System.out.println("左键");
   //移动数字
    for(int i=0;i<4;i++){
       for(int j=0;j<4;j++){
           if(num[i][j]!=0){
     int c=i-1;
                  //System.out.println("r="+r);
              while(c>-1&&num[c][j]==0){
  num[c][j]=num[i][j];
  num[i][j]=0;
  c--;
  count++;
    }    
}
          }
             }
    //合并数字
     for(int i=0;i<4;i++){
    for(int j=0;j<4;j++){
if(i+1<4&&num[i][j]==num[i+1][j]){
    num[i][j]=num[i][j]+num[i+1][j];
    num[i+1][j]=0;
             count++;
             Score=Score+num[i][j]+num[i+1][j];
             jf.setText(""+Score);
          }

     }    
     }
     //移动数字
          for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(num[i][j]!=0){
int c=i-1;
//System.out.println("r="+r);
while(c>=0&&num[c][j]==0){
    num[c][j]=num[i][j];
    num[i][j]=0;
    c--;
             count++;
}    
     }
          }
       }
      break;

      其他键的实现也是用 移动-合并-移动 的方法,就不一一枚举拉 


     5.最后可以设定分数以及输赢判断等细节。
  
     该游戏是通过是否出现数字2048为判断标准的,遍历判断一下即可;
     至于分数,在上一步中每次合并时累加上即可。


哈哈,2048_1.0版本基本已经成型啦,试着运行一下吧~


  • 大小: 470.7 KB
分享到:
评论

相关推荐

    Java版2048小游戏.zip

    Java版2048小游戏.zipJava版2048小游戏.zipJava版2048小游戏.zipJava版2048小游戏.zip Java版2048小游戏.zipJava版2048小游戏.zipJava版2048小游戏.zipJava版2048小游戏.zip Java版2048小游戏.zipJava版2048小游戏....

    java版2048小游戏

    java编写的2048小游戏,下载导入项目即可运行,版权所有,,禁止模仿

    java小游戏 2048

    java小游戏 2048java小游戏 2048java小游戏 2048java小游戏 2048java小游戏 2048java小游戏 2048java小游戏 2048java小游戏 2048java小游戏 2048java小游戏 2048java小游戏 2048java小游戏 2048java小游戏 2048java...

    用java实现2048小游戏的实验报告

    用java实现2048小游戏的实验报告,内容齐全可用于期末大作业 用java实现2048小游戏的实验报告,内容齐全可用于期末大作业

    2048小游戏的JAVA实现.zip

    2048小游戏的JAVA实现2048小游戏的JAVA实现2048小游戏的JAVA实现2048小游戏的JAVA实现2048小游戏的JAVA实现2048小游戏的JAVA实现2048小游戏的JAVA实现2048小游戏的JAVA实现2048小游戏的JAVA实现2048小游戏的JAVA实现...

    Java实现的2048小游戏.zip

    Java实现的2048小游戏.zipJava实现的2048小游戏.zipJava实现的2048小游戏.zip Java实现的2048小游戏.zipJava实现的2048小游戏.zipJava实现的2048小游戏.zip Java实现的2048小游戏.zipJava实现的2048小游戏.zipJava...

    java开发2048小游戏

    java开发2048小游戏简单代码

    2048小游戏源码(java)

    2048小游戏,java编写,作为课程设计的,答辩完了就开源了 2048小游戏,java编写,作为课程设计的,答辩完了就开源了

    java制作2048小游戏源码.rar

    用java的swing写的一个2048小游戏,适合基础入门

    java课程设计大作业-基于Java构建的的2048小游戏(源码+资源文件)

    java课程设计大作业——基于Java构建的的2048小游戏(源码+资源文件)java课程设计大作业——基于Java构建的的2048小游戏(源码+资源文件)java课程设计大作业——基于Java构建的的2048小游戏(源码+资源文件)java...

    Java 2048 小游戏

    Java 2048 小游戏,界面简单、美观,内含源码、设计文档。

    java编写的2048小游戏及源码

    java编写的GUI编程2048小游戏有源码以及游戏素材可正常运行

    基于java swing的2048小游戏

    基于java swing的2048小游戏,非常好玩~

Global site tag (gtag.js) - Google Analytics