rcav.java

来自「使用java 开发的手机小游戏」· Java 代码 · 共 232 行

JAVA
232
字号

import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
import java.io.*;

/*******************************************************************************
 * 使用方法:只需在玩家结束游戏时,调用该类的
 * matches()方法 例matches("xxx",9999);第一个参数为玩家姓名第 二个参数为分数。
 * 其他方法我都已设定好你们不必使用。
 *******************************************************************************/

public class Rcav extends Canvas {

	MenuCanvas BCai;

	Display display;

	private RecordStore rs;//数据库

	String theName[];//存放姓名的数组

	int td[];//存放分数的数组

	Image imgBg;//背景

	Image imgHigh;

	Rcav(MenuCanvas BCai, Display display) {

		this.setFullScreenMode(true);

		this.BCai = BCai;
		this.display = display;

		try {
			imgBg = Image.createImage("/picres/bg_map_blank.png");
			imgHigh = Image.createImage("/picres/score_title.png");
			//打开数据库

		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("pricture problem!");
		}
		//如果数据库无记录则添加五条记录
		try {
			rs = openRSAnyway("gaoofen");
			if (rs.getNumRecords() == 0) {
				add("AAA", 0);
				add("AAA", 0);
				add("AAA", 0);
				add("AAA", 0);
				add("AAA", 0);
			}
		} catch (RecordStoreNotOpenException e1) {
			e1.printStackTrace();
			System.out.println("无记录");
		}
	}

	protected void sound() {
		SoundEffects.getInstance().startHighScoreSound();//高分背景音乐
	}


	public void paint(Graphics g) {
		int y = 80;
		duchu();

		//画背景
		g.drawImage(imgBg, 0, 0, Graphics.TOP | Graphics.LEFT);
		g.drawImage(imgHigh, 20, 40, Graphics.TOP | Graphics.LEFT);

		//画排行榜
		g.setColor(255, 255, 0);
		for (int i = 1; i < 6; i++) {
			g.drawString("" + i, 60, y, Graphics.HCENTER | Graphics.TOP);
			g.drawString("" + td[i], 90, y, Graphics.HCENTER | Graphics.TOP);
			y = y + 18;
		}
	}

	public RecordStore openRSAnyway(String rsname) {
		RecordStore rs = null;
		int ss = 66;
		//	名稱大於32 個字元就不接受
		if (rsname.length() > 32)
			return null;
		try {
			rs = RecordStore.openRecordStore(rsname, true);
			System.out.println(ss);
			return rs;
		} catch (Exception e) {
			return null;
		}
	}

	//
	public boolean add(String playerName, int score) {//在rs中增加一条记录
		boolean ok = false;
		ByteArrayOutputStream bo = new ByteArrayOutputStream();
		DataOutputStream doSteam = new DataOutputStream(bo);
		try {
			doSteam.writeUTF(playerName);
			doSteam.writeInt(score);
			byte data[] = bo.toByteArray();
			rs.addRecord(data, 0, data.length);

			doSteam.close();
			ok = true;
			System.out.println(ok);
		} catch (Exception e) {
			e.printStackTrace();
			ok = false;
		}
		return ok;
	}

	//用本次玩家的分数和rs中的数据作比较,分数高则储存,第一个参数为玩家姓名第二个参数为分数。
	public void matches(String name, int score) {
		int bianhao = 0;
		int xx = 100;//
		duchu();

		try {
			for (int i = 1; i < 6; i++) {
				byte[] data = rs.getRecord(i);
				DataInputStream doSteam = new DataInputStream(
						new ByteArrayInputStream(data));
				System.out.println(doSteam.readUTF());
				if (td[5] == doSteam.readInt()) {
					bianhao = i;
					break;
				}
				doSteam.close();
				System.out.println(xx++);
			}

		} catch (Exception e) {

		}

		if (td[5] < score) {
			System.out.println(bianhao);
			save(name, score, bianhao);
		}

		try {
			rs.closeRecordStore();
		} catch (RecordStoreNotOpenException e1) {
			e1.printStackTrace();
		} catch (RecordStoreException e1) {
			e1.printStackTrace();
		}
	}

	//读出记录并排序
	public void duchu() {

		theName = new String[6];
		td = new int[6];
		try {
			for (int i = 1; i < 6; i++) {
				byte[] data = rs.getRecord(i);
				DataInputStream doSteam = new DataInputStream(
						new ByteArrayInputStream(data));
				theName[i] = doSteam.readUTF();
				td[i] = doSteam.readInt();

			}
			paixu(td, theName);

		} catch (Exception e) {

		}

	}

	//把5条记录排序
	public void paixu(int[] a, String name[]) {
		int b;
		String nameb;
		for (int j = 1; j < 6; j++) {
			for (int i = 1; i < 5; i++) {

				if (a[i] < a[i + 1]) {
					b = a[i];
					a[i] = a[i + 1];
					a[i + 1] = b;

					//
					nameb = name[i];
					name[i] = name[i + 1];
					name[i + 1] = nameb;
				}
			}
		}

	}

	//存储数据
	public boolean save(String playerName, int score, int bianhao) {//在rs中保存本次数据
		boolean ok = false;
		ByteArrayOutputStream bo = new ByteArrayOutputStream();
		DataOutputStream doSteam = new DataOutputStream(bo);
		try {
			doSteam.writeUTF(playerName);
			doSteam.writeInt(score);
			byte data[] = bo.toByteArray();
			rs.setRecord(bianhao, data, 0, data.length);
			doSteam.close();
			ok = true;
		} catch (Exception e) {
			ok = false;

			e.printStackTrace();
		}
		return ok;
	}

	public void keyPressed(int keyCode) {
		if (keyCode == -6) {
			BCai.PT = 1;
			if(!BCai.fd)
			    BCai.menuY=74;
			else
			    BCai.menuY = 59;
			display.setCurrent(BCai);
			BCai.repaint();
		}

	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?