游戏截图

代码 Java14写的哦低版本会报错

文件列表

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;//标记蛇final Object cluck = 2;private boolean moveBoolean = true;
//    private boolean firstTime = true;public MainFame() {//    初始化框体initFrame();
//    初始化网格initGamePanel();
//    初始化蛇initSnake();
//        初始化食物initFood();setVisible(true);try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}
//        初始化定时器
//        initTimer();
//        键盘监听setKyeListener();
//        启动多线程
//        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();}}//键盘监听private void setKyeListener() {addKeyListener(new KeyAdapter() {//            按下键盘@Overridepublic 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;}});}//    多线程船舰蛇@Overridepublic 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());}}//        初始化定时器private void initTimer(Snake snake, Snake snake1, String name) {//        创建定时器对象//定时器Timer timer = new Timer();//        初始化定时任务TimerTask timerTask = new TimerTask() {@Overridepublic void run() {if (snake.getIslive()) {synchronized (cluck) {snake.move(snake1);//1,moveBoolean = true;}
//                吃食物,临界区处理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 + "结束!!!");System.out.println("蛇线程" + name + "得分:" + snake.scor);}}};
//        每100毫秒执行一次定时任务timer.scheduleAtFixedRate(timerTask, 0, 100);}private void initSnake() {this.snake = new Snake(18);this.snake1 = new Snake(22);}//    初始化网格private void initGamePanel() {jpanel = new JPanel() {@Overridepublic void paint(Graphics g) {super.paint(g);
//                清空棋盘g.clearRect(0, 0, 600, 600);
//                画线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);}}};
//        添加网格到框体中add(jpanel);}//    初始化框体public void initFrame() {//        标题setTitle("胡柯洋的贪吃蛇");
//        大小setSize(616, 639);
//        不可调节大小setResizable(false);
//        设置位置setLocation(0, 200);
//        点x关闭setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}public static void start(){JFrame jFrame = new JFrame();JButton jButton = new JButton("点击开始单人游戏");JButton jButton1 = new JButton("点击开始双人游戏");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("主线程结束!!!");}
}
package Sys;import java.util.LinkedList;public class Snake {//方向private Direction direction = Direction.LEFT;//蛇身体private LinkedList<Node> body;//蛇生命private boolean islive = true;//分数int scor = 0;
//    int sign;
//    Snake snake1;public Snake(int y) {initSnake(y);}//    有移动蛇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);//errorif (node.getX() == head.getX() && node.getY() == head.getY()) {this.islive = false;break;}}}}//    初始化蛇private void initSnake(int y) {//        初始化蛇的实例body = new LinkedList<>();
//        添加节点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;
}

javaswing 贪吃蛇双人小游戏相关推荐

  1. 用前端技术实现贪吃蛇的小游戏

    用前端技术实现贪吃蛇的小游戏 前言 游戏功能 游戏设计 游戏主页代码 游戏中的js代码(snake.js) 游戏运行界面 前言 周末大热天窝在家里无聊,想温习一下前端开发,所以用javascript ...

  2. 贪食蛇php,贪吃蛇网页小游戏的代码

    贪吃蛇网页小游戏的代码 ::selection { color:#FFFFFF; background:transparent; } ::-moz-selection { color:#FFFFFF; ...

  3. 隐藏窗口 java swing_Java简单实现贪吃蛇经典小游戏(附源代码)

    在我们学习java的时候,为了提高我们的兴趣,我们经常会使用所学到的知识去做一些小游戏,这篇blog就介绍了一个经典而且好理解的小游戏-贪吃蛇. 一.使用知识 Jframe GUI 双向链表 线程 二 ...

  4. 贪吃蛇html网页小游戏,网页贪吃蛇HTML5小游戏制作

    贪吃蛇是以前我们经常在手机里玩的一个小游戏,现在要是把它搬到网页上也会让人更回味.这是一款非常有趣的HTML5响应式网页贪吃蛇小游戏.在游戏中你可以使用键盘的上下左右来控制蛇的运动方向.现在要列出的是 ...

  5. 在家用c++实现贪吃蛇——c++小游戏

    伪代码: 地图为二位数组 int main(){ 死循环 刷新地图 生成水果 获取键盘 移动头部 判定死亡.吃到水果 if(没有吃到水果) {移动尾部 } 等待指定秒数 清屏 } 首先,我们因该可以把 ...

  6. 最终幻想游戏java_Java简单实现贪吃蛇经典小游戏(附源代码)

    在我们学习java的时候,为了提高我们的兴趣,我们经常会使用所学到的知识去做一些小游戏,这篇blog就介绍了一个经典而且好理解的小游戏-贪吃蛇. 一.使用知识Jframe GUI 双向链表 线程 二. ...

  7. 100行实现《贪吃蛇》小游戏详解(Qt)

    目录 游戏说明 游戏效果展示 游戏代码详解 ​关键数据结构 初始化游戏界面 游戏部分 提示部分 蛇逻辑 小蛇的初始化 边界判断 蛇吃食物判断 随机生成食物 是否撞到自己 小蛇的移动 游戏主体逻辑 定时 ...

  8. 用javascript+jquery编写的小游戏-贪吃蛇(双人对战版)

    前言 这是我在多年前初学jquery, 并结合javascript, 编写的一个小游戏.那洋洋洒洒几千行的js代码时刻提醒着我"不忘初心!". 效果演示 代码 引入文件 由于用到了 ...

  9. c语言联机游戏,C/C++ 游戏 贪吃蛇双人对战版

    贪吃蛇双人对战版--C语言 最近写的,用于交最后一次结构化程序设计课的作业,闲暇之余传到网上,仅供参考,新手上路,请多指教. 话不多说,先附上下载链接.http://download.csdn.net ...

最新文章

  1. 软工Chapter Seven
  2. 小波变换工程实现原理总结
  3. python中case的用法_用 Python 实现简单的 switch/case 语句
  4. Mongodb存储特性与内部原理
  5. ERP商品管理业务逻辑封装(三十四)
  6. 《正则表达式经典实例(第2版)》——2.18 向正则表达式中添加注释
  7. Head First Design Patterns(深入浅出设计模式)-设计模式介绍
  8. UVa 12261 High Score (贪心“向左走,向右走”)
  9. bh1750采集流程图_多路BH1750光强检测系统的设计
  10. 2022-2028全球与中国语音疏散系统市场现状及未来发展趋势
  11. GoogleChromePortable 谷歌chrome浏览器便携版官网下载方式
  12. PDF编辑器首选工具Acrobat Pro DC
  13. Express(一) ——简单入门
  14. 背包三讲(感谢崔添翼 (Tianyi Cui)大佬的无私奉献)
  15. PTA判断题总结(1)
  16. Java Java!
  17. 洛谷 1546 最短网络
  18. 如何写出无法维护的代码
  19. RN终止所有节点进程并启动npm服务器命令
  20. 如何支持github账号登录

热门文章

  1. 由控制器和运算器组成微型计算机系统中的,微型计算机的主机由控制器运算器和什么构成...
  2. 九方智投李红红:新型储能方案推动锂电池迎来新商机
  3. 【bzoj2434】阿狸的打字机 AC自动机+树状数组
  4. Python入门之字典
  5. python贴吧签到神器永久雷霆之怒_雷霆之怒神器脚本辅助 雷霆之怒幻神搭配攻略分享...
  6. 工作邦智慧水务云平台支持的20+硬件
  7. Oracle远程创建表空间报错ORA-01119 ORA-27040 OSD-O4OO2
  8. NTLDR is missing
  9. 超详细的计算机网络基础知识总结 第一章:概述
  10. 江苏省计算机中级职称题库,计算机中级职称考试复习题「附答案」