java吧 关注:1,250,214贴子:12,734,633
  • 13回复贴,共1

java控制台我很强,我叫2048我最强

只看楼主收藏回复

无聊花20分钟写了个控制台2048
代码看2楼,无聊的看一看


IP属地:黑龙江来自Android客户端1楼2016-08-10 23:04回复
    第一段(有字数要求)
    import java.util.*;
    public class Main
    {
    public static void main(String[] args)
    {
    Scanner input = new Scanner(System.in);
    int[][] board = new int[4][4];
    int score = 0;
    System.out.println("欢迎来到控制台2048(前方高能)");
    System.out.println("输入上,下,左,右来移动");
    System.out.println("开局");
    //随机生成两个2或4
    for (int i = 0 ;i < 2; i++)
    {
    Point startRandom = getFreeLocation(board);
    board[startRandom.getX()][startRandom.getY()] = generate2or4();
    }
    while (true)
    {
    print(board);
    //是否有2048或已经满了
    for (int y = 0 ; y < 4 ; y++)
    {
    for (int x = 0 ; x < 4 ; x++)
    {
    int value = board[x][y];
    if (value == 2048)
    {
    System.out.println("卧槽,你居然赢了,而且还得了" + score + "这么多分");
    break;
    }
    }
    }
    if (getFreeLocation(board) == null)
    {
    System.out.println("呵呵,劝你还是吃屎算了,才得了" + score + "这么点分");
    break;
    }
    System.out.println("请输入你的操作");
    String opera = input.next();
    if (opera.equals("上"))
    {
    for (int i=0;i < 3;i++)
    {
    for (int y = 0 ; y < 4 ; y++)
    {
    for (int x = 0 ; x < 4 ; x++)
    {
    int value = board[x][y];
    if (!((y - 1) < 0))
    {
    int upvalue = board[x][y - 1];
    if (upvalue == 0)
    {
    board[x][y - 1] = value;
    board[x][y] = 0;
    }
    else if (value == upvalue)
    {
    //有效合并
    board[x][y - 1] = value * 2;
    board[x][y] = 0;
    score++;
    }
    }
    }
    }
    }
    Point random = getFreeLocation(board);
    board[random.getX()][random.getY()] = generate2or4();
    }


    IP属地:黑龙江来自Android客户端2楼2016-08-10 23:06
    回复
      第二段
      else if (opera.equals("下"))
      {
      for (int i=0;i < 3;i++)
      {
      for (int y = 3 ; y >= 0 ; y--)
      {
      for (int x = 0 ; x < 4 ; x++)
      {
      int value = board[x][y];
      if (!((y + 1) > 3))
      {
      int upvalue = board[x][y + 1];
      if (upvalue == 0)
      {
      board[x][y + 1] = value;
      board[x][y] = 0;
      }
      else if (value == upvalue)
      {
      //有效合并
      board[x][y + 1] = value * 2;
      board[x][y] = 0;
      score++;
      }
      }
      }
      }
      }
      Point random = getFreeLocation(board);
      board[random.getX()][random.getY()] = generate2or4();
      }
      else if (opera.equals("左"))
      {
      for (int i=0;i < 3;i++)
      {
      for (int x = 0 ; x < 4 ; x++)
      {
      for (int y = 0 ; y < 4 ; y++)
      {
      int value = board[x][y];
      if (!((x - 1) < 0))
      {
      int upvalue = board[x - 1][y];
      if (upvalue == 0)
      {
      board[x - 1][y] = value;
      board[x][y] = 0;
      }
      else if (value == upvalue)
      {
      //有效合并
      board[x - 1][y] = value * 2;
      board[x][y] = 0;
      score++;
      }
      }
      }
      }
      }
      Point random = getFreeLocation(board);
      board[random.getX()][random.getY()] = generate2or4();
      }
      else if (opera.equals("右"))
      {
      for (int i=0;i < 3;i++)
      {
      for (int x = 3 ; x >= 0 ; x--)
      {
      for (int y = 0 ; y < 4 ; y++)
      {
      int value = board[x][y];
      if (!((x + 1) > 3))
      {
      int upvalue = board[x + 1][y];
      if (upvalue == 0)
      {
      board[x + 1][y] = value;
      board[x][y] = 0;
      }
      else if (value == upvalue)
      {
      //有效合并
      board[x + 1][y] = value * 2;
      board[x][y] = 0;
      score++;
      }
      }
      }
      }
      }


      IP属地:黑龙江来自Android客户端3楼2016-08-10 23:08
      回复
        第三段
        Point random = getFreeLocation(board);
        board[random.getX()][random.getY()] = generate2or4();
        }
        else
        {
        System.out.println("手残啊,告诉你输入上下左右了嘛");
        }
        }
        }
        public static int generate2or4()
        {
        //生成2的几率为百分之70,4的几率为百分之30,百分之30可以不用再次判断
        double random =Math.random();
        if (random >= 0D && random <= 0.7D)
        {
        return 2;
        }
        else
        {
        return 4;
        }
        }
        public static Point getFreeLocation(int[][] board)
        {
        //取数组中随机空位,没有空位返回null
        List<Point> freeLocations = new ArrayList<Point>();
        for (int x = 0 ; x < 4 ; x++)
        {
        for (int y = 0 ; y < 4 ; y++)
        {
        if (board[x][y] == 0)
        {
        freeLocations.add(new Point(x, y));
        }
        }
        }
        int location = (int) (Math.random() * (freeLocations.size() - 1));
        if (freeLocations.size() == 0)
        {
        return null;
        }
        else
        {
        return freeLocations.get(location);
        }
        }


        IP属地:黑龙江来自Android客户端4楼2016-08-10 23:08
        回复
          最后一段
          public static void print(int[][] board)
          {
          System.out.println();
          for (int y = 0 ; y < 4 ; y++)
          {
          for (int x = 0 ; x < 4 ; x++)
          {
          int value = board[x][y];
          if (value == 0)
          {
          System.out.print("空位 ");
          }
          else
          {
          String space = " ";
          for (int i =0 ; i < (4 - String.valueOf(value).length()) ;i++)
          {
          space += " ";
          }
          System.out.print(value + space);
          }
          }
          System.out.println();
          }
          }
          }
          class Point
          {
          private int x;
          private int y;
          public Point(int x, int y)
          {
          this.x = x;
          this.y = y;
          }
          public void setX(int x)
          {
          this.x = x;
          }
          public int getX()
          {
          return x;
          }
          public void setY(int y)
          {
          this.y = y;
          }
          public int getY()
          {
          return y;
          }
          }


          IP属地:黑龙江来自Android客户端5楼2016-08-10 23:09
          回复
            拼合在一起再食用


            IP属地:黑龙江来自Android客户端6楼2016-08-10 23:10
            回复
              我其实到现在都没明白2048这个游戏怎么玩?


              IP属地:天津来自Android客户端8楼2016-08-10 23:13
              收起回复
                帮顶


                来自Android客户端9楼2016-08-10 23:15
                回复
                  只看得懂一些。。。
                         ---
                       思念的人啊
                  人们常说时间会让爱变得淡忘
                  变得模糊和破碎
                     


                  IP属地:贵州来自Android客户端10楼2016-08-10 23:16
                  回复
                    大神带带我


                    IP属地:安徽来自iPhone客户端11楼2016-08-10 23:17
                    收起回复


                      IP属地:北京来自Android客户端12楼2016-08-11 07:57
                      回复