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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

java swing實(shí)現(xiàn)貪吃蛇雙人游戲

瀏覽:18日期:2022-08-18 16:15:11

本文實(shí)例為大家分享了java swing實(shí)現(xiàn)貪吃蛇游戲的具體代碼,供大家參考,具體內(nèi)容如下

游戲截圖

java swing實(shí)現(xiàn)貪吃蛇雙人游戲

代碼 Java14寫(xiě)的哦低版本會(huì)報(bào)錯(cuò)

文件列表

java swing實(shí)現(xiàn)貪吃蛇雙人游戲

package Sys;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.LinkedList;import java.util.Timer;import java.util.TimerTask;public class MainFame extends JFrame implements Runnable { private Snake snake;//蛇 private Snake snake1;//蛇 private JPanel jpanel;//游戲棋盤 private Node[] food;//食物 private int signSnake = 1;//標(biāo)記蛇 final Object cluck = 2; private boolean moveBoolean = true;// private boolean firstTime = true; public MainFame() {// 初始化框體 initFrame();// 初始化網(wǎng)格 initGamePanel();// 初始化蛇 initSnake();// 初始化食物 initFood(); setVisible(true); try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); }// 初始化定時(shí)器// initTimer();// 鍵盤監(jiān)聽(tīng) setKyeListener();// 啟動(dòng)多線程// Runnable R = this;-----// new Thread(R).start();// new Thread(R).start(); } private void initFood() { food = new Node[3]; for (int i = 0; i < food.length; i++) { food[i] = new Node(); food[i].random(); } } //鍵盤監(jiān)聽(tīng) private void setKyeListener() { addKeyListener(new KeyAdapter() { // 按下鍵盤 @Override public void keyPressed(KeyEvent e) { if(moveBoolean){ switch (e.getKeyCode()) { case KeyEvent.VK_UP -> snake.setDirection(Direction.UP); case KeyEvent.VK_DOWN -> snake.setDirection(Direction.DOWN); case KeyEvent.VK_LEFT -> snake.setDirection(Direction.LEFT); case KeyEvent.VK_RIGHT -> snake.setDirection(Direction.RIGHT); case KeyEvent.VK_W -> snake1.setDirection(Direction.UP); case KeyEvent.VK_S -> snake1.setDirection(Direction.DOWN); case KeyEvent.VK_A -> snake1.setDirection(Direction.LEFT); case KeyEvent.VK_D -> snake1.setDirection(Direction.RIGHT); } } moveBoolean = true; } }); } // 多線程船艦蛇 @Override public void run() { if (signSnake == 1) { signSnake++; Thread.currentThread().setName('->紅色方<-'); initTimer(snake, snake1, Thread.currentThread().getName()); } else if (signSnake == 2) { Thread.currentThread().setName('->綠色方<-'); initTimer(snake1, snake, Thread.currentThread().getName()); } } // 初始化定時(shí)器 private void initTimer(Snake snake, Snake snake1, String name) {// 創(chuàng)建定時(shí)器對(duì)象 //定時(shí)器 Timer timer = new Timer();// 初始化定時(shí)任務(wù) TimerTask timerTask = new TimerTask() { @Override public void run() { if (snake.getIslive()) { synchronized (cluck) { snake.move(snake1);//1, moveBoolean = true; }// 吃食物,臨界區(qū)處理 Node head = snake.getBody().getFirst(); for (Node node : food) { if (head.getX() == node.getX() && head.getY() == node.getY()) { snake.eat(); node.random(); } }// 更新棋盤 jpanel.repaint(); } else { timer.cancel(); System.out.println('蛇線程' + name + '結(jié)束!!!'); System.out.println('蛇線程' + name + '得分:' + snake.scor); } } };// 每100毫秒執(zhí)行一次定時(shí)任務(wù) timer.scheduleAtFixedRate(timerTask, 0, 100); } private void initSnake() { this.snake = new Snake(18); this.snake1 = new Snake(22); } // 初始化網(wǎng)格 private void initGamePanel() { jpanel = new JPanel() { @Override public void paint(Graphics g) { super.paint(g);// 清空棋盤 g.clearRect(0, 0, 600, 600);// 畫(huà)線 for (int i = 0; i < 40; i++) { g.drawLine(0, 15 * i, 600, 15 * i); g.drawLine(15 * i, 0, 15 * i, 600); }// 繪制蛇 g.setColor(Color.blue); LinkedList<Node> body = snake.getBody(); for (int i = 1; i <= body.size(); i++) { if(i == body.size()){ g.setColor(Color.RED); } g.fillRect(body.get(body.size() - i).getX() * 15, body.get(body.size() - i).getY() * 15, 15, 15); }// for (Node node : body) {// if(p == 1){// g.setColor(Color.MAGENTA);// p++;// }else{// g.setColor(Color.RED);// }// g.fillRect(node.getX() * 15, node.getY() * 15, 15, 15);// } g.setColor(Color.PINK); LinkedList<Node> body1 = snake1.getBody(); for (int i = 1; i <= body1.size(); i++) { if(i == body1.size()){ g.setColor(Color.GREEN); } g.fillRect(body1.get(body1.size() - i).getX() * 15, body1.get(body1.size() - i).getY() * 15, 15, 15); }// for (Node node : body1) {// if(p == 1){// g.setColor(Color.PINK);// p++;// }else{// g.setColor(Color.GREEN);// }// g.fillRect(node.getX() * 15, node.getY() * 15, 15, 15);// }// 繪制食物 g.setColor(Color.BLACK); for (Node node : food) { g.fillRect(node.getX() * 15, node.getY() * 15, 15, 15); } } };// 添加網(wǎng)格到框體中 add(jpanel); } // 初始化框體 public void initFrame() {// 標(biāo)題 setTitle('胡柯洋的貪吃蛇');// 大小 setSize(616, 639);// 不可調(diào)節(jié)大小 setResizable(false);// 設(shè)置位置 setLocation(0, 200);// 點(diǎn)x關(guān)閉 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void start(){ JFrame jFrame = new JFrame(); JButton jButton = new JButton('點(diǎn)擊開(kāi)始單人游戲'); JButton jButton1 = new JButton('點(diǎn)擊開(kāi)始雙人游戲'); jButton.addActionListener(e -> { Runnable R = new MainFame(); new Thread(R).start(); }); jButton1.addActionListener(e -> { Runnable R = new MainFame(); new Thread(R).start(); new Thread(R).start(); }); jFrame.setLayout(new FlowLayout(FlowLayout.CENTER, 20, 20)); jFrame.add(jButton1); jFrame.add(jButton); jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jFrame.pack(); jFrame.setVisible(true); jFrame.setLocation(900, 200); } public static void main(String[] args) { start(); System.out.println('主線程結(jié)束!!!'); }}

package Sys;import java.util.LinkedList;public class Snake { //方向 private Direction direction = Direction.LEFT; //蛇身體 private LinkedList<Node> body; //蛇生命 private boolean islive = true; //分?jǐn)?shù) int scor = 0;// int sign;// Snake snake1; public Snake(int y) { initSnake(y); } // 有移動(dòng)蛇 public void move(Snake snake1) {//int sign, if (islive) {//&& sign == 1 // 獲取蛇頭 Node head = body.getFirst(); Node newHead; body.removeLast();//去掉蛇尾 switch (direction) { case UP -> { newHead = new Node(head.getX() % 40, (head.getY() - 1 + 40) % 40); body.addFirst(newHead); } case LEFT -> { newHead = new Node((head.getX() - 1 + 40) % 40, head.getY() % 40); body.addFirst(newHead); } case DOWN -> { newHead = new Node(head.getX() % 40, (head.getY() + 1) % 40); body.addFirst(newHead); } case RIGHT -> { newHead = new Node((head.getX() + 1) % 40, head.getY() % 40); body.addFirst(newHead); } } head = body.getFirst(); if (head.getX() < 0 || head.getY() < 0 || head.getX() >= 40 || head.getY() >= 40) { this.islive = false; }// for (int i = 1; i < body.size(); i++) {// Node node = body.get(i);// if (node.getX() == head.getX() && node.getY() == head.getY()) {// this.islive = false;// }// } int t = snake1.getBody().size(); for (int i = 0; i < t; i++) { Node node = snake1.getBody().get(i);//error if (node.getX() == head.getX() && node.getY() == head.getY()) { this.islive = false; break; } } } } // 初始化蛇 private void initSnake(int y) {// 初始化蛇的實(shí)例 body = new LinkedList<>();// 添加節(jié)點(diǎn) body.add(new Node(16, y)); body.add(new Node(17, y)); body.add(new Node(18, y));// body.add(new Node(19, 20));// body.add(new Node(20, 20));// body.add(new Node(21, 20));// body.add(new Node(22, 20)); } public LinkedList<Node> getBody() { return body; } public void setDirection(Direction direction) { this.direction = direction; } public Direction getDirection() { return direction; } // 吃食物 public void eat() { scor ++; // 獲取蛇頭 Node head = body.getFirst(); Node newHead; switch (direction) { case UP -> { newHead = new Node(head.getX(), head.getY() - 1); body.addFirst(newHead); } case LEFT -> { newHead = new Node(head.getX() - 1, head.getY()); body.addFirst(newHead); } case DOWN -> { newHead = new Node(head.getX(), head.getY() + 1); body.addFirst(newHead); } case RIGHT -> { newHead = new Node(head.getX() + 1, head.getY()); body.addFirst(newHead); } } } public boolean getIslive() { return islive; }}

package Sys;import java.util.Random;public class Node { private int x; private int y;// public boolean isEat = false; public Node() { } public Node(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public void random() { Random r = new Random(); this.x = r.nextInt(34) + 3; this.y = r.nextInt(34) + 3; }}

package Sys;public enum Direction{ UP, DOWN, LEFT, RIGHT;}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产日韩一区二区三免费高清| 91亚洲精品视频在线观看| 国产欧美日韩| 欧美一区成人| 欧美欧美黄在线二区| 欧美一级网址| 国产精品1luya在线播放| 国产精品激情电影| 久久精品国产精品亚洲毛片| 国产一区二区三区不卡av| 国际精品欧美精品| 国产a亚洲精品| 日韩和的一区二在线| 精品久久97| 国产伦久视频在线观看| 亚洲电影有码| 最新日韩欧美| 久久高清一区| 日本视频一区二区| 久久99影视| 电影亚洲精品噜噜在线观看| 影音先锋久久| 日本免费在线视频不卡一不卡二| 欧美日韩亚洲三区| 欧美aaaaaa午夜精品| 97国产成人高清在线观看| 亚洲天堂久久| 中文无码日韩欧| 亚洲日本在线观看视频| 国产亚洲精品美女久久久久久久久久| 欧美天堂在线| 最近高清中文在线字幕在线观看1| 日韩欧美视频专区| 黄色av一区| 日本久久一区| 中文字幕在线看片| 免费视频一区二区| 精品视频在线你懂得| 欧美.日韩.国产.一区.二区| 视频一区日韩精品| 日韩av在线播放网址| 亚洲欧洲一区| 国产亚洲一区| 在线人成日本视频| 中文一区一区三区免费在线观 | 精品一区二区三区中文字幕视频 | 亚洲高清毛片| 亚洲免费毛片| 高清av一区| 性色一区二区| 欧美激情综合| 国产视频一区三区| 老司机免费视频一区二区三区| re久久精品视频| 国产三级一区| 欧美日韩国产亚洲一区| 国产精品超碰| 亚洲欧美日韩在线观看a三区| 国产精品超碰| 亚洲一区二区日韩| 精精国产xxxx视频在线野外| 天堂精品久久久久| 日本免费一区二区三区四区| 亚洲精品一级二级三级| 国产在线|日韩| 国产精品亚洲欧美| 国产精品毛片一区二区三区| 国产一区二区三区日韩精品| 蜜桃av一区二区三区电影| 亚洲天堂免费电影| 国产精品对白| 亚洲啊v在线免费视频| 亚洲www啪成人一区二区| 国产私拍福利精品视频二区| 亚洲永久字幕| 成人久久一区| 六月丁香综合在线视频| 亚欧成人精品| 精品欧美激情在线观看| 久久99高清| 中文字幕亚洲精品乱码| 色婷婷精品视频| 精品一区av| 青青草精品视频| 免费人成网站在线观看欧美高清| 久久久久中文| 国产一区二区三区成人欧美日韩在线观看| 亚欧成人精品| 久热re这里精品视频在线6| 播放一区二区| 精品久久一区| 国产精品色在线网站| 四虎精品一区二区免费| 99热免费精品| 国产国产精品| 久久精品91| 中国字幕a在线看韩国电影| 老司机精品视频网| 国产精品theporn| 日韩av中文字幕一区二区三区| 久久99伊人| 欧美一区=区| 亚洲制服少妇| 亚洲自拍另类| 男女精品网站| 视频精品一区二区| 国产视频欧美| 久久亚洲风情| 中文国产一区| 久久高清国产| 亚洲乱码一区| 亚洲精品伊人| 日韩精品免费一区二区夜夜嗨| 中文字幕一区日韩精品| 婷婷成人av| 欧美日一区二区在线观看| 日韩精品亚洲aⅴ在线影院| 亚洲ww精品| 欧美精品福利| 国产精品一级| 久久亚州av| 久久男人av资源站| 婷婷综合六月| 欧美日韩免费观看视频| 久久精品青草| 性欧美69xoxoxoxo| 欧美午夜不卡影院在线观看完整版免费| 亚洲91视频| 91成人网在线观看| 丝袜亚洲精品中文字幕一区| 一本综合精品| 日韩成人精品一区二区三区 | 久久永久免费| 欧美a级一区二区| 欧美激情五月| 岛国av在线播放| 亚洲综合在线电影| 精品日韩毛片| 久久不射网站| 日韩毛片一区| 国产精品久久国产愉拍| 福利精品一区| 亚洲先锋成人| 在线精品国产亚洲| 欧美啪啪一区| 国产资源在线观看入口av| 日韩不卡视频在线观看| 蘑菇福利视频一区播放| 四虎精品永久免费| 免费亚洲一区| 日韩在线高清| 日韩一区欧美二区| 国产欧美综合一区二区三区| 成人午夜网址| 中文在线一区| 国产精品xxx| 久久久人人人| 亚洲精品九九| 粉嫩av一区二区三区四区五区| 久久婷婷亚洲| 日本久久一区| 色在线中文字幕| 男人天堂欧美日韩| 国产精品一区二区精品视频观看| www.com.cn成人| 久久成人亚洲| 久久精品一本| 午夜在线一区二区| 美腿丝袜亚洲一区| 欧美女激情福利| 国产精品观看| 欧美网站在线| 久久精品亚洲| 视频一区国产视频| 国产一区二区精品福利地址| 亚洲免费婷婷| 麻豆久久久久久久| 不卡在线一区| 国产精品一区亚洲| 久久精品卡一| 国产欧美日韩精品高清二区综合区 | 久久三级福利| 日韩区一区二| 精品国产第一福利网站| 亚洲精品福利| 日韩精品水蜜桃| 国产欧美69| 欧美日韩国产免费观看| 国产亚洲观看| 亚洲一区日韩在线| 四虎国产精品免费观看| 亚洲精品亚洲人成在线观看| 午夜欧美巨大性欧美巨大| 日韩av不卡一区二区| 欧美一区二区三区高清视频| 国产精品久久久久毛片大屁完整版| 免费不卡中文字幕在线| 麻豆一区在线| 亚洲乱码久久| 亚洲精品1区2区|