สวัสดีทุกคน ฉันเขียนเกมนี้จบไปนานแล้วแต่ยังไม่ได้เขียนบทความเลย ถือว่าเขียนต่อไปอย่างมีเหตุผลหาก คุณยังไม่ได้ลองทำอะไรอย่างอื่นเลย กว่างาน JavaRush การทำความคุ้นเคยกับเกมจะเป็นจุดที่คุณต้องการเริ่มต้นคุณจะต้องเริ่มเตรียมตัวสำหรับงานทดสอบของโปรเจ็กต์จริงซึ่งฉันขอแนะนำให้ทุกคนเข้าร่วม และโดยทั่วไป ถึงเวลาที่จะเลิกเป็นโปรแกรมเมอร์แบบ spherical ในสุญญากาศ และเริ่มเรียนรู้บางอย่างนอกเหนือจาก java-core ในการรับชมเกมเพียงอย่างเดียว คุณต้องติดตั้ง MySQL หากคุณยังไม่ได้ใช้ อย่าลังเลที่จะติดตั้ง นี่คือหนึ่งในฐานข้อมูลที่คุณจะใช้ในงานและโครงการส่วนตัวของคุณ! ฉันจะไม่ให้คำอธิบายเกี่ยวกับการติดตั้งและการทำงานกับฐานข้อมูล มีบทช่วยสอนและวิดีโอมากมายบนอินเทอร์เน็ต ฉันขอแนะนำให้ค้นหาสิ่งนี้ด้วยตัวคุณเอง นี่เป็นหนึ่งในทักษะที่สำคัญที่สุดของโปรแกรมเมอร์ - การหา ออกมาด้วยตัวคุณเอง :) ในชีวิตคุณจะต้องมีความสามารถในการเขียนแบบสอบถามใน sql, Natively และผ่าน JDBC, ข้อมูล ไฮเบอร์เนต , สปริง, สปริง บางทีรายการสามารถดำเนินต่อไปได้ แต่ความรู้ของฉันก็จบลงที่นั่น ตอนนี้หยุดอ่านบทความนี้และค้นหา MySQL จริงๆ แล้วมันไม่ได้ยากเลย คุณต้องติดตั้งเซิร์ฟเวอร์เอง การตั้งค่าเดียวคือการเข้าสู่ระบบและรหัสผ่าน จากนั้นอ่านเกี่ยวกับคำสั่งที่ใช้เมื่อทำงาน คำสั่งสำหรับการทำงานกับเซิร์ฟเวอร์: ความเจ็บปวดอย่างมากในทวารหนัก ความซับซ้อนในการเขียนคลาส DAO ( รวมถึงวิกิด้วย ) ไฮเบอร์เนตจะปรับปรุงสถานการณ์เล็กน้อย โดยที่คุณจะต้องทำซ้ำน้อยลงมาก (เทมเพลต ) รหัส เพื่อให้ไฮเบอร์เนตทำงานได้ คุณต้องเชื่อมต่อไลบรารีเข้ากับโปรเจ็กต์ ซึ่งทำได้ง่ายมาก: Ctrl+Alt+Shift+S(โครงสร้างไฟล์-โปรเจ็กต์) ไปที่แท็บไลบรารี คลิก "+" และเพิ่ม ไลบรารีที่ดาวน์โหลดไว้ล่วงหน้า ( เป็นตัวเลือก จากที่นี่ ) ในการเชื่อมโยงคลาสต่างๆ
create
, show
, use
, และอื่น ๆ , command help
- จะให้รายการคำสั่งทั้งหมด แบบสอบถามสำหรับการทำงานกับตารางเฉพาะ: select
, insert
และdelete
อื่น ๆ อย่าลงลึกเกินไป มีโอกาสเพียงส่วนเล็กๆ เท่านั้นที่จะจำได้จากการอ่านคำสั่งง่ายๆ คุณจะได้เรียนรู้ทุกสิ่งเมื่อเวลาผ่านไป คุณสามารถเล่นในเทอร์มินัล MySQL สร้างฐานข้อมูล สร้างตาราง กรอกข้อมูล ส่งคำขอเพื่อแสดงข้อมูล เพิ่มเกณฑ์การสืบค้น เป็นไปได้มากว่าคุณจะใช้เวลาไม่เกิน 2-3 ชั่วโมง หากนานกว่านี้ ไม่ต้องกังวล ด้วยประสบการณ์ คุณจะเชี่ยวชาญเนื้อหาใหม่ได้เร็วขึ้น หากคุณไม่มีปัญหากับฐานคุณสามารถเริ่มพัฒนาเกมได้โดยอิงจากเกมที่ฉันเขียนเกี่ยวกับโอเอกซ์ แล้ว. เป็นเวลานานมากที่ฉันไม่สามารถหาวิธีใช้งานผู้เล่นหลายคนได้ ฉันพบวิธีแก้ปัญหาในการใช้ฐานข้อมูล กระบวนการของเกมถือว่าผู้เล่นผลัดกัน การเปลี่ยนแปลงทั้งหมดในเกมจะถูกบันทึกไว้ในฐานข้อมูล ตามนี้แล้ว เราเข้าใจดีว่าเรามีผู้เล่นและมีสนามแข่งขันที่มีลิงก์ไปยังผู้เล่น มันอยู่ในสนามแข่งขันที่ตรรกะควรผูกติดอยู่กับที่ผู้เล่นคนหนึ่งกำลังรอให้ผู้เล่นคนที่สองทำการเคลื่อนไหว และหลังจากนั้นบทบาทของพวกเขาก็เปลี่ยนไป และผู้เล่นคนแรกทำการเคลื่อนไหว และคนที่สองรอ และเนื่องจากการเปลี่ยนแปลงทั้งหมดจะต้องทำซ้ำในฐานข้อมูล หลังจากการย้ายแต่ละครั้ง เราจึงต้องบันทึกฟิลด์ ดังนั้นเราจึงมาถึงข้อสรุปแรก ต้องมีสนามแข่งขันในฐานข้อมูล และเนื่องจากเรากำลังพูดถึงผู้เล่นหลายคน เราจึงต้องเพิ่มผู้เล่นที่นั่น มาสร้างตารางใน MySQL กันดีกว่า ฉันทำมันเองผ่านหน้าต่างเทอร์มินัล mysql สนามแข่งขันมีลิงก์ไปยังผู้เล่น ดังนั้นจึงสมเหตุสมผลที่จะสร้างตารางร่วมกับผู้เล่นก่อน ผู้เล่นของเรามี:
id
– หมายเลขลำดับ เราทำให้มันเป็นคีย์หลักname
– ชื่อสามัญ, สตริง;wins
– จำนวนชัยชนะ;loses
– จำนวนรอยโรค;games
– จำนวนเกมที่เล่นทั้งหมด
id
– หมายเลขลำดับ เราทำให้มันเป็นคีย์หลักx
– รหัสของผู้เล่นที่กำลังเล่นх
– รหัสรอง;o
– รหัสของผู้เล่นที่กำลังเล่นo
– รหัสรอง;field
– ฟิลด์นั้นเอง รูปแบบของมันจะอธิบายไว้ด้านล่างstatus
– นี่เป็นสิ่งจำเป็นสำหรับผู้เล่นหลายคนในการทำงานอย่างถูกต้อง สถานะจะแสดงลักษณะของเกม:
สร้างแล้ว กำลังเล่น จบเกมcurrent
– สำหรับผู้เล่นหลายคนโดยเฉพาะในระหว่างเกม สนามนี้จะควบคุมตาของใครในตอนนี้
และหลังจากจบเกมก็จะประกาศผู้ชนะหรือเสมอ
Game
และUser
.
public class Game {
private Integer id;
private Integer x;
private Integer y;
private Integer field;
private String status;
private String current;
}
public class User {
private Integer id;
private String name;
private Integer wins;
private Integer loses;
private Integer games;
private Boolean busy;
}
มาเพิ่มคอนสตรัคเตอร์ว่างที่ไม่มีพารามิเตอร์ - สำหรับการทำงานกับฐานข้อมูลและคอนสตรัคเตอร์อื่นที่เราจะสร้างวัตถุ มาเพิ่ม setters และ getters สำหรับทุกฟิลด์กัน ทีนี้มาจัดการกับไฮเบอร์เนตกันดีกว่า :) มันไม่ง่ายไปกว่านี้อีกแล้วในแต่ละชั่วโมง มันซับซ้อนกว่า MySQL เล็กน้อย ฉันจะอธิบายโครงสร้างทั่วไปอย่างรวดเร็ว ขอย้ำอีกครั้ง ไม่ใช่ทุกอย่างจะซับซ้อนนัก คุณสามารถเรียนรู้พื้นฐานผ่านบทช่วยสอนใดๆ ได้ภายในสองสามชั่วโมง และควรศึกษาเชิงลึกในขณะที่เขียนโครงการของคุณจะดีกว่า การทำงานกับฐานข้อมูลจาก JAVA เกี่ยวข้องกับการใช้ JDBC อ่านเกี่ยวกับเรื่องนี้ในwiki แต่ถ้าคุณใช้มันในการเขียนโค้ด มันจะทำให้เกิดUser
คุณGame
ต้องใช้คำอธิบายประกอบ ซึ่งใช้งานง่ายมาก โดยมีโค้ดดังนี้:
@Entity
@Table(name="games")
public class Game {
private Integer id;
private Integer x;
@Id
@GeneratedValue
@Column(name = "id")
public Integer getId() {
return id;
}
@Column(name = "x")
public Integer getX() {
return x;
}
}
มันง่ายที่นี่
@Entity
– บอกว่าคลาสนั้นเป็น “เอนทิตี” หรือพูดง่ายๆ ก็คือ มันเชื่อมโยงกับตารางในฐานข้อมูล@Table(name="games")
– บอกว่าตารางใดgames
– ชื่อของตารางในฐานข้อมูล@Id
,@GeneratedValue
,@Column(name = "id")
– ด้วยคำอธิบายประกอบทั้งสามนี้ เราแสดงว่าฟิลด์นี้เป็นฟิลด์การระบุ ซึ่งถูกสร้างขึ้นโดยอัตโนมัติ และคอลัมน์ในฐานข้อมูลเรียกว่า id@Column(name = "x")
– ชื่อของคอลัมน์ในฐานข้อมูล
public class UserDAO {
public void addUser(User user) throws SQLException {
Session session = null;
try{
session = HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
session.save(user);
session.getTransaction().commit();
} catch (Exception e){
e.printStackTrace();
} finally {
if (session != null && session.isOpen()) {
session.close();
}
}
}
}
นี่คือลักษณะของการดำเนินการเพิ่มผู้ใช้ใหม่ลงในฐานข้อมูล โปรดทราบว่าเฉพาะ object ของคลาสเอนทิตีเท่านั้นที่จะถูกส่งผ่านไปยังเมธอด โดยไม่ต้องการข้อมูลเพิ่มเติมที่นี่ สิ่งนี้รับประกันได้ว่าเราได้รับเซสชันการสื่อสารสำเร็จรูปพร้อมฐานข้อมูลจากคลาส HibernateUtil ลองพิจารณาดูครับ
public class HibernateUtil {
private static SessionFactory sessionFactory = null;
static {
try {
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Exception e) {
e.printStackTrace();
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
อย่างที่คุณเห็นทุกอย่างที่นี่ก็ง่ายมากเช่นกันSessionFactory
- นี่คืออินเทอร์เฟซจากไลบรารีไฮเบอร์เนตซึ่งเราเชื่อมต่อกับโครงการของเรา เพื่อการดำเนินการที่ถูกต้อง สิ่งที่เหลืออยู่คือการกรอกไฟล์คอนฟิกูเรชัน hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/tictactoe</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.pool_size">100</property>
<property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="show_sql">false</property>
<property name="hbm2ddl.auto">update</property>
<property name="hibernate.connection.autocommit">false</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.enable_lazy_load_no_trans">true</property>
<mapping class="entity.User" />
<mapping class="entity.Game" />
</session-factory>
</hibernate-configuration>
หากคุณดูที่แท็ก จะชัดเจนว่าเรากำลังตั้งค่าอะไรและอย่างไรที่นี่ คุณสมบัติอีกประการหนึ่งของไฮเบอร์เนตคือหากเราตัดสินใจเปลี่ยนฐานข้อมูลจาก MySQL ไปเป็นฐานข้อมูลอื่นอย่างกะทันหัน เราเพียงแค่ต้องเปลี่ยนไดรเวอร์ภายในแท็ก เลเยอร์property name="connection.driver_class"
DAO ก็พร้อมแล้ว มาสร้างเลเยอร์บริการกันดีกว่า เพื่อหลีกเลี่ยงการสร้างออบเจ็กต์ DAO ในชั้นบริการ เราจะใช้รูปแบบโรงงาน
public class Factory {
private static UserDAO userDAO = null;
private static Factory instance = null;
private Factory() {
}
public static synchronized Factory getInstance() {
if (instance == null) {
instance = new Factory();
}
return instance;
}
public UserDAO getUserDAO() {
if (userDAO == null) {
userDAO = new UserDAO();
}
return userDAO;
}
}
และนี่คือหนึ่งในวิธีการระดับการบริการ
public class UserService {
static void setUserBusy(User user){
user.setBusy(true); //делаем его занятым
//и обновляем его в БД
Factory.getInstance().getUserDAO().updateUser(user);
}
}
รหัสสำหรับการทำงานกับฐานข้อมูลเสร็จสมบูรณ์ เราจะเขียนตรรกะของเกมใหม่โดยคำนึงถึงการเปลี่ยนแปลง ก่อนอื่น ให้แยกวิธีการเปิดตัวหลักออกเป็นคลาสอื่นMain
มันจะเป็นเพียงคลาสควบคุม - เมนูเกมที่คุณสามารถเริ่มเกมหรือดูสถิติได้ มาสร้างคลาสGameLogic
ที่จะอธิบายตรรกะทั้งหมดของเกมและตรวจสอบสนามแข่งขันกันดีกว่า เขาจะมอบหมายการบันทึกการเปลี่ยนแปลงทั้งหมดในสนามแข่งขันและสถิติผู้เล่นหลังเกมไปยังชั้นบริการ มีคุณสมบัติที่น่าสนใจ เรามีสนามเด็กเล่นในรูปแบบของอาร์เรย์ พวกเขาสามารถบันทึกลงในฐานข้อมูลได้ แต่ในขั้นตอนนี้ ฉันตัดสินใจที่จะสร้างวงล้อขึ้นมาใหม่และในฐานข้อมูลของฉัน ฟิลด์นั้นบรรจุเป็น int คือ 9 -ตัวเลขหลัก ซึ่งแยกวิเคราะห์โดยใช้วิธีการเรียนสองวิธีGameLogic
ฉันไม่แนะนำให้ทำเช่นนี้ ฉันจะปรับปรุงในเกมรุ่นถัดไป :) ขอให้ทุกคนโชคดีในการเรียนรู้ JAVA! คุณสามารถดาวน์โหลดโครงการได้ ที่นี่
GO TO FULL VERSION