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

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

200行java代碼實現2048小游戲

瀏覽:22日期: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久久,三上悠亚国产精品一区二区三区
午夜久久黄色| 91精品国产乱码久久久久久久| 91中文字幕精品永久在线| 国产精品tv| 精品视频一区二区三区四区五区 | 蜜臀久久99精品久久一区二区| 在线天堂中文资源最新版| 麻豆成全视频免费观看在线看| 精品福利久久久| 日本蜜桃在线观看视频| 在线成人直播| 日韩欧美四区| 精品女同一区二区三区在线观看| 国产在线一区不卡| 国产精品av一区二区| 亚洲深夜av| 日韩精品第二页| 桃色一区二区| 欧美一级网址| 久久三级中文| 91久久中文| 国产欧美日韩综合一区在线播放| 九九久久国产| 日韩午夜av| 麻豆91小视频| 久久亚洲色图| 国语对白精品一区二区| 午夜久久美女| 国内精品麻豆美女在线播放视频| 午夜久久一区| 久久成人高清| 野花国产精品入口| 成人精品久久| 欧美天堂一区| 91精品在线观看国产| 蜜芽一区二区三区| 久久久夜精品| 黄色网一区二区| 天堂久久av| 欧美网站在线| 黑森林国产精品av| 国产精品一区亚洲| 中文字幕一区二区三区日韩精品 | 精精国产xxxx视频在线野外| 玖玖精品视频| 久久精品影视| 成人亚洲欧美| 国产一区丝袜| 国产精品成人自拍| 欧美一级久久| 日韩精品一区二区三区中文在线| 免费毛片在线不卡| 午夜欧美巨大性欧美巨大| 国产欧美日韩一区二区三区四区| 最新国产精品久久久| 亚洲我射av| 亚洲一区二区三区无吗| 国产麻豆综合| av亚洲免费| 日韩欧美网址| 久久精品观看| 日韩免费一区| 亚洲一级网站| 亚洲专区欧美专区| 在线亚洲激情| 亚洲啊v在线免费视频| 日韩激情一区二区| 国产精品成人一区二区网站软件| 国产欧美日韩一级| 国内精品麻豆美女在线播放视频| 福利片在线一区二区| 青青青免费在线视频| www成人在线视频| 午夜欧美精品久久久久久久| 少妇精品导航| 男女男精品网站| 国产精品伊人| 色婷婷久久久| 蜜臀久久久久久久| 国产精品欧美三级在线观看| 电影91久久久| 国产精品日本| 麻豆传媒一区二区三区| 97在线精品| 国产精品99一区二区| 日本欧美一区| 三级精品视频| 欧美日韩xxxx| 欧美不卡视频| 日韩黄色在线观看| 超碰成人av| 日韩激情精品| 91精品一区二区三区综合在线爱| 深夜福利一区| 亚洲高清毛片| 精品视频亚洲| 中文字幕免费一区二区| 亚洲黄色网址| 亚洲三级网站| 激情欧美丁香| 国产精品亚洲综合色区韩国| 99综合视频| 最新中文字幕在线播放| 日本免费一区二区视频| 日本美女一区| 久久黄色影视| 另类激情亚洲| 欧美午夜不卡| av高清一区| 国产精品蜜芽在线观看| 国产乱人伦丫前精品视频| 在线精品小视频| 欧美gv在线| 亚洲伦乱视频| 久久uomeier| 水蜜桃久久夜色精品一区| 日本少妇一区二区| 日韩精品一级中文字幕精品视频免费观看 | 99国产精品自拍| 久久天堂精品| 一区二区小说| 不卡一区2区| 欧美日韩在线播放视频| 性感美女一区二区在线观看| 欧美激情另类| 国产伦久视频在线观看| 美女视频黄久久| 成人午夜毛片| 国产理论在线| 成人精品亚洲| 久久一级电影| 亚洲免费在线| 黄色免费成人| 丝袜美腿一区二区三区| 欧美一区=区| 亚洲乱码视频| 国产日韩欧美一区二区三区在线观看| 日韩精品久久久久久久软件91| 中文字幕日本一区| 欧美另类中文字幕| 国产精品免费99久久久| 美女视频免费精品| 伊人久久在线| 亚洲一区观看| 日韩av不卡一区二区| 免费日韩成人| 久久久久久免费视频| 婷婷综合亚洲| 日本不卡视频在线| 久久久久伊人| 91九色精品| 欧美自拍一区| 欧美精品高清| 日韩不卡一二三区| 日韩高清成人| 久久黄色影视| 亚洲午夜精品久久久久久app| 免费看精品久久片| 精品国产免费人成网站| 免费看精品久久片| 高清一区二区| 日本中文字幕视频一区| 久久精品理论片| 美女尤物久久精品| 亚洲黄色中文字幕| 日韩精品一区二区三区中文字幕| 日韩免费看片| 国产精品天天看天天狠| 国内激情久久| 国产在线不卡一区二区三区| 亚洲狼人精品一区二区三区| 亚洲欧洲日韩精品在线| 四虎8848精品成人免费网站| 久久精品国产免费| 久久视频精品| 日韩影院二区| av综合电影网站| 日韩精品中文字幕一区二区| 精品日产乱码久久久久久仙踪林| 欧美私人啪啪vps| 国产亚洲一级| 九九久久国产| 国产一区二区三区亚洲综合| 国模精品一区| 国产亚洲亚洲| 国产精品视频一区视频二区| 成人亚洲一区二区| 鲁大师成人一区二区三区| 欧美一区成人| 久久久久免费av| 日韩和欧美一区二区三区| 久久久久久色| 日韩av中文字幕一区二区三区| 国产精品三p一区二区| 不卡在线一区二区| 麻豆久久久久久久| 亚洲制服欧美另类| 精品日韩视频| 国产免费久久| 日韩午夜在线|