狂神GUI贪吃蛇免费图片资源加代码(其中逻辑有修改)
生活随笔
收集整理的這篇文章主要介紹了
狂神GUI贪吃蛇免费图片资源加代码(其中逻辑有修改)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
狂神GUI貪吃蛇記錄
首先做一個總結:我是看完Java基礎部分開始這部分學習的,當看到各種類與類之間的調用之后才發現自己的Java基礎其實并沒有學到什么,真的就是學會了int and for,所以只要自己不斷的學習才能足夠的認識到自己的問題,之后會堅持下去的,加油!!!
圖片鏈接(不要積分的): 點擊下載.
目錄結構
代碼部分:
package snake;import javax.swing.*;public class StartGame {public static void main(String[] args) {JFrame frame = new JFrame();frame.setBounds(10,10,900,720);frame.setResizable(false);frame.add(new GamePanel());frame.setVisible(true);frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);} } package snake;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.util.Random;//游戲面板 public class GamePanel extends JPanel implements KeyListener, ActionListener {//定義蛇的數據結構int length;//snack lengthint[] snackX = new int[600];int[] snackY = new int[600];String direct;boolean isStart = false;//游戲狀態boolean isFile = false;int score;//食物坐標int foodX;int foodY;Random random = new Random();//定時器Timer timer = new Timer(100,this);@Overridepublic void actionPerformed(ActionEvent e) {if (isStart && isFile == false) {//如果游戲是開始狀態//吃食物if (snackX[0] == foodX && snackY[0] == foodY){length++;//長度+1score += 10;//再次生成食物foodX = 25+25*random.nextInt(34);foodY = 75+25*random.nextInt(24);}//右移for (int i = length-1; i > 0; i--) {snackX[i] = snackX[i-1];snackY[i] = snackY[i-1];} // for (int i = 1; i < length; i++) { // snackX[i] = snackX[i-1]; // snackY[i] = snackY[i-1]; // } // snackX[0] = snackX[0]+25; // // if (snackX[0]>850){ // snackX[0]=25; // }if (direct.equals("R")){snackX[0] = snackX[0]+25;if (snackX[0]>850){ snackX[0]=25; }//出邊界判斷}else if (direct.equals("L")){snackX[0] = snackX[0]-25;if (snackX[0]<25){ snackX[0]=850; }//出邊界判斷}else if (direct.equals("U")){snackY[0] = snackY[0]-25;if (snackY[0]<75){ snackY[0]=650; }//出邊界判斷}else if (direct.equals("D")){snackY[0] = snackY[0]+25;if (snackY[0]>650){ snackY[0]=75; }//出邊界判斷}//失敗判斷for (int i = 1; i < length ; i++) {if (snackX[0] == snackX[i] && snackY[0] == snackY[i]){isFile = true;}}repaint();//重畫畫面}timer.start();//定時器開啟}public GamePanel() {init();//獲取焦點和鍵盤事件this.setFocusable(true);//獲取焦點this.addKeyListener(this);//獲得鍵盤監聽事件timer.start();//游戲一開始定時器啟動}//初始化public void init(){length = 3;snackX[0]= 100;snackY[0] = 100;//腦袋坐標snackX[1]= 75;snackY[1] = 100;//第一個身體最表snackX[2]= 50;snackY[2] = 100;direct = "R";foodX = 25+25*random.nextInt(34);foodY = 75+25*random.nextInt(24);score = 0;}@Overrideprotected void paintComponent(Graphics g) {super.paintComponent(g);//清屏this.setBackground(Color.BLACK);Data.header.paintIcon(this,g,25,11);g.fillRect(25,75,850,600);//積分顯示g.setColor(Color.white);g.setFont(new Font("微軟雅黑",Font.BOLD,18));g.drawString("長度"+length,750,35);g.drawString("分數"+score,750,50);//身體移動動畫for (int i = 1; i <length ; i++) {Data.body.paintIcon(this,g,snackX[i],snackY[i]);}switch (direct){case "R":Data.right.paintIcon(this,g,snackX[0],snackY[0]);break;case "U":Data.up.paintIcon(this,g,snackX[0],snackY[0]);break;case "D":Data.down.paintIcon(this,g,snackX[0],snackY[0]);break;case "L":Data.left.paintIcon(this,g,snackX[0],snackY[0]);break;}//游戲狀態if(isStart==false){g.setColor(Color.white);g.setFont(new Font("微軟雅黑",Font.BOLD,40));g.drawString("按下空格開始",300,400);}//游戲狀態if(isFile){g.setColor(Color.RED);g.setFont(new Font("微軟雅黑",Font.BOLD,40));g.drawString("游戲失敗",300,400);} // //把小蛇畫上去 // Data.right.paintIcon(this,g,snackX[0],snackY[0]); // Data.body.paintIcon(this,g,snackX[1],snackY[1]); // Data.body.paintIcon(this,g,snackX[2],snackY[2]);//畫食物Data.food.paintIcon(this,g,foodX,foodY );}@Overridepublic void keyTyped(KeyEvent e) {}//鍵盤監聽器@Overridepublic void keyPressed(KeyEvent e) {int keyCode = e.getKeyCode();if(keyCode == KeyEvent.VK_SPACE){if (isFile){//重新開始isFile = false;init();}else {isStart = !isStart;}repaint();}//小蛇移動if (keyCode == KeyEvent.VK_UP){direct = "U";}else if (keyCode == KeyEvent.VK_DOWN){direct = "D";}else if (keyCode == KeyEvent.VK_LEFT){direct = "L";}else if (keyCode == KeyEvent.VK_RIGHT){direct = "R";}}@Overridepublic void keyReleased(KeyEvent e) {}} package snake;import javax.swing.*; import java.net.URL;public class Data {public static URL headerURL = Data.class.getResource("statics/header.png");public static ImageIcon header = new ImageIcon(headerURL);public static URL upURL = Data.class.getResource("statics/up.png");public static URL leftURL = Data.class.getResource("statics/left.png");public static URL rightURL = Data.class.getResource("statics/right.png");public static URL downURL = Data.class.getResource("statics/down.png");public static ImageIcon up = new ImageIcon(upURL);public static ImageIcon left = new ImageIcon(leftURL);public static ImageIcon right = new ImageIcon(rightURL);public static ImageIcon down = new ImageIcon(downURL);public static URL bodyURL = Data.class.getResource("statics/body.png");public static ImageIcon body = new ImageIcon(bodyURL);public static URL foodURL = Data.class.getResource("statics/food.png");public static ImageIcon food = new ImageIcon(foodURL); }總結
以上是生活随笔為你收集整理的狂神GUI贪吃蛇免费图片资源加代码(其中逻辑有修改)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 优雅的操作张量维度(rearrange)
- 下一篇: Abusing UIViewContro