📄 snake.java
字号:
import javax.microedition.lcdui.Graphics;
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreNotFoundException;
public class Snake
{
public static final int V = 6 ;
private int[][] snake ;
public byte m ;
private int l ;
public boolean ok ; // 是否执行完一次主循环
public Snake(int max)
{
snake = new int[max][2] ;
init() ;
}
public void init()
{
l = 5 ;
for(int i = 0 ; i < l ; i++)
{
snake[i][0] = 120 ;
snake[i][1] = 160 ;
}
m = 1 ;
}
public void render(Graphics g)
{
g.setColor(0x425A8B) ;
for(int i = 0 ; i < l ; i++)
{
g.fillArc(snake[i][0] , snake[i][1] , V , V , 0 , 360) ;
}
}
public void upData(Point p , MC mc)
{
if(p.isHit(snake[0][0] , snake[0][1]) == true) // 检测碰撞点
{
l++ ;
mc.score += 10 ;
p.reset(this) ;
}
for(int i = l-1 ; i > 0 ; i--) // 身体的移动
{
snake[i][0] = snake[i-1][0] ;
snake[i][1] = snake[i-1][1] ;
}
switch(m)
{
case 1 :
snake[0][1] -= V ;
break ;
case 2 :
snake[0][0] -= V ;
break ;
case 3 :
snake[0][1] += V ;
break ;
case 4 :
snake[0][0] += V ;
break ;
}
if(isHit(snake[0][0] , snake[0][1]) == true || // 检测死亡
snake[0][0] < 0 || snake[0][0] > 240 - V ||
snake[0][1] < 0 || snake[0][1] > 310 - V)
{
save(mc) ;
mc.canvasIndex = 21 ;
}
ok = true ;
}
public void save(MC mc) // RMS 记录存储
{
byte[] data ;
try { //读取已存纪录
RecordStore rs=RecordStore.openRecordStore("jj",true);//打开仓库
if(rs.getNextRecordID()==1) // 判断目前记录长度。
// 因为记录是从一开始记数的,
// 所以如果当前记录是一说明目前记录仓库是空的
{
for(int j=0;j<mc.result.length;j++) // 若是空的 先默认想排行数组中都存0
{
mc.result[j]=0;
}
}
else // 否则 依次从记录仓库中读出所有的排行信息。
{
for(int j=0;j<mc.result.length;j++)
{
data=rs.getRecord(j+1); // 读出记录仓库中的第j+1条记录,读出的是一个byte[] 数组
mc.result[j]=Tools.toInt(data); // 利用自己写的转换方法,把读出的数组转换成int整数,放在排行数组中
}
}
for(int j=0;j<mc.result.length;j++)//与纪录比较并更新纪录
{
if(mc.score>mc.result[j])// 若目前的分数大于记录中的分数
{
for(int l=mc.result.length -1 ;l>j;l--) // 之后的分数向后移动,
{
mc.result[l]=mc.result[l-1];
}
mc.result[j]=mc.score; // 把当前分数插在排行数组中
break;
}
}
// 存入更新后的纪录
if(rs.getNextRecordID()==1) // 若当前数据仓库是空的
{
for(int j=0;j<10;j++)
{
data=Tools.toByte(mc.result[j]); // 利用自己写的方法 把int整数转换成byte[]数组
rs.addRecord(data,0,data.length); // 把转换后的数组依次存放在仓库中,存放的序号会自动向后移
// 参数分别是 : 要存储的buye[]数组 , 存储的启始位置 , 存储的长度
}
}
else // 否则说明记录仓库中已经存储了之前的排行信息
{
for(int j=0;j<10;j++)
{
data=Tools.toByte(mc.result[j]); // 利用自己写的方法 把int整数转换成byte[]数组
rs.setRecord(j+1,data,0,data.length); //用转换后的数组替换之前的信息
// 参数分别是 : 要替换的位置序号 , 要存储的buye[]数组 , 存储的启始位置 , 存储的长度
}
}
rs.closeRecordStore();//关闭仓库
} catch (RecordStoreFullException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (RecordStoreNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
} catch (RecordStoreException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
public boolean isHit(int _x , int _y)
{
for(int i = 1 ; i < l ; i++)
{
if(Math.abs(snake[i][0] - _x) < V &&
Math.abs(snake[i][1] - _y) < V)
{
return true ;
}
}
return false ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -