第6关:华容道小程序 educoder Java实训

第6关:华容道小程序


任务描述

本关任务:获取键盘输入的棋子姓名和移动方向,移动相应的棋子到相应的位置。

编程要求

仔细阅读右侧编辑区内给出的代码框架及注释,在 Begin-End 中实现获取键盘输入的棋子姓名和移动方向,移动相应的棋子到相应的位置的功能,具体要求如下:

  • 在 Test 类中的主方法中,为棋盘中的每个棋子实例化一个对象,并传入其相应的位置(甲乙丙丁都为士兵),这些位置是指它们在二维数组中所在位置;

  • 定义一个 while 循环,在循环中首先输出棋盘状态信息;

  • 然后获取键盘输入的要移动棋子的名称,获取移动的方法,匹配到该棋子,判断该棋子是否可以移动,如果不可以,请输出:“无法移动,指令错误”,如果可以,移动该武将到相应位置上;

  • 最后如果曹操被移动到出口位置(也就是最后一行的中间)时,输出:“你获胜了”,然后退出系统。

测试说明

平台将使用测试集运行你编写的程序代码,若全部的运行结果正确,则通关。 可在右侧“测试结果”区查看具体的测试集详情。

测试输入:

 
  1. 张飞
  2. 赵云
  3. 马超
  4. ...

预期输出:

 
  1. |马黄甲乙|
  2. |超忠丙丁|
  3. |赵张关羽|
  4. |云飞曹操|
  5. | 曹操|
  6. 请输入需要移动的棋子:
  7. 请输入移动方向(上,下,左,右):
  8. |马黄甲乙|
  9. |超忠丙丁|
  10. |赵 关羽|
  11. |云张曹操|
  12. | 飞曹操|
  13. 请输入需要移动的棋子:
  14. 请输入移动方向(上,下,左,右):
  15. |马黄甲乙|
  16. |超忠丙丁|
  17. | 关羽|
  18. |赵张曹操|
  19. |云飞曹操|
  20. 请输入需要移动的棋子:
  21. 请输入移动方向(上,下,左,右):
  22. | 黄甲乙|
  23. |马忠丙丁|
  24. |超 关羽|
  25. |赵张曹操|
  26. |云飞曹操|
  27. 请输入需要移动的棋子:
  28. ...
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        // 请在下面的Begin-End之间按照注释中给出的提示编写正确的代码
        /********** Begin **********/
        // 为棋盘中的每个棋子实例化一个对象,并将棋子所在位置传入
        ChessBoard cb=new ChessBoard();
        Chess cc=new King(2,3);
        Chess hz=new General(1,0);
        Chess zy=new General(0,2);
        Chess zf=new General(1,2);
        Chess mc=new General(0,0);
        Chess gy=new Commander(2,2);
        Chess jia=new Soldier(2,0);
        Chess yi=new Soldier(3,0);
        Chess bin=new Soldier(2,1);
        Chess din=new Soldier(3,1);
        Scanner input=new Scanner(System.in);
        String name;
        String direction;
        // 定义 while 循环
        while(true){
            // 输出棋盘状态信息
            System.out.print(cb);
            // 获取键盘输入的棋子名称和移动方向
            System.out.println("请输入需要移动的棋子:");
            name=input.next();
            System.out.println("请输入移动方向(上,下,左,右):");
            direction=input.next();
            // 匹配到对应的棋子后判断是否可以移动
            if(name.equals("曹操")){
                if(!cc.move(cb,direction)){
                    System.out.println("无法移动,指令错误");
                }
            }
            else if(name.equals("黄忠")){
                if(!hz.move(cb,direction)){
                    System.out.println("无法移动,指令错误");
                }
            }
            else if(name.equals("赵云")){
                if(!zy.move(cb,direction)){
                    System.out.println("无法移动,指令错误");
                }
            }
            else if(name.equals("张飞")){
                if(!zf.move(cb,direction)){
                    System.out.println("无法移动,指令错误");
                }
            }
            else if(name.equals("马超")){
                if(!mc.move(cb,direction)){
                    System.out.println("无法移动,指令错误");
                }
            }
            else if(name.equals("关羽")){
                if(!gy.move(cb,direction)){
                    System.out.println("无法移动,指令错误");
                }
            }
            else if(name.equals("甲")){
                if(!jia.move(cb,direction)){
                    System.out.println("无法移动,指令错误");
                }
            }
            else if(name.equals("乙")){
                if(!yi.move(cb,direction)){
                    System.out.println("无法移动,指令错误");
                }
            }
            else if(name.equals("丙")){
                if(!bin.move(cb,direction)){
                    System.out.println("无法移动,指令错误");
                }
            }
            else if(name.equals("丁")){
                if(!din.move(cb,direction)){
                    System.out.println("无法移动,指令错误");
                }
            }
            else{
                System.out.println("查无此人");
            }
            // 如果曹操被移动到了出口位置是,输出:你获胜了,结束游戏
            if(cb.tate[4][1]=="曹"&&cb.tate[4][2]=="操"){
                System.out.println("你获胜了");
                break;
            }
        }
        /********** End **********/
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值