グラフィカルなインターフェイスを備えた私が非常に真剣に書いたJavaバージョンのSnakeゲームは、メニュー操作、キーボード監視、加速、減速、カウントスコア、セットの移動速度、ゲームの背景色の設定などをサポートします。私はそれらを完全に変更したので、バグはないはずです。
以下は、さまざまなパッケージとプロジェクトのクラスの間の階層的な関係です。
ゲームのメインランニングインターフェイスを以下に示します。
以下はいくつかのコードです。詳細なソースコードについては、このリンクを参照してください:貪欲なヘビのソースコードをダウンロードしてください
ヘビのクラス:
パッケージcom.huowolf.entities; java.awt.colorをインポートします。 java.awt.graphicsをインポートします。 java.awt.pointをインポートします。 java.util.hashsetをインポートします。 java.util.linkedListをインポートします。 java.util.setをインポートします。 com.huowolf.listener.snakelistenerをインポートします。 com.huowolf.util.globalをインポートします。パブリッククラススネーク{//定数を表す方向を表すパブリック静的最終int = 1; public static final int down = -1; public static final int left = 2; public static final int right = -2; //ライザーグループプライベートセット<SnakElistener>リスナー= new Hashset <Snakelistener>(); //ストレージリスト構造privatelinkedlist <point> body = new linkedlist <point>();プライベートブールライフ; //プライベートブールの一時停止が生きています。 //ゲームはプライベートint olddirection、newdirectionを行います。 //新しい方向と古い方向の導入(移動時間内に無効な方向を避けます)プライベートポイントオールドテール。 // Old Tail(食べ物を食べるときに使用)Private Int FoodCount = 0; //プライベートカラーヘッドカラーを食べる食べ物の量。プライベートカラーボディコーラー; Private int Sleeptime; public boolean islife(){return life; } public int getSleeptime(){return Sleeptime; } public void setSsleeptime(int Sleeptime){this.Sleeptime = SleepTime; } public void setheadcolor(color headcolor){this.headcolor = headcolor; } public void setbodycolor(color bodycolor){this.bodycolor = bodycolor; } public void init(){int x = global.width/2; int y = global.height/2; for(int i = 0; i <3; i ++){body.addlast(new Point(x-、y)); } oldDirection = newDirection = right; FoodCount = 0; life = true;一時停止= false; if(sleeptime == 0){sleeptime = 300; }} //ヘビのノードをクリアする方法(新しいゲームを開始するために使用)public void clear(){body.clear(); } public void setLife(boolean life){this.life = life; } public boolean getPause(){return Pause; } public void setPause(boolean pause){this.pause = Pause; } //ポーズ定数の状態を変更する方法public void changepause(){pause =!pause; } //蛇のために死ぬ方法public void die(){life = false; } // public void move(){if(!(olddirection + newDirection == 0)){oldDirection = newDirection; } //詳細oldtail = body.removelast(); int x = body.getFirst()。x; int y = body.getFirst()。y; switch(olddirection){case up:y--; if(y <0){y = global.height -1; } 壊す;ケースダウン:Y ++; if(y> = global.height){y = 0; } 壊す;左のケース:x--; if(x <0){x = global.width-1; } 壊す;ケース右:x ++; if(x> = global.width){x = 0; } 壊す; }ポイントnewhead = new Point(x、y); // head body.addfirst(newhead); } //方向の変更public void chanderirection(int direction){newDirection = Direction; } //食べ物を食べる公共void eatfood(){body.addlast(oldtail); FoodCount ++; } //あなたが食べる食べ物の量を取得しますpublic getFoodCount(){return foodcount; } //ヘビはそれ自身の体を食べますか? } falseを返します。 } //ヘビの頭を表すノードを取得しますパブリックポイントgethead(){return body.getFirst(); } // public void drawme(graphics g){if(bodycolor == null){g.setcolor(new Color(0x3333ff)); } else {g.setcolor(bodycolor); } for(ポイントP:body){g.fillroundRect(px*global.cell_size、py*global.cell_size、global.cell_size、global.cell_size、global.cell_size、15,12); } drawhead(g); } //スネークヘッドパブリックボイドドローヘッド(グラフィックスG){if(headcolor == null)g.setcolor(color.yellow); else {g.setcolor(headcolor); } g.fillRoundRect(gethead()。x * global.cell_size、gethead()。y * global.cell_size、global.cell_size、global.cell_size、global.cell_size、global.cell_size、15,12); } //内部クラスのプライベートクラスSnakedRiverはrunnable {public void run(){while){if(pause == false){move(); for(snakelistener l:リスナー)l.snakemoved(snake.this); } try {thread.sleep(sleeptime); } catch(arturnedexception e){e.printstacktrace(); }}}}} //スレッドを開始するメソッドpublic void begin(){new Stread(new SnakedRiver())。start(); } //リスナーの追加void addsnakelistener(snakelistener l){if(l!= null){ristens.add(l); }} // public void speedup(){if(sleeptime> 50){sleeptime- = 20; }} // public public void speeddown(){if(sleeptime <700){sleeptime+= 20; }}}フードクラス:
パッケージcom.huowolf.entities; java.awt.colorをインポートします。 java.awt.graphicsをインポートします。 java.awt.pointをインポートします。 com.huowolf.util.globalをインポートします。パブリッククラスフードはポイントを拡張します{private static final long serialversionuid = 1l;プライベートフードフードカラー; public void setfoodcolor(food foodcolor){this.foodcolor = foodcolor; } public color getFoodColor(){return foodcolor; } public void newfood(ポイントP){setLocation(P); } public boolean isfoodeated(snake snake){return this.equals(snake.gethead()); } public void drawme(グラフィックg){if(foodcolor == null){g.setcolor(color.red); } else {g.setcolor(foodcolor); } g.fill3drect(x*global.cell_size、y*global.cell_size、global.cell_size、global.cell_size、true); }}グラウンドクラス
パッケージcom.huowolf.entities; java.awt.colorをインポートします。 java.awt.graphicsをインポートします。 java.awt.pointをインポートします。 java.util.randomをインポートします。 com.huowolf.util.globalをインポートします。パブリッククラスグラウンド{private boolean [] [] rocks = new boolean [global.width] [global.height]; private int maptype = 1; public int getMaptype(){return maptype; } public void setMaptype(int maptype){this.maptype = maptype; } //グラウンドを初期化(石をクリア)public void clear(){for(int x = 0; x <global.width; x ++)for(int y = 0; y <global.height; y ++)rocks [x] [y] = false; } / ***生成Stone* / public void generaterocks1(){for(int x = 0; x <global.width; x ++)rocks [x] [0] = rocks [x] [global.height -1] = true; for(int y = 0; y <global.height; y ++)Rocks [0] [y] = rocks [global.width -1] [y] = true; } public void generaterocks2(){for(int y = 0; y <6; y ++){rocks [0] [y] = true; Rocks [global.width -1] [y] = true; Rocks [0] [Global.height -1 -y] = true; Rocks [Global.Width -1] [Global.Height -1 -Y] = true; } for(int y = 6; y <global.height -6; y ++){rocks [6] [y] = true; Rocks [global.width -7] [y] = true; }} public void generaterocks3(){for(int x = 4; x <14; x ++)rocks [x] [5] = true; for(int j = 5; j <15; j ++)Rocks [21] [j] = true; for(int y = 13; y <20; y ++)岩[14] [y] = true; for(int x = 2; x <10; x ++)Rocks [x] [17] = true; for(int i = 10; i <global.width-3; i ++)Rocks [i] [global.height-3] = true; } //ヘビは石を食べますか? 真実; }} falseを返します。 } public point getpoint(){random random = new Random(); int x = 0、y = 0; {x = random.nextint(global.width); y = random.nextint(global.height); } while(rocks [x] [y] == true);新しいポイント(x、y)を返します。 } //ディスプレイメソッドpublic void drawme(graphics g){g.setcolor(color.dark_gray); for(int x = 0; x <global.width; x ++){for(int y = 0; y <global.height; y ++){if(rocks [x] [y] == true){g.fill3drect(x*global.cell_size、y*global.cell_size、global_izezize、global.cell_size、true) }}}}}}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。