JavaRush /Блоги Java /Random-TG /Бозии мултипликатори консол дар java
timurnav
Сатҳи

Бозии мултипликатори консол дар java

Дар гурӯҳ нашр шудааст
Салом ба ҳама, ман навиштани бозиро кайҳо анҷом додам, аммо то ҳол ба навиштани мақола даст наёфтаам, ин идомаи мантиқии ин порчаи навиштаҷот аст . нисбат ба супоришҳои JavaRush, пас шиносоӣ бо бозӣ маҳз ҳамон ҷое хоҳад буд, ки шумо мехоҳед оғоз кунед, ба шумо лозим меояд, ки ба омодагӣ ба супоришҳои санҷишии лоиҳаи воқеӣ шурӯъ кунед, ки ман ба ҳама тавсия медиҳам, ки дар он иштирок кунанд. Ва дар маҷмӯъ, вақти он расидааст, ки барномасози сферикӣ буданро дар вакуум бас кунед ва чизеро берун аз Java-core оғоз кунед. Барои тамошои оддӣ бозӣ, шумо бояд MySQL насб карда бошед, агар шумо онро ҳанӯз истифода накарда бошед, шарм надоред - онро насб кунед, ин яке аз он пойгоҳи додаҳоест, ки шумо дар кор ва лоиҳаҳои шахсии худ истифода хоҳед кард! Ман тавсифи насб ва кор бо базаи маълумот намедиҳам; дар Интернет як тонна дастурҳо ва видеоҳо мавҷуданд; Ман тавсия медиҳам, ки инро худатон муайян кунед, ин ҳам яке аз малакаҳои муҳимтарини барномасоз аст - фаҳмиш онро мустақилона ба даст оред :) Дар ҳаёт, ба шумо қобorяти навиштани дархостҳо дар sql, ба таври маҳаллӣ ва тавассути JDBC, hibernate , spring, data spring лозим аст, шояд рӯйхатро идома додан мумкин аст, аммо дониши ман дар он ҷо ба охир мерасад. Акнун хондани ин мақоларо бас кунед ва MySQL-ро бифаҳмед, ин аслан мушкил нест, шумо бояд худи serverро насб кунед, танҳо танзимоти логин ва парол мавҷуд аст. баъд дар бораи он ки дар вакти кор кадом фармонхо истифода мешаванд, хонед. Фармонҳо барои кор бо server: 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- инчунин барои мултипликатори, махсусан дар давоми бозӣ, ин майдон назорат мекунад, ки ҳоло навбати кӣ аст
    ва пас аз анҷом он ғолибро эълон мекунад ё дуранг мекунад

Мо ҷадвалҳоро ҷудо кардем, ҳоло мо бояд синфҳои Java-ро бо майдонҳои мувофиқ эҷод кунем - 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-ро дар бар мегирад, дар бораи он дар вики хонед . Аммо агар шумо онро дар навиштани code истифода баред, он дарди мақъадро дарди зиёд меорад , дар навиштани синфҳои DAO ( инчунин вики ), hibernate вазъиятро каме беҳтар мекунад, бо он шумо хеле кам такроршаванда хоҳед дошт (шаблон). ) code. Барои кор кардан дар хоб, шумо бояд китобхонаро ба лоиҳа пайваст кунед, ин хеле содда анҷом дода мешавад: Ctrl+Alt+Shift+S(Сохтори файл-лоиҳа), ба ҷадвали Китобхонаҳо гузаред, "+"-ро клик кунед ва илова кунед китобхонаи пешакӣ боркашӣ ( ҳамчун интихоб, аз ин ҷо ). Барои пайваст кардани синфҳо 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")– номи сутун дар базаи маълумот.
Баъдан, шумо бояд сатҳҳоро созед - сатҳи DAO ва сатҳи хидмат. Агар мо ҳама чизро ба шароити вакуум содда кунем, пас кор бо маълумот аз сатҳи хидмат мегузарад, ин яке аз сатҳҳои абстраксия аст, он ба шумо имкон медиҳад, ки барномаро мустақилтар кор кунед, то таҳиягари мантиқи бозӣ ба тафсилот дохил нашавад ба танзим даровардани дастрасӣ ба пойгоҳи додаҳо, ё масалан, агар ногаҳон мо ба ҷои интизории оддӣ тасмим гирифтем, ки баҳорро истифода барем, тағирот аз қабати хидматрасонӣ берун намеравад, ки бе он нисфи барнома бояд аз нав навишта шавад! ин яке аз намунаҳои тарҳрезӣ аст. Биёед ба навиштани сатҳи DAO оғоз кунем.
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! Шумо метавонед лоиҳаро дар ин ҷо зеркашӣ кунед .
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION