戰蛇挑戰#Java

在本系列中,我將分享我在自我施加的編程挑戰方面的進展:用盡可能多的不同編程語言構建 battlesnake。

查看第一篇文章,了解本系列的簡短介紹。

您也可以在 github 上關注我的進度。

爪哇

java是企業的語言,很多大型后臺系統的業務邏輯都是用它編寫的。
我過去編寫過很多 java 代碼,但 python 和 javascript 已經在我當代的編程活動中占據了一席之地。
因為 java 可以用來編寫非常可讀和健壯的軟件(java ide 往往有很好的重構支持),所以我仍然覺得它是適合某些系統的語言。

與它的前輩相比,java 給開發者帶來了很多改進(當然取決于你的口味):自動內存管理、內置集合類型和豐富的標準庫。然而,該語言現在已經有 30 多年的歷史了,并且有一些明顯的時代跡象,例如標準庫中不支持 json(但它確實支持 xml ?)。

今天開箱即用的 java 是否仍可用于構建干凈簡潔的 battlesnake 實現?繼續閱讀以找出答案。

立即學習“Java免費學習筆記(深入)”;

你好世界設置

這就是 snake.java 的樣子:

public class snake {

    public static void main(string args[]) {
        system.out.println("hello world!");
    }

}
關注:愛掏網

這就是 dockerfile 的樣子:

from eclipse-temurin:17-jdk
run mkdir /app
workdir /app
copy snake.java .
run javac snake.java
cmd ["java", "snake"]
關注:愛掏網

這是實際的開發設置:

一個基本的網絡服務器

說實話,我不得不在 google 上搜索 java 標準庫中基本 web 服務器的可用性。事實證明,(根據包名稱)有一個 http 服務器,它可能是標準庫中最古老的部分之一:com.sun.net.httpserver.httpserver。

使用服務器實現實際上非常簡單,這是我處理 battlesnake 元數據請求的初始代碼:

import com.sun.net.httpserver.httpserver;
import com.sun.net.httpserver.httphandler;
import com.sun.net.httpserver.httpexchange;
import java.io.ioexception;
import java.io.outputstream;
import java.net.inetsocketaddress;

public class snake {

    static class battlesnakehandler implements httphandler {
        public void handle(httpexchange exchange) throws ioexception {
            string response = "{\"apiversion\": \"1\", " +
                "\"author\": \"'robvanderleek\", \"version\": \"1.0\", " +
                "\"color\": \"#b07219\", \"head\": \"safe\", " +
                "\"tail\": \"sharp\"}";
            exchange.sendresponseheaders(200, response.length());
            outputstream os = exchange.getresponsebody();
            os.write(response.getbytes());
            os.close();
        }
    }

    public static void main(string args[]) throws ioexception {
        int port = integer.parseint(
            system.getenv().getordefault("port", "3000"));
        httpserver server = httpserver.create(new inetsocketaddress(port), 0);
        server.createcontext("/", new battlesnakehandler());
        server.setexecutor(null);
        server.start();
        system.out.println(
            string.format("starting battlesnake server on port: %d", port));
    }

}
關注:愛掏網

游戲邏輯

游戲邏輯代碼的一個重要部分是解析傳入的 json 數據。標準java庫不包含json解析器,典型的解析器庫包含數千行代碼。
經過大量的修改,我能夠解析 battlesnake json,并且只有那個 json

下面是代碼中與 json 解析相關的四個函數(這些函數解析字段、對象和數組):

    private string getfield(string json, string name) {
        string needle = '"' + name + '"';
        return json.substring(json.indexof(needle) + needle.length() + 1);
    }

    private string getbalanced(string json, string name, char open,
            char close) {
        string start = getfield(json, name);
        int idx = 0, indent = 0;
        do {
            if (start.charat(idx) == open) {
                indent++;
            } else if (start.charat(idx) == close) {
                indent--;
            }
            idx++;
        } while (indent > 0);
        return start.substring(0, idx);
    }

    private string getobject(string json, string name) {
        return getbalanced(json, name, '{', '}');
    }

    private string getarray(string json, string name) {
        return getbalanced(json, name, '[', ']');
    }
關注:愛掏網

游戲邏輯的其余部分非常簡單,我使用了一個基本的坐標類以獲得更好的可讀性和簡潔性:

private Coordinate nearestFood(String board, Coordinate head) {
        String foodJson = getArray(board, "food");
        Set<coordinate> food = getCoordinates(foodJson);
        double distance = Double.MAX_VALUE;
        int x = 255, y = 255;
        for (Coordinate f: food) {
            double d = Math.sqrt(Math.pow(head.x - f.x, 2) +
                    Math.pow(head.y - f.y, 2));
            if (d 



<p>我確信游戲邏輯可以改進,為什么不嘗試一下呢? ?</p>

<p>這是完整的實際代碼:</p>

<p><img src="https://img.php.cn/upload/article/000/465/014/172299026158258.gif" alt="戰蛇挑戰#Java"></p>

<p>c battlesnake 的完整代碼可以在 github 上找到。</p>

<h2>
  
  
  感謝反饋!
</h2>

<p>我希望你喜歡閱讀我的編碼冒險。</p>

<p>請在下面的評論中告訴我您對上面的代碼的看法,或者您期待本系列中的哪些編程語言。</p>

<p>直到下一種語言!</p>


          

            
  

            
        </coordinate>
關注:愛掏網

以上就是戰蛇挑戰#Java的詳細內容,更多請關注愛掏網 - it200.com其它相關文章!

聲明:所有內容來自互聯網搜索結果,不保證100%準確性,僅供參考。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。
發表評論
更多 網友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 一级毛片免费毛片毛片| 中文字幕在线观看一区二区 | 亚洲性一级理论片在线观看| 非洲人zoxxxx另类| 天天综合日日噜噜噜| 久热中文字幕在线精品免费| 男女激情边摸边做边吃奶在线观看 | 国产无套护士丝袜在线观看| 一个人晚上在线观看的免费视频| 最近2019免费中文字幕视频三| 免费观看美女裸体网站| 黑人xxxx日本| 夜色福利久久久久久777777| 动漫精品专区一区二区三区不卡| 手机看片福利日韩国产| 少妇高潮喷水久久久久久久久久| 乱人伦中文视频在线| 熟妇人妻videos| 国产一区日韩二区欧美三区| 深爱婷婷激情网| 女的扒开尿口让男人桶| 久久久这里有精品999| 欧美成人三级一区二区在线观看| 冬月枫在线观看| 边摸边吃奶边做爽免费视频99| 国产精品美女久久久浪潮av| 一本一本久久aa综合精品| 日本熟妇乱人伦XXXX| 亚洲国产精品sss在线观看AV | 国内不卡一二三四区| 中国一级毛片免费看视频| 日韩电影免费在线| 亚洲日本人成中文字幕| 精品一区二区三区av天堂| 国产一级淫片a免费播放口之| 五月婷婷激情网| 在体育课被老师做了一节课视频 | 国产v片免费播放| 国产乱子精品免费视观看片| 国内精品视频在线观看| 一本大道久久a久久精品综合|