JavaRush /Blog Jawa /Random-JV /Multiplayer console game ing java
timurnav
tingkat

Multiplayer console game ing java

Diterbitake ing grup
Halo kabeh, aku wis suwe rampung nulis game, nanging aku isih durung bisa nulis artikel, iku kelanjutan logis saka tulisan iki . Yen sampeyan durung nyoba nindakake apa-apa liyane tinimbang tugas JavaRush, banjur kenal karo game kasebut bakal dadi persis ing ngendi sampeyan pengin miwiti, sampeyan kudu miwiti nyiapake tugas tes proyek nyata, sing aku nyaranake kabeh wong kanggo melu. Lan umume, iku wektu kanggo mungkasi dadi programmer bola ing vakum lan miwiti sinau soko njaba java-inti. Kanggo nonton game kasebut, sampeyan kudu nginstal MySQL, yen sampeyan durung nggunakake, aja ragu-ragu - nginstal, iki minangka salah sawijining database sing bakal digunakake ing proyek lan proyek pribadi! Aku ora bakal menehi katrangan babagan nginstal lan nggarap database; ana akeh tutorial lan video ing Internet; Aku nyaranake ngerteni iki dhewe, iki uga minangka salah sawijining katrampilan programmer sing paling penting - ngerteni iku metu ing dhewe :) Ing urip, sampeyan kudu kemampuan kanggo nulis pitakon ing sql, native, lan liwat JDBC, hibernate , spring, spring data, mbok menawa dhaftar bisa terus, nanging kawruh ends ana. Saiki mandheg maca artikel iki lan ngerteni MySQL, sejatine ora angel, sampeyan kudu nginstal server kasebut dhewe, mung setelan login lan sandhi. banjur maca babagan printah apa sing digunakake nalika nggarap. Printah kanggo nggarap server: create , show, use, lan liya-liyane, printah help- bakal menehi dhaptar lengkap printah. Pitakonan kanggo nggarap tabel tartamtu: select , insert, deletelan liya-liyane. Aja jero banget, ana kemungkinan mung sebagéyan cilik sing bakal dieling-eling saka mung maca prentah. sampeyan bakal sinau kabeh liwat wektu. Sampeyan bisa muter ing terminal MySQL, nggawe database, nggawe tabel, isi, nggawe panjalukan kanggo nampilake data, nambah kritéria query. Paling kamungkinan, iki bakal nggawa sampeyan ora luwih saka 2-3 jam, yen luwih suwe, aja kuwatir, kanthi pengalaman sampeyan bakal nguwasani materi anyar luwih cepet. Yen sampeyan ora duwe masalah karo dhasar, mula sampeyan bisa miwiti ngembangake game kasebut, adhedhasar game sing wis daktulis babagan tic-tac-toe.. Kanggo wektu sing suwe aku ora bisa ngerti carane ngleksanakake multiplayer, aku nemokake solusi nggunakake database. Proses game nganggep yen pemain dadi giliran, kabeh owah-owahan ing game direkam ing database. wis adhedhasar iki, kita ngerti sing kita duwe pemain lan ana lapangan playing sing ngemot pranala menyang pemain, iku ing lapangan playing sing logika kudu disambungake ing kang siji pemain nunggu pemain kaloro kanggo nggawe pamindhahan. lan sawise kang peran diganti lan Pamuter pisanan nggawe pamindhahan, lan ngenteni kaloro. Lan amarga kabeh owah-owahan kudu diduplikasi ing database, sawise saben pamindhahan kita kudu nyimpen lapangan. Dadi kita teka ing kesimpulan pisanan, kudu ana lapangan dolanan ing Database lan amarga kita ngomong babagan multiplayer, kita kudu nambah pemain ing kana. Ayo nggawe tabel ing MySQL, aku nindakake kanthi asli, liwat jendela terminal mysql. lapangan playing ngandhut pranala menyang pemain, supaya iku bakal logis pisanan nggawe meja karo pemain. Pemain kita duwe:
  • id– nomer urutan, kita nggawe tombol utami;
  • name- jeneng umum, string;
  • wins- jumlah kamenangan;
  • loses- jumlah lesi;
  • games- jumlah total game sing diputer.
Tabel game:
  • id– nomer urutan, kita nggawe tombol utami;
  • x– id saka pamuter diputer х– tombol secondary;
  • o– id saka pamuter diputer o– tombol secondary;
  • field- lapangan dhewe, format bakal diterangake ing ngisor iki;
  • status- iki perlu supaya multiplier bisa mlaku kanthi bener, status kasebut nggambarake kahanan game:
    digawe, muter, game rampung

  • current- uga kanggo multiplier, khususe sajrone game, lapangan iki ngontrol sing giliran saiki,
    lan sawise pungkasan ngumumake pemenang utawa imbang

Kita wis ngurutake tabel, saiki kita kudu nggawe kelas Jawa kanthi kolom sing cocog - Gamelan 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;
}
Ayo nambah konstruktor kosong tanpa paramèter - kanggo nggarap database lan konstruktor liyane sing bakal nggawe obyek. Ayo nambah setter lan getter kanggo kabeh lapangan. Saiki ayo ngatasi hibernate :) ora dadi luwih gampang saka jam nganti jam. Iku sethitik liyane rumit tinimbang karo MySQL, Aku bakal cepet liwat struktur umum. Maneh, ora kabeh dadi rumit, dhasar bisa dipelajari liwat tutorial apa wae sajrone sawetara jam, lan luwih becik sinau kanthi jero nalika nulis proyek sampeyan. Nggarap database saka JAVA kalebu nggunakake JDBC, maca babagan ing wiki . Nanging yen sampeyan nggunakake ing nulis kode, iku bakal nggawa akèh pain ing anus, sawetara kerumitan nulis kelas DAO ( uga wiki ), hibernate bakal nambah kahanan sethitik, karo sampeyan bakal duwe akeh kurang bola-bali (template). ) kode. Supaya hibernate bisa digunakake, sampeyan kudu nyambungake perpustakaan menyang proyek, iki rampung kanthi gampang: Ctrl + Alt + Shift + S (Struktur File-Proyek), pindhah menyang tab Pustaka, klik "+" lan tambahake perpustakaan sing wis diundhuh ( minangka pilihan, saka kene ). Kanggo ngubungake kelas, Usersampeyan Gamekudu nggunakake anotasi - gampang banget digunakake, kanthi kode kasebut katon kaya iki:
@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;
    }
}
Iku prasaja kene
  • @Entity- ngandika sing kelas minangka "entitas", ing tembung prasaja, iku disambungake menyang meja ing database.
  • @Table(name="games")– ngandika kang Tabel, games– jeneng tabel ing database
  • @Id, @GeneratedValue, @Column(name = "id")- kanthi telung anotasi kasebut, kita nyatakake yen lapangan iki minangka lapangan identifikasi, digawe kanthi otomatis, lan kolom ing basis data diarani id.
  • @Column(name = "x")– jeneng kolom ing database.
Sabanjure, sampeyan kudu mbangun level - level DAO lan level layanan. Yen kita nyederhanakake kabeh kanggo kahanan vakum, banjur nggarap data liwat tingkat layanan, iki minangka salah sawijining tingkat abstraksi, ngidini sampeyan nggawe aplikasi luwih mandiri, supaya pangembang logika game ora rinci. saka nyetel akses kanggo database, utawa contone, yen dumadakan kita tinimbang hibernate prasaja mutusaké kanggo nggunakake spring, owah-owahan ora ngluwihi lapisan layanan, tanpa kang setengah aplikasi kudu ditulis maneh! iki minangka salah sawijining pola desain. Ayo miwiti nulis level 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();
            }
        }
    }
}
Iki minangka operasi nambah pangguna anyar menyang basis data. Elinga yen mung obyek saka kelas entitas sing diterusake menyang metode kasebut; ora ana informasi tambahan sing dibutuhake ing kene. Iki dijangkepi kanthi kasunyatan manawa kita nampa sesi komunikasi sing wis siap karo database saka kelas HibernateUtil. Ayo dipikirake.
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;
    }
}
Kaya sing sampeyan ngerteni, kabeh ing kene uga gampang banget SessionFactory- iki minangka antarmuka saka perpustakaan hibernate, sing disambungake menyang proyek kita. Kanggo operasi sing bener, mung ngisi file konfigurasi 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>
Yen sampeyan ndeleng tag kasebut, dadi jelas apa lan kepiye carane kita nyiyapake ing kene. Fitur liyane saka hibernate yaiku yen dumadakan kita mutusake kanggo ngganti database saka MySQL menyang sawetara liyane, kita mung kudu ngganti driver ing property name="connection.driver_class" lapisan tag DAO siap, ayo nggawe lapisan layanan. Supaya ora nggawe obyek DAO ing lapisan layanan, kita nggunakake pola pabrik.
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;
    }
}
Lan iki minangka salah sawijining cara tingkat layanan
public class UserService {
    static void setUserBusy(User user){
        user.setBusy(true); //делаем его занятым
        //и обновляем его в БД
        Factory.getInstance().getUserDAO().updateUser(user);
    }

}
Kode kanggo nggarap database wis rampung, kita nulis maneh logika game njupuk menyang akun owah-owahan. Pisanan, ayo misahake metode peluncuran utama dadi kelas sing kapisah Main, mung bakal dadi kelas kontrol - menu game sing sampeyan bisa miwiti game utawa ndeleng statistik. Ayo nggawe kelas GameLogicsing bakal njlèntrèhaké kabeh logika game lan mriksa lapangan playing. Dheweke bakal utusan nyimpen kabeh owah-owahan ing lapangan playing lan statistik pamuter sawise game kanggo lapisan layanan. Ana fitur menarik: kita ngemot lapangan playing ing wangun arrays, padha bisa disimpen ing database, nanging ing tataran iki aku mutusaké kanggo reinvent setir lan ing database sandi lapangan ana minangka int, yaiku 9 -nomer digit, kang parsed dening loro nggunakake cara kelas GameLogic, Aku ora nyaranake nindakake iki, Aku bakal nambah ing Rilis sabanjuré game :) Good luck kanggo everyone ing sinau JAVA! Sampeyan bisa ngundhuh proyek ing kene .
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION