废话不多说,直接奉上代码:
Фрейм.java
пакетная змея; импортировать java.awt.Graphics;импортировать java.awt.Menu;импортировать java.awt.MenuBar;импортировать java.awt.MenuItem;импортировать java.awt.event.ActionEvent;импортировать java.awt.event.ActionListener;импортировать java.awt .event.KeyEvent;import java.awt.event.KeyListener; импортировать javax.swing.JFrame; общедоступный класс Frame расширяет JFrame реализует KeyListener { /** * */ Boolean isAlive; Логическое значение isPause; Панельная панель; Направление персонажа; частный статический окончательный длинный сериалVersionUID = 1L; public Frame(){ // TODO Автоматически созданная заглушка конструктора setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(300,300); addKeyListener (это); панель = новая панель(); добавить (панель); setVisible (истина); isAlive = правда; isPause = ложь; направление = новый персонаж('d'); MenuBar MenuBar = новый MenuBar (); Меню меню = новое меню("меню"); MenuItem сброс = новый MenuItem("новая игра"); MenuItem пауза = новый MenuItem («пауза»); пауза.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Автоматически создаваемая заглушка метода if(!isPause) isPause= true; else isPause= false; } }); reset.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent e) { // TODO Автоматически создаваемая заглушка метода reset(); } }); меню.добавить(сброс); меню.добавить(пауза); MenuBar.add(меню); setMenuBar (менюБар); } Общественный недействительный сброс () { Panel.reset (); isAlive = правда; } @Override public void keyTyped(KeyEvent e) { // Автоматически созданная заглушка метода TODO } @Override public void keyPressed(KeyEvent e) { // Автоматически созданная заглушка метода TODO if(e.getKeyCode()==KeyEvent.VK_UP ) направление = 'w'; if(e.getKeyCode()==KeyEvent.VK_DOWN) направление = 's'; if(e.getKeyCode()==KeyEvent.VK_LEFT) направление = 'a'; if(e.getKeyCode()==KeyEvent.VK_RIGHT) направление = 'd'; } @Override public void keyReleased(KeyEvent e) { // TODO Автоматически сгенерированная заглушка метода } public void Paint(Graphics g){ Panel.repaint(); } }
Запуск.java
пакетная змея; импортировать java.util.Timer; импортировать java.util.TimerTask; Открытый класс Launch расширяет TimerTask {Frameframe = new Frame(); public Launch() { // Автоматически сгенерированная заглушка конструктора TODO } booleanrashWall(){ SnakeBody sb =frame.panel.snake.getFirst(); if((sb.x<0)||(sb.y<0)||(sb.x>=Panel.LINE)||(sb.y>=Panel.LINE)) возвращает true; иначе верните ложь; } void Initial() {frame.panel.snake.add(newBody()); frame.panel.food = newBody(); } @Override public void run() { // TODO Автоматически сгенерированная заглушка метода if(frame.panel.snake.isEmpty()) Initial(); если(frame.isAlive) если(!frame.isPause){ если(goStraight())frame.isAlive = false; рамка.перекрасить(); } Если (crashWall())frame.isAlive = false; } SnakeBody newBody() { SnakeBody sb = новый SnakeBody(); логическое перекрытие = true; в то время как (перекрытие) {перекрытие = ложь; sb.x = (int) (Math.random()*(Panel.LINE-2)+1); sb.y = (int) (Math.random()*(Panel.LINE-2)+1); if(!frame.panel.snake.isEmpty()) for(SnakeBody s :frame.panel.snake) if(sb.equals(s)) перекрытие =true; } Вернуть СБ; } void eat(SnakeBody sb) {frame.panel.snake.addFirst(sb); } Boolean goStraight() {логический результат = false; SnakeBody sb =new SnakeBody(frame.panel.snake.getFirst()); Frame.panel.snake.removeLast(); if(frame.direction=='w') sb.turnUp(); if(frame.direction=='s') sb.turnDown(); if(frame.direction=='a') sb.turnLeft(); if(frame.direction=='d') sb.turnRight(); for(SnakeBody s:frame.panel.snake){ if(sb.equals(s)) result = true; } Frame.panel.snake.addFirst(sb); if(sb.equals(frame.panel.food)){ if(frame.direction=='w')frame.panel.food.turnUp(); if(frame.direction=='s')frame.panel.food.turnDown(); if(frame.direction=='a')frame.panel.food.turnLeft(); if(frame.direction=='d')frame.panel.food.turnRight(); съесть(frame.panel.food); frame.panel.food = newBody(); } вернуть результат; } public static void main(String[] args){ // TODO Автоматически создаваемая заглушка метода Launch timertask = new Launch(); Таймер таймер = новый таймер(); timer.schedule(timertask,0,500); } }
Панель.java
пакетная змея; импортировать java.awt.Color;импортировать java.awt.Graphics;импортировать java.util.LinkedList; импортировать javax.swing.JPanel; публичный класс Panel расширяет JPanel {/** * */ Private static Final Long SerialVersionUID = 1L; общественный LinkedList<SnakeBody> змея = новый LinkedList<SnakeBody>(); статический финал int LINE = 10; Еда SnakeBody = новый SnakeBody(-99,-99); public Panel() { // TODO Автоматически сгенерированная заглушка конструктора } public void reset(){ Snake.clear(); } Public void Paint(Graphics g) { g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); for(SnakeBody sb: змея) { g.setColor(Color.black); g.drawRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); g.setColor(Цвет.оранжевый); g.fillRect(sb.x*getWidth()/LINE,sb.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); } g.setColor(Color.red); g.fillRect(food.x*getWidth()/LINE,food.y*getHeight()/LINE,getWidth()/LINE,getHeight()/LINE); }}
SnakeBody.java
пакетная змея; класс SnakeBody { int x; интервал y; public SnakeBody() { // TODO Автоматически сгенерированная заглушка конструктора x = 0; у = 0; } Общественный SnakeBody (int a, int b) {x = a; у = б; } Public SnakeBody (SnakeBody sb) { this (sb.x, sb.y); } Общественный недействительный TurnUp () { y--; } Общественный недействительный TurnDown () { у ++; } Общественный недействительный TurnLeft () { х--; } Общественный недействительный TurnRight () {х++; } логическое значение равенства(SnakeBody s){ if((x==sx)&&(y==sy)) return true; иначе верните ложь; } }
以上所述就是本文给大家分享的贪吃蛇的全部代码了, 希望能够对大家熟练掌握Java有所帮助。