java实现2048小游戏
来源:互联网 发布:淘宝订单同步接口 编辑:程序博客网 时间:2024/05/22 15:09
“package com.lanou.wo;
import java.sql.Array;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
//2048算法类
public class Erlingsiba {
// 2048游戏
// 1,创建地图
int[][] ditu = { { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 } };
int[][] dituh = new int[4][4];
String[][] ditu1 = new String[4][4];
String tr;
Scanner scanner = new Scanner(System.in);
boolean flag = true;
// 数组产生随机数public void sunJi() { while (true) { Random random = new Random(); int a = random.nextInt(10); if (a == 4) { a = 4; } else { a = 2; } int i = random.nextInt(4); int j = random.nextInt(4); if (ditu[i][j] == 0) { ditu[i][j] = a; break; } } for (int i = 0; i < ditu.length; i++) { for (int j = 0; j < ditu[i].length; j++) { ditu1[i][j] = String.valueOf(ditu[i][j]); } }}public void kaishi() { if (flag) { sunJi(); for (int i = 0; i < dituh.length; i++) { for (int j = 0; j < dituh[i].length; j++) { dituh[i][j] = ditu[i][j]; } } } else { System.out.println("没有移动没产生随机数"); }}// 判断是否移动,当前分数 if(flag==false){ return true; } int max = 0; int min = 1; for (int i = 0; i < dituh.length; i++) { for (int j = 0; j < dituh[i].length; j++) { ditu[i][j] = dituh[i][j]; ditu1[i][j] = String.valueOf(ditu[i][j]); if (max < dituh[i][j]) { max = dituh[i][j]; } if (min > dituh[i][j]) { min = dituh[i][j]; } } } tr = String.valueOf(max); return false;}void shang() { // 上移动 for (int i = 0; i < dituh.length; i++) { int f = 0; for (int j = 0; j < dituh[i].length; j++) { if (dituh[j][i] != 0) { f = f + 1; int t = 0; int b = j - 1; while (b >= 0) { if (dituh[b][i] == 0) { dituh[b][i] = dituh[j][i]; dituh[j][i] = 0; j--; b--; } else if (dituh[b][i] == dituh[j][i]) { if (f % 2 == 0) { dituh[b][i] = dituh[j][i] * 2; dituh[j][i] = 0; j--; b--; t++; break; } else { f++; break; } } else { if (f >= 2 && f % 2 == 0 && t == 0) { f++; } break; } } } } }} // 下移动void xia() { for (int i = 0; i < dituh.length; i++) { int f = 0; for (int j = 3; j >= 0; j--) { if (dituh[j][i] != 0) { int b = j + 1; f++; int t = 0; while (b < dituh.length) { if (dituh[b][i] == 0) { dituh[b][i] = dituh[j][i]; dituh[j][i] = 0; j++; b++; } else if (dituh[b][i] == dituh[j][i]) { if (f % 2 == 0) { dituh[b][i] = dituh[j][i] * 2; dituh[j][i] = 0; t++; j++; b++; break; } else { f++; break; } } else { if (f >= 2 && f % 2 == 0 && t == 0) { f++; } break; } } } } }}void zuo() { for (int i = 0; i < dituh.length; i++) { int f = 0; for (int j = 0; j < dituh[i].length; j++) { if (dituh[i][j] != 0) { f++; int t = 0; int b = j - 1; while (b >= 0) { if (dituh[i][b] == 0) { dituh[i][b] = dituh[i][j]; dituh[i][j] = 0; j--; b--; } else if (dituh[i][b] == dituh[i][j]) { if (f % 2 == 0) { dituh[i][b] = dituh[i][j] * 2; dituh[i][j] = 0; t++; j--; b--; break; } else { f++; break; } } else { if (f >= 2 && f % 2 == 0 && t == 0) { f++; } break; } } } } }}// 右移动void you() { for (int i = 0; i < dituh.length; i++) { int f = 0; for (int j = 3; j >= 0; j--) { if (dituh[i][j] != 0) { f++; int t = 0; int b = j + 1; while (b < dituh[i].length) { if (dituh[i][b] == 0) { dituh[i][b] = dituh[i][j]; dituh[i][j] = 0; j++; b++; } else if (dituh[i][b] == dituh[i][j]) { if (f % 2 == 0) { dituh[i][b] = dituh[i][j] * 2; dituh[i][j] = 0; t++; j++; b++; break; } else { f++; break; } } else { if (f >= 2 && f % 2 == 0 && t == 0) { f++; } break; } } } } }}
}
package com.lanou.wo;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.Panel;
import java.awt.RenderingHints.Key;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.util.Random;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import org.omg.CORBA.BooleanHolder;
import org.omg.CORBA.portable.BoxedValueHelper;
//2048JFrame布局类
public class TextMian extends JFrame {
Erlingsiba en = new Erlingsiba();
JLabel jl1 = new JLabel("");JLabel jl2 = new JLabel("");JLabel jl3 = new JLabel("");JLabel jl4 = new JLabel("");JLabel jl5 = new JLabel("");JLabel jl6 = new JLabel("");JLabel jl7 = new JLabel("");JLabel jl8 = new JLabel("");JLabel jl9 = new JLabel("");JLabel jl10 = new JLabel("");JLabel jl12 = new JLabel("");JLabel jl13 = new JLabel("");JLabel jl14 = new JLabel("");JLabel jl15 = new JLabel("");JLabel jl16 = new JLabel("");JLabel jl11 = new JLabel("");// 用JLabel标签来代表每个数字的块空间JLabel[][] jl = { { jl1, jl2, jl3, jl4 }, { jl5, jl6, jl7, jl8 }, { jl9, jl10, jl11, jl12 }, { jl13, jl14, jl15, jl16 } };JPanel w = new JPanel();JPanel p = new JPanel();Box box1 = Box.createVerticalBox();Box box2 = Box.createVerticalBox();JLabel fen = new JLabel("当前得分");JLabel fen1 = new JLabel("0");JLabel bu = new JLabel("当前步数");JLabel bu1 = new JLabel("0");int bushu = 0;String str;private void init() { fen.setFont(new Font("微软雅黑", 1, 30)); fen.setForeground(Color.YELLOW); fen1.setFont(new Font("微软雅黑", 1, 30)); fen1.setForeground(Color.YELLOW); fen1.setSize(60, 30); bu.setFont(new Font("微软雅黑", 1, 30)); bu.setForeground(Color.yellow); bu1.setFont(new Font("微软雅黑", 1, 30)); bu1.setForeground(Color.yellow); box1.add(fen); box1.add(fen1); box2.add(bu); box2.add(bu1); w.add(box1); w.add(box2);}public void jlzu() { p.setLayout(new GridLayout(4, 4, 5, 5)); // 给标签里加数字 for (int i = 0; i < jl.length; i++) { for (int j = 0; j < jl[i].length; j++) { if (en.ditu1[i][j].equals("0")) { jl[i][j].setText(""); } else { jl[i][j].setText(en.ditu1[i][j]); } String str = jl[i][j].getText(); // 数字根据位数来改变数字的大小 if (str.length() == 1) { jl[i][j].setFont(new Font("微软雅黑", 1, 50)); } else if (str.length() == 2) { jl[i][j].setFont(new Font("微软雅黑", 1, 35)); } else if (str.length() == 3) { jl[i][j].setFont(new Font("微软雅黑", 1, 25)); } else if (str.length() == 4) { jl[i][j].setFont(new Font("微软雅黑", 1, 18)); } jl[i][j].setBackground(Color.getHSBColor(204, 192, 170)); // Font("字体",0正常1代表粗体,字的大小); jl[i][j].setForeground(Color.blue);// 字体颜色 jl[i][j].setHorizontalAlignment(SwingConstants.CENTER);// 字体居中 jl[i][j].setOpaque(true);// 显现颜色 p.add(jl[i][j]); } }}//判断是否结束public void gameOver() { boolean flag = true; for (int i = 0; i < jl.length; i++) { for (int j = 0; j < jl[i].length; j++) { if (jl[i][j].getText().equals("")) { flag = false; } if(i==0&&j>0&&j<jl[i].length-1){ if(jl[i][j].getText().equals(jl[i+1][j].getText())||jl[i][j].getText().equals(jl[i][j+1].getText())||jl[i][j].getText().equals(jl[i][j-1].getText())){ flag=false; } }else if(i== jl.length-1&&j>0&&j<jl[i].length-1){ if(jl[i][j].getText().equals(jl[i-1][j].getText())||jl[i][j].getText().equals(jl[i][j+1].getText())||jl[i][j].getText().equals(jl[i][j-1].getText())){ flag=false; } }else if(j== 0&&i>0&&i<jl.length-1){ if(jl[i][j].getText().equals(jl[i][j+1].getText())||jl[i][j].getText().equals(jl[i+1][j].getText())||jl[i][j].getText().equals(jl[i-1][j].getText())){ flag=false; } }else if(j==jl[i].length-1 &&i>0&&i<jl.length-1){ if(jl[i][j].getText().equals(jl[i][j-1].getText())||jl[i][j].getText().equals(jl[i+1][j].getText())||jl[i][j].getText().equals(jl[i-1][j].getText())){ flag=false; } }else if(i>0&&i<jl.length-1&&j<0&&j<jl[i].length-1){ if(jl[i][j].getText().equals(jl[i][j-1].getText())||jl[i][j].getText().equals(jl[i][j+1].getText())||jl[i][j].getText().equals(jl[i+1][j].getText())||jl[i][j].getText().equals(jl[i-1][j].getText())){ flag=false; } } } } if (flag) { JOptionPane.showMessageDialog(null, "游戏结束,点击确认重新开始"); // 重新开始,就是将地图数字全部变为0重新生成随机数 for (int i = 0; i < en.ditu.length; i++) { for (int j = 0; j < en.ditu[i].length; j++) { en.ditu[i][j] = 0; en.ditu1[i][j] = "0"; } } en.sunJi(); en.kaishi(); jlzu(); bushu = 0; en.tr = "0"; bu1.setText(str); fen1.setText(en.tr); str = String.valueOf(bushu); bu1.setText(str); }}public TextMian() { super("2048"); en.sunJi(); en.kaishi(); jlzu(); p.addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { // 按键操作 进行上下左右来改变数字 switch (e.getKeyCode()) { case KeyEvent.VK_UP: en.shang(); break; case KeyEvent.VK_DOWN: en.xia(); break; case KeyEvent.VK_LEFT: en.zuo(); break; case KeyEvent.VK_RIGHT: en.you(); break; default: break; } if(en.yihou()){ bushu--; } en.kaishi(); fen1.setText(en.tr); bushu++; str = String.valueOf(bushu); bu1.setText(str); jlzu(); if(en.tr.equals("2048")){ JOptionPane.showMessageDialog(null, "恭喜你玩到了2048,继续加油"); } gameOver(); } }); p.setFocusable(true); this.setSize(400, 600); this.setLocation(200, 200); init(); p.setPreferredSize(new Dimension(360, 360));// 确定JOanel容器的大小 p.setBackground(Color.getHSBColor(187, 173, 160)); p.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));// 添加边框 p.setOpaque(true); w.setPreferredSize(new Dimension(200, 200)); w.setBackground(Color.BLUE); w.setOpaque(true); this.add(w, BorderLayout.NORTH);// 给JFrame添加容器w,在布局 this.add(p, BorderLayout.SOUTH); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void main(String[] args) { new TextMian();}
}
`
- java小游戏2048实现
- java实现2048小游戏
- java实现2048小游戏
- QT实现2048小游戏
- 2048小游戏c++实现
- LabVIEW实现2048小游戏
- pygame实现2048小游戏
- js实现2048小游戏
- Python实现小游戏--2048
- javascript实现2048小游戏
- js实现2048小游戏
- Java ,实现贪吃蛇小游戏
- Java程序实现五子棋小游戏
- java实现贪吃蛇小游戏
- 使用Java实现小游戏:俄罗斯方块
- 《Java小游戏实现》:坦克大战
- 《Java小游戏实现》:贪吃蛇
- Java实现推箱子小游戏
- 201703-1CSP-分蛋糕
- 第一篇博客
- centos7 FTP服务器
- RxJava之五
- RxJava完结版
- java实现2048小游戏
- 用sublime text3编写的html网页用浏览器打开出现中文乱码的原理及解决方法
- Linux compile opencv cuda program ----simple example.
- SpringCloud(第 002 篇)简单电影微服务类(消费方,而提供方为用户微服务)
- 洛谷 P1021 邮票面值设计-简单搜索+dp
- ssh框架 Struts2
- 【算法题】最小生成树
- 1295:调和级数
- Effective Java中文第二章第7节(个人渣翻)