JavaRush /Java Blog /Random-TK /Java-da köp oýunçy konsol oýny
timurnav
Dereje

Java-da köp oýunçy konsol oýny

Toparda çap edildi
Hemmelere salam, oýun oýnamagy öňem gutardym, ýöne henizem makala ýazmaga öwrenişip bilmedim, bu ýazgynyň logiki dowamy . Entek başga bir zat etjek däl bolsaňyz JavaRush meselelerinden has köp, soň oýun bilen tanyşmak, başlamak isleýän ýeriňiz bolar, hakyky taslamanyň synag meselelerine taýynlyk görüp başlamaly bolarsyňyz, onda hemmelere gatnaşmagy maslahat berýärin. Umuman aýdanyňda, wakuumda sferik programmist bolmaklygy bes etmegiň we java ýadrosyndan başga bir zady öwrenip başlamagyň wagty geldi. Diňe oýna tomaşa etmek üçin MySQL gurnalan bolmaly, entek ulanmadyk bolsaňyz, ikirjiňlenmäň - guruň, bu işiňizde we şahsy taslamalaryňyzda ulanjak maglumat bazalarynyň biridir! Maglumatlar bazasyny gurmak we işlemek barada düşündiriş bermerin; internetde bir topar sapak we wideo bar; muny özbaşdak kesgitlemegi maslahat berýärin, bu hem programmistiň iň möhüm başarnyklaryndan biri - şekillendirmek Durmuşda size sql, ýerli we JDBC üsti bilen gibernate , bahar, bahar maglumatlary ýazmak talaplary gerek bolar, belki sanawy dowam etdirip bolar, ýöne bilimim şol ýerde gutarýar. Indi bu makalany okamagyňyzy bes ediň we MySQL-e düşüniň, aslynda asla kyn däl, serweriň özüni gurnamaly, ýeke-täk sazlamalar giriş we parol. soň işleýän wagtyňyz haýsy buýruklaryň ulanylýandygyny okaň. Serwer bilen işlemek üçin buýruklar: ,, createwe başgalar, buýruk - buýruklaryň doly sanawyny berer. Belli bir tablisa bilen işlemek üçin soraglar : , we başgalar. Gaty çuňlaşmaň, diňe buýruklary okamakdan diňe az böleginiň ýatda galmagy mümkinçiligi bar. wagtyň geçmegi bilen hemme zady öwrenersiň. MySQL terminalynda oýnap, maglumat bazasyny döredip, tablisalar döredip, olary dolduryp, maglumatlary görkezmek, talap ölçeglerini goşmak üçin haýyş edip bilersiňiz. Mümkin, munuň üçin 2-3 sagatdan köp wagt gerek bolmaz, has uzyn bolsa, alada etmäň, tejribe bilen täze materiallary has çalt öwrenersiňiz. Bazalarda hiç hili problemaňyz ýok bolsa, “ tic-tac-toe” hakda eýýäm ýazan oýnuma esaslanyp, oýny ösdürip bilersiňiz.showusehelp selectinsertdelete. Köp oýunçyny nädip durmuşa geçirmelidigini bilip bilmedim, maglumat bazasyny ulanmakda çözgüt tapdym. Oýun prosesi oýunçylaryň nobatçylyk edýändigini, oýundaky ähli üýtgeşmeleriň maglumatlar bazasynda ýazylandygyny göz öňünde tutýar. eýýäm şundan ugur alyp, oýunçymyzyň bardygyna we oýunçylara baglanyşyklary öz içine alýan oýun meýdançasynyň bardygyna düşünýäris, oýun meýdançasynda bir oýunçynyň ikinji oýunçynyň göçmegine garaşýan logika bagly bolmaly. şondan soň olaryň rollary üýtgeýär we Birinji oýunçy göçýär, ikinjisi garaşýar. Changeshli üýtgeşmeler maglumatlar bazasynda köpeldilmeli bolansoň, her ädimden soň meýdançany tygşytlamaly. Şeýlelik bilen ilkinji netijä geldik, Maglumat bazasynda oýun meýdançasy bolmaly we köp oýunçy hakda aýdanymyz üçin, ol ýere oýunçy goşmaly. MySQL-da tablisalar döredeliň, muny mysql terminal penjiresiniň üsti bilen etdim. oýun meýdançasynda oýunçylara baglanyşyk bar, şonuň üçin ilki bilen oýunçylar bilen tablisa döretmek mantykly bolardy. Oýunçylarymyz bar:
  • id- yzygiderlilik belgisi, biz ony esasy açar edýäris;
  • name- umumy at, setir;
  • wins- ýeňişleriň sany;
  • loses- lezýonlaryň sany;
  • games- oýnan oýunlaryň umumy sany.
Oýun stoly:
  • id- yzygiderlilik belgisi, biz ony esasy açar edýäris;
  • x- oýnaýan pleýeriň şahsyýeti х- ikinji açar;
  • o- oýnaýan pleýeriň şahsyýeti o- ikinji açar;
  • field- meýdanyň özi, formaty aşakda beýan ediler;
  • status- bu köp oýunçynyň dogry işlemegi üçin zerur, ýagdaý oýnuň ýagdaýyny häsiýetlendirýär:
    döredildi, oýnaldy, oýun gutardy

  • current- köp oýunçy üçin, esasanam oýun wagtynda bu meýdan kimiň öwrümine gözegçilik edýär
    we soňundan ýeňiji yglan edýär ýa-da deňme-deň oýnaýar

Tablisalary tertipledik, indi degişli meýdanlar bilen Java synplaryny döretmeli - Gamewe 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;
}
Parametrlersiz boş konstruktor goşalyň - maglumatlar bazasy we obýektler döredjek başga bir konstruktor bilen işlemek üçin. Fieldshli meýdanlar üçin sazlaýjylar we girişler goşalyň. Indi gyşlamak bilen iş salyşalyň :) sagatdan sagada aňsatlaşmaýar. MySQL bilen deňeşdirilende birneme çylşyrymly, umumy gurluşyň üstünden bararyn. Againene-de hemme zat beýle çylşyrymly däl, esaslary bir-iki sagadyň dowamynda islendik sapak arkaly öwrenip bolýar we taslamalaryňyzy ýazanyňyzda çuňňur öwrenmek has gowudyr. JAVA-dan maglumatlar bazasy bilen işlemek JDBC-ni ulanmagy öz içine alýar, bu hakda wikide okaň . Writingöne ony kod ýazmak bilen ulansaňyz, anusda köp agyry, DAO synplaryny ýazmakda käbir çylşyrymlylyk ( wiki hem ) getirer, gibernat ýagdaýy birneme gowulaşdyrar, onuň bilen gaýtalanmaz (şablon) ) kody. Giberniň işlemegi üçin taslama kitaphanany birikdirmeli, bu gaty ýönekeý ýerine ýetirilýär: Ctrl + Alt + Shift + S (Faýl-taslama gurluşy), Kitaphanalar goýmasyna giriň, "+" basyň we a goşuň öňünden göçürilen kitaphana ( opsiýa hökmünde, şu ýerden ). Sapaklary baglanyşdyrmak üçin düşündirişleri Userulanmaly Game- olary ulanmak gaty aňsat, olar bilen kod şeýle:
@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;
    }
}
Bu ýerde ýönekeý
  • @Entity- synpyň “birlik” bolandygyny, ýönekeý sözler bilen aýdylanda, maglumatlar bazasyndaky tablisa baglydygyny aýdýar.
  • @Table(name="games")- haýsy tablisanyň bardygyny aýdýar, games- maglumatlar bazasyndaky tablisanyň ady
  • @Id,, @GeneratedValue- @Column(name = "id")bu üç düşündiriş bilen bu meýdanyň şahsyýet meýdanydygyny, awtomatiki usulda döredilýändigini we maglumatlar bazasyndaky sütüne id diýilýär.
  • @Column(name = "x")- maglumatlar bazasyndaky sütüniň ady.
Ondan soň derejeleri - DAO derejesini we hyzmat derejesini gurmaly. Wakuum şertlerine hemme zady ýönekeýleşdiren bolsak, maglumatlar bilen işlemek hyzmat derejesinden geçýär, bu abstraksiýa derejelerinden biridir, oýun logikasyny dörediji jikme-jikliklere girmezligi üçin programmany has özbaşdak işlemäge mümkinçilik berýär. maglumat bazasyna girişi gurmak ýa-da mysal üçin, birden ýönekeý gibriniň ýerine bahary ulanmagy ýüregimize düwen bolsak, üýtgeşmeler hyzmat gatlagyndan çykmaz, onsuz programmanyň ýarysyny täzeden ýazmaly bolardy! bu dizaýn nusgalarynyň biridir. DAO derejesini ýazyp başlalyň.
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();
            }
        }
    }
}
Maglumatlar bazasyna täze ulanyjy goşmak amaly şu. Görnüşe görä, diňe bir synp synpynyň obýekti usula geçýär, bu ýerde goşmaça maglumat talap edilmeýär. Bu, “HibernateUtil” synpyndan maglumatlar bazasy bilen taýýar aragatnaşyk sessiýasyny alýandygymyz bilen üpjün edilýär. Geliň, seredeliň.
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;
    }
}
Görşüňiz ýaly, bu ýerdäki hemme zat gaty ýönekeý SessionFactory- bu, taslamamyza birikdiren gibernat kitaphanasynyň interfeýsi. Dogry işlemek üçin galan zat, gibernate.cfg.xml konfigurasiýa faýlyny doldurmak
<!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>
Belliklere göz aýlasaňyz, bu ýerde näme we nädip gurýandygymyz belli bolýar. Gibernatyň başga bir aýratynlygy, maglumatlar bazasyny birden MySQL-den başga birine üýtgetmek kararyna gelsek, diňe DAO gatlagynyň belligi içindäki sürüjini üýtgetmeli property name="connection.driver_class" , geliň hyzmat gatlagyny döredeliň. Hyzmat gatlagynda DAO obýektlerini döretmezlik üçin zawod nagşyny ulanýarys.
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;
    }
}
Ine, hyzmat derejesiniň usullaryndan biri
public class UserService {
    static void setUserBusy(User user){
        user.setBusy(true); //делаем его занятым
        //и обновляем его в БД
        Factory.getInstance().getUserDAO().updateUser(user);
    }

}
Maglumat bazasy bilen işlemek kody tamamlandy, üýtgeşmeleri göz öňünde tutup, oýun logikasyny täzeden ýazýarys. Ilki bilen, esasy başlangyç usulyny aýratyn klasa aýyralyň Main, ol diňe dolandyryş synpy bolar - bu oýny başlap ýa-da statistika görüp boljak oýun menýusy bolar. GameLogicGeliň , oýnuň ähli logikasyny beýan etjek we oýun meýdançasyny barlaýan synp döredeliň . Oýun meýdançasyndaky ähli üýtgeşmeleri we oýundan soň oýunçy statistikasyny hyzmat gatlagyna tabşyrar. Gyzykly bir aýratynlyk bar: bizde oýun meýdançasyny massiw görnüşinde saklaýarys, maglumatlar bazasynda saklanyp bilner, ýöne bu etapda tekeri täzeden dikeltmegi makul bildim we maglumatlar bazamda meýdança int, ýagny 9 Iki sany synp usuly bilen deňeşdirilen san belgisi GameLogic, muny etmegi maslahat beremok, oýnuň indiki neşirlerinde gowulaşaryn :) JAVA-ny öwrenmekde hemmäňize üstünlik! Taslamany şu ýerden göçürip alyp bilersiňiz .
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION