最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java使用GUI實(shí)現(xiàn)貪吃蛇游戲

 更新時(shí)間:2022年04月02日 08:29:34   作者:.墨跡.  
這篇文章主要為大家詳細(xì)介紹了java使用GUI實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

整個(gè)代碼分為三部分

1.游戲開始界面
2.data基本圖片的添加
3.面板,將小蛇畫到面板上

這是游戲完整界面

1. 游戲開始界面

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.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
? ? ? ? frame.setVisible(true);

? ? }
}

2.data數(shù)據(jù)

public class Data {

? ? private static URL headerURL=Data.class.getResource("statics/header.png");
? ? public static ImageIcon header=new ImageIcon(headerURL);
? ? private static URL upURL=Data.class.getResource("statics/up.png");
? ? private static URL downURL=Data.class.getResource("statics/down.png");
? ? private static URL leftURL=Data.class.getResource("statics/left.png");
? ? private static URL rightURL=Data.class.getResource("statics/right.png");

? ? public static ImageIcon up=new ImageIcon(upURL);
? ? public static ImageIcon down=new ImageIcon(downURL);
? ? public static ImageIcon left=new ImageIcon(leftURL);
? ? public static ImageIcon right=new ImageIcon(rightURL);

? ? private static URL bodyURL=Data.class.getResource("statics/body.png");
? ? public static ImageIcon body=new ImageIcon(bodyURL);

? ? private static URL foodURL=Data.class.getResource("statics/food.png");
? ? public static ImageIcon food=new ImageIcon(foodURL);

}

3.面板繪制

public class GamePanel extends JPanel ?implements KeyListener, ActionListener {

? ? int length;
? ? int [] snakeX=new int[600];
? ? int [] snakeY=new int[500];
? ? String fx;

? ? int foodx;
? ? int foody;
? ? Random random=new Random();

? ? int score;


? ? boolean isStart=false;
? ? boolean isFail=false;

? ? Timer timer=new Timer(75,this);

? ? public GamePanel() {
? ? ? ? init();
? ? ? ? this.setFocusable(true);
? ? ? ? this.addKeyListener(this);
? ? ? ? timer.start();
? ? }

? ? public void init(){
? ? ? ? length=3;
? ? ? ? snakeX[0]=100;snakeY[0]=100;
? ? ? ? snakeX[1]=75;snakeY[1]=100;
? ? ? ? snakeX[2]=50;snakeY[2]=100;
? ? ? ? fx ="R";

? ? ? ? foodx=25+25*random.nextInt(34);
? ? ? ? foody=75+25*random.nextInt(24);
? ? ? ? score=0;
? ? }

? ? @Override
? ? protected void paintComponent(Graphics g) {
? ? ? ? super.paintComponent(g);

? ? ? ? this.setBackground(Color.WHITE);
? ? ? ? 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("長(zhǎng)度"+length,750,30);
? ? ? ? g.drawString("分?jǐn)?shù)"+score,750,50);

? ? ? ? Data.food.paintIcon(this,g,foodx,foody);

? ? ? ? if(fx.equals("R")){
? ? ? ? ? ? Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);
? ? ? ? }else if(fx.equals("L")){
? ? ? ? ? ? Data.left.paintIcon(this,g,snakeX[0],snakeY[0]);
? ? ? ? }else if(fx.equals("U")){
? ? ? ? ? ? Data.up.paintIcon(this,g,snakeX[0],snakeY[0]);
? ? ? ? }else if(fx.equals("D")){
? ? ? ? ? ? Data.down.paintIcon(this,g,snakeX[0],snakeY[0]);
? ? ? ? }

? ? ? ? //Data.right.paintIcon(this,g,snakeX[0],snakeY[0]);
? ? ? ? for (int i = 1; i < length; i++) {
? ? ? ? ? ? Data.body.paintIcon(this,g,snakeX[i],snakeY[i]);
? ? ? ? }

? ? ? ? if(isStart==false){
? ? ? ? ? ? g.setColor(Color.white);
? ? ? ? ? ? g.setFont(new Font("宋體",Font.BOLD,40));
? ? ? ? ? ? g.drawString("想玩就嗯空格",300,300);
? ? ? ? }

? ? ? ? if(isFail){
? ? ? ? ? ? g.setColor(Color.red);
? ? ? ? ? ? g.setFont(new Font("微軟雅黑",Font.BOLD,40));
? ? ? ? ? ? g.drawString("人生不能重來(lái),請(qǐng)走好每一步",150,350);
? ? ? ? }
? ? }

? ? @Override
? ? public void keyPressed(KeyEvent e) {
? ? ? ? int keyCode = e.getKeyCode();
? ? ? ? if(keyCode == KeyEvent.VK_SPACE){
? ? ? ? ? ? if(isFail){
? ? ? ? ? ? ? ? isFail=false;
? ? ? ? ? ? ? ? init();
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? isStart=!isStart;
? ? ? ? ? ? }
? ? ? ? ? ? repaint();
? ? ? ? }
? ? ? ? if(keyCode==KeyEvent.VK_UP){
? ? ? ? ? ? fx="U";
? ? ? ? }else ?if(keyCode==KeyEvent.VK_DOWN){
? ? ? ? ? ? fx="D";
? ? ? ? }else ?if(keyCode==KeyEvent.VK_LEFT){
? ? ? ? ? ? fx="L";
? ? ? ? }else ?if(keyCode==KeyEvent.VK_RIGHT){
? ? ? ? ? ? fx="R";
? ? ? ? }

? ? }
? ? @Override
? ? public void actionPerformed(ActionEvent e) {
? ? ? ? if(isStart&&isFail==false){

? ? ? ? ? ? if(foodx==snakeX[0]&&foody==snakeY[0]){
? ? ? ? ? ? ? ? length++;

? ? ? ? ? ? ? ? score+=10;


? ? ? ? ? ? ? ? foodx=25+25*random.nextInt(34);
? ? ? ? ? ? ? ? foody=75+25*random.nextInt(24);
? ? ? ? ? ? }

? ? ? ? ? ? for (int i = length-1; i >0 ; i--) {
? ? ? ? ? ? ? ? ?snakeX[i]=snakeX[i-1];
? ? ? ? ? ? ? ? ?snakeY[i]=snakeY[i-1];
? ? ? ? ? ? }
? ? ? ? ? ? if(fx.equals("R")){
? ? ? ? ? ? ? ? snakeX[0] =snakeX[0]+25;
? ? ? ? ? ? ? ? if(snakeX[0]>850){ snakeX[0]=25; }
? ? ? ? ? ? }else if(fx.equals("L")){
? ? ? ? ? ? ? ? snakeX[0] =snakeX[0]-25;
? ? ? ? ? ? ? ? if(snakeX[0]<25){ snakeX[0]=850; }
? ? ? ? ? ? }else if(fx.equals("U")){
? ? ? ? ? ? ? ? snakeY[0]=snakeY[0]-25;
? ? ? ? ? ? ? ? if(snakeY[0]<75){snakeY[0]=650;}
? ? ? ? ? ? }else if(fx.equals("D")){
? ? ? ? ? ? ? ? snakeY[0]=snakeY[0]+25;
? ? ? ? ? ? ? ? if(snakeY[0]>650){snakeY[0]=75;}
? ? ? ? ? ? }

? ? ? ? ? ? for (int i = 1; i < length; i++) {
? ? ? ? ? ? ? ? if(snakeY[0]==snakeY[i]&&snakeX[0]==snakeX[i]){
? ? ? ? ? ? ? ? ? ? isFail=true;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }

? ? ? ? ? ? repaint();
? ? ? ? }
? ? ? ? timer.start();
? ? }


? ? @Override
? ? public void keyTyped(KeyEvent e) {

? ? }
? ? @Override
? ? public void keyReleased(KeyEvent e) {

? ? }


}

小蛇的各個(gè)部位參數(shù)如下

頭部尺寸

身體尺寸

食物尺寸

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

相關(guān)文章

  • SpringBoot使用AOP實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn)

    SpringBoot使用AOP實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn)

    這篇文章主要介紹了SpringBoot如何使用AOP實(shí)現(xiàn) 統(tǒng)一角色權(quán)限校驗(yàn),文中有詳細(xì)的代碼示例講解和操作流程,具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Java中抽象類和接口介紹

    Java中抽象類和接口介紹

    大家好,本篇文章主要講的是Java中抽象類和接口介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Java Metrics系統(tǒng)性能監(jiān)控工具的使用詳解

    Java Metrics系統(tǒng)性能監(jiān)控工具的使用詳解

    Metrics是一個(gè)Java庫(kù),可以對(duì)系統(tǒng)進(jìn)行監(jiān)控,統(tǒng)計(jì)一些系統(tǒng)的性能指標(biāo)。本文就來(lái)和大家詳細(xì)聊聊這個(gè)工具的具體使用,希望對(duì)大家有所幫助
    2022-11-11
  • springboot+vue實(shí)現(xiàn)登錄功能

    springboot+vue實(shí)現(xiàn)登錄功能

    這篇文章主要為大家詳細(xì)介紹了springboot+vue實(shí)現(xiàn)登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Spring Mybatis 分頁(yè)插件使用教程

    Spring Mybatis 分頁(yè)插件使用教程

    這篇文章主要介紹了Spring Mybatis分頁(yè)插件使用教程,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • 混亂的Java日志體系及集成jar包梳理分析

    混亂的Java日志體系及集成jar包梳理分析

    這篇文章主要詳細(xì)的為大家梳理分析了剪不斷理還亂的Java日志體系,以及日志系統(tǒng)涉及到的繁雜的各種集成?jar?包,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-03-03
  • SpringBoot整合Mybatis實(shí)現(xiàn)CRUD

    SpringBoot整合Mybatis實(shí)現(xiàn)CRUD

    這篇文章主要介紹了SpringBoot整合Mybatis實(shí)現(xiàn)CRUD的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 如何使用RabbitMQ實(shí)現(xiàn)異步秒殺

    如何使用RabbitMQ實(shí)現(xiàn)異步秒殺

    這篇文章主要介紹了如何使用RabbitMQ實(shí)現(xiàn)異步秒殺,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2025-04-04
  • mybatis向數(shù)據(jù)庫(kù)里插入記錄后自動(dòng)返回記錄ID問(wèn)題

    mybatis向數(shù)據(jù)庫(kù)里插入記錄后自動(dòng)返回記錄ID問(wèn)題

    本文介紹了在接手項(xiàng)目時(shí),對(duì)一個(gè)業(yè)務(wù)處理邏輯進(jìn)行重構(gòu)和性能優(yōu)化的經(jīng)歷,作者提到,性能問(wèn)題可能是導(dǎo)致bug的一個(gè)重要原因,作者提到,在以前的.NET項(xiàng)目中,插入記錄后系統(tǒng)會(huì)自動(dòng)刷新實(shí)體類,為其中的主鍵ID賦值,而SpringBoot項(xiàng)目mybatis也可以通過(guò)指定主鍵來(lái)優(yōu)化代碼
    2025-01-01
  • Java線程安全問(wèn)題的解決方案

    Java線程安全問(wèn)題的解決方案

    這篇文章主要介紹了Java線程安全問(wèn)題的解決方案,文章關(guān)于安全的問(wèn)題的解決方案本文主要分享了三種方法,使用線程安全類,比如?AtomicInteger,使用線程本地變量?ThreadLocal,加鎖排隊(duì)執(zhí)行,三種方法的使用場(chǎng)景及區(qū)別需要的小伙伴可以參考一下
    2022-05-05

最新評(píng)論

祁门县| 彭水| 长垣县| 嘉义县| 柳林县| 镇江市| 永春县| 浦城县| 嘉善县| 永丰县| 马鞍山市| 贡觉县| 六盘水市| 岱山县| 永清县| 马公市| 河池市| 庆阳市| 兴文县| 疏附县| 崇阳县| 新巴尔虎左旗| 科技| 静宁县| 双流县| 响水县| 宿州市| 绥德县| 新营市| 漳浦县| 贺兰县| 甘谷县| 漳州市| 区。| 新蔡县| 临漳县| 吴川市| 兰西县| 札达县| 阿城市| 高阳县|