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 + -
显示快捷键?