Салом ба ҳама, ман навиштани бозиро кайҳо анҷом додам, аммо то ҳол ба навиштани мақола даст наёфтаам, ин идомаи мантиқии ин порчаи навиштаҷот аст . нисбат ба супоришҳои JavaRush, пас шиносоӣ бо бозӣ маҳз ҳамон ҷое хоҳад буд, ки шумо мехоҳед оғоз кунед, ба шумо лозим меояд, ки ба омодагӣ ба супоришҳои санҷишии лоиҳаи воқеӣ шурӯъ кунед, ки ман ба ҳама тавсия медиҳам, ки дар он иштирок кунанд. Ва дар маҷмӯъ, вақти он расидааст, ки барномасози сферикӣ буданро дар вакуум бас кунед ва чизеро берун аз Java-core оғоз кунед. Барои тамошои оддӣ бозӣ, шумо бояд MySQL насб карда бошед, агар шумо онро ҳанӯз истифода накарда бошед, шарм надоред - онро насб кунед, ин яке аз он пойгоҳи додаҳоест, ки шумо дар кор ва лоиҳаҳои шахсии худ истифода хоҳед кард! Ман тавсифи насб ва кор бо базаи маълумот намедиҳам; дар Интернет як тонна дастурҳо ва видеоҳо мавҷуданд; Ман тавсия медиҳам, ки инро худатон муайян кунед, ин ҳам яке аз малакаҳои муҳимтарини барномасоз аст - фаҳмиш онро мустақилона ба даст оред :) Дар ҳаёт, ба шумо қобorяти навиштани дархостҳо дар sql, ба таври маҳаллӣ ва тавассути JDBC, hibernate , spring, data spring лозим аст, шояд рӯйхатро идома додан мумкин аст, аммо дониши ман дар он ҷо ба охир мерасад. Акнун хондани ин мақоларо бас кунед ва MySQL-ро бифаҳмед, ин аслан мушкил нест, шумо бояд худи serverро насб кунед, танҳо танзимоти логин ва парол мавҷуд аст. баъд дар бораи он ки дар вакти кор кадом фармонхо истифода мешаванд, хонед. Фармонҳо барои кор бо server: Аммо агар шумо онро дар навиштани code истифода баред, он дарди мақъадро дарди зиёд меорад , дар навиштани синфҳои DAO ( инчунин вики ), hibernate вазъиятро каме беҳтар мекунад, бо он шумо хеле кам такроршаванда хоҳед дошт (шаблон). ) code. Барои кор кардан дар хоб, шумо бояд китобхонаро ба лоиҳа пайваст кунед, ин хеле содда анҷом дода мешавад: Ctrl+Alt+Shift+S(Сохтори файл-лоиҳа), ба ҷадвали Китобхонаҳо гузаред, "+"-ро клик кунед ва илова кунед китобхонаи пешакӣ боркашӣ ( ҳамчун интихоб, аз ин ҷо ). Барои пайваст кардани синфҳо
create
, show
, use
, ва дигарон, фармон help
- рӯйхати пурраи фармонҳоро медиҳад. Дархостҳо барои кор бо ҷадвали мушаххас: select
, insert
, delete
ва ғайра. Аз ҳад зиёд амиқ наравед, имкон дорад, ки танҳо як қисми хурд аз хондани фармонҳо дар хотир нигоҳ дошта шавад. шумо бо мурури замон ҳама чизро меомӯзед. Шумо метавонед дар терминали MySQL бозӣ кунед, пойгоҳи додаҳо эҷод кунед, ҷадвалҳо эҷод кунед, онҳоро пур кунед, дархост барои намоиш додани маълумот, илова кардани меъёрҳои дархост. Эҳтимол аст, ки ин ба шумо на бештар аз 2-3 соат лозим аст, агар ин дарозтар бошад, хавотир нашавед, бо таҷриба шумо маводи навро зудтар аз худ мекунед. Агар шумо бо пойгоҳҳо ягон мушкилот надошта бошед, шумо метавонед ба таҳияи бозӣ дар асоси бозӣе, ки ман аллакай дар бораи tic-tac-toe навиштаам, оғоз кунед.. Дар муддати хеле тӯлонӣ ман фаҳмида наметавонистам, ки чӣ гуна мултипликаторро татбиқ кунам, ман роҳи ҳалли истифодаи пойгоҳи додаҳоро пайдо кардам. Раванди бозӣ тахмин мекунад, ки бозингарон навбат мегиранд, ҳама тағйирот дар бозӣ дар базаи маълумот сабт карда мешаванд. аллакай дар асоси ин, мо мефаҳмем, ки мо як бозигар дорем ва майдони бозӣ вуҷуд дорад, ки дорои истинодҳо ба бозигарон аст, дар майдони бозӣ мантиқ бояд баста шавад, ки дар он як бозигар мунтазири ҳаракати бозигари дуюм аст. ва пас аз он нақшҳояшон иваз мешавад ва Бозингари аввал ҳаракат мекунад ва дуюм интизор мешавад. Ва азбаски ҳама тағиротҳо бояд дар пойгоҳи додаҳо такрор карда шаванд, пас аз ҳар як ҳаракат мо бояд майдонро захира кунем. Ҳамин тавр, мо ба хулосаи аввал омадем, ки дар Пойгоҳи додаҳо бояд майдони бозӣ мавҷуд бошад ва азбаски сухан дар бораи мултипликатор меравад, мо бояд бозигаронро ба он ҷо илова кунем. Биёед дар 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;
}
Биёед як конструктори холиро бе параметр илова кунем - барои кор бо базаи маълумот ва конструктори дигаре, ки бо он an objectҳо эҷод мекунем. Биёед барои ҳама майдонҳо танзимкунанда ва гирандагон илова кунем. Акнун биёед бо hibernate сару кор кунем :) он соат то соат осонтар намешавад. Ин нисбат ба MySQL каме мураккабтар аст, ман зуд аз болои сохтори умумӣ мегузарам. Боз ҳам, на ҳама чиз он қадар мураккаб аст, асосҳоро тавассути ҳама гуна дарсҳо дар тӯли якчанд соат омӯхтан мумкин аст ва беҳтар аст, ки ҳангоми навиштани лоиҳаҳои худ амиқ омӯзед. Кор бо пойгоҳи додаҳои JAVA истифодаи JDBC-ро дар бар мегирад, дар бораи он дар вики хонед . User
шумо Game
бояд эзоҳҳоро истифода баред - истифодаи онҳо хеле осон аст, бо онҳо code чунин аст:
@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
– мегӯяд, ки синф як “an object” аст, бо ибораи оддӣ, он ба ҷадвали пойгоҳи додаҳо баста шудааст.@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();
}
}
}
}
Амалиёти илова кардани корбари нав ба махзани маълумот чунин аст. Лутфан таваҷҷӯҳ намоед, ки танҳо an objectи синфи an 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 аст, ки мо онро ба лоиҳаи худ пайваст кардем. Барои кори дуруст танҳо пур кардани файли конфигуратсияи 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 ба дигараш иваз кунем, мо танҳо бояд драйверро дар дохor қабати теги property name="connection.driver_class"
DAO иваз кунем, биёед қабати хидматрасонӣ созем. Барои пешгирӣ кардани эҷоди an objectҳои 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
, ман инро тавсия намедиҳам, ман дар versionҳои навбатии бозӣ такмил хоҳам дод :) Барори ҳама дар омӯзиши JAVA! Шумо метавонед лоиҳаро дар ин ҷо зеркашӣ кунед .
GO TO FULL VERSION