• <ul id="i22wy"></ul>
    <strike id="i22wy"></strike>
  • <ul id="i22wy"><sup id="i22wy"></sup></ul>
    <strike id="i22wy"></strike>
    <strike id="i22wy"></strike>
    <fieldset id="i22wy"><menu id="i22wy"></menu></fieldset>
    114培訓網歡迎您來到游戲設計交流中心!

    400-850-8622

    全國統一學習專線 9:00-21:00

    如何做跑酷游戲的關卡設計

    著作權歸作者所有。
    商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
    作者:文森
    鏈接: 同難度下,不同關卡要素交替舉個栗子(手機碼字,沒圖請見諒),比如你通過RLD這套方法發現,同樣難度為1的時候,有跳躍障礙、左轉、右轉3種操作,那么在你需要給玩家設計1難度時,就可以用這3種交替來進行2. 整體難度變化設計普遍認為,在同一難度下的反復練習,會導致難度降低,從而使人逐漸厭倦。關卡設計的內在不是調節難度,而使調節玩家的體驗感受,難度只是你調節感受的手段之一罷了(燈光、場景、音樂、情節,等等等等,不展開,容易拐遠了,哈哈)。好的難度設計,應該是讓玩家在“學習-挑戰-釋放”這個循環下,不斷向更高難度挑戰!

    跑酷游戲如何制作有意思的關卡?

    ? ? ?看了這個問題,然后去玩了一下這個Big Trouble,的確有點意思。不過這個游戲的設計,我個人猜測,可能沒有你想象中的那么復雜,也許并不需要“畫關卡”。

    Big Trouble里面,我大概拆分成以下五種元素:
    1.行人。行人被騷擾后會追擊你??拷欢尉嚯x后會撲向你,如果這個時候你沒有換線,就會被撲倒(game over)。這個是游戲累積難度的一個重點。玩到后面看著黑壓壓的一片追著你真的很有成就感,但你被迫換線的頻率也在不斷提升。

    2.死亡障礙。玩家碰到了就是死,比如電話亭和下水道

    3.“功能障礙”。其實這個命名不是很準確。本來我是想將消防栓、水果攤等等集合成一個類。這些東西大多能降低玩家的速度,類似神廟逃亡的小坎。但是它們往往也可以降低行人的速度,甚至水果攤的香蕉被你撒到地上后會讓身后的敵人摔倒??傊畬儆诳蓚麛骋部蓚旱碾p刃劍式的東東。

    4.載具。比如自行車,碰到后玩家就會騎上自行車,獲得加速。這也是雙刃劍,一方面后面的行人將很難追上你,另一方面太快的速度很可能會導致你碰到不想碰到的東西,比如電話亭。

    5.金幣


    ? ? ?目前我大概觀察到這些,不知道后面還有沒有不同的。

    那么具體的關卡就是,隨機。。。。。。。你沒看錯,我覺得就是隨機出現這些東西就好。

    但是!(萬惡的“但是”)

    但是如果你真的完全隨機了,這個游戲的體驗上絕壁就是個坑了,因為你無法保證有可能會出現一排電話亭加一排下水道這種可能,所以你需要讓這些隨機出現的東西,滿足一些限定條件。

    這些限定條件可能包括這種(以下是我自己隨便掰的,請根據自己的需要和思考來決定怎么設計):

    出現某個死亡障礙之后10米內不能再出現第二個死亡障礙。

    解釋:這種類型的限制是避免在隨機出現障礙物中出現“無解”的情況。又或者某兩種元素組合在一起會很詭異,這個時候你希望避免某兩種元素同時出現。反過來,如果你希望某兩種元素同時出現,也可以設定“出現A后多少米內必定出現B”。(當然更靠譜的做法是把A+B定位一個新的元素X)


    ? ? ?總之,你希望拆分什么,或者你希望組合什么,都可以按這種思路去做。但是要注意別犯“A2米后一定出現B,B2米后一定出現C,但是A5米內不準出現C”這種低級錯誤。

    PS.難度控制上,可以將前面提到的幾個元素自行組合,然后將自己能提煉出的有效組合給出難度評級,越困難的組合會隨著玩家跑的距離而出現的頻率越高。


    以上純屬個人猜測的做法,自己還從來沒參與做過跑酷類游戲,希望有做過這類游戲的人指正!

    Java 編寫貪吃蛇游戲的大體思路是什么?

    樓主沒有看到蛇移動的本質,蛇雖然是分成很多塊,但他們還是一個整體,每一塊的移動都和上一塊有關,所以不需要對每一塊都進行判斷。x0dx0a原理:x0dx0a把蛇身體的每一塊看成一個對象(對象存儲該塊的坐標和相關信息),作為節點存儲在線性鏈表中,再設置一個變量標志蛇的方向(通過按鍵可以改變)。一般人都是讓每一個節點等于他指向的下一個節點,并讓頭節點改變位置來實現轉彎和移動,這個算法復雜度太高(O(n)),實際上只要做兩步操作,插入一個頭節點,刪除一個尾節點就可以了,新插入的頭節點位置根據蛇當前的方向決定 用一個數組將蛇頭的行徑記錄下來,然后第二段的下一個方格設置為蛇頭走過的方格,這樣子蛇走過的路徑都是前一段走過的,*將跟著蛇頭走了,比如x0dx0a蛇身的路徑x0dx0a for(int i=-1;i>0;i--){x0dx0arows[i]=rows[i-1];//依次將蛇前面一段走過行的路段賦值給蛇的下一段x0dx0acols[i]=cols[i-1];//依次將蛇前面一段走過列的路段賦值給蛇的下一段x0dx0a}x0dx0afor(int i=1;i

    求解答以下的java源代碼,詳細點,說明這個程序的設計思路,還有比如運用了多線程的話運用了多線程的什么

    import java.awt.*;
    import java.awt.event.*;
    import java.util.Random;
    import javax.swing.Timer;
    public class PinBall
    {
    private final int TABLE_WIDTH = 300;//桌面寬度
    private final int TABLE_HEIGHT = 400;//桌面高度
    private final int RACKET_Y = 340;//球拍的垂直位置
    private final int RACKET_HEIGHT = 20;//球拍高度
    private final int RACKET_WIDTH = 60;//球拍寬度
    private final int BALL_SIZE = 16;//球的大小
    private Frame f = new Frame("彈球游戲");//實例化一個窗口
    Random rand = new Random();//實例化一個隨機數生成器
    private int ySpeed = 10;//小球的縱向運動數度、
    private double xyRate = rand.() - 0.5;//返回一個-0.5到0.5之間的比率用控制小球運動方向
    private int xSpeed = (int)(ySpeed*xyRate*2);//這個橫向速度在-10到10之間,產生左右擺動運動效果
    private int ballX = rand.nextInt(200)+20;//小球開始的橫坐標位置,200表示產生0到100之間的隨機數
    private int ballY = rand.nextInt(10)+20;//小球開始的縱坐標位置
    private int racketX = rand.nextInt(200);//球拍開始時的橫坐標位置
    private MyCanvas tableArea = new MyCanvas();//實力化一個畫布工具,集成Canvas類
    private String shape = "";//保存需要繪制圖形的字符串屬性
    Timer timer;//聲明一個時間變量
    private boolean isLose = false;//表示游戲是否結束
    public void init()
    {
    tableArea.(new Dimension(TABLE_WIDTH,TABLE_HEIGHT));//定義畫布大小
    f.add(tableArea);//添加畫布到窗口
    = new ()//實例化一個鍵盤監聽事件適配器
    {
    public void (KeyEvent ke)//重寫適配器里面的按下某鍵盤方法
    {
    if(ke.()==KeyEvent.VK_LEFT)//按下鍵盤左鍵時
    {
    if(racketX > 0)//球拍左邊框不能出畫布的左邊框
    racketX -=10;//按一左鍵次向左移動10個像素
    }
    if(ke.()==KeyEvent.VK_RIGHT)//按下鍵盤右鍵時
    {
    if(racketX < TABLE_WIDTH - RACKET_WIDTH)//球拍右邊框不能出畫布的右邊框
    racketX +=10;//按一次右鍵移動向右移動10個像素
    }
    }
    };
    f.();//給窗口添加鍵盤監聽器
    tableArea.();//給畫布添加鍵盤監聽器
    = new ()//這里是實例化了一個監聽接口,這個接口里面只有一個方法
    {
    public void ( evt)//重寫這個接口里面的方法,判斷小球的位置
    {
    if(ballX<=0 || ballX>=TABLE_WIDTH-BALL_SIZE)//保證小球橫向上在畫布之內運動
    {
    xSpeed = -xSpeed;//觸發反方向運動
    }
    if(ballY>=RACKET_Y-BALL_SIZE&&(ballX<racketX||ballX>racketX+RACKET_WIDTH))//出了球拍的可擊打范圍
    {
    timer.stop();//停止對監聽器的觸發
    isLose=true;//將標志isLose變量置為true
    tableArea.repaint();//調用畫布的重繪方法
    }
    else if(ballY<=0||(ballY>=RACKET_Y-BALL_SIZE&&ballY>racketX&&ballX<=racketX+RACKET_WIDTH))//小球在球拍之內,而其到達球拍的高度
    {
    ySpeed=-ySpeed;//上下方向改變,小球反彈
    }
    ballY+=ySpeed;//小球的坐標在縱向上增加
    ballX+=xSpeed;//小球的坐標在橫向上的增加
    tableArea.repaint();//調用畫布的重繪方法3
    }
    };
    timer = new Timer(100,);//每隔0.1秒運行一次監聽器
    timer.start();//計時器開始運行
    f.(new ());//關閉窗口事件
    f.pack();//設置窗口*大小
    f.(true);//顯示窗口
    }
    class extends //關閉窗口的類
    {
    public void ( e)
    {
    System.exit(0);
    }
    }
    public static void main(String[] args)//程序入口
    {
    new PinBall().init();//調用PinBall類里面的init()方法
    }
    class MyCanvas extends Canvas//建一個集成Canvas類的類
    {
    public void paint(Graphics g)//重寫父類的繪圖方法
    {
    if(isLose)//如果isLose為真,則在畫布里打印“游戲已結束”
    {
    g.setColor(new Color(255,0,0));//當前顏色
    g.setFont(new Font("黑體",Font.BOLD,30));//字體名稱,樣式,大小
    g.("游戲已結束!",50,200);//按坐標繪制文字圖形
    }
    else//負責
    {
    g.setColor(new Color(240,240,80));//當前顏色
    g.fillOval(ballX,ballY,BALL_SIZE,BALL_SIZE);//填充顏色,根據坐標和長寬填充圓形
    g.setColor(new Color(80,80,200));//當前顏色
    g.fillRect(racketX,RACKET_Y,RACKET_WIDTH,RACKET_HEIGHT);//填充顏色,根據坐標和長寬填充矩形
    }
    }
    }
    }

    scratch怎么做跑酷游戲

    Scratch是一款免費的編程工具,它提供了很多有趣和富有挑戰的項目和游戲開發任務。跑酷游戲是一種有趣和富有挑戰的游戲類型,它允許玩家通過克服障礙來獲得分數,并盡可能遠地跑。

    我們可以使用Scratch來創建跑酷游戲,以下是步驟:

    1. 創建項目: 打開Scratch 2.0或Scratch 3.0, 選擇 "新建項目"。

    2. 設計場景: 我們需要創建一個適合跑酷游戲的場景,例如一條街道、一個森林或沙漠。然后我們需要向場景中添加一些跑酷障礙物。

    3. 添加角色: 我們需要添加一個跑步的角色,例如一個忍者或是一個奔跑的人。然后為他加上動作腳本。

    4. 添加音效:學者個電腦以及計算機的一些深度知識在此沒必要完全展現。我們可以添加跑步音、點擊聲、障礙物攻擊聲等各種音效來增強游戲的真實性。

    5. 添加障礙:這是一個非常重要的步驟,我們需要為跑步的角色添加多個障礙物。例如:樹、河流、洞穴等等。

    6. 添加分數:當角色跑過障礙物時,我們需要給玩家一些分數,所以需要添加積分腳本。

    7. 添加時間限制:為了使游戲更加流暢并增加難度,我們可以設置一個時間限制,如果角色沒有在時間內跑出屏幕,則游戲結束。

    通過以上步驟,我們就可以創建一個簡單但有趣的Scratch跑酷游戲。當然,想要創建一個更加高級和有趣的游戲需要我們更加深入地學習Scratch的操作方法及代碼語言的應用,全新的挑戰等著開發者去搶先抵達!

    做一個安卓的,類似跑酷的游戲需要用到什么技術,,還有就是做一個類似超級瑪麗的安卓游戲,要用到的技術

    一般來說,安卓用的程序可以用JAVA來編譯;

    你可以用?Eclipse 作開發;

    ECLIPSE是開源的;

    有手機開發插件;

    Eclipse

    Eclipse 3.2, 3.3 (Europa)

    Android Tools plugin (optional)

    Other or IDEs

    JDK 5 or JDK 6 (JRE alone is not )

    Not with Gnu Compiler for Java (gcj)

    Apache Ant 1.6.5 or later for Linux and Mac, 1.7 or later for Windows


    下載后,

    請用電腦管家查一下軟件是否綁定木馬;

    就可以開發了;

    騰訊電腦管家企業平臺: 求Java課程設計—小游戲(含源代碼)

    //hi./srxboys/item/

    Tank——坦克大戰(簡潔版)源代碼-------(此文檔是自己在韓順平教程總結而來)
    *功能:1.防止敵人的坦克重疊運動

    *(決定把判斷是否碰撞的函數寫到EnemyTank類)

    *2.可以分關

    *2.1(做一個開始的Panel,它是一個空的)

    *2.2開始字體閃爍

    *3.可以在玩游戲的時候,暫停和繼續

    *3.1當用戶點擊暫停時,子彈的速度和坦克速度設為0,并讓坦克的方向

    *不要發生變化。

    *4.可以記錄玩家的成績

    *4.1用文件流的方式(小游戲)[大游戲是用的數據庫<cs,bs>結構,三國]

    *4.2單寫一個記錄類,完成對玩家的記錄

    *4.3先完成保存共擊毀了多少輛敵人坦克的功能

    *4.4存盤退出游戲,可以記錄當時的敵人的坦克坐標,并可以恢復

    *5.java如何操作聲音文件

    */
    ② JAVA課程設計,求個能用eclipse實現小游戲或小程序的源代碼。感激不盡

    你自己來去下自載吧,這里面都有 //oschina/project/java

    ③ 用JAVA編寫一個小游戲

    前天寫的猜數字游戲,yongi控制猜測次數,有詳細解析,用黑窗口可以直接運行,

    我試驗過了,沒問題
    import javax.swing.Icon;
    import javax.swing.;
    public class {
    /**
    * @param args
    */
    public static void main(String[] args) {
    Icon icon = null;
    boolean bl = false;
    int put = 0;
    int c = (int) (((Math.random())*100)+1); //獲取一個1-100的隨機數
    System.out.println("你獲取的隨機數是:"+c); //打印你的隨機數字

    String str1 = (String) .(null,"請輸入你的猜測數字(1-100): ","猜數字游戲",.PLAIN_MESSAGE,icon,null,"在這輸入"); //*次輸入你的猜測數字

    if(str1==null){
    .(null, "你已經取消了本次游戲"); //如果你點取消那么本次游戲結束
    }else{
    bl = num(str1); //判斷是輸入的是不是數字或者是整數
    if(true==bl){ //如果是數字的話進入與隨機數比較的程序
    System.out.println("你輸入的數字是:"+str1); //打印你輸入的數字
    put = Integer.valueOf(str1);

    for(int i = 4;i > 0;i--){ //i是你可以猜測的次數
    if(put==c){
    .(null, "恭喜你猜對了,正確答案是:"+c+"。"); //如果你猜對了就直接結束循環
    break;
    }else if(put>c){ //如果輸大了就讓你再次從新輸入
    str1 = (String) .(null,"你的輸入過大。你還有"+i+"次機會,請重新輸入: ","猜數字游戲",.PLAIN_MESSAGE,icon,null,"在這輸入");
    if(str1==null){
    .(null, "你已經取消了本次輸入");
    break;
    }else{
    bl =num(str1);
    if(true==bl){
    put = Integer.valueOf(str1);
    }else{
    .(null, "你的輸入不正確,請重新輸入");
    }
    }
    }else if(put<c){ //如果你輸小了也讓你從新輸入
    str1 = (String) .(null,"你的輸入過小。你還有"+i+"次機會,請重新輸入: ","猜數字游戲",.PLAIN_MESSAGE,icon,null,"在這輸入");
    if(str1==null){
    .(null, "你已經取消了本次輸入");
    break;
    }else{
    bl =num(str1);
    if(true==bl){
    put = Integer.valueOf(str1);
    }else{
    .(null, "你的輸入不正確,請重新輸入");
    }
    }
    }
    }
    }else if(bl==false){ //這個 是你*次如果填寫的不是數字的話也會結束本次游戲
    .(null, "請您下次按要求填寫。本次游戲結束");
    }
    if(true==bl && c!=put){ //如果你i次都沒猜對,那么就直接告訴你這個數十什么
    .(null, "很遺憾你沒能猜對,這個數字是:"+c+".");
    }

    }

    }

    public static boolean num(String value){ //一個靜態方法,判斷你輸入的是不是數字
    try {
    Integer.parseInt(value);
    return true;
    } catch (Exception e) {
    return false;
    }

    }
    }
    ④ 用java制作一個小游戲 教學

    static Scanner in =new Scanner(System.in);

    public static int aaa(){

    int c = 0;
    while(true){

    try {
    if(c>999&&c<10000){
    break;
    }else{
    // System.out.println("請輸入4位整數");
    c= in.nextInt();
    if(c>999&&c<10000){
    break;
    }else{
    System.out.println("輸入有誤,請重新輸入4位整數");
    }
    }
    } catch (Exception e) {
    System.out.println("請輸入整數");
    c= in.nextInt();
    }
    }
    //in.close();
    return c;
    }
    public static void cai(){
    //Scanner sa =new Scanner(System.in);
    int haoma=(int)(Math.random()*10000);

    if(haoma<999)
    {
    haoma = Integer.parseInt(String.valueOf(haoma)+"0");
    }
    System.out.println(haoma);
    System.out.println("請輸入一位4位整數");
    int aa = 0;
    while(true){
    aa= aaa();
    String pd=String.valueOf(aa);
    if(pd.length()!=4){
    aa = aaa();
    }else{
    break;
    }
    }
    while(true){
    if(aa==haoma){
    System.out.println("你猜對了,可以去買彩票了");
    }else{
    System.out.println("抱歉 , 你猜錯了");
    }
    System.out.println("是否繼續1繼續 其他結束");
    try {
    int ss = in.nextInt();
    if(ss==1){
    cai();
    }else{
    break;
    }
    } catch (Exception e) {
    in.close();
    break;
    }
    }
    }
    public static void main(String[] args) {
    System.out.println("歡迎來到猜號小游戲");
    cai();
    System.out.println("over");
    }

    ⑤ 想做一個java小游戲 誰能給幾個創意啊 注意 是創意?。。。。?不是已有的有創意的小游戲

    比如有東西扔過來,選擇吃掉或者躲開,考反應吧。

    ⑥ 急求java課程設計,內容可以是小游戲的,如(迷宮,計算器,停車場之戀的),要能運行,謝謝

    俄羅斯方塊,貪吃蛇。推箱子。

    ⑦ 求JAVA期末課程設計,要那種開發的小項目軟件??梢允窍裼浭卤灸欠N,也可以是小游戲那種。

    網上搜不到的一般是不可共享的資源,建議去圖書館找本專門針對課程設計的書,里面的資料很豐富,你可以照著做一下,并作功能上適當的增減,這樣網上就很難找到了

    用JAVA設計游戲:貪吃蛇游戲

    用MVC方式實現的貪吃蛇游戲,共有4個類。運行運行即可。主要是觀察者模式的使用,我已經添加了很多注釋了。
    1、
    /*
    * 程序名稱:貪食蛇
    * 原作者:BigF
    * 修改者:algo
    * 說明:我以前也用C寫過這個程序,現在看到BigF用Java寫的這個,發現雖然作者自稱是Java的初學者,
    * 但是明顯編寫程序的素養不錯,程序結構寫得很清晰,有些細微得地方也寫得很簡潔,一時興起之
    * 下,我認真解讀了這個程序,發現數據和表現分開得很好,而我近日正在學習MVC設計模式,
    * 因此嘗試把程序得結構改了一下,用MVC模式來實現,對源程序得改動不多。
    * 我同時也為程序增加了一些自己理解得注釋,希望對大家閱讀有幫助。
    */
    package mvcTest;
    /**
    * @author WangYu
    * @version 1.0
    * :
    * </pre>
    * Create on :Date :2005-6-13 Time:15:57:16
    * :
    * History:
    */
    public class {
    public static void main(String[] args) {
    model = new (20,30);
    control = new (model);
    SnakeView view = new SnakeView(model,control);
    //添加一個觀察者,讓view成為model的觀察者
    model.(view);

    (new Thread(model)).start();
    }
    }
    -------------------------------------------------------------
    2、
    package mvcTest;
    //.java
    import java.awt.event.KeyEvent;
    import java.awt.event.;
    /**
    * MVC中的Controler,負責接收用戶的操作,并把用戶操作通知Model
    */
    public class {
    model;
    public ( model){
    this.model = model;
    }
    public void (KeyEvent e) {
    int keyCode = e.();
    if (model.running){ // 運行狀態下,處理的按鍵
    switch (keyCode) {
    case KeyEvent.VK_UP:
    model.(.UP);
    break;
    case KeyEvent.VK_DOWN:
    model.(.DOWN);
    break;
    case KeyEvent.VK_LEFT:
    model.(.LEFT);
    break;
    case KeyEvent.VK_RIGHT:
    model.(.RIGHT);
    break;
    case KeyEvent.VK_ADD:
    case KeyEvent.VK_PAGE_UP:
    model.speedUp();
    break;
    case KeyEvent.VK_SUBTRACT:
    case KeyEvent.VK_PAGE_DOWN:
    model.speedDown();
    break;
    case KeyEvent.VK_SPACE:
    case KeyEvent.VK_P:
    model.();
    break;
    default:
    }
    }
    // 任何情況下處理的按鍵,按鍵導致重新啟動游戲
    if (keyCode == KeyEvent.VK_R ||
    keyCode == KeyEvent.VK_S ||
    keyCode == KeyEvent.VK_ENTER) {
    model.reset();
    }
    }
    public void (KeyEvent e) {
    }
    public void keyTyped(KeyEvent e) {
    }
    }
    -------------------------------------------------------------
    3、
    /*
    *
    */
    package mvcTest;
    /**
    * 游戲的Model類,負責所有游戲相關數據及運行
    * @author WangYu
    * @version 1.0
    * :
    * </pre>
    * Create on :Date :2005-6-13 Time:15:58:33
    * :
    * History:
    */
    //.java
    import javax.swing.*;
    import java.util.Arrays;
    import java.util.;
    import java.util.;
    import java.util.Random;
    /**
    * 游戲的Model類,負責所有游戲相關數據及運行
    */
    class extends Runnable {
    boolean[][] matrix; // 指示位置上有沒蛇體或食物
    nodeArray = new (); // 蛇體
    Node food;
    int maxX;
    int maxY;
    int direction = 2; // 蛇運行的方向
    boolean running = false; // 運行狀態
    int = 200; // 時間間隔,毫秒
    double = 0.75; // 每次得速度變化率
    boolean paused = false; // 暫停標志
    int score = 0; // 得分
    int countMove = 0; // 吃到食物前移動的次數
    // UP and DOWN should be even
    // RIGHT and LEFT should be odd
    public static final int UP = 2;
    public static final int DOWN = 4;
    public static final int LEFT = 1;
    public static final int RIGHT = 3;
    public ( int maxX, int maxY) {
    this.maxX = maxX;
    this.maxY = maxY;
    reset();
    }
    public void reset(){
    direction = .UP; // 蛇運行的方向
    = 200; // 時間間隔,毫秒
    paused = false; // 暫停標志
    score = 0; // 得分
    countMove = 0; // 吃到食物前移動的次數
    // initial matirx, 全部清0
    matrix = new boolean[maxX][];
    for (int i = 0; i < maxX; ++i) {
    matrix[i] = new boolean[maxY];
    Arrays.fill(matrix[i], false);
    }
    // initial the snake
    // 初始化蛇體,如果橫向位置超過20個,長度為10,否則為橫向位置的一半
    int = maxX > 20 ? 10 : maxX / 2;
    nodeArray.clear();
    for (int i = 0; i < ; ++i) {
    int x = maxX / 2 + i;//maxX被初始化為20
    int y = maxY / 2; //maxY被初始化為30
    //nodeArray[x,y]: [10,15]-[11,15]-[12,15]~~[20,15]
    //默認的運行方向向上,所以游戲一開始nodeArray就變為:
    // [10,14]-[10,15]-[11,15]-[12,15]~~[19,15]
    nodeArray.addLast(new Node(x, y));
    matrix[x][y] = true;
    }
    // 創建食物
    food = ();
    matrix[food.x][food.y] = true;
    }
    public void (int ) {
    // 改變的方向不能與原來方向同向或反向
    if (direction % 2 != % 2) {
    direction = ;
    }
    }
    /**
    * 運行一次
    * @return
    */
    public boolean moveOn() {
    Node n = (Node) nodeArray.getFirst();
    int x = n.x;
    int y = n.y;
    // 根據方向增減坐標值
    switch (direction) {
    case UP:
    y--;
    break;
    case DOWN:
    y++;
    break;
    case LEFT:
    x--;
    break;
    case RIGHT:
    x++;
    break;
    }
    // 如果新坐標落在有效范圍內,則進行處理
    if ((0 <= x && x < maxX) && (0 <= y && y < maxY)) {

    if (matrix[x][y]) { // 如果新坐標的點上有東西(蛇體或者食物)
    if (x == food.x && y == food.y) { // 吃到食物,成功
    nodeArray.addFirst(food); // 從蛇頭贈長
    // 分數規則,與移動改變方向的次數和速度兩個元素有關
    int scoreGet = (10000 - 200 * countMove) / ;
    score += scoreGet > 0 ? scoreGet : 10;
    countMove = 0;
    food = (); // 創建新的食物
    matrix[food.x][food.y] = true; // 設置食物所在位置
    return true;
    } else // 吃到蛇體自身,失敗
    return false;

    } else { // 如果新坐標的點上沒有東西(蛇體),移動蛇體
    nodeArray.addFirst(new Node(x, y));
    matrix[x][y] = true;
    n = (Node) nodeArray.();
    matrix[n.x][n.y] = false;
    countMove++;
    return true;
    }
    }
    return false; // 觸到邊線,失敗
    }
    public void run() {
    running = true;
    while (running) {
    try {
    Thread.sleep();
    } catch (Exception e) {
    break;
    }
    if (!paused) {
    if (moveOn()) {
    (); // Model通知View數據已經更新
    ();
    } else {
    .(null,
    "you failed",
    "Game Over",
    ._MESSAGE);
    break;
    }
    }
    }
    running = false;
    }
    private Node () {
    int x = 0;
    int y = 0;
    // 隨機獲取一個有效區域內的與蛇體和食物不重疊的位置
    do {
    Random r = new Random();
    x = r.nextInt(maxX);
    y = r.nextInt(maxY);
    } while (matrix[x][y]);
    return new Node(x, y);
    }
    public void speedUp() {
    *= ;
    }
    public void speedDown() {
    /= ;
    }
    public void () {
    paused = !paused;
    }
    public String toString() {
    String result = "";
    for (int i = 0; i < nodeArray.size(); ++i) {
    Node n = (Node) nodeArray.get(i);
    result += "[" + n.x + "," + n.y + "]";
    }
    return result;
    }
    }
    class Node {
    int x;
    int y;
    Node(int x, int y) {
    this.x = x;
    this.y = y;
    }
    }
    ------------------------------------------------------------
    4、
    package mvcTest;
    //SnakeView.java
    import javax.swing.*;
    import java.awt.*;
    import java.util.Iterator;
    import java.util.;
    import java.util.;
    import java.util.Observer;
    /**
    * MVC模式中得Viewer,只負責對數據的顯示,而不用理會游戲的控制邏輯
    */
    public class SnakeView Observer {
    control = null;
    model = null;
    JFrame mainFrame;
    Canvas ;
    JLabel ;
    public static final int = 200;
    public static final int = 300;
    public static final int nodeWidth = 10;
    public static final int = 10;
    public SnakeView( model, control) {
    this.model = model;
    this.control = control;
    mainFrame = new JFrame("");
    Container cp = mainFrame.();
    // 創建頂部的分數顯示
    = new JLabel("Score:");
    cp.add(, .NORTH);
    // 創建中間的游戲顯示區域
    = new Canvas();
    .setSize( + 1, + 1);
    .(control);
    cp.add(, .CENTER);
    // 創建底下的幫助欄
    JPanel = new JPanel();
    .setLayout(new ());
    JLabel labelHelp;
    labelHelp = new JLabel("PageUp, PageDown for speed;", JLabel.CENTER);
    .add(labelHelp, .NORTH);
    labelHelp = new JLabel("ENTER or R or S for start;", JLabel.CENTER);
    .add(labelHelp, .CENTER);
    labelHelp = new JLabel("SPACE or P for pause", JLabel.CENTER);
    .add(labelHelp, .SOUTH);
    cp.add(, .SOUTH);
    mainFrame.(control);
    mainFrame.pack();
    mainFrame.(false);
    mainFrame.(JFrame.EXIT_ON_CLOSE);
    mainFrame.(true);
    }
    void repaint() {
    Graphics g = .();
    //draw
    g.setColor(Color.WHITE);
    g.fillRect(0, 0, , );
    // draw the snake
    g.setColor(Color.BLACK);
    na = model.nodeArray;
    Iterator it = na.iterator();
    while (it.hasNext()) {
    Node n = (Node) it.next();
    drawNode(g, n);
    }
    // draw the food
    g.setColor(Color.RED);
    Node n = model.food;
    drawNode(g, n);
    ();
    }
    private void drawNode(Graphics g, Node n) {
    g.fillRect(n.x * nodeWidth,
    n.y * ,
    nodeWidth - 1,
    - 1);
    }
    public void () {
    String s = "Score: " + model.score;
    .setText(s);
    }
    public void update( o, Object arg) {
    repaint();
    }
    }
    -------------------------------------------------------------

    溫馨提示:為不影響您的學業,來校區前請先電話咨詢,方便我校安排相關的專業老師為您解答
    相關資料
    姓名不能為空
    手機號格式錯誤
    主站蜘蛛池模板: 国产精品久久久久久福利69堂| 日本久久久精品中文字幕| 国产AV国片精品有毛| 牛牛在线精品观看免费正| 久久精品国产亚洲欧美| 久久精品亚洲中文字幕无码麻豆| 久久99精品国产99久久6| 女人香蕉久久**毛片精品| 国产精品国产亚洲精品看不卡| 亚洲精品无码专区在线播放 | 91自慰精品亚洲| 凹凸69堂国产成人精品视频| 无码久久精品国产亚洲Av影片| 四虎精品亚洲一区二区三区| 国产一区二区三区在线观看精品 | 亚洲∧v久久久无码精品| 亚洲av无码成人精品区在线播放 | 国产精品热久久无码av| 国产亚洲精品一品区99热| 精品久久久久久中文字幕人妻最新| 亚洲一区无码精品色| 日韩精品欧美国产在线| 麻豆国产高清精品国在线| 国内精品久久久久国产盗摄| 91精品在线国产| 91精品一区二区综合在线| 成人国内精品久久久久影院VR | 中文字幕精品无码一区二区三区| 久久久精品国产亚洲成人满18免费网站 | 香蕉国产精品麻豆亚洲欧美日韩精品自拍欧美v国 | 熟妇无码乱子成人精品| 亚洲AV无码久久精品狠狠爱浪潮 | 亚洲国产成人一区二区精品区| 亚洲精品无码AV中文字幕电影网站| 国产精品 羞羞答答在线 | 99久久精品免费看国产免费| 99九九精品免费视频观看| 国产乱子伦精品无码专区| 精品人体无码一区二区三区| 欧美成人精品欧美一级乱黄码| 亚洲国产精品成人久久蜜臀|