java2048_java之2048

今天好热热热热热热热热热 ㄟ(≧◇≦)ㄏ ,所以吃块西瓜就开始玩2048吧~

一.先确定这个2048有哪些功能

初始出现2个数字和方块

移动方块

方块中的数字相加

仅出现1个相加后的数字和方块

记录最大数字

随机出现数字和方块

游戏结束

排行榜

重新开始

游戏存档

二.界面的实现

以画图的方式来实现2048游戏主界面。

☆窗体实现

☆游戏界面实现

Graphics的绘图方法

☆基本功能实现

三.实现2048游戏需要使用那些API类呢

JFrame

MouseListener

MouseEvent

KeyListener

KeyEvent

Graphics

Color

二维数组

四.功能实现

☆用字节流来做游戏存档和排行榜

1。Java的字节流

输入流:将数据输入到程序(内存)

输出流:将程序(内存)中的数据输出到外部设备上。

2。Java字节流的使用

InputStream 输入流

FileInputStream 字节输入流

read() 一次只能读取一个字节

read(byte[] b) 每一次读取一字节存入到数组中,直到读满整个数组

read(byte[] b,int off,int length) 每一次读取一字节存入到数组中,off表示是从数组的off 位置开始,length表示要读取多少个字节

available() 获取当前文件中还可以读取的字节数

close() 关闭流

OutputStream 输出流

FileOutputStream 字节输出流

write() 每一次只能写一个字节

write(byte[] b) 每一次只能写一个字节,会把数组中的数据一个一个的写入

write(byte[] b,int off,int length)

flush() 强制写入(清空缓冲区)

close() 关闭流

使用FileInputStream来读取文件中的数据

使用FileOutputStream将数据写入到另一个文件中

☆数字移动

KeyListener(KeyAdapter)

五.下面出代码哈

package SummerCamp8;

import static SummerCamp8.GameConfig.height;

import static SummerCamp8.GameConfig.x;

import static SummerCamp8.GameConfig.y;

import java.awt.Color;

import java.awt.Dimension;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.Image;

import java.awt.RenderingHints;

import java.util.Random;

import javax.swing.JFrame;

/**

* 定义一个Game2048类

*

* @author 依米

*

*/

public class Game2048 extends JFrame implements GameConfig {

/**

* 定义2048入口函数

*

* @param args

*/

public static void main(String[] args) {

Game2048 game = new Game2048();

game.InitUI();

}

private Dimension dim;

private int[][] array;

/**

* 定义界面初始化

*/

public void InitUI() {

array = new int[4][4];

GameSave gs = new GameSave();

int[][] tempArray = gs.openInfo();

if (tempArray == null) {

randDate();

} else {

array = tempArray;

}

dim = new Dimension(540, 700);

this.setTitle("2048");

this.setSize(dim);

this.setDefaultCloseOperation(3);

this.setLocationRelativeTo(null);

this.setVisible(true);

this.requestFocus();

GameListener gl = new GameListener(array, this);

this.addKeyListener(gl);

this.addMouseListener(gl);

this.addMouseMotionListener(gl);

}

/**

* 重写JFrame组件的绘制方法

*

* @param g是画笔

*/

public void paint(Graphics g) {

super.paint(g);

Graphics2D g2d = (Graphics2D) g;

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON);// 开启画笔抗锯齿

draw2048UI(g);

}

/**

* 随机生成2048游戏界面的初始数据

*/

public void randDate() {

Random rand = new Random();

int r1, c1;

r1 = rand.nextInt(array.length);//第一块方块的初始位置

c1 = rand.nextInt(array[r1].length);

int r2, c2;

do {

r2 = rand.nextInt(array.length);//第二块方块的初始位置

c2 = rand.nextInt(array[r1].length);

} while (r1 == r2 && c1 == c2);

array[r1][c1] = (rand.nextInt(2) + 1) * 2;//初始生成两个数字

array[r2][c2] = (rand.nextInt(2) + 1) * 2;

}

private Image img;//所有组件画在图片上,缓冲

private Graphics2D ig;

/**

* 绘制游戏界面的方法

*

* @param g

*/

public void draw2048UI(Graphics g) {

img = this.createImage(this.getWidth(), this.getHeight());

ig = (Graphics2D) img.getGraphics();

ig.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON);

ig.setColor(new Color(250, 250, 210));// 画笔颜色

ig.fillRoundRect(x, y, x + (dis + size) * 4, y + (dis + size) * 4, arcW,

arcH);// 游戏背景

ig.setColor(new Color(238, 232, 170));// 238, 232, 170

for (int r = 0; r < array.length; r++)

for (int c = 0; c < array[r].length; c++) {

ig.fillRect(x + dis + (size + dis) * c, y + dis + (size + dis)

* r, size, size);

}

ig.setColor(new Color(218, 165, 32));// 设置画笔颜色

// 根据数组中的数据来绘制初始时数据情况

for (int r = 0; r < array.length; r++) {

for (int c = 0; c < array[r].length; c++) {

if (array[r][c] != 0) {

switch (array[r][c]) {

case 2:

ig.setColor(new Color(255, 250, 205));

break;

case 4:

ig.setColor(new Color(245, 222, 179));// 240, 230, 140

break;

case 8:

ig.setColor(new Color(240, 230, 140));

break;

case 16:

ig.setColor(new Color(238, 200, 120));

break;

case 32:

ig.setColor(new Color(245, 190, 20));

break;

case 64:

ig.setColor(new Color(218, 165, 32));// 245, 222, 179

break;

case 128:

ig.setColor(new Color(255, 165, 0));

break;

case 256:

ig.setColor(new Color(255, 140, 0));

break;

case 512:

ig.setColor(new Color(205, 133, 63));

break;

case 1024:

ig.setColor(new Color(210, 105, 30));

break;

case 2048:

ig.setColor(new Color(255, 69, 0));

break;

}

ig.fillRect(x + dis + (size + dis) * c, y + dis

+ (size + dis) * r, size, size);

ig.setColor(new Color(85, 107, 100));

ig.setFont(new Font("微软雅黑", Font.BOLD, 30));

ig.drawString("" + array[r][c], x + dis + 40 + (size + dis)

* c, y + dis + 60 + (size + dis) * r);

}

}

}

ig.setColor(Color.black);

ig.fillRoundRect(x + 10, y + dis + height, 150, 50, 20, 20);

ig.fillRoundRect(x + dis + 155, y + dis + height, 150, 50, 20, 20);

ig.fillRoundRect(x + 2 * dis + 2 * 150, y + dis + height, 150, 50, 20,

20);

ig.setFont(new Font("MV Boli", Font.BOLD, 20));

ig.setColor(Color.white);

ig.drawString("New Game", x + dis + 10, y + (int) (dis * 2.5) + height);

ig.drawString("Rank", x + 3 * dis + 162, y + (int) (dis * 2.5) + height);

ig.drawString("Save", x + (int) (3.7 * dis + 2 * 150 + 15), y

+ (int) (dis * 2.5) + height);

g.drawImage(img, 0, 0, this);

}

}

package SummerCamp8;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.RenderingHints;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.MouseMotionListener;

import java.util.ArrayList;

import java.util.Random;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JOptionPane;

public class GameListener extends KeyAdapter implements MouseListener,

MouseMotionListener, GameConfig {

private int[][] array;// 声明数组名属性

private Game2048 game;// 声明窗体对象名属性

/**

* 构造方法

*

* @param array是从Game2048类中传递过来的数组对象

* @param game是从Game2048类中传递过来的窗体对象

*/

public GameListener(int[][] array, Game2048 game) {

this.array = array;

this.game = game;

}

/**

* 随机生成游戏界面上的一个数据的方法

*/

public void rData() {

Random rand = new Random();

int r, c;

do {

r = rand.nextInt(array.length);

c = rand.nextInt(array[r].length);

} while (array[r][c] != 0);

array[r][c] = (rand.nextInt(2) + 1) * 2;

}

/**

* 当你发生键盘按键按下时执行此方法

*/

public void keyPressed(KeyEvent e) {

int number = 0;

int code = e.getKeyCode();// 只能用这个获取功能键

switch (code) {

case 37:// 向左

// 相邻数字相加

for (int r = 0; r < array.length; r++)

for (int c = 0; c < array[r].length; c++)

if (array[r][c] != 0)

for (int c1 = c + 1; c1 < array[r].length; c1++)

if (array[r][c] == array[r][c1]) {

array[r][c] *= 2;// 相加后只保留一个相加后的数字

array[r][c1] = 0;// 令另一个数为0

number++;

break;

} else if (array[r][c1] != 0) {// 不能隔着不为0

// 的数字移动并和下一个相加

break;

}

// 仅在为0 的格子上移动

for (int r = 0; r < array.length; r++)

for (int c = 0; c < array[r].length; c++)

if (array[r][c] == 0) {

for (int c1 = c + 1; c1 < array[r].length; c1++) {

if (array[r][c1] != 0) {

array[r][c] = array[r][c1];// 两格子交换数字,实现移动

array[r][c1] = 0;

number++;

break;

}

}

}

break;

case 38:// 向上

for (int c = 0; c < array[0].length; c++)

for (int r = 0; r < array.length; r++)

if (array[r][c] != 0)

for (int r1 = r + 1; r1 < array.length; r1++)

if (array[r1][c] == array[r][c]) {

array[r][c] *= 2;

array[r1][c] = 0;

number++;

break;

} else if (array[r1][c] != 0)

break;

for (int c = 0; c < array[0].length; c++)

for (int r = 0; r < array.length; r++)

if (array[r][c] == 0) {

for (int r1 = r + 1; r1 < array.length; r1++) {

if (array[r1][c] != 0) {

array[r][c] = array[r1][c];

array[r1][c] = 0;

number++;

break;

}

}

}

break;

case 39:// 向右

// 相加

for (int r = 0; r < array.length; r++)

for (int c = array[r].length - 1; c >= 0; c--)

if (array[r][c] != 0)

for (int c1 = c - 1; c1 >= 0; c1--)

if (array[r][c] == array[r][c1]) {

array[r][c] *= 2;

array[r][c1] = 0;

number++;

break;

} else if (array[r][c1] != 0) {

break;

}

for (int r = 0; r < array.length; r++)

for (int c = array[r].length - 1; c >= 0; c--)

if (array[r][c] == 0) {

for (int c1 = c - 1; c1 >= 0; c1--) {

if (array[r][c1] != 0) {

array[r][c] = array[r][c1];

array[r][c1] = 0;

number++;

break;

}

}

}

break;

case 40:// 向下

for (int c = 0; c < array[0].length; c++)

for (int r = array.length - 1; r >= 0; r--)

if (array[r][c] != 0)

for (int r1 = r - 1; r1 >= 0; r1--)

if (array[r1][c] == array[r][c]) {

array[r][c] *= 2;

array[r1][c] = 0;

number++;

break;

} else if (array[r1][c] != 0)

break;

for (int c = 0; c < array[0].length; c++)

for (int r = array.length - 1; r >= 0; r--)

if (array[r][c] == 0) {

for (int r1 = r - 1; r1 >= 0; r1--) {

if (array[r1][c] != 0) {

array[r][c] = array[r1][c];

array[r1][c] = 0;

number++;

break;

}

}

}

break;

}

if (number > 0) {

rData();// 调用随机生成一个数据的方法

game.repaint();// 调用窗体的重绘方法

} else {

// System.out.println("~~~~~~~~~~" + number);// 检查number

int count = 0;

// 检测是否还可以移动

int max = array[0][0];

for (int r = 0; r < array.length; r++) {

for (int c = 0; c < array[r].length; c++) {

if (array[r][c] != 0) {

if (c + 1 < array[r].length

&& array[r][c + 1] == array[r][c]) {// 列

count++;

// System.out.println("~~~~~~~~~~~1" + count);//

// 检查count

}

if (r + 1 < array.length

&& array[r + 1][c] == array[r][c]) {// 行

count++;

// System.out.println("~~~~~~~~~~~2" + count);

}

} else {

count++;

}

if (array[r][c] > max)

max = array[r][c];

}

}

if (count == 0) {

// 不可以移动了

Graphics g = game.getGraphics();// 获取窗体上的画笔对象

Graphics2D g2d = (Graphics2D) g;

g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,

RenderingHints.VALUE_ANTIALIAS_ON);// 开启画笔抗锯齿

g.setColor(Color.darkGray);

g.setFont(new Font("MV Boli", Font.BOLD, 83));

g.drawString("Game Over!", 20, game.getHeight() / 2 - 40);

game.removeKeyListener(this);

int option = JOptionPane.showConfirmDialog(game, "Record?",

"RankingList", JOptionPane.YES_NO_OPTION);

if (option == 0) {

String name = JOptionPane.showInputDialog(game, "User:",

"RankingList", JOptionPane.YES_NO_OPTION);

User user = new User(name, max);

GameSave gs = new GameSave();

boolean b = gs.saveRankingList(user);

if (b) {

JOptionPane.showMessageDialog(game, "排行榜信息存储成功!");

} else {

JOptionPane.showMessageDialog(game, "排行榜信息存储失败!");

}

}

}

}

}

/**

* Invoked when the mouse button has been clicked (pressed and released) on

* a component.

*/

public void mouseClicked(MouseEvent e) {

}

public void mousePressed(MouseEvent e) {

int mx = e.getX();

int my = e.getY();

Graphics2D ig = (Graphics2D) game.getGraphics();

// 开始游戏按钮 x, y + distance + height, 150, 50

if (mx > (x + 10) && mx < (x + 160) && my > y + dis + height

&& my < y + dis + height + 50) {// 表示点击的是开始游戏按钮

ig.setColor(Color.LIGHT_GRAY);

ig.fillRoundRect(x + 10, y + dis + height, 150, 50, 20, 20);

ig.setFont(new Font("MV Boli", Font.BOLD, 20));

ig.setColor(Color.white);

ig.drawString("New Game", x + dis + 10, y + (int) (dis * 2.5)

+ height);

}

// 排行榜按钮 x + distance + 150, y + distance + height, 150, 50

if (mx > x + dis + 155 && mx < x + dis + 155 + 150

&& my > y + dis + height && my < y + dis + height + 50) {// 表示进入是排行榜按钮

ig.setColor(Color.LIGHT_GRAY);

ig.fillRoundRect(x + dis + 155, y + dis + height, 150, 50, 20, 20);

ig.setFont(new Font("MV Boli", Font.BOLD, 20));

ig.setColor(Color.white);

ig.drawString("Rank", x + 3 * dis + 162, y + (int) (dis * 2.5)

+ height);

// System.out.println("进入排行榜按钮");

}

// 游戏存档按钮x + 2 * distance + 2 * 150, y + distance + height,150, 50

if (mx > x + 2 * dis + 2 * 150 && mx < x + 2 * dis + 2 * 150 + 150

&& my > y + dis + height && my < y + dis + height + 50) {// 表示进入游戏存档按钮

ig.setColor(Color.LIGHT_GRAY);

ig.fillRoundRect(x + 2 * dis + 300, y + dis + height, 150, 50, 20,

20);

// System.out.println("进入游戏存档按钮");

ig.setFont(new Font("MV Boli", Font.BOLD, 20));

ig.setColor(Color.white);

ig.drawString("Save", x + (int) (3.7 * dis + 315), y

+ (int) (dis * 2.5) + height);

}

}

public void mouseReleased(MouseEvent e) {

int mx = e.getX();

int my = e.getY();

Graphics2D ig = (Graphics2D) game.getGraphics();

// 开始游戏按钮 x, y + distance + height, 150, 50

if (mx > (x + 10) && mx < (x + 160) && my > y + dis + height

&& my < y + dis + height + 50) {// 表示点击的是开始游戏按钮

int option = JOptionPane.showConfirmDialog(game,

"Start a new game ~(*0*~)?", "new game",

JOptionPane.YES_NO_OPTION);

if (option == 0) {

for (int i = 0; i < 4; i++)

for (int j = 0; j < 4; j++)

array[i][j] = 0;// 清空数据

Random rand = new Random();// 初始数据

int r1, c1;

r1 = rand.nextInt(array.length);

c1 = rand.nextInt(array[r1].length);

int r2, c2;//

do {

r2 = rand.nextInt(array.length);

c2 = rand.nextInt(array[r1].length);

} while (r1 == r2 && c1 == c2);

array[r1][c1] = (rand.nextInt(2) + 1) * 2;

array[r2][c2] = (rand.nextInt(2) + 1) * 2;

}

game.paint(game.getGraphics());

// 给事件源对象重新添加监听

game.addKeyListener(this);

}

// 排行榜按钮 x + distance + 150, y + distance + height, 150, 50

if (mx > x + dis + 155 && mx < x + dis + 155 + 150

&& my > y + dis + height && my < y + dis + height + 50) {// 表示点击的是开始游戏按钮

JOptionPane.showMessageDialog(game, "Check the Rank ~>_

GameSave gs = new GameSave();

ArrayList list = gs.openRankingList();

JFrame frame = new JFrame();

frame.setTitle("Ranking");

frame.setSize(300, 700);

frame.setDefaultCloseOperation(2);

frame.setLocationRelativeTo(null);

frame.setLayout(null);

frame.setResizable(false);

JLabel lab = new JLabel("User Max ");

lab.setBounds(30, 60, 400, 60);

frame.add(lab);

for (int i = 0; i < list.size(); i++) {

User user = (User) list.get(i);

JLabel label = new JLabel(user.toString());

label.setBounds(30, 60 + (i + 1) * 50, 400, 60);

frame.add(label);

}

frame.setVisible(true);

}

// 游戏存档按钮x + 2 * distance + 2 * 150, y + distance + height,150, 50

if (mx > x + 2 * dis + 2 * 150 && mx < x + 2 * dis + 2 * 150 + 150

&& my > y + dis + height && my < y + dis + height + 50) {// 表示点击的是开始游戏按钮

GameSave gs = new GameSave();

boolean b = gs.saveInfo(array);

if (b)

JOptionPane.showMessageDialog(game, "Success in Saving ^_^");

else

JOptionPane.showMessageDialog(game, "Failure in Saving ~_~");

}

}

public void mouseEntered(MouseEvent e) {

}

public void mouseExited(MouseEvent e) {

}

public void mouseDragged(MouseEvent e) {

}

/**

* 当鼠标进入按钮的区域时,按钮颜色变化,实则重新画一个除颜色外其他地方都相同的按钮

*/

public void mouseMoved(MouseEvent e) {

int mx = e.getX();

int my = e.getY();

// System.out.println("mx = " + mx + " my = " + my);

Graphics2D ig = (Graphics2D) game.getGraphics();

// 开始游戏按钮 x, y + distance + height, 150, 50

if (mx > (x + 10) && mx < (x + 160) && my > y + dis + height

&& my < y + dis + height + 50) {

// System.out.println("进入开始游戏按钮");// 表示点击的是开始游戏按钮

ig.setColor(Color.GRAY);

ig.fillRoundRect(x + 10, y + dis + height, 150, 50, 20, 20);

ig.setFont(new Font("MV Boli", Font.BOLD, 20));

ig.setColor(Color.white);

ig.drawString("New Game", x + dis + 10, y + (int) (dis * 2.5)

+ height);

} else {

ig.setColor(Color.black);

ig.fillRoundRect(x + 10, y + dis + height, 150, 50, 20, 20);

ig.setFont(new Font("MV Boli", Font.BOLD, 20));

ig.setColor(Color.white);

ig.drawString("New Game", x + dis + 10, y + (int) (dis * 2.5)

+ height);

}

// 排行榜按钮 x + distance + 150, y + distance + height, 150, 50

if (mx > x + dis + 155 && mx < x + dis + 155 + 150

&& my > y + dis + height && my < y + dis + height + 50) {// 表示进入是排行榜按钮

ig.setColor(Color.GRAY);

ig.fillRoundRect(x + dis + 155, y + dis + height, 150, 50, 20, 20);

ig.setFont(new Font("MV Boli", Font.BOLD, 20));

ig.setColor(Color.white);

ig.drawString("Rank", x + 3 * dis + 162, y + (int) (dis * 2.5)

+ height);

// System.out.println("进入排行榜按钮");

} else {

ig.setColor(Color.black);

ig.fillRoundRect(x + dis + 155, y + dis + height, 150, 50, 20, 20);

ig.setFont(new Font("MV Boli", Font.BOLD, 20));

ig.setColor(Color.white);

ig.drawString("Rank", x + 3 * dis + 162, y + (int) (dis * 2.5)

+ height);

}

// 游戏存档按钮x + 2 * distance + 2 * 150, y + distance + height,150, 50

if (mx > x + 2 * dis + 2 * 150 && mx < x + 2 * dis + 2 * 150 + 150

&& my > y + dis + height && my < y + dis + height + 50) {// 表示进入游戏存档按钮

ig.setColor(Color.GRAY);

ig.fillRoundRect(x + 2 * dis + 300, y + dis + height, 150, 50, 20,

20);

// System.out.println("进入游戏存档按钮");

ig.setFont(new Font("MV Boli", Font.BOLD, 20));

ig.setColor(Color.white);

ig.drawString("Save", x + (int) (3.7 * dis + 315), y

+ (int) (dis * 2.5) + height);

} else {

ig.setColor(Color.black);

ig.fillRoundRect(x + 2 * dis + 2 * 150, y + dis + height, 150, 50,

20, 20);

ig.setFont(new Font("MV Boli", Font.BOLD, 20));

ig.setColor(Color.white);

ig.drawString("Save", x + (int) (3.7 * dis + 315), y

+ (int) (dis * 2.5) + height);

}

}

}

package SummerCamp8;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.util.ArrayList;

public class GameSave {

/**

* 游戏信息存档的方法

*

* @param array要存档的数据

*/

public boolean saveInfo(int[][] array) {

try {

// 实例化一个输出流对象

OutputStream os = new FileOutputStream("E:\\机器人\\Yimi.SummerCamp\\src\\SummerCamp8\\saveinfo.txt");

os.write(array.length);// 写入数组的行数

os.write(array[0].length);// 写入数组的列数

// 将数组中的元素写入到文件中

for (int r = 0; r < array.length; r++) {

for (int c = 0; c < array.length; c++) {

os.write(array[r][c]);

}

}

os.close();//关文件

return true;

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return false;

}

/**

* 读取文档中的数据

*

* @return 返回读取到存档信息

*/

@SuppressWarnings("resource")

public int[][] openInfo() {

try {

// 实例化一个输入流对象

InputStream is = new FileInputStream("E:\\机器人\\Yimi.SummerCamp\\src\\SummerCamp8\\saveinfo.txt");

int row = is.read();

int column = is.read();

if (row != -1 && column != -1) {

int[][] array = new int[row][column];

for (int r = 0; r < array.length; r++) {

for (int c = 0; c < array.length; c++) {

array[r][c] = is.read();

}

}

is.close();

return array;

}

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

/**

* 存储游戏排行版信息的方法

*

* @param user用户信息对象

*/

public boolean saveRankingList(User user) {

try {

ArrayList list = openRankingList();

if (list != null) {

list.add(user);// 将新的用户信息(名字,最高分)添加到数组队列中

for (int i = 0; i < list.size() - 1; i++) {

int index = i;

for (int j = i + 1; j < list.size(); j++) {

User use_max = (User) list.get(index);

User use = (User) list.get(j);

if (use_max.getMax() <= use.getMax()) {

index = j;

}

}

if (index != i) {

User use_max = (User) list.get(index);

User use = (User) list.get(i);

list.set(index, use);

list.set(i, use_max);

}

}

} else {

list = new ArrayList();

list.add(user);

}

// 实例化一个输出流对象

OutputStream os = new FileOutputStream("E:\\机器人\\Yimi.SummerCamp\\src\\SummerCamp8\\Rankinglist.txt");

DataOutputStream dos = new DataOutputStream(os);

dos.writeInt(list.size());// 写入信息条数

for (int i = 0; i < list.size(); i++) {

User use = (User) list.get(i);

dos.writeByte(use.getName().getBytes().length);

dos.write(use.getName().getBytes());

dos.writeInt(use.getMax());

}

dos.close();

os.close();

return true;

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return false;

}

/**

* 读取文档中的数据

*

* @return 返回读取到存档信息

*/

public ArrayList openRankingList() {

try {

// 实例化一个输入流对象

InputStream is = new FileInputStream("E:\\机器人\\Yimi.SummerCamp\\src\\SummerCamp8\\Rankinglist.txt");

DataInputStream d = new DataInputStream(is);

// 读取信息的条数

int size = d.readInt();

//System.out.println("===="+size);

// 实例化ArrayList的数组队列对象

ArrayList list = new ArrayList();

if (size != -1) {

for (int i = 0; i < size; i++) {

byte nSize = d.readByte();

byte[] b = new byte[nSize];

is.read(b);

int max = d.readInt();

User use = new User(new String(b), max);

list.add(use);

}

}

d.close();

is.close();

return list;

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

}

package SummerCamp8;

public interface GameConfig {

int x=20;

int y=50;

int size=101;

int arcW=20;

int arcH=20;

int dis=20;

int height=550;

}

package SummerCamp8;

public class User {

private String name;

private int max;

public User() {

}

public User(String name, int max) {

this.name = name;

this.max = max;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getMax() {

return max;

}

public void setMax(int max) {

this.max = max;

}

public String toString() {

return name + " " + max + " " ;

}

}

六.看一下效果哈

abf46946d3a6f00255ec100f7440ca07.pnghttps://www.zhihu.com/video/873653325361483776

51078bb5e64e0897dd1f1c030b012102.pnghttps://www.zhihu.com/video/873653363428966400

19e5dfdd88f247dfb36a0d5cca185015.pnghttps://www.zhihu.com/video/873653397407031296

我自己最多能玩到512,太水了(・・)

差不多就是这样了哈,有机会可以加上支付的功能,等下次我更新哈,么么哒

See u~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值