介绍
这篇文章主要讲解了如何用200行java代码实现2048小游戏,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
<>强效果图:强>
<强>游戏介绍:强>
1.2048是一款益智类小游戏,刚开始随机出现两个数字,可以上下左右控制数字的移动。
2。当选择一个方向移动后,所有数字都会沿该方向移动到表格尽头,并且空余表格会随机出现2或4,当碰到相同的两个数字时,该两个数字会合并相加成一个数字,直到最大的数字变成2048游戏成功
3。否则当数字填满表格且不能再移动时游戏失败。
<强>游戏代码:强>
进口java.awt。*; 进口java.awt.event。*; 进口java.util.Random; 进口javax.swing。*; 公开课Game2048延伸JPanel { {枚举状态 开始,赢了,运行,结束了 } 最终颜色[]colorTable={新的颜色(0 x701710),颜色(0 xffe4c3),新颜色(0 xfff4d3),新颜色(0 xffdac3), 新的颜色(0 xe7b08e),颜色(0 xe7bf8e),新颜色(0 xffc4c3),新颜色(0 xe7948e),新颜色(0 xbe7e56), 新的颜色(0 xbe5e56),颜色(0 x9c3931),新颜色(0 x701710)}; 最终的静态int目标=2048; 静态int最高; 静态int分数; 私人gridColor=new颜色(0 xbbada0); 私人emptyColor=new颜色(0 xcdc1b4); 私人startColor=new颜色(0 xffebcd); 私人随机兰德=new随机(); 私人瓷砖[][]瓷砖; 私人int=4; 私人状态gamestate=State.start; 私人布尔checkingAvailableMoves; 公共Game2048 () { setPreferredSize(新维度(900、700)); setBackground(新颜色(0 xfaf8ef)); setFont(新字体(“SansSerif"字体。大胆、48)); setFocusable(真正的); addMouseListener(新MouseAdapter () { @Override 公共空间mousePressed (MouseEvent e) { startGame (); 重画(); } }); addKeyListener(新KeyAdapter () { @Override 公共空间keyPressed (KeyEvent e) { 开关(e.getKeyCode ()) { 案例KeyEvent.VK_UP: moveUp (); 打破; 案例KeyEvent.VK_DOWN: moveDown (); 打破; 案例KeyEvent.VK_LEFT: moveLeft (); 打破; 案例KeyEvent.VK_RIGHT: moveRight (); 打破; } 重画(); } }); } @Override 公共空间paintComponent(图形gg) { super.paintComponent (gg); Graphics2D g=(Graphics2D gg); g.setRenderingHint (RenderingHints。KEY_ANTIALIASING RenderingHints.VALUE_ANTIALIAS_ON); drawGrid (g); } 空白startGame () { 如果(gamestate !=State.running) { 分数=0; 最高=0; gamestate=State.running; 瓷砖=新瓷砖(侧)(边); addRandomTile (); addRandomTile (); } } 空白drawGrid (Graphics2D g) { g.setColor (gridColor); g。fillRoundRect(200、100、499、499、15日,15); 如果(gamestate==State.running) { for (int r=0;r & lt;一面;r + +) { for (int c=0;c & lt;一面;c++) { 如果(瓷砖[r] [c]==null) { g.setColor (emptyColor); g。fillRoundRect (215 + c * 121, 115 + r * 121, 106, 106, 7, 7); 其他}{ drawTile (g、r、c); } } } 其他}{ g.setColor (startColor); g。fillRoundRect (215、115、469、469、7、7); g.setColor (gridColor.darker ()); g。setFont(新字体(“SansSerif"字体。大胆,128)); g.drawString(“2048“, 310年,270年); g。setFont(新字体(“SansSerif"字体。大胆的,20)); 如果(gamestate==State.won) { g.drawString(“你成功了!“,390年,350年); 如果(gamestate==State.over}其他) g.drawString(“游戏over",, 400, 350); g.setColor (gridColor); g.drawString(“单击开始新game", 330年,470年); g.drawString(“(使用箭头键移动瓷砖)“,310年,530年); } } 空白drawTile (c r Graphics2D g, int, int) { int value=https://www.yisu.com/zixun/tiles [r] [c] .getValue (); g.setColor (colorTable [(int) (Math.log(值)/Math.log (2) + 1]); g。fillRoundRect (215 + c * 121, 115 + r * 121, 106, 106, 7, 7); 字符串s=String.valueOf(价值); g。改变颜色(价值<128 & # 63;colorTable [0]: colorTable [1]); FontMetrics调频=g.getFontMetrics (); int asc=fm.getAscent (); int 12月=fm.getDescent (); int x=215 + c * 121 + (106 - fm.stringWidth (s))/2; int y=115 + r * 121 + (asc + (106 - (asc + 12月))/2); g。拉带(年代,x, y); } 私人空间addRandomTile () { int pos=兰德。nextInt(*一起); int行,上校; {做 pos=(pos + 1) %(*一起); 行=pos/侧; 坳=pos %; },(瓷砖(行)(col) !=null); int val=rand.nextInt (10)==0 & # 63;4:2; 瓷砖(行)(col)=new瓷砖(val); } 私人布尔移动(int, int yIncr int countDownFrom xIncr) { 布尔移动=false; for (int i=0;我如何用200行java代码实现2048小游戏