北京邮电大学智能卡实验报告Word文档下载推荐.docx

上传人:b****5 文档编号:18344788 上传时间:2022-12-15 格式:DOCX 页数:33 大小:146.64KB
下载 相关 举报
北京邮电大学智能卡实验报告Word文档下载推荐.docx_第1页
第1页 / 共33页
北京邮电大学智能卡实验报告Word文档下载推荐.docx_第2页
第2页 / 共33页
北京邮电大学智能卡实验报告Word文档下载推荐.docx_第3页
第3页 / 共33页
北京邮电大学智能卡实验报告Word文档下载推荐.docx_第4页
第4页 / 共33页
北京邮电大学智能卡实验报告Word文档下载推荐.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

北京邮电大学智能卡实验报告Word文档下载推荐.docx

《北京邮电大学智能卡实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《北京邮电大学智能卡实验报告Word文档下载推荐.docx(33页珍藏版)》请在冰豆网上搜索。

北京邮电大学智能卡实验报告Word文档下载推荐.docx

a0

10

2013211209C1F5B2A9CEC5

初始化

a1

03

00/01

02

009000—成功电脑先手选00

099000—成功人先手

6301—初始化失败

 

下棋

a2

00-08

039000成功落子未完

019000成功落子人赢了

029000成功落子电脑赢了

009000成功落子和局

6301落子失败

打印棋盘

a3

08

0x0x0x0x0x0x0x0x0x

棋盘情况

三.测试数据

1.选中

/select627570742e67616d652e31选中

2.身份反馈

/send00a0000010身份反馈

3.初始化

/send00a1030002初始化棋盘并人先手

/send00a1030102初始化棋盘并AI先手

4.落字

/send00a2000002落字到左上角

/send00a2010002落字到第一行中间

/send00a2020002落字到右上角

/send00a2030002落字到中间靠左

/send00a2040002落字到中心

/send00a2050002落字到中间靠右

/send00a2060002落字到左下角

/send00a2070002落字到最后一行中心

/send00a2080002落字到右下角

5.打印棋盘

/send00a3000008

四.关键代码

1.游戏初始化模块:

privatevoidinit(APDUapdu){

byte[]buffer=apdu.getBuffer();

//棋盘维数——报错

if(buffer[ISO7816.OFFSET_P1]!

=(byte)0x03){

ISOException.throwIt(WRONG_P1);

}

//先后手——报错

if(buffer[ISO7816.OFFSET_P2]!

=(byte)0x01){

if(buffer[ISO7816.OFFSET_P2]!

=(byte)0x00)

ISOException.throwIt(WRONG_P2);

}

//将临时变量放进RAM

board=JCSystem.makeTransientByteArray((short)9,JCSystem.CLEAR_ON_DESELECT);

order=JCSystem.makeTransientByteArray((short)1,JCSystem.CLEAR_ON_DESELECT)[0];

turn=JCSystem.makeTransientByteArray((short)1,JCSystem.CLEAR_ON_DESELECT)[0];

depth=JCSystem.makeTransientByteArray((short)1,JCSystem.CLEAR_ON_DESELECT)[0];

answer=JCSystem.makeTransientByteArray((short)1,JCSystem.CLEAR_ON_DESELECT)[0];

result=JCSystem.makeTransientByteArray((short)1,JCSystem.CLEAR_ON_DESELECT)[0];

this.board[0]=(byte)0x00;

this.board[1]=(byte)0x00;

this.board[2]=(byte)0x00;

this.board[3]=(byte)0x00;

this.board[4]=(byte)0x00;

this.board[5]=(byte)0x00;

this.board[6]=(byte)0x00;

this.board[7]=(byte)0x00;

this.board[8]=(byte)0x00;

this.depth=(byte)0x09;

this.order=(byte)0x09;

this.turn=(byte)0x09;

this.answer=(byte)0x09;

this.result=(byte)0x09;

order=buffer[ISO7816.OFFSET_P2];

if(order==0x01){turn=chessCom;

play(apdu);

return;

}

turn=chessHum;

shortle=apdu.setOutgoing();

//if(le<

(byte)1){

//ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);

//}

apdu.setOutgoingLength((byte)1);

buffer[0]=(byte)0x09;

apdu.sendBytes((short)0,(short)1);

}

2.身份反馈模块

//个人信息--00a000000f

privatevoidmy_info(APDUapdu){

(byte)15){

apdu.setOutgoingLength((byte)16);

//学号,姓名

buffer[0]=0x32;

buffer[1]=0x30;

buffer[2]=0x31;

buffer[3]=0x33;

buffer[4]=0x32;

buffer[5]=0x31;

buffer[6]=0x31;

buffer[7]=0x30;

buffer[8]=0x34;

buffer[9]=0x39;

buffer[10]=(byte)0xc1;

buffer[11]=(byte)0xf5;

buffer[12]=(byte)0xb2;

buffer[13]=(byte)0xa9;

buffer[14]=(byte)0xce;

buffer[15]=(byte)0xc5;

apdu.sendBytes((short)0,(short)16);

3.对战入口模块

privatevoidplay(APDUapdu){

if(board[buffer[ISO7816.OFFSET_P1]]!

=0){ISOException.throwIt(ISO7816.SW_INS_NOT_SUPPORTED);

if(turn==chessHum)//该人下

{

move(turn,buffer[ISO7816.OFFSET_P1]);

//第二个参数是人的下棋位置

check();

if(result!

=0x00){

shortle=apdu.setOutgoing();

//if(le<

(byte)2){

//ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);

//}

apdu.setOutgoingLength((byte)2);

buffer[0]=result;

buffer[1]=answer;

apdu.sendBytes((short)0,(short)2);

return;

}}

if(turn==chessCom){//电脑下

//*********************************************************查表

//*********************************************************查表

move(turn,answer);

//刷新棋盘

//检查状态

if(depth==8){

shortle=apdu.setOutgoing();

//if(le<

//ISOException.throwIt(ISO7816.SW_WRONG_LENGTH);

//}

apdu.setOutgoingLength((byte)1);

buffer[0]=answer;

apdu.sendBytes((short)0,(short)1);

else

{

}

4.检查棋盘状态模块

//检查棋盘状态的入口

privatevoidcheck(){

if(win(chessHum)){result=(byte)0x02;

if(win(chessCom)){result=(byte)0x01;

if(draw()){result=(byte)0x03;

elseresult=(byte)0x00;

return;

//胜负

privatebooleanwin(byteturn){

if(board[0]==turn&

&

board[1]==turn&

board[2]==turn)

returntrue;

if(board[3]==turn&

board[4]==turn&

board[5]==turn)

if(board[6]==turn&

board[7]==turn&

board[8]==turn)

board[3]==turn&

board[6]==turn)

if(board[1]==turn&

board[7]==turn)

if(board[2]==turn&

board[5]==turn&

elsereturnfalse;

//平局

privatebooleandraw(){

if(depth==(byte)0)//剩余步数为零

returntrue;

returnfalse;

//**************************************************************检查棋局

5.打印棋盘模块

//打印棋盘

privatevoidqipan_info(APDUapdu){

(byte)8){

apdu.setOutgoingLength((byte)9);

//棋盘信息

buffer[0]=board[0];

buffer[1]=board[1];

buffer[2]=board[2];

buffer[3]=board[3];

buffer[4]=board[4];

buffer[5]=board[5];

buffer[6]=board[6];

buffer[7]=board[7];

buffer[8]=board[8];

apdu.sendBytes((short)0,(short)9);

五.测试结果

1.身份反馈测试

输入

返回

send00a00000000f

2.人先手测试

send00a103010001

099000

send00a204000002

00089000

send00a201000002

00079000

send00a205000002

02069000

3.卡先手测试

send00a103000001

069000

00049000

00009000

02089000

4.报错测试

send00a1030002000001

6700

send00a102000001

6A86

send00a303000001

6D00

卡片下载不足时

6A84

直接send00a103000001

6E00

send00a203000002

6A88

send00a201000001

6A89

六.团队协作与个人分工

1.团队

通过小组讨论,确定通过一定的策略进行棋谱扫描。

团队公用模板,具体算法实现,各自完成。

2.个人完成

1)自行设计策略算法

先手优先抢角,后手优先占中。

2)所有代码由个人独自完成

3)团队的查表核心部分共633行由我撰写

附录:

中间省略的由我撰写查表核心代码

//*********************************************************查表

if(depth==9){//先手第一步

answer=(byte)0;

if(depth==7){//先手第二步

if(board[4]!

=chessHum)

{answer=(byte)4;

else

{answer=(byte)2;

}

if(depth==5){//先手第三步

if(board[4]==chessCom)//抢到中

{if(board[8]!

=chessHum)//能赢就赢

answer=(byte)8;

else//否则走一步最有利

{if((board[8]==chessHum)&

(board[7]==chessHum))

answer=(byte)6;

if((board[8]==chessHum)&

(board[5]==chessHum))

answer=(byte)2;

(board[6]==chessHum))

answer=(byte)7;

(board[2]==chessHum))

answer=(byte)5;

(board[3]==chessHum))

(board[1]==chessHum))

answer=(byte)3;

}

}

else//占了0和2角,人已占中

{if(board[1]!

answer=(byte)1;

else//被堵

answer=(byte)7;

if(depth==3){//先手第四步

if((board[0]==chessCom)&

(board[4]==chessCom)&

(board[6]==chessCom))//必赢

{if(board[2]!

answer=(byte)2;

answer=(byte)3;

(board[2]==chessCom)&

(board[4]==chessCom))//必赢

{if(board[1]!

answer=(byte)1;

answer=(byte)6;

(board[7]==chessCom)&

(board[8]==chessHum)&

answer=(byte)5;

//最后搏一搏人不下3

(board[5]==chessCom)&

(board[4]==chessCom))

{if(board[3]!

//最后搏一搏人不下7

//最后搏一搏人不下6

(board[3]==chessCom)&

{if(board[5]!

(board[1]==chessHum)&

(board[4]==chessHum))//机器抢完两角,人抢中堵后

{if(board[3]==chessHum)

//准备下8否则和棋

if(board[5]==chessHum)

//准备下6否则和棋

if(board[6]==chessHum)

if(board[8]==chessHum)

}

if(depth==1){//先手第五步

(board[5]==chessCom))

//人未下3,赢了

//人堵3,和棋

if((board[0]==chess

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 经济学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1