日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

200行java代碼實現2048小游戲

瀏覽:24日期:2022-09-02 16:03:40

本文實例為大家分享了java實現2048小游戲的具體代碼,供大家參考,具體內容如下

效果圖:

200行java代碼實現2048小游戲

游戲介紹:

1.2048是一款益智類小游戲,剛開始隨機出現兩個數字,可以上下左右控制數字的移動。2.當選擇一個方向移動后,所有數字都會沿該方向移動到表格盡頭,并且空余表格會隨機出現2或4,當碰到相同的兩個數字時,該兩個數字會合并相加成一個數字,直到最大的數字變成2048游戲成功3.否則當數字填滿表格且不能再移動時游戲失敗。

游戲代碼:

import java.awt.*;import java.awt.event.*;import java.util.Random;import javax.swing.*;public class Game2048 extends JPanel { enum State { start, won, running, over } final Color[] colorTable = { new Color(0x701710), new Color(0xFFE4C3), new Color(0xfff4d3), new Color(0xffdac3), new Color(0xe7b08e), new Color(0xe7bf8e), new Color(0xffc4c3), new Color(0xE7948e), new Color(0xbe7e56), new Color(0xbe5e56), new Color(0x9c3931), new Color(0x701710) }; final static int target = 2048; static int highest; static int score; private Color gridColor = new Color(0xBBADA0); private Color emptyColor = new Color(0xCDC1B4); private Color startColor = new Color(0xFFEBCD); private Random rand = new Random(); private Tile[][] tiles; private int side = 4; private State gamestate = State.start; private boolean checkingAvailableMoves; public Game2048() { setPreferredSize(new Dimension(900, 700)); setBackground(new Color(0xFAF8EF)); setFont(new Font('SansSerif', Font.BOLD, 48)); setFocusable(true); addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { startGame(); repaint(); } }); addKeyListener(new KeyAdapter() { @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: moveUp(); break; case KeyEvent.VK_DOWN: moveDown(); break; case KeyEvent.VK_LEFT: moveLeft(); break; case KeyEvent.VK_RIGHT: moveRight(); break; } repaint(); } }); } @Override public void paintComponent(Graphics gg) { super.paintComponent(gg); Graphics2D g = (Graphics2D) gg; g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); drawGrid(g); } void startGame() { if (gamestate != State.running) { score = 0; highest = 0; gamestate = State.running; tiles = new Tile[side][side]; addRandomTile(); addRandomTile(); } } void drawGrid(Graphics2D g) { g.setColor(gridColor); g.fillRoundRect(200, 100, 499, 499, 15, 15); if (gamestate == State.running) { for (int r = 0; r < side; r++) { for (int c = 0; c < side; c++) { if (tiles[r][c] == null) { g.setColor(emptyColor); g.fillRoundRect(215 + c * 121, 115 + r * 121, 106, 106, 7, 7); } else { drawTile(g, r, c); } } } } else { g.setColor(startColor); g.fillRoundRect(215, 115, 469, 469, 7, 7); g.setColor(gridColor.darker()); g.setFont(new Font('SansSerif', Font.BOLD, 128)); g.drawString('2048', 310, 270); g.setFont(new Font('SansSerif', Font.BOLD, 20)); if (gamestate == State.won) { g.drawString('you made it!', 390, 350); } else if (gamestate == State.over) g.drawString('game over', 400, 350); g.setColor(gridColor); g.drawString('click to start a new game', 330, 470); g.drawString('(use arrow keys to move tiles)', 310, 530); } } void drawTile(Graphics2D g, int r, int c) { int value = tiles[r][c].getValue(); g.setColor(colorTable[(int) (Math.log(value) / Math.log(2)) + 1]); g.fillRoundRect(215 + c * 121, 115 + r * 121, 106, 106, 7, 7); String s = String.valueOf(value); g.setColor(value < 128 ? colorTable[0] : colorTable[1]); FontMetrics fm = g.getFontMetrics(); int asc = fm.getAscent(); int dec = fm.getDescent(); int x = 215 + c * 121 + (106 - fm.stringWidth(s)) / 2; int y = 115 + r * 121 + (asc + (106 - (asc + dec)) / 2); g.drawString(s, x, y); } private void addRandomTile() { int pos = rand.nextInt(side * side); int row, col; do { pos = (pos + 1) % (side * side); row = pos / side; col = pos % side; } while (tiles[row][col] != null); int val = rand.nextInt(10) == 0 ? 4 : 2; tiles[row][col] = new Tile(val); } private boolean move(int countDownFrom, int yIncr, int xIncr) { boolean moved = false; for (int i = 0; i < side * side; i++) { int j = Math.abs(countDownFrom - i); int r = j / side; int c = j % side; if (tiles[r][c] == null) continue; int nextR = r + yIncr; int nextC = c + xIncr; while (nextR >= 0 && nextR < side && nextC >= 0 && nextC < side) { Tile next = tiles[nextR][nextC]; Tile curr = tiles[r][c]; if (next == null) { if (checkingAvailableMoves) return true; tiles[nextR][nextC] = curr; tiles[r][c] = null; r = nextR; c = nextC; nextR += yIncr; nextC += xIncr; moved = true; } else if (next.canMergeWith(curr)) { if (checkingAvailableMoves) return true; int value = next.mergeWith(curr); if (value > highest) highest = value; score += value; tiles[r][c] = null; moved = true; break; } else break; } } if (moved) { if (highest < target) { clearMerged(); addRandomTile(); if (!movesAvailable()) { gamestate = State.over; } } else if (highest == target) gamestate = State.won; } return moved; } boolean moveUp() { return move(0, -1, 0); } boolean moveDown() { return move(side * side - 1, 1, 0); } boolean moveLeft() { return move(0, 0, -1); } boolean moveRight() { return move(side * side - 1, 0, 1); } void clearMerged() { for (Tile[] row : tiles) for (Tile tile : row) if (tile != null) tile.setMerged(false); } boolean movesAvailable() { checkingAvailableMoves = true; boolean hasMoves = moveUp() || moveDown() || moveLeft() || moveRight(); checkingAvailableMoves = false; return hasMoves; } public static void main(String[] args) { SwingUtilities.invokeLater(() -> { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setTitle('2048'); f.setResizable(true); f.add(new Game2048(), BorderLayout.CENTER); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); }); }}class Tile { private boolean merged; private int value; Tile(int val) { value = val; } int getValue() { return value; } void setMerged(boolean m) { merged = m; } boolean canMergeWith(Tile other) { return !merged && other != null && !other.merged && value == other.getValue(); } int mergeWith(Tile other) { if (canMergeWith(other)) { value *= 2; merged = true; return value; } return -1; }}

更多有趣的經典小游戲實現專題,分享給大家:

C++經典小游戲匯總

python經典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經典游戲 玩不停

java經典小游戲匯總

javascript經典小游戲匯總

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
激情国产在线| 亚洲精品亚洲人成在线观看| 婷婷亚洲五月| 国产美女高潮在线| 成人高清一区| 成人亚洲一区| 中文在线日韩| 亚洲综合精品四区| 免费视频久久| 蜜芽一区二区三区| 日韩欧美另类中文字幕| 日韩一区二区久久| 香蕉久久国产| 国产日韩三级| 日韩欧美一区二区三区在线视频| 日韩在线看片| 国产精品美女久久久浪潮软件| 蜜桃久久久久久久| 国产日韩欧美中文在线| 成人一二三区| 亚洲视频二区| 久久久精品区| 亚洲少妇自拍| 国产精品亚洲二区| 亚洲午夜电影| 日本亚洲视频在线| 久久av影院| 亚洲网站视频| 欧美在线观看天堂一区二区三区| 国产精品对白| 久久久亚洲一区| 最新国产精品视频| 荡女精品导航| 亚洲三级网站| 日韩大片在线| 日韩精品午夜视频| 亚洲午夜黄色| 国产在线不卡一区二区三区| 亚洲最新av| 在线 亚洲欧美在线综合一区| 国产精品igao视频网网址不卡日韩| 欧洲av一区二区| 日本成人在线视频网站| 久久精品动漫| 麻豆视频在线观看免费网站黄| 蜜臀久久久99精品久久久久久| 色吊丝一区二区| 美腿丝袜在线亚洲一区| 群体交乱之放荡娇妻一区二区| 日韩av资源网| 天堂久久av| 免费在线观看精品| 亚洲福利一区| 国产一区日韩一区| 精品一区二区三区免费看| 男女男精品视频网| 亚洲激情精品| 日韩综合一区| 美女国产一区二区三区| 亚洲免费毛片| 一区免费在线| 亚洲免费在线| 国产亚洲在线| 亚洲欧美日韩专区| 亚洲高清激情| 国产精品日本| 国产精品va视频| 日韩中文字幕| 精品国产精品国产偷麻豆| 美女久久一区| 蜜桃91丨九色丨蝌蚪91桃色| 亚洲精品伦理| 黄色亚洲在线| 91麻豆精品激情在线观看最新| 日韩高清在线不卡| 久久影院资源站| 神马午夜久久| 久久亚洲影院| 国产精品久久久久久模特| 国产精品观看| 啪啪国产精品| 亚洲一区二区日韩| 国产精品丝袜在线播放| 成人台湾亚洲精品一区二区| 欧美精品高清| 免费美女久久99| 中文字幕亚洲精品乱码| 亚洲精品在线观看91| 亚洲一二av| 综合日韩av| 亚洲一区二区小说| 国产一区日韩| 99日韩精品| 国产剧情一区二区在线观看| 日韩免费小视频| 日韩毛片网站| 久久免费黄色| 国产乱子精品一区二区在线观看| 久久九九99| 欧美激情视频一区二区三区在线播放| av一区在线| 欧美国产视频| 在线综合视频| xxxxx性欧美特大| 91精品国产一区二区在线观看| 欧美日韩视频免费观看| 欧美日韩亚洲三区| 丝袜诱惑制服诱惑色一区在线观看 | 久久爱www.| 蜜臀久久久99精品久久久久久| 黑人精品一区| 美女国产一区二区三区| 9久re热视频在线精品| 日韩在线二区| 免费观看亚洲| 国产福利91精品一区二区| 日韩av成人高清| 亚洲视频二区| 蜜桃91丨九色丨蝌蚪91桃色| 狠狠久久婷婷| 欧美日韩国产免费观看| 欧美日韩在线网站| 久久激情婷婷| 91精品国产乱码久久久久久久| 国产网站在线| 日韩免费久久| 黄在线观看免费网站ktv| 国产精品久久| 日韩成人a**站| sm捆绑调教国产免费网站在线观看| 麻豆成人91精品二区三区| 久久99蜜桃| 国产精品蜜芽在线观看| 激情综合五月| 精品欧美一区二区三区在线观看| 国产夫妻在线| 欧美性感美女一区二区| 99视频一区| 91成人在线网站| 国产欧美大片| 欧美日韩在线观看首页| 99精品在线观看| 亚洲手机在线| 亚洲精品大片| 精品国产一区二区三区2021| 成人亚洲精品| 亚洲精品2区| 亚洲精品护士| 国产一区国产二区国产三区| 极品日韩av| 日韩不卡一区二区三区| 国产精品三级| 99久久精品费精品国产| 亚洲v天堂v手机在线| 精品国产一区二区三区性色av| 日韩一区二区三区免费播放| 亚洲欧美在线综合| 国产亚洲欧美日韩在线观看一区二区 | 国产福利片在线观看| 五月精品视频| 欧美aⅴ一区二区三区视频| 在线国产一区二区| 国产精品99久久免费观看| 午夜免费一区| 国产精品久久久一区二区| 99pao成人国产永久免费视频 | 国产乱子精品一区二区在线观看| 日韩高清成人| 欧美国产专区| 久久午夜视频| 在线天堂资源www在线污| 日本一区福利在线| 激情综合在线| 91av亚洲| 久久精品理论片| 日韩av中文字幕一区二区三区| 久久国产亚洲精品| 91伊人久久| 免费在线看一区| 黄色成人在线网址| 欧美日韩尤物久久| 福利一区在线| 欧美国产极品| 国产毛片久久久| 97久久亚洲| 亚洲a成人v| 日韩在线成人| 日韩三区四区| 少妇精品久久久一区二区| 亚洲女同一区| 亚洲美女久久| 免费人成网站在线观看欧美高清| 久久人人99| 久久九九99| 亚洲激情中文| 久久大逼视频| 中文不卡在线| 国产日韩欧美一区二区三区在线观看| 中文不卡在线| 欧美成a人片免费观看久久五月天|