📄
字号:
}
}
if(g==0){changTwoChessNum(m,n,selectedX,selectedY);}
}
}
protected void theRuleOfMa(int m,int n,int selectedX,int selectedY)//马的规则
{
if(n<9){
if(point[n+1][m]==0)
{
if(selectedX-m==1){if(selectedY-n==2){changTwoChessNum(m,n,selectedX,selectedY);}}
}
}
if(n>0){
if(point[n-1][m]==0)
{
if(m-selectedX==1){if(n-selectedY==2){changTwoChessNum(m,n,selectedX,selectedY);}}
}
}
if(n<9){
if(point[n+1][m]==0)
{
if(selectedX-m==-1){if(selectedY-n==2){changTwoChessNum(m,n,selectedX,selectedY);}}
}
}
if(n>0){
if(point[n-1][m]==0)
{
if(m-selectedX==-1){if(n-selectedY==2){changTwoChessNum(m,n,selectedX,selectedY);}}
}
}
if(m<8){
if(point[n][m+1]==0)
{
if(selectedX-m==2){if(selectedY-n==1){changTwoChessNum(m,n,selectedX,selectedY);}}
}
}
if(m>0){
if(point[n][m-1]==0)
{
if(m-selectedX==2){if(n-selectedY==1){changTwoChessNum(m,n,selectedX,selectedY);}}
}
}
if(m<8){
if(point[n][m+1]==0)
{
if(selectedX-m==2){if(selectedY-n==-1){changTwoChessNum(m,n,selectedX,selectedY);}}
}
}
if(m>0){
if(point[n][m-1]==0)
{
if(m-selectedX==2){if(n-selectedY==-1){changTwoChessNum(m,n,selectedX,selectedY);}}
}
}
}
protected void theRuleOfPao(int m,int n,int selectedX,int selectedY,int g1)//炮的规则
{
g=0;
if(m==selectedX)
{
if(n>selectedY)
{
for(i=1;i {
if(point[selectedY+i][m]!=0){g++;}
}
}
else
{
for(i=1;i {
if(point[n+i][m]!=0){g++;}
}
}
if(g==g1){changTwoChessNum(m,n,selectedX,selectedY);}
}
if(n==selectedY)
{
if(m>selectedX)
{
for(i=1;i {
if(point[n][i+selectedX]!=0){g++;}
}
}
else
{
for(i=1;i {
if(point[n][m+i]!=0){g++;}
}
}
if(g==g1){changTwoChessNum(m,n,selectedX,selectedY);}
}
}
protected void theRuleOfXiang(int m,int n,int selectedX,int selectedY)//相的规则
{
if(n<9&m<8){if(point[n+1][m+1]==0){if((selectedX-m==2)&(selectedY-n==2)){changTwoChessNum(m,n,selectedX,selectedY);}}}
if(n>0&m<8){if(point[n-1][m+1]==0){if((selectedX-m==2)&(selectedY-n==-2)){changTwoChessNum(m,n,selectedX,selectedY);}}}
if(n<9&m>0){if(point[n+1][m-1]==0){if((selectedX-m==-2)&(selectedY-n==2)){changTwoChessNum(m,n,selectedX,selectedY);}}}
if(n>0&m>0){if(point[n-1][m-1]==0){if((selectedX-m==-2)&(selectedY-n==-2)){changTwoChessNum(m,n,selectedX,selectedY);}}}
}
protected void theRuleOfShi(int m,int n,int selectedX,int selectedY)//士的规则
{
if((m>2&m<6)&(selectedX>2&selectedX<6)&(n>=7&n<=9)&(selectedY>=7&selectedY<=9))
{
if((selectedX-m==1)&(selectedY-n==1)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==1)&(selectedY-n==-1)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==-1)&(selectedY-n==1)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==-1)&(selectedY-n==-1)){changTwoChessNum(m,n,selectedX,selectedY);}
}
if((m>2&m<6)&(selectedX>2&selectedX<6)&(n>=0&n<3)&(selectedY>=0&selectedY<3))
{
if((selectedX-m==1)&(selectedY-n==1)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==1)&(selectedY-n==-1)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==-1)&(selectedY-n==1)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==-1)&(selectedY-n==-1)){changTwoChessNum(m,n,selectedX,selectedY);}
}
}
protected void theRuleOfShuai(int m,int n,int selectedX,int selectedY)//帅的规则
{
if((m>2&m<6)&(selectedX>2&selectedX<6)&(n>=7&n<=9)&(selectedY>=7&selectedY<=9))
{
if((selectedX-m==1)&(selectedY-n==0)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==-1)&(selectedY-n==0)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==0)&(selectedY-n==1)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==0)&(selectedY-n==-1)){changTwoChessNum(m,n,selectedX,selectedY);}
}
if((m>2&m<6)&(selectedX>2&selectedX<6)&(n>=0&n<3)&(selectedY>=0&selectedY<3))
{
if((selectedX-m==1)&(selectedY-n==0)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==-1)&(selectedY-n==0)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==0)&(selectedY-n==1)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedX-m==0)&(selectedY-n==-1)){changTwoChessNum(m,n,selectedX,selectedY);}
}
}
protected void theRuleOfZu(int m,int n,int selectedX,int selectedY)//卒的规则
{
if(point[n][m]<17)
{
if(selectedY>=n)
{
if(n<5)
{
if((selectedY-n==1)&(selectedX-m==0)){changTwoChessNum(m,n,selectedX,selectedY);}
}
else
{
if((selectedY-n==1)&(selectedX-m==0)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedY-n==0)&(selectedX-m==1)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedY-n==0)&(selectedX-m==-1)){changTwoChessNum(m,n,selectedX,selectedY);}
}
}
}
else
{
if(selectedY<=n)
{
if(n>4)
{
if((selectedY-n==-1)&(selectedX-m==0)){changTwoChessNum(m,n,selectedX,selectedY);}
}
else
{
if((selectedY-n==-1)&(selectedX-m==0)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedY-n==0)&(selectedX-m==1)){changTwoChessNum(m,n,selectedX,selectedY);}
if((selectedY-n==0)&(selectedX-m==-1)){changTwoChessNum(m,n,selectedX,selectedY);}
}
}
}
}
public void commandAction(Command c, Displayable d)
{
if (c == exitCmd) {
game.destroyApp(false);
game.notifyDestroyed();
}
}
protected synchronized void keyPressed(int keyCode) //处理按键
{
int action = getGameAction(keyCode);
if (action == Canvas.LEFT )
{
selectedX=(--selectedX+8+1)%(8+1);
}
else if (action == Canvas.RIGHT)
{
selectedX=(++selectedX)%(8+1);
}
else if (action == Canvas.UP)
{
selectedY=(--selectedY+9+1)%(9+1);
}
else if (action == Canvas.DOWN)
{
selectedY=(++selectedY)%(9+1);
}
else if (action == Canvas.FIRE)//这里的FIRE键我分成了两种情况:一是选种棋子,
{ //二是当选择了棋子后,让棋子走到下面选择的位置
guard=guard+1;//每按下FIRE一次,GUARD就加一,用来判断FIRE是被选种还是选种后走下不棋
if(guard%2==1) //这时是当选种某一个棋子时,调用choosChess函数,选择棋子
{
if(point[selectedY][selectedX]!=0)
{
guard1=selectedX;
guard2=selectedY;
}
}
if(guard%2==0)//这种情况是当棋子被选种后
{
if(point[selectedY][selectedX]!=point[n][m])//当走的下一步不是自身,也就是玩家选过
{ //一个棋子,又不想选了,这只需什么都不做
if((point[n][m]==1)|(point[n][m]==9)|(point[n][m]==17)|(point[n][m]==25))//当选定的棋子是车的时候
{ //repaint就OK了
if(point[selectedY][selectedX]==0)//当下一步走的是空格,则改变选种的格子和下一步所
{ //走的格子的point[][]和word[][]的植,然后repaint就OK
theRuleOfChe(m,n,selectedX,selectedY);
}
else//当下一步是想吃对方的子的,则把下一步格子的值变为刚才选定的格子的值,而
{ //刚才选定的格子的值则便为零
if((point[selectedY][selectedX]/17)!=(point[n][m]/17))//当然,想吃的子不能是自己的
{
theRuleOfChe(m,n,selectedX,selectedY);
}
}
}
if((point[n][m]==2)|(point[n][m]==8)|(point[n][m]==18)|(point[n][m]==24))//当选定的棋子是马的时候
{
if(point[selectedY][selectedX]==0)
{
theRuleOfMa(m,n,selectedX,selectedY);
}
else
{
if((point[selectedY][selectedX]/17)!=(point[n][m]/17))//当然,想吃的子不能是自己的
{
theRuleOfMa(m,n,selectedX,selectedY);
}
}
}
if((point[n][m]==10)|(point[n][m]==11)|(point[n][m]==26)|(point[n][m]==27))//当选定的棋子是炮的时候
{
if(point[selectedY][selectedX]==0)
{
g1=0;
theRuleOfPao(m,n,selectedX,selectedY,g1);
}
else
{
g1=1;
if((point[selectedY][selectedX]/17)!=(point[n][m]/17))//当然,想吃的子不能是自己的
{
theRuleOfPao(m,n,selectedX,selectedY,g1);
}
}
}
if((point[n][m]==3)|(point[n][m]==7)|(point[n][m]==19)|(point[n][m]==23))//当选定的棋子是相的时候
{
if(point[selectedY][selectedX]==0)
{
theRuleOfXiang(m,n,selectedX,selectedY);
}
else
{
if((point[selectedY][selectedX]/17)!=(point[n][m]/17))//当然,想吃的子不能是自己的
{
theRuleOfXiang(m,n,selectedX,selectedY);
}
}
}
if((point[n][m]==4)|(point[n][m]==6)|(point[n][m]==20)|(point[n][m]==22))//当选定的棋子是士的时候
{
if(point[selectedY][selectedX]==0)
{
theRuleOfShi(m,n,selectedX,selectedY);
}
else
{
if((point[selectedY][selectedX]/17)!=(point[n][m]/17))//当然,想吃的子不能是自己的
{
theRuleOfShi(m,n,selectedX,selectedY);
}
}
}
if((point[n][m]==5)|(point[n][m]==21))//当选定的棋子是帅的时候
{
if(point[selectedY][selectedX]==0)
{
theRuleOfShuai(m,n,selectedX,selectedY);
}
else
{
if((point[selectedY][selectedX]/17)!=(point[n][m]/17))//当然,想吃的子不能是自己的
{
theRuleOfShuai(m,n,selectedX,selectedY);
}
}
}
if((point[n][m]>11&point[n][m]<17))//当选定的棋子是红方卒的时候
{
if(point[selectedY][selectedX]==0)
{
theRuleOfZu(m,n,selectedX,selectedY);
}
else
{
if((point[selectedY][selectedX]/17)!=(point[n][m]/17))//当然,想吃的子不能是自己的
{
theRuleOfZu(m,n,selectedX,selectedY);
}
}
}
if(point[n][m]>27)//当选定的棋子是白方卒的时候
{
if(point[selectedY][selectedX]==0)
{
theRuleOfZu(m,n,selectedX,selectedY);
}
else
{
if((point[selectedY][selectedX]/17)!=(point[n][m]/17))//当然,想吃的子不能是自己的
{
theRuleOfZu(m,n,selectedX,selectedY);
}
}
}
}
}
}
repaint();
}
代码程序就是这些,看起来很麻烦吧,如果仔细看了的话,其实很简单,只不过象棋不比五子棋,规则太多了,但是我的代码里有很多缺陷,例如由于采用了canvas而不是gamecanvas,所以在paint()函数里面就会有很多的输出,这样在一些功能不强大的手机里会有闪屏的现象,我现在正在用gamecanvas写这个程序,大家先凑合看这个吧.还有,由于象棋游戏的自身因素,所以导致了只能在大屏幕手机上使用,我这个是针对WTK22的默认的彩色模拟器编的,而且都实现了,感觉效果还行,但是在一些其他的小屏手机上就不理想了,这个也没办法.
最后声明一下,大家可以拿我的代码转载,但毕竟是我的原创,请大家转载是把我的名字挂上-----dlut_608_#4,呵呵还有,代码太长了,没好好整理就发上来了,希望大家能耐心。
这个程序有很多需要赶紧的地方,希望大家看了以后多提宝贵意见.
作者:dlut_608_#4
文章录入:0411dlut 责任编辑:mingjava
上一篇文章: J2ME平台手机游戏移植的体会
下一篇文章: 3D编程指南第四部分:M3G内建碰撞、光照物理学和照相机视点
【字体:小 大】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口】
(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
评论人 评论内容 评论时间 打分
【cl_pqy】 我也主要想知道AI怎么做.大家有谁有想法发表一下吧 2005-11-13 12:42:16 3分
【zicheng3000】 ifpointselectedYselectedX!=0 guard1=selectedX… 2005-11-11 22:55:50 1分
【卧龙来了】 哎 2005-11-10 16:43:39 3分
【乐水】 于采用了canvas而不是gamecanvas,所以在paint函数里面就会有很多… 2005-11-8 14:24:38 1分
【tcboy】 还不错 主要想看一下ai,结果还没讲... 顺便问一下,0411dlut 是… 2005-11-7 11:42:01 3分
【0411dlut】 估计是写的时候出错了,因为我是把代码改成文章了,而且代码写的不… 2005-11-5 17:19:56 3分
【yplinxd】 fori=1i ifpointselectedY+im!=0g++ 好像有问题吧… 2005-11-5 13:43:40 1分
【zzzl】 AI呢?! 2005-11-5 12:36:26 1分
查看评论详细内容及更多评论
J2ME平台手机游戏移植的体会
MIDP1.0-五子棋1.1读后的修改
游戏Loaading的设计
手机游戏策划模板
手机中文码制问题的一点理解
| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
版权所有 Copyright? 2005 J2ME开发网 瑞腾科技
京ICP备05054286号
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -