亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gameframe.java

?? 該程序源碼是我大二暑假時用Java語言寫的一個貪食蛇游戲
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
package SnakeGame;

/**
 *整個游戲的邏輯控制。。。。
 */

import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import javax.swing.event.*;
import java.awt.geom.*;
import java.awt.Toolkit;
import java.awt.color.*;

import java.awt.*;

import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.util.Properties;

public class GameFrame
    extends JFrame {
  private Toolkit tempKit;
  //private int horizontalGrid = 60;
  public javax.swing.Timer snakeTimer;
  //private int verticalGrid = 40;
  private int direction = Global.RIGHT;        //貪食蛇初始時的方向為向右
  private int horizontalGrid,verticalGrid;
  private int singleWidthX ;//= this.getWidth()/horizontalGrid;
  private int singleHeightY ;//= this.getHeight()/verticalGrid;
  private int cooPos ;//= 5;                //畫貪食蛇時,單個小圓點的arc大小
  //private boolean flag = true;
  private int Level = 0;                 //待擴展功能部分,設置關卡,初始時游戲為第一關,分數達到一定值時進入下一關。

  private HashMap delay = new HashMap();   //待擴展功能部分, 設置每一關對應的游戲中貪食蛇移動的速度。
                                           //此處為每一關固定為多少的速度。。
                                           //其實也可以在游戲中 設置加速度這個概念。。。如一直按向右鍵可以向右加速。
                                           //在此程序沒有實現這個功能。。。有時間了考慮擴展一下該功能。
  {
    delay.put(0,75);
    delay.put(1,70);
    delay.put(2,65);
    delay.put(3,60);
    delay.put(4,55);
    delay.put(5,10);
  }
  public static ControlMenu configMenu;

  public boolean paused = false;          //標記游戲“暫停”或“進行”狀態的boolean值。
  private int score;                      //游戲中 得分記錄變量
  private JLabel scoreLabel;              //游戲中 得分記錄牌
  {
    scoreLabel = new JLabel();
  }

  Snake mainSnake = new Snake();          //游戲中的 貪食蛇
  private LinkedList eatedBean;           //游戲中 被吃過的小Bean,并且此時該Bean還在蛇身中,
                                          //單獨將其記錄下來  是為了游戲的過程中,當貪食蛇吃到Bean
                                          //并且蛇身還沒有穿過該Bean時,用不同于貪食蛇自身的顏色顯示出來。

                                          //數據結構采用LinkedList來實現。
                                          // 可以便于遍歷。
  {
    eatedBean = new LinkedList();
  }
  /* // 待擴展部分,增加障礙物。
  private LinkedList wallBean;
  {
    wallBean = new LinkedList();
  }*/

  private Point bean,eatBean;            //生成的食物
  {
    bean = new Point();
  }
  private Iterator iterator ;
  public GameFrame() {
    this.paused = false;
    this.tempKit = this.getToolkit();
    System.out.println(tempKit.getScreenSize().getWidth());
    System.out.println(tempKit.getScreenSize().getHeight());
    this.setSize(tempKit.getScreenSize());
    this.setGrid(Global.GameScreenWidthGrid,Global.GameScreenHeightGrid,Global.SnakePieceCooPos);//(85,63,5);
    this.getContentPane().setBackground(Global.COLOR_BACK);
    this.setUndecorated(true);
    this.setResizable(false);
    this.addKeyListener( new KeyHandler());
    GameFrame.this.snakeTimer = new javax.swing.Timer( 80, new TimerHandler() );
    this.getContentPane().add(scoreLabel,BorderLayout.SOUTH);
    this.configMenu = new ControlMenu(this);
    this.setVisible(true);
  }

  public void setGrid(int temp1,int temp2,int temp3)
  {
    this.horizontalGrid = temp1;
    this.verticalGrid = temp2;
    this.singleWidthX = this.getWidth()/temp1;
    this.singleHeightY = this.getHeight()/temp2;
    this.cooPos = temp3;
  }
  public class KeyHandler extends KeyAdapter
  {
    public void keyPressed(KeyEvent e)
    {
      if(e.getKeyCode() == KeyEvent.VK_ESCAPE)                  //如果是ESC鍵時,隱藏的菜單欄出現,
                                                                // Timer停止計時
      {
        snakeTimer.stop();
        if(paused)
        {
          configMenu.menuItem[2].setEnabled(false);             //如果此時不是暫停狀態,則菜單欄中“暫停”項可用
          configMenu.menuItem[3].setEnabled(true);              //而菜單欄中的“開始”項不可用
        }
        else
        {
          configMenu.menuItem[3].setEnabled(false);             //如果此時不是進行狀態,則菜單欄中“開始”項可用
          configMenu.menuItem[2].setEnabled(true);              //而菜單欄中的“暫停”項不可用
        }
        configMenu.setVisible(true);                            //隱藏的菜單應在相關狀態設置完后,才出現。
        /*
        if (!paused){
          snakeTimer.stop();
          configMenu.setVisible(true);
          //GameFrame.this.changePausedState();

        }
        else {
          snakeTimer.start();
          configMenu.setVisible(false);
          //GameFrame.this.changePausedState();
        }*/
      }
      /** 上,下,左,右移動。。 **/

      else if(e.getKeyCode() == KeyEvent.VK_LEFT && mainSnake.snakeDirection != Global.RIGHT)
      {
        direction = Global.LEFT;
      }
      else if (e.getKeyCode() == KeyEvent.VK_UP && mainSnake.snakeDirection != Global.DOWN)
      {
        direction = Global.UP;
      }
      else if(e.getKeyCode() == KeyEvent.VK_RIGHT && mainSnake.snakeDirection != Global.LEFT)
      {
        direction = Global.RIGHT;
      }
      else if(e.getKeyCode() == KeyEvent.VK_DOWN && mainSnake.snakeDirection != Global.UP)
      {
        direction = Global.DOWN;
      }
      else if(e.getKeyCode() == KeyEvent.VK_SPACE )             //空格鍵, 只有暫停與繼續游戲的作用。
      {
        if(!paused)                                           //暫停游戲時,要將菜單欄與之相關的狀態改變。
        {
          snakeTimer.stop();
          GameFrame.this.changePausedState();
          configMenu.menuItem[2].setEnabled(false);
          configMenu.menuItem[3].setEnabled(true);
        }else                                                //繼續游戲時,要將菜單欄與之相關的狀態改變。
        {
          snakeTimer.start();
          GameFrame.this.changePausedState();
          configMenu.menuItem[3].setEnabled(false);
          configMenu.menuItem[2].setEnabled(true);
        }
        //System.exit(1);
      }
    }
  }

  public class TimerHandler implements ActionListener    // 監聽器
  {
    public void actionPerformed(ActionEvent e)
    {
      Point temp = (Point) mainSnake.getLast();
      iterator = mainSnake.iterator();
      while(iterator.hasNext())                        //計算蛇是否自身相遇算法
      {                                                //先取出蛇的頭部,
                                                       //再取蛇的iterator。然后循環一個一個
                                                       //與頭部比較,真到取到頭部時,如果有重合的。
                                                       //則有判斷蛇與自身相遇了。。
                                                       // 接下來提示游戲結束。。
        Point tempPoint = (Point)iterator.next();
        if(temp.equals(tempPoint) && iterator.hasNext()!=false)
        {
          snakeTimer.stop();
          stopGame();
          JOptionPane.showMessageDialog(null,"Your score is"+score+"\nYou Lost");
          GameFrame.this.resultRecord(score);           // 積分榜 游戲中 成績的記錄  (見該方法詳細說明)

          System.exit(1);
        }
      }
      //System.out.println(temp.x+"--"+temp.y);     游戲中上,下,左,右邊界的判定
      if( (temp.x==0 && direction ==4) ||                 // 左邊界
          (temp.y==0 && direction ==1) ||                 // 上邊界
          (temp.x==horizontalGrid-1 && direction ==2)||   //右邊界
          (temp.y==verticalGrid-1 && direction ==3))      //下邊界
      {
        snakeTimer.stop();
        stopGame();
        JOptionPane.showMessageDialog(null,"Your score is"+score+"\nYou Lost");
        /*積分榜*/
        GameFrame.this.resultRecord(score);
        System.exit(1);

      }
      if(direction != mainSnake.snakeReDirection)    //當此時方向與原來蛇移動的反方向不同時,
                                                     //移動蛇。。
      {
        moveSnake(direction);
      }
      //drawBackGround(getGraphics());
      mainSnake.drawSnake(getGraphics(),singleWidthX,singleHeightY,cooPos);  //在屏幕上畫出蛇
      //drawWall(getGraphics(),Level);
      //drawWall(getGraphics());
      drawBeanAndEBean(getGraphics());                                //畫出生成的Bean(食物)和吃過的Bean
    }
  }


  public void resultRecord(int score)    //  積分榜。。。只實現的記錄第一名的成績。。
                                         // 如果當前玩家所得的分數比文件中記錄的以前所有玩家中
                                         // 最高得分還高的話,提示當前玩家輸入姓名。。
                                         // 并同時記錄下玩家的姓名與分數。寫入一個文件中。。。。持久保存
  {
    Properties pp = new Properties();
    try
    {
      pp.load(new FileInputStream("Miracle.ini"));
      Enumeration enumt= pp.propertyNames();
      if(!enumt.hasMoreElements())
      {
        String inputName=JOptionPane.showInputDialog("Please Input your Name");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品免费视频| 5566中文字幕一区二区电影| 日韩电影免费在线看| 国产欧美日本一区二区三区| 欧美日韩精品一区二区三区| 成人午夜在线播放| 日本一道高清亚洲日美韩| 亚洲日本免费电影| 国产视频在线观看一区二区三区| 欧美午夜精品久久久久久孕妇 | 国产成人综合亚洲91猫咪| 午夜视频在线观看一区二区 | 欧美精品一区二区久久婷婷| 欧美日韩在线观看一区二区 | 国产ts人妖一区二区| 青青草国产成人99久久| 亚洲精品久久7777| 国产精品久久久久久久蜜臀| 久久综合九色综合欧美98| 欧美日韩国产经典色站一区二区三区| www.成人网.com| 国产成人在线网站| 国产美女一区二区三区| 蜜臀av性久久久久蜜臀av麻豆| 亚洲一区二区在线免费观看视频| 中文字幕亚洲不卡| 国产目拍亚洲精品99久久精品| 日韩女优视频免费观看| 欧美日韩二区三区| 欧美调教femdomvk| 欧美系列一区二区| 精品视频一区二区不卡| 欧美三级中文字幕| 欧美日韩在线亚洲一区蜜芽| 欧美日韩视频在线第一区| 91国内精品野花午夜精品| 在线观看一区不卡| 欧美日韩一级片在线观看| 欧美三级电影在线看| 欧美色中文字幕| 欧美三级日韩在线| 欧美一区二区三区四区久久| 欧美一区二区大片| 精品对白一区国产伦| 久久亚洲私人国产精品va媚药| 久久久91精品国产一区二区精品 | 91麻豆精品国产综合久久久久久| 69堂精品视频| 日韩精品在线一区| 精品欧美久久久| 日本一区二区三区免费乱视频| 中文字幕一区免费在线观看| 亚洲日穴在线视频| 午夜影院久久久| 久久aⅴ国产欧美74aaa| 国产做a爰片久久毛片| 国产99久久久国产精品潘金网站| 成人午夜激情影院| 欧美视频一区二区| 日韩免费电影网站| 中文字幕精品三区| 亚洲综合小说图片| 精品一区二区三区日韩| www.欧美精品一二区| 欧美午夜不卡视频| 久久人人97超碰com| 亚洲男人的天堂在线观看| 亚洲va欧美va国产va天堂影院| 秋霞成人午夜伦在线观看| 国产露脸91国语对白| 91在线观看视频| 日韩欧美色综合网站| 国产精品色婷婷| 亚洲成a人片综合在线| 极品少妇xxxx精品少妇| 成人av在线资源| 4438x亚洲最大成人网| 久久婷婷久久一区二区三区| 亚洲精品中文字幕在线观看| 看电视剧不卡顿的网站| 91女厕偷拍女厕偷拍高清| 制服丝袜激情欧洲亚洲| 国产精品日日摸夜夜摸av| 亚洲午夜免费视频| 国产福利91精品一区二区三区| 欧美午夜精品理论片a级按摩| 久久久久高清精品| 天堂一区二区在线| gogogo免费视频观看亚洲一| 欧美一区二区三区视频在线观看| 国产精品国产三级国产a| 欧美aaaaaa午夜精品| 99r精品视频| 精品免费国产一区二区三区四区| 洋洋成人永久网站入口| 国产老女人精品毛片久久| 在线综合+亚洲+欧美中文字幕| 中文字幕一区二区三区乱码在线 | 麻豆高清免费国产一区| 日本精品视频一区二区三区| 久久久久免费观看| 丝瓜av网站精品一区二区| 色综合天天综合色综合av| 久久精品一区二区三区av| 日本美女视频一区二区| 色狠狠一区二区| 国产免费久久精品| 国产一区二区看久久| 日韩欧美一卡二卡| 午夜精品久久久久久久久久久| 北岛玲一区二区三区四区| 精品对白一区国产伦| 日本va欧美va欧美va精品| 色噜噜狠狠成人网p站| 亚洲欧洲日韩在线| 国产suv精品一区二区883| 精品日韩99亚洲| 免费成人在线观看视频| 欧美福利电影网| 亚洲国产一区二区三区青草影视| 91麻豆国产精品久久| 国产精品人妖ts系列视频| 国产精品一区二区在线观看网站| 日韩一级在线观看| 久久精品二区亚洲w码| 欧美一区二区黄| 裸体在线国模精品偷拍| 日韩欧美国产精品| 精品一区二区免费| 久久久久久99久久久精品网站| 国产综合成人久久大片91| 久久新电视剧免费观看| 狠狠色综合色综合网络| 精品91自产拍在线观看一区| 久久疯狂做爰流白浆xx| 精品久久一区二区| 国产真实乱子伦精品视频| 精品国产欧美一区二区| 国产综合色产在线精品| 国产女同性恋一区二区| 白白色亚洲国产精品| 亚洲人成网站色在线观看| 色欧美乱欧美15图片| 亚洲电影第三页| 欧美日韩精品一区二区三区| 全国精品久久少妇| 久久精品视频免费| 99国产欧美另类久久久精品| 一区二区三区国产| 欧美日韩国产乱码电影| 老司机一区二区| 亚洲国产精品成人综合| 色88888久久久久久影院野外| 性感美女极品91精品| 精品国产露脸精彩对白| 大胆亚洲人体视频| 亚洲国产综合视频在线观看| 欧美一区二区三区小说| 国产一区二区三区在线看麻豆| 国产欧美精品一区| 欧美伊人久久久久久午夜久久久久| 午夜电影久久久| 久久亚洲二区三区| 91丨九色丨黑人外教| 日本欧美大码aⅴ在线播放| 国产偷国产偷亚洲高清人白洁| 91日韩在线专区| 久草热8精品视频在线观看| 国产精品久久毛片a| 91久久精品网| 精品一区二区三区av| 亚洲女与黑人做爰| 欧美一区二区三区视频| 成人一区在线看| 天堂一区二区在线| 国产精品久久一级| 欧美高清激情brazzers| 丁香啪啪综合成人亚洲小说| 亚洲成a人片在线观看中文| 久久久久久久久蜜桃| 在线免费观看日本一区| 国产成人小视频| 天堂一区二区在线| 综合网在线视频| 日韩久久久久久| 91久久一区二区| 国产91综合网| 日本亚洲欧美天堂免费| 日韩美女久久久| 欧美精品一区二区三区在线| 欧美三级日韩三级国产三级| 成人黄色网址在线观看| 美女一区二区三区| 亚洲午夜在线视频| 国产精品不卡一区二区三区| 欧美一区二区久久| 欧美三级韩国三级日本三斤| 成人av网在线| 国产精品一区二区视频| 日韩av中文字幕一区二区|