飞行棋

来源:互联网 发布:量子纠缠 知乎 编辑:程序博客网 时间:2024/04/28 12:39
/**
 * @(#)飞行棋
 *
 *
 * @author 王宜君
 * @version 1.00 2009/12/18
 */
import java.util.*;
public class ChessGame
{
    static String [] map=new String[100];//游戏地图
    static int [] rae={5,15,27,36,44,55,67,75,85,95};//雷的位置
    static int [] star={8,25,40,65,92};//星号的位置
    static Scanner input=new Scanner(System.in);//创建一个静态输入对象
    static int player=0;//玩家
    static int locationA=0,locationB=0,temp=0;//玩家的位置变量
    public static void main(String[] args)throws Exception
    {
        init();//地图的函数初始化
        drawMap();//画地图
        do
        {
            init();//地图的函数初始化
            locationA=locationA+getRandom(1);//改变A玩家位置
            if(locationA>=99)
                break;
            map[locationA]="甲";
            rule(1);//规则
            drawMap();//甲玩家摇色重画地图
            locationB=locationB+getRandom(2);//改变B玩家位置
            if(locationB>=99)
                break;
            map[locationB]="乙";
            rule(2);//规则
            
            drawMap();//乙玩家摇色重画地图
        }while(locationA<100&&locationB<100);
        if(locationA>=99)//甲玩家赢了
        {
            System.out.println ("恭喜你,甲玩家赢了。");
            init();//地图的函数初始化
            drawMap();//甲玩家摇色重画地图
        }
        if(locationB>=99)//乙玩家赢了
        {
            System.out.println ("恭喜你,乙玩家赢了。");
            init();//地图的函数初始化
            drawMap();//乙玩家摇色重画地图
        }
    }
    /**
     *初始化地图
     *
     *
     */
    public static void init()
    {
        int i,j,k;
        for(i=0;i<100;i++)//控制位置总数量
        {
            map[i]="::";
            for(j=0;j<10;j++)//控制雷的位置
            {
                if(rae[j]==i)
                {
                    map[i]="雷";//雷
                }
            }
            for(k=0;k<5;k++)//控制幸运星的位置
            {
                if(star[k]==i)
                {
                    map[i]="★";//幸运星*
                }
            }
            if(locationA>=99)
            {
                map[99]="甲";
            }
            else if(locationB>=99)
            {
                map[99]="乙";
            }
            else
            {
                map[99]="终";
            }
        
        }
    }//初始化
    /**
     *
     *打印对战地图
     *
     */
    public static void drawMap()
    {
        int i,j=0,k;
        for(i=0;i<30;i++)//控制地图前30个位置
        {
            printMapRow(i);
        }
        System.out.println ("");
        for(i=30;i<35;i++)//控制地图31~35位置
        {
            for(j=0;j<58;j++)//控制31~35位置空格
            {
                System.out.print(" ");
            }
            printMapCol(i);
        }
        for(i=64;i>=35;i--)//控制地图36~65位置
        {
            printMapRow(i);
        }
        System.out.println ("");
        for(i=65;i<70;i++)//控制地图66~70位置
        {
            printMapCol(i);
        }
        for(i=70;i<100;i++)//控制地图70~100位置
        {
            printMapRow(i);
        }
    }//画地图
    /**
      *打印地图的横行
      *
      */
     public static void printMapRow(int i)//打印地图的横行
     {
         if(locationA==locationB && locationA==0 && i==0 )
        {
            System.out.print("始");    
        }
         else if(i==locationA)
             System.out.print("甲");
        else if(i==locationB)
            System.out.print("乙");
        else
            System.out.print(map[i]);
            
     }//打印地图的横行
     /**
      *打印地图的数列
      *
      *
      */
     public static void printMapCol(int i)
     {
         if(locationA==locationB && locationA==0 && i==0 )
        {
            System.out.print("@@");    
        }
         else if(i==locationA)
             System.out.println("甲");
        else if(i==locationB)
            System.out.println("乙");
        else
             System.out.println (map[i]);
     }//打印地图的数列
     /**
      *产生随机数
      *
      *
      */
     public static int getRandom(int player)
     {
         if(player==1)//玩家甲
        {
            System.out.print("\n请A玩家摇色(按任意键摇色):");
        }
        else if(player==2)//玩家乙
        {
            System.out.print("\n请B玩家摇色(按任意键摇色):");
        }
        String str=input.next();
        char ch= str.charAt(0);//取字符串的第一个数
        int num=(int)(Math.random()*((int)ch)+100)%6+1;//根据输入的字符产生随机摇色
        System.out.println("摇色色子点数:"+num);
        return num;
     }//产生随机数
     /**
      *规则
      *
      *
      */
     public  static void rule(int player)
     {
         if(player==1)//玩家甲
         {
             if(locationA==locationB&&locationA>0)//被踩玩家的回到原点
             {
                 System.out.println ("甲踩到乙:乙回原点。");
                 locationB=0;
             }
             for(int i=0;i<10;i++)//玩家甲踩到雷后退5步
             {
                 if(locationA==rae[i])
                 {
                     System.out.println ("甲踩雷,后退五步。");
                     map[locationA]="雷";
                     locationA-=5;  
                     if(locationA==locationB&&locationA>0)//被踩玩家的回到原点
                     {
                         System.out.println ("甲踩到乙:乙回原点。");
                         locationB=0;
                     }                   
                 }    
             }
             for(int j=0;j<5;j++)//玩家甲踩到幸运星,前进五步
             {
                 if(locationA==star[j])
                 {
                     System.out.println ("甲踩到幸运星,前进5步。");
                     map[locationA]="★";
                     locationA+=5;
                 }
             }
         }
         else if(player==2)//玩家乙
         {
             if(locationA==locationB&&locationB>0)//被踩玩家的回到原点
             {
                 System.out.println ("乙踩到甲:甲回原点。");
                 locationA=0;
             }
             for(int i=0;i<10;i++)//玩家乙踩到雷后退5步
             {
                 if(locationB==rae[i])
                 {
                     System.out.println ("乙踩雷,后退5步。");
                     map[locationB]="雷";
                     locationB-=5;
                     if(locationB==locationA)
                     {
                         System.out.println ("乙踩到甲:甲回原点。");
                         locationA=0;
                     }
                 }
             }
             for(int j=0;j<5;j++)//玩家乙踩到幸运星,前进五步
             {
                 if(locationB==star[j])
                 {
                     System.out.println ("乙踩到幸运星,前进5步");
                     map[locationB]="★";
                     locationB+=5;
                 }
             }
         }
     }//规则
}


原创粉丝点击