beginning
这学期的JAVA智能卡课期末作业居然是叫我们自己做一个能自动扫雷的AI程序,OMG,上网搜了一下,其实网上java的智能卡代码挺多的,但是我们毕竟是智能卡,还是有一点点不一样的,所以把代码在这里码出来。
设计需求分析
老师给的棋盘还是非常简单的,大概相当于系统游戏中的初级难度,所以也不需要网上的那些高级策略,所以只采用了最基本的两条策略。
APDU指令表
完整代码
/**
*
*/
package minesweep;
import javacard.framework.Applet;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
import javacard.framework.APDU;
import javacard.framework.Util;
/**
* @author Administrator
*
*/
public class SweepAI extends Applet {
byte [] checkerboard=new byte[128];
byte [] out=new byte[4];
byte [] studentID={
32,30,31,36,32,31,31,30,30,32};
byte [] name={
0x06,(byte) 0xD5,(byte) 0xC5,(byte) 0xD0,(byte) 0xA3,(byte) 0xD3,(byte) 0xEF};
short Sidelength,bufr,mineset;
short location=0,dark=0,flag=0,allflag=0,CF=1;
short locationX=1,locationY=1;
short maxsize;
public class Stack {
protected short MAX_DEPTH = 8;
protected short depth = 0;
protected byte[] stack = new byte[MAX_DEPTH];
protected void push(short n) {
stack[depth++] = (byte) n;}
protected short pop() {
return stack[--depth];}
}
Stack fstack=new Stack();
Stack ostack=new Stack();
Stack rstack=new Stack();
public static void install(byte[] bArray, short bOffset, byte bLength) {
// GP-compliant JavaCard applet registration
new SweepAI().register(bArray, (short) (bOffset + 1), bArray[bOffset]);
}
final static byte MS_CLA =(byte)0x00;
//INS
public void process(APDU apdu) {
// Good practice: Return 9000 on SELECT
if (selectingApplet()) {
return;
}
apdu.setIncomingAndReceive();
byte[] buf = apdu.getBuffer();
if(buf[ISO7816.OFFSET_CLA]!=MS_CLA)
ISOException.throwIt(ISO7816.SW_CLA_NOT_SUPPORTED);
switch (buf[ISO7816.OFFSET_INS]) {
case (byte) 0x00:
break;
case (byte) 0x81:
Util.arrayCopyNonAtomic(studentID, (short)0, buf, (short)0, (short)10)