JAVA CARD实现扫雷AI程序

beginning

这学期的JAVA智能卡课期末作业居然是叫我们自己做一个能自动扫雷的AI程序,OMG,上网搜了一下,其实网上java的智能卡代码挺多的,但是我们毕竟是智能卡,还是有一点点不一样的,所以把代码在这里码出来。

设计需求分析

老师给的棋盘还是非常简单的,大概相当于系统游戏中的初级难度,所以也不需要网上的那些高级策略,所以只采用了最基本的两条策略。
flag为当前位置周围8格中插旗的数量,dark为未翻开的数量,Num为本格数字

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值