20172321 20172333 2017-2018 暑假做業APP

20172321 20172333 2017-2018 暑假做業APP

項目介紹

項目成員

  • 吳恆佚 20172321
  • 嚴域俊 20172333

項目簡介

  • 從理論上來講,這是一個貪吃蛇遊戲。
  • 《貪吃蛇》:控制小蛇前進的方向,儘量吃更多的東西使本身變長,首先不能咬到本身的尾巴,不能撞到牆壁。————360百科
  • 本遊戲玩法:用按鈕上下左右控制蛇的方向,尋找吃的東西,每吃一口就能獲得必定的積分,並且蛇的身子會越吃越長,身子越長玩的難度就越大,不能碰牆,不能咬到本身的身體,更不能咬本身的尾巴(目前只支持無限模式,後期應該會有闖關等新模式)

代碼地址

提取碼:cnq6php

項目展現

運行展現

分區展現

  • 首先介紹的是app圖標

這是導入本身喜歡的圖片後,在如下代碼中修改本身喜歡的名字和圖片地址html

  • 以後進入這個頁面,這是個菜單頁面,理論上來講,能夠選擇要玩的遊戲和查看攻略以及歷史評分之類的,不過如今尚未完成這些功能

  • 最後就是遊戲界面,目前是

    簡樸復古流
    遊戲畫面清晰易懂、操做按鈕簡單樸實、沒有花裏胡哨的闖關地圖,在小小的方形地圖中挑戰極限 ...可計分、暫停、加速。

製做過程

開始操做以前

  • 在嚴域俊小胖友的誠摯邀請下我來到了他的家,兩個熱愛編程的人在一塊兒能幹什麼呢?還能幹什麼呢?
    • 暑假編程不還沒寫嗎?王老師不是說能夠編個小遊戲嗎?
    • 要不來個俄羅斯方塊,感受沒什麼難度。。。
    • 去貼吧裏看看編程思路好了
    • 算了算了,有沒有什麼簡單點的。。。
  • 以後咱們一塊兒參觀了B站老哥的教學視頻,主要是學習蛇體的運動方式,和食物是否被吃的斷定。

關鍵代碼解析

  • 最開始確定是生成一個30*30的背景牆而且設置牆壁
protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        width = getWidth();
        height = getHeight();
        pixl = width / SnakeConfig.snakeNum;
        if (!isInit) {
            initPoint();
            isInit = true;
        }
        mPaint.setStrokeWidth(pixl * 2);
        snakePaint.setStrokeWidth(pixl - 2);
        initWall(canvas);
        initSnake(canvas);
        drawSnakeBuf(canvas);
    }
private void initWall(Canvas canvas) {
        RectF rel;
        paintWall.setStyle(Paint.Style.FILL_AND_STROKE);
        paintWall.setColor(Color.BLACK);
        for (int i = bengin; i < width - pixl; i += pixl) {
            for (int j = bengin; j < width - pixl; j += pixl) {
                if (i == bengin || j == bengin || i > width - 2 * pixl || j > width - 2 * pixl) {
                    rel = new RectF(i, j, i + pixl, j + pixl);
                    canvas.drawRoundRect(rel, 10, 10, paintWall);
                }
            }
        }
        paintWall.setStyle(Paint.Style.STROKE);
        paintWall.setColor(Color.LTGRAY);
        for (int i = bengin; i < width - pixl; i += pixl) {
            for (int j = bengin; j < width - pixl; j += pixl) {
                if (i == bengin || j == bengin || i > width - 2 * pixl || j > width - 2 * pixl) {
                } else {
                    rel = new RectF(i, j, i + pixl, j + pixl);
                    canvas.drawRoundRect(rel, 4, 4, paintWall);
                }
            }
        }
    }
  • 蛇體的移動是經過在移動方向的前一個格子生成蛇體而且消除蛇尾的最後一個格子的蛇體實現,例如向右移動
private void moveToRight() {
        int len = snakeDatas.size();
        for (int i = len - 1; i > 0; i--) {
            snakeDatas.get(i).x = snakeDatas.get(i - 1).x;
            snakeDatas.get(i).y = snakeDatas.get(i - 1).y;
        }
        snakeDatas.get(0).x = snakeDatas.get(0).x + pixl;
    }
  • 還有一個關鍵的斷定:判斷兩個點是否在同一個位置。用來判斷蛇頭和其餘點的位置
    • 若是蛇頭的和蛇體或者牆壁重合則死亡
    • 若是蛇頭和食物重合則增長一分而且隨機再生成一個表明食物的點
    public boolean isSamePoint(Snake snake, Snake snakeBuf2) {
          if ((snake.x - snakeBuf2.x) < -2 || (snake.x - snakeBuf2.x) > 2) {
              return false;
          }
          if ((snake.y - snakeBuf2.y) < -2 || (snake.y - snakeBuf2.y) > 2) {
              return false;
          }
          return true;
      }

按鈕生成

  • 以向上按鈕爲例
  • 首先咱們找到一個差很少看起來像方向指針的圖片

  • 而後用一個up.xml把圖片引用,就獲得了一個按鈕。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/up_p" android:state_pressed="true"></item>
    <item android:drawable="@drawable/up_n"></item>

</selector>

  • 王老師指出,這樣就不能用電腦鍵盤操做了,不過咱們原本就是手機app嘛,[攤手]

可擴展功能

  • 就是一些花裏胡哨的的貪吃蛇版本嘛
    • 闖關冒險、限時得分、娛樂道具
    • 網上計分、匹配對戰、排名挑戰
    • 會員開通、充值酷炫皮膚、購買復活加分道具
    • 3D模式(若是技術容許)
  • 您的充值,是咱們前進的動力

遊戲中所闡述的哲理

  • 在這個遊戲中,兩位創做人並不僅是想向人們展現一個簡樸的貪吃蛇遊戲,而是想借此爲人們生動的闡述一些哲理,謹在此例舉兩例
    • 在控制小蛇不斷吞食小豆的路上,偶爾小豆不會自動生成,須要本身動手點擊一下啓動鍵。咱們想告訴你們的是:取得成果的機會不老是努力尋找就能夠獲得的,偶爾也要本身去創造。
    • 當一局遊戲失敗以後開始新的一局,分數會從0開始,可是在結束後一局遊戲時,你會發現,總分會是兩局得分之和。你們應該明白:在前進的路上總會有許許多多的失敗,偶爾要重寫開始,可是,你之前的付出絕對不是毫無心義的,它也是你所取得的成績的重要部分。

寫在最後

「程序員的宿命啊,就是被扔,這代碼啊,是寫了扔,扔了寫。」android

  • 在和吳恆佚(金銀銅鐵剛)編寫這個貪吃蛇的過程當中,從無到有,這之間不過十天左右的時間,代碼很簡陋,從構思作什麼app再到基本的框架構建,上下左右,加速,暫停,吃豆豆這些方法的實現,具如今AS上也不過600行代碼,大部分知識都是從別人視頻裏面學的,有些時候從這位大佬上學點從幀數調整上使貪吃蛇加速,有時從另一位大佬上學學限制貪吃蛇框架構建。整個APP都是東拼西湊出來的東西,有時候幾十行代碼寫了出來,發現不適合,沒辦法只能扔掉,扔掉又從新寫,寫出來再扔掉,往復直到將就適合。有的BUG都徹底沒辦法解決(技術不到位,莫得辦法),只能一步一步推倒回去,直到再也不出錯,再從新找到其餘方法從新開始。若是說其餘職業的每一步工做都有本身應有的價值,再怎麼廢棄也是必定價值的,那麼程序員就是一個極端,出BUG刪掉重寫、程序寫完後閃退重寫、方法因爲類型值不符合重寫、就一直扔一直寫,寫到那惟一的一條路上successful。得虧編寫的過程當中也不僅有BUG,也有歡樂與成就。兩我的共用一個電腦桌,桌上擺着兩杯奶茶,碼累了,往落地窗外看當作都的風景,過去的行人,在籃球場揮霍汗水的男女生,伸個懶腰,繼續開始一次又一次的調試與視頻學習。在這樣沒有deadline的日子清閒的編程也算是一次另類的暑假娛樂了吧。

——強調了本身姓名的嚴域俊先生程序員

參考文獻

相關文章
相關標籤/搜索