廢話不多說了,直接轉發上程式碼:
框架.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;導入java.awt.event.KeyListener;導入 javax.swing.JFrame;公共類別 Frame 擴充 JFrame 實作 KeyListener { /** * */ Boolean isAlive;布林值是暫停;面板面板;人物方向;私有靜態最終長serialVersionUID = 1L; public Frame(){ // TODO 自動產生的建構子存根 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);設定大小(300,300);新增KeyListener(這個);面板=新面板();添加(面板);設定可見(真);還活著=真; isPause = false;方向=新角色('d');選單列 menuBar = new 選單列();選單選單=新選單(“選單”);選單項目重置=新選單項目(“新遊戲”);選單項目暫停=新選單項目(“暫停”); pause.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(); } });選單.新增(重置);選單.新增(暫停);選單列.add(選單);設定選單列(選單列); } 公共無效重置(){ 面板.重置();還活著=真; } @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 自動產生建構子存根 } boolean crashWall(){ SnakeBody sb = frame.panel.snake.getFirst(); if((sb.x<0)||(sb.y<0)||(sb.x>=Panel.LINE)||(sb.y>=Panel.LINE)) 傳回 true;否則返回 false; } voidinitial(){frame.panel.snake.add(newBody()); frame.panel.food = newBody(); } @Override public void run() { // TODO 自動產生的方法存根 if(frame.panel.snake.isEmpty()) initial(); if(frame.isAlive) if(!frame.isPause){ if(goStraight())frame.isAlive = false;框架.重繪(); if(crashWall())frame.isAlive = false; } SnakeBody newBody(){ SnakeBody sb = new SnakeBody();布林重疊 = true; while(重疊){ 重疊 = false; 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); } 布林 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 = newBody();返回結果; } public static void main(String[] args){ // TODO 自動產生的方法存根 Launch timertask = new Launch();計時器計時器 = new Timer();計時器.schedule(timertask,0,500); } }
面板.java
包蛇;導入java.awt.Color;導入java.awt.Graphics;導入java.util.LinkedList;導入javax.swing.JPanel;公用類別面板擴充JPanel { / ** * * /私有靜態最終長serialVersionUID = 1L; public LinkedList<SnakeBody> Snake = new LinkedList<SnakeBody>();靜態最終 int LINE = 10; SnakeBody 食物 = new SnakeBody(-99,-99); public Panel() { // TODO 自動產生的建構子存根 } public void reset(){ Snake.clear(); } 公共無效油漆(圖形g){ g.setColor(Color.white); g.fillRect(0, 0, getWidth(), getHeight()); for(SnakeBody sb : Snake){ 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; y = 0; } 公共 SnakeBody(int a,int b){ x = a; y=b; } 公共 SnakeBody(SnakeBody sb){ this(sb.x,sb.y); } 公無效turnUp(){ y--; } 公無效 TurnDown(){ y++; } 公共無效turnLeft(){ x--; } 公共無效turnRight(){x++; } boolean equals(SnakeBody s){ if((x==sx)&&(y==sy)) return true;否則返回 false; } }
以上就是大家文章給大家分享的貪吃蛇的全部程式碼了,希望能對掌握java有幫助。