เกม Snake รุ่น Java ที่ฉันเขียนอย่างจริงจังด้วยอินเทอร์เฟซกราฟิกรองรับการทำงานของเมนูการตรวจสอบแป้นพิมพ์สามารถเร่งความเร็วลดลงได้คะแนนนับความเร็วการเคลื่อนไหวตั้งค่าสีพื้นหลังของเกม ฯลฯ ! ไม่ควรมีข้อบกพร่องเพราะฉันได้แก้ไขอย่างสมบูรณ์
ต่อไปนี้เป็นความสัมพันธ์แบบลำดับชั้นระหว่างแพ็คเกจต่าง ๆ และคลาสของโครงการ:
อินเทอร์เฟซการรันหลักของเกมแสดงด้านล่าง:
ต่อไปนี้เป็นรหัสบางส่วน ดูลิงค์นี้สำหรับซอร์สโค้ดโดยละเอียด: ดาวน์โหลดซอร์สโค้ดของงูโลภ
ชั้นเรียนงู:
แพ็คเกจ 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 up = 1; สาธารณะคงสุดท้าย int down = -1; สาธารณะคงที่สาธารณะสุดท้ายซ้าย = 2; สาธารณะคงที่สุดท้าย INT RIGHT = -2; // Liser Group Private Set <Snakelistener> Listeners = new HashSet <Snakelistener> (); // โครงสร้างรายการที่เก็บข้อมูล LinkedList ส่วนตัว <Point> Body = ใหม่ LinkedList <Point> (); ชีวิตบูลีนส่วนตัว // เป็นบูลีนส่วนตัวหยุดชั่วคราว // เป็นเกมส่วนตัว int OldDirection, NewDirection; // การแนะนำทิศทางใหม่และเก่า (หลีกเลี่ยงทิศทางที่ไม่ถูกต้องภายในเวลาย้าย) จุดส่วนตัว OldTail; // หางเก่า (ใช้เมื่อกินอาหาร) private int foodcount = 0; // ปริมาณของอาหารที่กินสีส่วนบุคคลสีเอกชน; สีสันร่างกายส่วนตัว; เวลานอนหลับส่วนตัว; Islife บูลีนสาธารณะ () {return life; } สาธารณะ int getSleeptime () {return lipletime; } โมฆะสาธารณะ setSleeptime (int sleeptime) {this.sleeptime = เวลานอน; } โมฆะสาธารณะ setheadColor (สี headcolor) {this.headColor = headcolor; } โมฆะสาธารณะ setbodyColor (สี bodycolor) {this.bodyColor = bodyColor; } โมฆะสาธารณะ init () {int x = global.width/2; int y = global.height/2; สำหรับ (int i = 0; i <3; i ++) {body.addlast (จุดใหม่ (x-, y)); } OldDirection = newDirection = ขวา; FoodCount = 0; ชีวิต = จริง; หยุดชั่วคราว = เท็จ; if (sleeptime == 0) {sleeptime = 300; }} // วิธีการล้างโหนดของงู (ใช้เพื่อเริ่มเกมใหม่) โมฆะสาธารณะ Clear () {body.clear (); } โมฆะสาธารณะ setLife (ชีวิตบูลีน) {this.life = ชีวิต; } บูลีนสาธารณะ getPause () {return pause; } โมฆะสาธารณะ setPause (หยุดบูลีน) {this.pause = หยุดชั่วคราว; } // วิธีการเปลี่ยนสถานะของการหยุดชั่วคราวค่าคงที่สาธารณะโมฆะ changepause () {pause =! หยุดชั่วคราว; } // วิธีการตายสำหรับโมฆะสาธารณะงูตาย () {life = false; } // วิธีการย้ายโมฆะสาธารณะย้าย () {ถ้า (! (OldDirection + newDirection == 0)) {OldDirection = newDirection; } // รายละเอียด oldTail = body.RemoVelast (); int x = body.getFirst (). x; int y = body.getFirst (). y; สวิตช์ (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; } หยุดพัก; } point newhead = จุดใหม่ (x, y); // เพิ่ม Head Body.addfirst (newhead); } // เปลี่ยนทิศทางโมฆะสาธารณะเปลี่ยนทิศทาง (ทิศทาง int) {newDirection = ทิศทาง; } // กินอาหารสาธารณะเป็นโมฆะ eatfood () {body.addlast (OldTail); FoodCount ++; } // รับปริมาณอาหารที่คุณกินสาธารณะ int getfoodcount () {return foodcount; } // งูกินบูลีนสาธารณะของตัวเอง iseatbody () {สำหรับ (int i = 1; i <body.size (); i ++) {ถ้า (body.get (i) .Equals (this.gethead ())) กลับมาเป็นจริง } return false; } // รับโหนดที่เป็นตัวแทนของหัวของงูจุดสาธารณะ gethead () {return body.getFirst (); } // แสดงตัวเองเป็นโมฆะสาธารณะ drawme (กราฟิก g) {ถ้า (bodycolor == null) {g.setColor (สีใหม่ (0x3333ff)); } else {g.setColor (bodycolor); } สำหรับ (จุด 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); } // วาดโมฆะ Public Public Drawhead (กราฟิก g) {ถ้า (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 () {ในขณะที่ (ชีวิต) {ถ้า (หยุดชั่วคราว == เท็จ) {ย้าย (); สำหรับ (snakelistener L: ผู้ฟัง) L.Snakemoved (งูนี่); } ลอง {thread.sleep (เวลานอน); } catch (interruptedException e) {e.printStackTrace (); }}}}} // วิธีการเริ่มต้นเธรดโมฆะสาธารณะเริ่มต้น () {เธรดใหม่ (ใหม่ snakedriver ()). เริ่มต้น (); } // เพิ่มโมฆะสาธารณะผู้ฟัง addsnakelistener (snakelistener l) {ถ้า (l! = null) {listeners.add (l); }} // เพิ่มความเร็วในการเร่งความเร็วโมฆะสาธารณะ () {if (เวลานอน> 50) {sleeptime- = 20; }} // ช้าลงโมฆะสาธารณะ Speeddown () {ถ้า (Sleeptime <700) {Sleeptime+= 20; -ชั้นอาหาร:
แพ็คเกจ com.huowolf.entities; นำเข้า Java.awt.Color; นำเข้า java.awt.graphics; นำเข้า Java.awt.Point; นำเข้า com.huowolf.util.global; อาหารชั้นเรียนสาธารณะขยายจุด {ส่วนตัวคงที่ความยาวคงสุดท้าย serialversionuid = 1l; Colorcolor สีส่วนตัว; โมฆะสาธารณะ setFoodColor (สี ColorColor) {this.foodColor = FoodColor; } สีสาธารณะ getFoodColor () {return foodColor; } โมฆะสาธารณะ newfood (จุด P) {setLocation (p); } บูลีนสาธารณะ isfoodeated (งูงู) {return this.equals (snake.gethead ()); } โมฆะสาธารณะ drawme (กราฟิก g) {ถ้า (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; พื้นดินระดับสาธารณะ {บูลีนส่วนตัว [] [] rocks = บูลีนใหม่ [global.width] [global.height]; maptype ส่วนตัว int = 1; สาธารณะ int getMapType () {return maptype; } โมฆะสาธารณะ setMapType (int maptype) {this.mapType = mapType; } // เริ่มต้นพื้นดิน (ล้างหิน) โมฆะสาธารณะ Clear () {สำหรับ (int x = 0; x <global.width; x ++) สำหรับ (int y = 0; y <global.height; y ++) หิน [x] [y] = false; } / *** สร้างหิน* / โมฆะสาธารณะ generaterocks1 () {สำหรับ (int x = 0; x <global.width; x ++) หิน [x] [0] = หิน [x] [global.height - 1] = true; สำหรับ (int y = 0; y <global.height; y ++) หิน [0] [y] = หิน [global.width - 1] [y] = true; } โมฆะสาธารณะ generaterocks2 () {สำหรับ (int y = 0; y <6; y ++) {หิน [0] [y] = true; หิน [global.width - 1] [y] = true; Rocks [0] [Global.height - 1 - y] = true; Rocks [Global.width - 1] [Global.height - 1 - y] = true; } สำหรับ (int y = 6; y <global.height - 6; y ++) {หิน [6] [y] = true; หิน [global.width - 7] [y] = true; }} โมฆะสาธารณะ generaterocks3 () {สำหรับ (int x = 4; x <14; x ++) หิน [x] [5] = true; สำหรับ (int j = 5; j <15; j ++) หิน [21] [j] = true; สำหรับ (int y = 13; y <20; y ++) หิน [14] [y] = true; สำหรับ (int x = 2; x <10; x ++) หิน [x] [17] = true; สำหรับ (int i = 10; i <global.width-3; i ++) หิน [i] [global.height-3] = true; } // งูกินบูลีนสาธารณะหิน (งูงู) {สำหรับ (int x = 0; x <global.width; x ++) {สำหรับ (int y = 0; y <global.height; y ++) {ถ้า (rocks [x] [y] == true && จริง; }} return false; } จุดสาธารณะ getPoint () {สุ่มสุ่ม = ใหม่สุ่ม (); int x = 0, y = 0; ทำ {x = random.nextint (global.width); y = random.nextint (global.height); } ในขณะที่ (หิน [x] [y] == true); คืนจุดใหม่ (x, y); } // วิธีการแสดงโมฆะสาธารณะ drawme (กราฟิก g) {g.setColor (color.dark_gray); สำหรับ (int x = 0; x <global.width; x ++) {สำหรับ (int y = 0; y <global.height; y ++) {ถ้า (หิน [x] [y] == จริง) {g.fill3drect (x*global.cell_size, y*global.cell_size, global.cell_size -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น