1. คำอธิบายข้อกำหนด
1. ข้อกำหนดการทำงาน
ในขั้นตอนการวิเคราะห์ความต้องการการทำงานงานหลักของเราคือการระบุว่าบริการใดที่ระบบจะต้องจัดเตรียมกำหนดว่าฟังก์ชั่นที่ซอฟต์แวร์เสร็จสมบูรณ์และมอบให้กับคนเหล่านั้น ข้อกำหนดการทำงานเป็นข้อกำหนดพื้นฐานของการพัฒนาซอฟต์แวร์และส่วนที่ขาดไม่ได้ของการวิเคราะห์ความต้องการ Tank War เป็นเกมคลาสสิก เกมนี้ได้เรียนรู้ประสบการณ์ของรุ่นก่อน โดยรวมแล้วเกมนี้แบ่งออกเป็นทั้งสองด้านของศัตรูและเรา รถถังที่มีส่วนร่วมในการต่อสู้ส่วนใหญ่จะถูกควบคุมโดยผู้เล่น รถถังของศัตรูสามารถปรากฏขึ้นอย่างชาญฉลาดและสุ่มบนหน้าจอและเคลื่อนย้ายเปิดกระสุนจำนวนหนึ่ง ผู้เล่นสามารถเคลื่อนย้ายรถถังได้ในพื้นที่ที่กำหนด เมื่อกระสุนโจมตีผู้เล่นผู้เล่นจะตายและเกมจะจบลง รถถังศัตรูวิ่งอย่างชาญฉลาด เนื่องจากพวกเขาจำเป็นต้องมีสติปัญญาระดับหนึ่งพวกเขาจึงปรากฏตัวแบบสุ่มบนหน้าจอและหมุนได้อย่างอิสระเช่น: รู้ว่าพวงมาลัยเมื่อพวกเขาพบขอบเขต Bullets Run: รถถังถูกควบคุมโดยผู้เล่นและกระสุนปืนตามตำแหน่งรถถังที่แตกต่างกัน หากพวกเขาไปถึงเป้าหมายจะมีการผลิตเอฟเฟกต์การระเบิด มันจะหายไปบนหน้าจอ
2. ข้อกำหนดด้านประสิทธิภาพของระบบ
ข้อกำหนดการกำหนดค่าประสิทธิภาพของเกมที่ใช้ระบบคอมพิวเตอร์เพื่อให้แน่ใจว่าโปรแกรมสามารถทำงานได้อย่างรวดเร็วและเสถียรและสามารถตอบสนองได้ในเวลาที่เหมาะสมเมื่อทำงาน เมื่อรถถังของผู้เล่นถูกทำลายในเกมให้พร้อมข้อมูลทันทีเกี่ยวกับความล้มเหลวของเกมและตอบสนองในเวลาที่เหมาะสมเพื่อให้ตรงตามข้อกำหนดของกฎของเกม นอกจากนี้ยังมีความจำเป็นเพื่อให้แน่ใจว่าขนาดของหน้าต่างหลักไม่สามารถเปลี่ยนแปลงได้ตามความสามารถเมื่อเล่นเกมเพื่อให้มั่นใจว่าสามารถเล่นได้
3. การแก้ปัญหาการทำงาน
อัตราการใช้รหัสดีมากในเกม ท้ายที่สุดมันเป็นงานเรียลไทม์ ทุกมิลลิวินาทีจะมีกระสุนจำนวนมากยิงและการเคลื่อนไหวพิกัดของรถถังจำนวนมาก ฉันเปรียบเทียบจำนวนกระสุนที่ตีถังนับครั้งไม่ถ้วนและเหตุการณ์การตรวจสอบคีย์บอร์ดการใช้อินเทอร์เฟซเธรดและการวาดภาพใหม่และการรีเฟรช ความรู้สึกของตรรกะจะต้องมีความแข็งแกร่งและการแสดงผลเชิงวัตถุจะแสดงอย่างเต็มที่ แม้แต่ความสัมพันธ์ระหว่างพวกเขาก็ยังไม่ชัดเจนและเป็นเรื่องง่ายที่จะมีสถานการณ์ที่ไม่คาดคิด เพื่อที่จะเพิ่มความงามและเพิ่มการระเบิดในเกมมันต้องการว่าเมื่อถังข้าศึกตาย, ม้าหมุนสั้นและรวดเร็วของภาพที่คงที่บนแผงด้านนอกเพื่อให้ได้เอฟเฟกต์การระเบิด;
โดยทั่วไปฟังก์ชั่นพื้นฐานที่จะเสร็จสิ้นในการต่อสู้ถังรวมถึง: อินเทอร์เฟซกราฟิกความแตกต่างในรูปแบบถังข้าศึกกับฉันรถถังสามารถยิงกระสุนเพื่อโจมตีคู่ต่อสู้ แต่ไม่สามารถโจมตีเพื่อนร่วมทีมและรถถังตั้งค่าสุขภาพบางอย่าง;
2. การวิเคราะห์ฟังก์ชั่นหลัก
ในขั้นตอนการพัฒนาเกมสงคราม Tank War ฟังก์ชั่นหลักที่ให้กับผู้ใช้เพื่อใช้งานดังนั้นก่อนอื่นคุณต้องวาดรถถัง
1. วาดถังผู้เล่น: คุณต้องตั้งค่าสี () บนแผง JPanel และวาดรูปร่างโดยประมาณของถังด้วยแปรง;
2. รถถังของผู้เล่นสามารถเคลื่อนที่ได้: หากรถถังเคลื่อนที่พวกเขาจำเป็นต้องเปลี่ยนพิกัดของถังและทาสีใหม่อย่างต่อเนื่อง อย่างไรก็ตามเมื่อรถถังเคลื่อนที่กลไกการตรวจสอบเหตุการณ์ (การตรวจสอบคีย์บอร์ด) สามารถนำไปใช้ในคลาสพาเนล เมื่อผู้เล่นกดปุ่ม w/d/s/a มันสามารถเลื่อนขึ้นลงซ้ายและขวา;
3. และวาดรถถังศัตรูบนสีกระดาษวาดของฉัน (); เนื่องจากรถถังข้าศึกและรถถังผู้เล่นอยู่ในอินเทอร์เฟซเดียวกันพวกเขาจึงต้องถูกวาดลงบนกระดานวาดภาพเดียวกัน
4. รถถังของผู้เล่นสามารถยิงกระสุน: หากผู้เล่นต้องการยิงกระสุนพวกเขาจำเป็นต้องมีแหล่งเหตุการณ์ เมื่อผู้ใช้กดปุ่ม J การตรวจสอบเหตุการณ์จะยิงกระสุนทันที แต่จำเป็นต้องแสดงต่อหน้าสายตาของผู้ใช้เพื่อดูเอฟเฟกต์ดังนั้นทาสี () ดึงกระสุนบนแผง เนื่องจากกระสุนถูกเปิดตัวและเคลื่อนไปอย่างต่อเนื่องไปสู่การเปิดตัวพิกัดของกระสุนจะต้องเปลี่ยนแปลงอย่างต่อเนื่องและความเร็วกระสุนจะต้องเหมาะสมดังนั้นจึงจำเป็นต้องนำไปใช้กับเธรดและแผงควบคุมใหม่อย่างต่อเนื่องเพื่อดูเอฟเฟกต์;
5. ผู้เล่นสามารถยิงกระสุนเป็นแถวและยิงได้มากถึงห้า: หากผู้เล่นต้องการควบคุมจำนวนกระสุนเขาต้องค้นหาว่าจำนวนกระสุนที่รอดชีวิตในปัจจุบันนั้นน้อยกว่า 5 เมื่อผู้เล่นกดปุ่ม J หรือไม่ เมื่อพบเงื่อนไขจะมีการสร้างกระสุนหนึ่งนัด เมื่อผู้เล่นยิงกระสุนมากกว่าห้านัดฟังก์ชั่นไฟของระบบจะไม่ถูกเรียกอีกต่อไป เนื่องจากการเปิดตัวกระสุนไม่เพียง แต่ยิงกระสุนหนึ่งนัดเท่านั้นให้ตั้งชุดกระสุนเพื่อสร้างกระสุนหนึ่งนัดในเวลาที่จะรู้ว่ากระสุนตายเมื่อพวกเขาตีขอบเขตและตาย
6. เมื่อรถถังของผู้เล่นชนกับถังข้าศึกมันจะหายไปและสร้างเอฟเฟกต์การระเบิด อันดับแรกมีความจำเป็นที่จะต้องพิจารณาว่ากระสุนปืนของผู้เล่นกระทบกับศัตรูหรือไม่ดังนั้นจึงมีฟังก์ชั่นที่จะตัดสินศัตรูอย่างต่อเนื่อง เมื่อกระสุนวิ่งบนถังข้าศึกชีวิตของรถถังจะต้องจบลงและมีการสร้างระเบิดและระเบิดถูกวาดด้วยสี ();
7. ถังของศัตรูสามารถเคลื่อนที่ได้อย่างชาญฉลาด: หากรถถังสามารถเคลื่อนที่ได้ก็จะต้องสร้างทิศทางการเคลื่อนไหวแบบสุ่ม เนื่องจากการเคลื่อนไหวอย่างต่อเนื่องวิธีการถูกเขียนลงในฟังก์ชั่นการทำงานของเธรดและเธรดจะถูกควบคุมให้นอนหลับเพื่อให้ได้ปัญหาความเร็วในการเคลื่อนไหว
8. ถังข้าศึกสามารถยิงกระสุน: ในขณะที่วาดศัตรูให้ตั้งค่าบางอย่างในด้ายเพื่อสร้างกระสุนในทิศทางที่แตกต่างกันและจำนวนรถถังที่แตกต่างกันและนำกระสุนแต่ละนัดออกไปบนแผงและวาด
9. เมื่อกระสุนปืนศัตรูชนผู้เล่นผู้เล่นจะหายไป: นำกระสุนแต่ละนัดของศัตรูออกมาและเปรียบเทียบกับถังของผู้เล่น เมื่อกระสุนสัมผัสผู้เล่นการระเบิดของผู้เล่นจะหายไป
3. การออกแบบสรุป
•การตั้งค่าแอตทริบิวต์บทบาท
Tank: ตำแหน่งที่สร้างถังสีของถังประเภทต่าง ๆ ตัวระบุชีวิตของถังความเร็วของการเคลื่อนที่ของถังและถังในทิศทางที่แตกต่างกัน
Tank ผู้เล่น: หลังจากสืบทอดคุณลักษณะพื้นฐานของถังมันจะรับรู้บนพื้นฐานของพื้นฐานที่สองและรถถังผู้เล่นเคลื่อนที่ขึ้นและลงอย่างอิสระและซ้ายและขวา; และรถถังผู้เล่นมีฟังก์ชั่นการยิงและยิงกระสุน
Tank ศัตรู: หลังจากสืบทอดคุณลักษณะของถังพื้นฐานมันเป็นสิ่งจำเป็นที่จะต้องตระหนักถึงการเคลื่อนไหวที่ชาญฉลาดของถังข้าศึกและในเวลาเดียวกันก็ต้องเปิดตัวหัวข้อกระสุนบนถังจากตำแหน่งที่แตกต่างกัน
กระสุน: กระสุนต้องมีตำแหน่งพิกัดความเร็วสุขภาพและกระสุนควรสามารถเคลื่อนย้ายได้และกระสุนจะต้องใช้วิธีการฟังก์ชั่นการตายด้วย
ระเบิด: พิกัดของระเบิดชีวิตและวิธีการเอฟเฟกต์ของชีวิตที่หายไปค่อยๆหายไป;
•การตั้งค่าคุณสมบัติการทำงาน
การวาดกระดาษ: สี () ควรวาดรถถังผู้เล่นถังข้าศึกและแสดงผลการระเบิดของถังความตาย
การตรวจสอบเหตุการณ์: เมื่อผู้ใช้กด WDSA ถังผู้เล่นที่เกี่ยวข้องควรเปลี่ยนทิศทาง เมื่อผู้ใช้ยิง J จะมีกระสุนในทิศทางของการเปิดตัวและควรทำงานจนกว่าจะตายเว้นแต่ว่ามันจะกระทบกับศัตรู
ตีถัง: เมื่อกระสุนโจมตีถังข้าศึกการระเบิดจะถูกสร้างขึ้นและเพิ่มเข้าไปในชุดการระเบิดและข้อมูลการระเบิดจะถูกดึงขึ้นมาบนพื้นผิว
ศัตรูตีผู้เล่น: นำศัตรูที่เรียกว่าในเกมและกระสุนของศัตรูแต่ละตัวตรงกับรถถังของฉันเพื่อพิจารณาว่าจะตีหรือไม่
ผู้เล่นตีศัตรู: นำกระสุนแต่ละนัดของผู้เล่นจับคู่ถังศัตรูแต่ละตัวเพื่อพิจารณาว่าจะตีหรือไม่ และวางคำตัดสินที่เกี่ยวข้องกับการกดปุ่มถังลงในด้าย () เพื่อทำการตัดสินพร้อมกันอย่างต่อเนื่อง
แผนภาพการวิเคราะห์การทำงานเฉพาะมีดังนี้:
•ไดอะแกรมการวิเคราะห์แอตทริบิวต์อักขระถัง
ไดอะแกรมการวิเคราะห์บอร์ดการวาดภาพ
ไดอะแกรมการวิเคราะห์โดยรวมของถัง Xmind
แอตทริบิวต์อักขระถัง xmind ไดอะแกรม
แอตทริบิวต์ฟังก์ชั่นถัง Xmind Diagram
iv. การใช้งานระบบ
•สมาชิก. java
//members.javapackage mytank9; นำเข้า java.util.*; การระเบิดระดับ {// กำหนดพิกัดระเบิด int x, y; // ชีวิตของระเบิดคือ int life = 9; บูลีน islive = true; ระเบิดสาธารณะ (int x, int y) {this.x = x; this.y = y; } // ลดโมฆะสาธารณะเพื่อสุขภาพ Lifedown () {ถ้า (ชีวิต> 0) {ชีวิต-; } else {this.islive = false; }}} คลาสช็อตใช้งาน unnable {int x; int y; int โดยตรง; ความเร็ว int = 1; บูลีน islive = true; ภาพสาธารณะ (int x, int y, int โดยตรง) {this.x = x; this.y = y; this.direct = โดยตรง; } โมฆะสาธารณะเรียกใช้ () {ในขณะที่ (จริง) {ลอง {thread.sleep (50); } catch (exception e) {e.printstacktrace (); } สวิตช์ (โดยตรง) {กรณี 0: y- = ความเร็ว; หยุดพัก; กรณีที่ 1: x+= ความเร็ว; หยุดพัก; กรณีที่ 2: y+= ความเร็ว; หยุดพัก; กรณีที่ 3: x- = ความเร็ว; หยุดพัก; } // พิจารณาว่าฟิลด์กระทบขอบถ้า (x <0 || x> 400 || y <0 || y> 300) {this.islive = false; หยุดพัก; }}}} รถถังคลาส {// รถถังพิกัดแนวนอน int x = 0; // g แนวตั้งพิกัด int y = 0; // ทิศทางรถถัง // 0 หมายถึงด้านบน 1 หมายถึงขวา 2 หมายถึงต่ำกว่า 3 หมายถึง int ซ้ายโดยตรง = 0; บูลีน islive = true; public int getColor () {สีกลับ; } โมฆะสาธารณะ setColor (สี int) {color = color; } สาธารณะ int getSpeed () {ความเร็วคืน; } โมฆะสาธารณะ setSpeed (ความเร็ว int) {this.speed = ความเร็ว; } public int getDirect () {return โดยตรง; } โมฆะสาธารณะ setDirect (int โดยตรง) {this.direct = โดยตรง; } ถังสาธารณะ (int x, int y) {this.x = x; this.y = y; } สาธารณะ int getx () {return x; } โมฆะสาธารณะ setx (int x) {this.x = x; } สาธารณะ int getey () {return y; } โมฆะสาธารณะ sety (int y) {this.y = y; }} // ศัตรูคลาส Tank Class ENEMEMYTANK ขยายรถถังใช้งานได้ Runnable {int times = 0; // กำหนดเวกเตอร์ที่สามารถเก็บกระสุนศัตรูเวกเตอร์ <Thot> SS = เวกเตอร์ใหม่ <SHOT> (); // ศัตรูเพิ่มกระสุนหลังจากรถถัง } @Override โมฆะสาธารณะ Run () {// todo วิธีการที่สร้างขึ้นอัตโนมัติในขณะที่ (จริง) {switch (this.direct) {กรณี 0: // บ่งชี้ว่าถังกำลังเคลื่อนที่ไป (int i = 0; i <30; i ++) {// ถังข้า } ลอง {thread.sleep (50); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } } หยุดพัก; กรณีที่ 1: สำหรับ (int i = 0; i <30; i ++) {ถ้า (x <400) {x+= ความเร็ว; } ลอง {thread.sleep (50); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } } หยุดพัก; กรณีที่ 2: สำหรับ (int i = 0; i <30; i ++) {ถ้า (y <300) {y+= ความเร็ว; } ลอง {thread.sleep (50); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } } หยุดพัก; กรณีที่ 3: สำหรับ (int i = 0; i <30; i ++) {ถ้า (x> 0) {x- = ความเร็ว; } ลอง {thread.sleep (50); } catch (interruptedException e) {// toDo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ E.PrintStackTrace (); } } หยุดพัก; } // พิจารณาว่าคุณจำเป็นต้องเพิ่มกระสุนใหม่ลงในถังนี้ times ++; if (times%2 == 0) {ถ้า (iSlive) {ถ้า (ss.size () <5) {shot s = null; สวิตช์ (โดยตรง) {กรณี 0: // สร้างกระสุน s = ช็อตใหม่ (x+10, y, 0); // เพิ่มกระสุนลงในเวกเตอร์ ss.add (s); หยุดพัก; กรณีที่ 1: s = ช็อตใหม่ (x+30, y+10, 1); Ss.Add (s); หยุดพัก; กรณีที่ 2: s = ช็อตใหม่ (x+10, y+30, 2); Ss.Add (s); หยุดพัก; กรณีที่ 3: s = ช็อตใหม่ (x, y+10, 3); Ss.Add (s); หยุดพัก; } // เริ่มเธรดเธรด Bullet t = เธรดใหม่ (S); T.Start (); }}} // ให้รถถังสุ่มสร้างทิศทางใหม่ this.direct = (int) (math.random ()*4); // ตรวจสอบว่ารถถังศัตรูตายหรือไม่ถ้า (this.islive == false) {// หลังจากปล่อยให้รถถังตาย }}}} // ฮีโร่คลาสรถถังของฉันขยายถัง {เวกเตอร์ <hot> s = เวกเตอร์ใหม่ <hot> (); ยิง s = null; ฮีโร่สาธารณะ (int x, int y) {super (x, y); } // fire public void shotenemy () {switch (this.direct) {กรณี 0: // สร้างกระสุน s = ช็อตใหม่ (x+10, y, 0); // เพิ่มกระสุนลงในเวกเตอร์ ss.add (s); หยุดพัก; กรณีที่ 1: s = ช็อตใหม่ (x+30, y+10, 1); Ss.Add (s); หยุดพัก; กรณีที่ 2: s = ช็อตใหม่ (x+10, y+30, 2); Ss.Add (s); หยุดพัก; กรณีที่ 3: s = ช็อตใหม่ (x, y+10, 3); Ss.Add (s); หยุดพัก; } เธรด t = เธรดใหม่; T.Start (); } // รถถังเลื่อนขึ้นโมฆะสาธารณะ moveUp () {y- = ความเร็ว; } // tank moveright () {x+= ความเร็ว; } โมฆะสาธารณะ movedown () {y+= ความเร็ว; } โมฆะสาธารณะ moveleft () {x- = ความเร็ว; - • mytankgame4.java
//mytankgame4.java/* * ฟังก์ชั่น: เกมรถถัง 2.0 * 1: วาดถัง * 2: รถถังของฉันสามารถเลื่อนขึ้นและลงได้ * 3: วาดถังศัตรู * 4: ถังของฉันสามารถยิงกระสุนได้ จะถูกเรียกว่า 』* การระเบิด: 1 เตรียมภาพสามครั้งก่อน; javax.swing.*; นำเข้า java.awt.event.*; นำเข้า java.io.file; นำเข้า Java.util.*; คลาสสาธารณะ mytankgame4 ขยาย jframe {mypanel mp = null null; } สาธารณะ myTankGame4 () {mp = myPanel ใหม่ (); T.Start (); this.add (MP); // ลงทะเบียนเพื่อฟัง this.addkeyListener (MP); this.setsize (400, 300); this.setDefaultCloseOperation (jframe.exit_on_close); this.setVisible (จริง); }} คลาส MyPanel ขยาย JPanel ใช้ keyListener, runnable {// กำหนดฮีโร่ฮีโร่ของฉัน = null; // กำหนดเวกเตอร์ถังของศัตรู <SenemyTank> ets = เวกเตอร์ใหม่ <SenemyTank> (); // define ชุด bombs 3; // // กำหนดการสลับภาพสามภาพเพื่อสร้างภาพระเบิด Image1 = NULL; Image image2 = null; Image Image3 = null; // สร้าง myPanel สาธารณะ () {Hero = Hero ใหม่ (100,100); // การเริ่มต้นของถังข้าศึกสำหรับ (int i = 0; i <ensize; i ++) {// สร้างวัตถุข้าศึก et.setColor (0); et.setDirect (2); // เริ่มเธรดถังศัตรู t = เธรดใหม่ (ET); T.Start (); // เจรจากระสุนกับรถถังศัตรู s = ช็อตใหม่ (et.x+10, et.y+30,2); et.ss.add (s); เธรด t2 = เธรดใหม่; t2.start (); // เข้าร่วม ets.add (ET); } ลอง {image1 = imageio.read (ไฟล์ใหม่ ("bomb_1.gif")); image2 = imageio.read (ไฟล์ใหม่ ("bomb_2.gif")); image3 = imageio.read (ไฟล์ใหม่ ("bomb_3.gif")); } catch (exception e) {e.printstacktrace (); } // เริ่มต้นภาพสามภาพ // image1 = toolkit.getDefaultToolkit (). getImage (panel.class.getResource ("/bomb_1.gif")); // image2 = toolkit.getDefaultToolkit (). getImage Toolkit.getDefaultToolkit (). getImage (panel.class.getResource ("/bomb_3.gif")); } // repaint public void paint (graphics g) {super.paint (g); G.FillRect (0, 0, 400, 300); // วาดรถถังของคุณเองถ้า (hero.islive == true) {this.drawtank (hero.getx (), hero.gety (), g, this.hero.direct, 1); } // ลบแต่ละกระสุนออกจาก SS และวาดสำหรับ (int i = 0; i <hero.ss.size (); i ++) {// นำกระสุนยิง myshot = hero.ss.get (i); // วาดกระสุนและวาดกระสุนหนึ่งนัด วิธีการวาดกระสุนหลายนัด? traversal ถ้า (myshot! = null && myshot.islive == true) {g.draw3drect (myshot.x, myshot.y, 1, 1, เท็จ); } if (myshot.islive == false) {// ลบกระสุนออกจาก SS vector Hero.ss.remove (myshot); }} // วาดระเบิดสำหรับ (int i = 0; i <bombs.size (); i ++) {bomb b = bombs.get (i); if (b.life> 6) {g.drawimage (image1, bx, โดย, 30,30, สิ่งนี้); } อื่นถ้า (b.life> 4) {g.drawimage (image2, bx, โดย, 30,30, สิ่งนี้); } else {G.DrawImage (Image3, bx, by, 30,30, สิ่งนี้); } // ลดค่าสุขภาพของ B b.lifedown (); // ถ้าค่าสุขภาพของระเบิด == 0, เตะมันออกถ้า (b.life == 0) {bombs.remove (b); }} // วาดถังศัตรูสำหรับ (int i = 0; i <ets.size (); i ++) {enemytank et = ets.get (i); if (et.islive) {this.drawtank (et.getx (), et.gety (), g, et.getDirect (), 0); // วาดกระสุนศัตรูสำหรับ (int j = 0; j <et.ss.size (); j ++) if (enemyshot.islive) {g.draw3drect (enemyshot.x, enemyshot.y, 1, 1, false); } else {// ถังศัตรูเสียชีวิต et.ss.remove (ศัตรู shot); }}}}}}}}}} // ว่ากระสุนศัตรูกระทบฉันโมฆะสาธารณะ hitme () {// ลบถังศัตรูแต่ละถังสำหรับ (int i = 0; i <this.ets.size (); i ++) {// if (et.islive == true) {สำหรับ (int j = 0; j <et.ss.size (); j ++) {// นำกระสุนยิงศัตรู shot enemyshot = et.ss.get (j); if (enemyshot.islive == true) {this.hittank (enemyshot, ฮีโร่); }}}}}}}}} // ไม่ว่ากระสุนของฉันจะตีถังข้าศึกโมฆะสาธารณะ HitenemyTank () {// พิจารณาว่าถังศัตรูถูกตี (int i = 0; i <hero.ss.size (); i ++) {// เพื่อถอดถังแต่ละถังและตัดสิน (int j = 0; j <ets.size (); j ++) {enemytank et = ets.get (j); if (et.islive == true) {this.hittank (myshot, et); }}}}}}}}}}}} // เพื่อเขียนฟังก์ชั่นโดยเฉพาะเพื่อตรวจสอบว่ากระสุนตีถังโมฆะสาธารณะ Hittank (ยิง S, Tank ET) {สวิตช์ (ET.Direct) {// if (sx> et.x && s.x <et.x+20 && s.y> et.y && s.y <et.y+30) {// ตีความตาย s.islive = false; // ความตายของถัง et.islive = false; // สร้างระเบิดและวางไว้ในเวกเตอร์ระเบิด B = ระเบิดใหม่ (et.x, et.y) bombs.add (b); } กรณีที่ 1: กรณีที่ 3: ถ้า (sx> et.x && s.x <et.x+30 && s.y> et.y && s.y <et.y+20) {{// hit death s.islive = false; // tank tank et.islive = false; ระเบิด B = ระเบิดใหม่ (et.x, et.y); bombs.add (b); }}}}}}} // วาดโมฆะสาธารณะ Drawtank (int x, int y, กราฟิก g, int โดยตรง, ประเภท int) {// สวิตช์ประเภทรถถัง (ประเภท) {กรณี 0: g.setcolor (color.cyan); หยุดพัก; กรณีที่ 1: G.SetColor (color.yellow); หยุดพัก; } // สวิตช์ทิศทางรถถัง (โดยตรง) {// UP CASE 0: // วาดถังที่ G.FILL3DRECT (X, Y, 5, 30, FALSE); // Drawline (X+10, Y+15, Y+15, 5, 30, FALSE); y+10, 10, 10); // วาดเส้นตรง g.drawline (x+10, y+15, x+10, y); หยุดพัก; กรณีที่ 1: // ไปทางขวา // วาดรูปสี่เหลี่ยมผืนผ้าด้านบน g.fill3drect (x, y, 30, 5, เท็จ); // วาดรูปสี่เหลี่ยมผืนผ้าล่าง g.fill3drect (x, y+15, 30, 5, เท็จ); หยุดพัก; กรณีที่ 2: // วาดถังด้านล่าง g.fill3drect (x+15, y+10, x+30, y+10); // วาดถังบนขวา g.fill3drect (x+15, y+10, x+30, y+10); y+5, 10, 20, false); // วาดสี่เหลี่ยม G.fill3drect (x+5, y+5, 10, 20, เท็จ); // drawline (x+10, y+10, 10, 10); // วาดเส้นตรง g.drawline (x+10, y+15, x+10, y+30); หยุดพัก; กรณีที่ 3: // ไปทางซ้าย // วาดรูปสี่เหลี่ยมผืนผ้าด้านบน g.fill3drect (x, y, 30, 5, เท็จ); // วาดรูปสี่เหลี่ยมผืนผ้าล่าง g.fill3drect (x, y+15, 30, 5, เท็จ); 10); // drawline (x+15, y+10, x, y+10); หยุดพัก; }} // กดปุ่มและประมวลผล ด้านซ้ายลงไปทางขวา W ขึ้นไป @Override โมฆะสาธารณะ keyTyped (KeyEvent E) {// วิธีการที่สร้างขึ้นอัตโนมัติ todo stub} @Override โมฆะสาธารณะกดปุ่ม (KeyEvent e) {// วิธีการที่สร้างอัตโนมัติ {toDo-generated {e.getKeyCode () == keyEvent.vk_w) {this.hero.set this.hero.moveup (); } อื่นถ้า (e.getKeyCode () == keyEvent.vk_d) {this.hero.setDirect (1); this.hero.moveright (); } อื่นถ้า (e.getKeyCode () == keyEvent.vk_s) {this.hero.setDirect (2); this.hero.movedown (); } อื่นถ้า (e.getKeyCode () == keyEvent.vk_a) {this.hero.setDirect (3); this.hero.moveleft (); } if (e.getKeyCode () == keyEvent.vk_j) {// ตรวจสอบว่าผู้เล่นกด J // ไฟถ้า (this.hero.ss.size () <= 4 && this.hero.islive == true) {this.hero.shotenemy (); }} // พาเนลต้องทาสีใหม่นี้ซ้ำ (); } @Override โมฆะสาธารณะ Keyleleased (KeyEvent E) {// วิธีการที่สร้างขึ้นอัตโนมัติ todo stub} โมฆะสาธารณะเรียกใช้ () {ในขณะที่ (จริง) {ลอง {thread.sleep (100); } catch (exception e) {e.printstacktrace (); } this.hitenemytank (); // ฟังก์ชั่นกำหนดว่ากระสุนของศัตรูกระทบฉัน this.hitme (); this.repaint (); -5. ผลการทดสอบ
สีเหลืองคือผู้เล่นตีผู้เล่น
กระสุนปืน
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น