Zeus Master of Olympus and Poseidon Master of Atlantis

Leave a Comment

Link Source: Zeus Master of Olympus and Poseidon Master of Atlantis
Thể loại: Game PC
Tags: Chiến thuật, Games, Mô phỏng, Quản lí


Zeus Master of Olympus and Poseidon Master of Atlantis



[Cũ mà hay] Zeus Master of Olympus and Poseidon Master of Atlantis là hai bản game chiến thuật rất nổi tiếng của Impression sau thành công Ceasar và Pharaoh. 


Đầu tiên, để chơi được bản mở rộng Poseidon Master of Atlantis, yêu cầu trong máy bạn phải có cài sẵn phiên bản Zeus cũ. Bạn sẽ có thể chọn chơi phiên bản Zeus hay Poseidon khi đã vào game. Tải 2 bản Link ở dưới.
poseidon-1poseidon-4
poseidon-2Theo truyền thuyết kể lại thì ngoài khơi Đại Tây Dương trước đây tồn tại một lục địa to lớn có tên là Atlantis. Do phạm phải tội vô lễ, thần Poseidon nổi giận vùi sâu Atlantic xuống lòng đại dương. Chuyến hành trình của chúng ta sẽ xoay quanh lục địa Atlantic, bắt đầu từ nơi lục địa bí ẩn này được sinh ra, phát triển hưng thịnh và suy tàn. Xây dựng một thành phố hoa lệ, thu hút một lượng lớn dân cư tứ xứ, triệu hồi thần linh, anh hùng bảo vệ lãnh thổ và tiêu diệt quái vật là những trọng trách to lớn mà bạn phải gánh vác khi hóa thân thành đại đế trong trò chơi. Bên cạnh đó, Poseidon còn có thêm rất nhiều chi tiết thú vị khi bạn tham gia vào trò chơi khám phá một trong ba cái nôi thần thoại của nhân loại (Hy Lạp, Ai Cập và Trung Quốc). poseidon-5 Trăm công nghìn việc Có nhiều lý do khiến Poseidon đứng tách biệt với hai đàn anh của nó. Điều làm tôi ưng ý nhất là Zeus và Poseidon đã bỏ đi những thao tác điều khiển phức tạp có từ thời Caesar 3. Rõ ràng nhất là game đã giảm các cấp nhà cửa từ 20 xuống còn 6 cấp để tránh những mâu thuẫn phát sinh khi nâng cấp nhà, tiện cho việc phát triển những khu dân cư mới mà vẫn đảm bảo sự phát triển cho khu phố chính. poseidon-6


Cách chơi không khác trò Caesar 3 hay Emperor Kingdom. Trước hết, để cho dân chúng “an cư lạc nghiệp” giúp bạn rảnh tay quản lý những việc khác, cơ bản chỉ cần cung cấp cho người dân ba nguồn thiết yếu: lương thực để ăn, lông cừu để giữ ấm và dầu ôliu để thắp sáng. poseidon-7Văn hoá trong Poseidon cũng có nhiều điểm khác biệt so với Zeus. Nhà sản xuất đã bỏ qua những công trình như nhà hát kịch nghệ, sân vận động mà thay vào đó là những công trình mang đậm tính khoa học như phòng thí nghiệm, viện bảo tàng… Như vậy cũng khá hợp lý vì theo những câu chuyện truyền thuyết thì người dân của lục địa Atlantic là những người say mê khoa học. poseidon-8Riêng về giải trí, thành phố của bạn sẽ có một môn thể thao hấp dẫn là đua ngựa. Ngựa bây giờ không chỉ được cung cấp để trở thành ngựa chiến trên sa trường mà còn được huấn luyện thành những con tuấn mã trên đường đua. poseidon-3
Sức mạnh thần thánh vô biên

Nếu so sánh với Caesar 3 hay Pharaoh thì quả thật Zeus đã tạo một bước ngoặt lớn khi sinh ra hình ảnh những vị thần sống động. Trong Caesar, bạn chỉ đơn giản xây một đền thờ nhỏ xíu và làm vui lòng thần linh bằng cách tổ chức lễ hội linh đình và thần linh sẽ thể hiện sự ban phước hoặc phẫn nộ qua những tia sét vô cảm. Trong Pharaoh, bạn mất hàng giờ để xây dựng những toà kim tự tháp vĩ đại, đẹp thật đấy nhưng nhìn chung không xứng đáng với công sức và thời gian bạn bỏ ra. Với Poseidon thì khác, hệ thống thần linh trở nên linh hoạt và quan trọng không chỉ trong đời sống tín ngưỡng mà còn ảnh hưởng sâu sắc đến mọi mặt của thành phố, từ giao thương, trồng trọt chăn nuôi đến những chuyện đại sự như chống xâm lăng hay hành quân chinh phạt. Do đó, trước khi quyết định một việc gì, khôn ngoan nhất là bạn nên tham khảo ý kiến của thần linh hay nếu phải xây dựng từ đầu, bạn nên chừa chỗ để xây cho các thần một đền thờ thật nguy nga, lộng lẫy, còn hiệu quả ra sao thì hãy tự mình khám phá nhé.
poseidon-9

Việc lựa chọn thần linh cho mình cũng không phải là điều dễ dàng. Chỉ riêng bản Zeus số lượng thần linh trong game đã là 11. Khi bước qua bản Poseidon, trò chơi được bổ sung thêm hai vị thần mới là Hera và Atlas nâng tổng số lên 13. Bạn thấy đấy, con số này hơn gấp đôi con số 5 vị thần trong Caesar và Pharaoh. Mỗi một thành phố chỉ có thể thờ phụng tối đa là ba vị thần cho nên hãy khéo léo xây dựng vừa đủ không gây lãng phí tài nguyên và nhân lực. Chọn lựa như thế nào? Ví dụ, thành phố bạn có nhiều đất nông nghiệp thì nên chọn Demeter, bà ta sẽ phù phép cho sản lượng lương thực tăng vọt. Nếu thành phố có nhiều mối giao thương thì chọn Hermes để tăng tốc độ và chu kỳ di chuyển của thương nhân, và nếu bạn có biển thì xây thêm đền thờ thần Poseidon để phù hộ cho tàu thuyền không bị đắm cũng như tiêu diệt quân xâm lăng bằng đường biển. Bạn có thể tham khảo thêm chức năng của mỗi vị thần trong mục Helps của trò chơi.
Kết Luận

Tóm lại, Poseidon là một game xây dựng rất hay với đủ mọi thứ có thể để bạn “động não”: nhà cửa, lương thực, dân chúng, thần thánh và quái vật… Không biết các bạn nghĩ sao còn bản thân tôi thấy Zeus và Poseidon là trò chơi xây dựng hay nhất trong số seri game xây dựng thành phố của hãng Impression Games.


Cấu hình


Minimum System Requirements

OS: Windows 2000/XP/7/8

Processor: 1.3 GHz

Memory: 256 Mb

Hard Drive: 2 Gb free

Video Memory: 64 Mb

Sound Card: DirectX Compatible

DirectX: 9.0


Nguồn: Sưu tầm


Video hướng dẫn



Download Zeus Master of Olympus and Poseidon Master of Atlantis 


Link mega ~ 1.12 GB. Bạn muốn tải an toàn và nhanh hơn => Cách bắt link mega với idm 


Mega

Link Mega



Link Source: Zeus Master of Olympus and Poseidon Master of Atlantis
Xem Tiếp

Quan hệ Many To Many cột mở rộng Hibernate với Spring Boot

Leave a Comment

Link Source: Quan hệ Many To Many cột mở rộng Hibernate với Spring Boot
Thể loại: Java, Lập trình
Tags: Hibernate Framework, Học hành, Lập trình, Spring Framework

Hướng dẫn tạo quan hệ liên kết nhiều nhiều (many to many) tạo bản phụ trong hibernate spring boot


many-to-many-extracolumns (3)


Many To Many Join Extra Column Relationship Mapping with Spring Boot


Trong bài này mình sẽ hướng dẫn dùng annotation manytomany thêm bảng phụ (trung gian) trong hibernate + spring boot + mysql


Lưu ý bài này mở rộng từ bài hướng dẫn dùng annotation manytomany không thêm bảng phụ (trung gian) trong hibernate + spring boot + mysql. Nếu bạn chưa đọc thì hãy đọc trước bài đó, bài này mình sẽ không viết chi tiết như bài trước đó mà chỉ tập trung vào phần trọng tâm mở rộng thôi!


Hướng dẫn quan hệ nhiều nhiều (many to many) cột mở rộng hibernate jpa với Spring Boot Project


Tạo bảng trong cơ sở dữ liệu


Trong bài này chúng ta sẽ có 3 bảng trong cơ sở dữ liệu: book, publisher, book_publisher. Vì thế bên Java tương ứng sẽ có 3 entity là Book.javaPublisher.java và BookPublisher.java


many-to-many-extracolumns (3)


Lược đồ cơ sở dữ liệu như bạn thấy, trong bảng phụ ngoài 2 khóa chính cũng là 2 khóa ngoại như bài trước thì còn có 1 field là published_date


Mapping a many-to-many extra columns relationship with Spring Boot, Spring Data JPA and MySQL.


Database many-to-many extra columns code mysql:


CREATE DATABASE IF NOT EXISTS `jpa_manytomany_extracolumns` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `jpa_manytomany_extracolumns`;

--
-- Table structure for table `book`
--

DROP TABLE IF EXISTS `book`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `book` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `publisher`
--

DROP TABLE IF EXISTS `publisher`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `publisher` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

--
-- Table structure for table `book_publisher`
--

DROP TABLE IF EXISTS `book_publisher`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `book_publisher` (
`book_id` int(10) unsigned NOT NULL,
`publisher_id` int(10) unsigned NOT NULL,
`published_date` datetime DEFAULT NULL,
PRIMARY KEY (`book_id`,`publisher_id`),
KEY `fk_bookpublisher_publisher_idx` (`publisher_id`),
CONSTRAINT `fk_bookpublisher_book` FOREIGN KEY (`book_id`) REFERENCES `book` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `fk_bookpublisher_publisher` FOREIGN KEY (`publisher_id`) REFERENCES `publisher` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

Cấu trúc project spring boot


many-to-many-extracolumns (1)


Vào phần chính nào, mình dùng Eclipse + plugin Spring suite Tool để tạo project spring boot nhanh nhất.


Tạo project Spring Starter Project như hình


many-to-many-extracolumns (2)


Sau khi tạo xong bạn sẽ thấy có class Manytomany1Application.java và file pom.xml


Nội dung file Manytomany1Application.java


package com.qlam.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Manytomany2Application
public static void main(String[] args)
SpringApplication.run(Manytomany2Application.class, args);


Nội dung file pom.xml


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.qlam</groupId>
<artifactId>manytomany2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>manytomany2</name>
<description>Demo project for Spring Boot shareeverythings.com</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>


</project>

Khai báo các thực thể JPA Entity tức là các class trong package model


File BookPublisher.java


package com.qlam.demo.model;

import javax.persistence.*;

import java.io.Serializable;
import java.util.Date;

@Entity
@Table(name = "book_publisher")
public class BookPublisher implements Serializable
private static final long serialVersionUID = 1L;

private Book book;
private Publisher publisher;
private Date publishedDate;

@Id
@ManyToOne
@JoinColumn(name = "book_id")
public Book getBook()
return book;


public void setBook(Book book)
this.book = book;


@Id
@ManyToOne
@JoinColumn(name = "publisher_id")
public Publisher getPublisher()
return publisher;


public void setPublisher(Publisher publisher)
this.publisher = publisher;


@Column(name = "published_date")
public Date getPublishedDate()
return publishedDate;


public void setPublishedDate(Date publishedDate)
this.publishedDate = publishedDate;


File Book.java


package com.qlam.demo.model;

import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@Entity
public class Book
private int id;
private String name;
private Set<BookPublisher> bookPublishers;

public Book()


public Book(String name)
this.name = name;
bookPublishers = new HashSet<>();


@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId()
return id;


public void setId(int id)
this.id = id;


public String getName()
return name;


public void setName(String name)
this.name = name;


@OneToMany(mappedBy = "book", cascade = CascadeType.ALL, orphanRemoval = true)
public Set<BookPublisher> getBookPublishers()
return bookPublishers;


public void setBookPublishers(Set<BookPublisher> bookPublishers)
this.bookPublishers = bookPublishers;


File Publisher.java


package com.qlam.demo.model;

import javax.persistence.*;
import java.util.Set;

@Entity
public class Publisher
private int id;
private String name;
private Set<BookPublisher> bookPublishers;

public Publisher()



public Publisher(String name)
this.name = name;


@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId()
return id;


public void setId(int id)
this.id = id;


public String getName()
return name;


public void setName(String name)
this.name = name;


@OneToMany(mappedBy = "publisher")
public Set<BookPublisher> getBookPublishers()
return bookPublishers;


public void setBookPublishers(Set<BookPublisher> bookPublishers)
this.bookPublishers = bookPublishers;


Tạo Spring Data JPA Repository


File BookRepository.java


package com.qlam.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.qlam.demo.model.Book;

public interface BookRepository extends JpaRepository<Book, Integer>

File PublisherRepository.java


package com.qlam.demo.repository;

import org.springframework.data.jpa.repository.JpaRepository;

import com.qlam.demo.model.Publisher;

public interface PublisherRepository extends JpaRepository<Publisher, Integer>

Khai báo chuỗi kết nối trong file Application Properties


Trong file application.properties thêm các đoạn code kết nối với mysql


spring.datasource.url=jdbc:mysql://localhost/jpa_manytomany_extracolumns
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

Bạn cần lưu ý 3 dòng đầu tùy chỉnh lại cho đúng với kết nối mysql của bạn.


Chạy thử chương trình


Mình sẽ tạo 2 book A,B và 2 publisher A và B. Sau đó Book A sẽ có 2 publisher là A và B, còn book B chỉ có publisher là B thôi.


Trong file Manytomany2ApplicationTests.java trong phần src/test/resources mình tạo một số đối tượng để test thử như bên dưới.


package com.qlam.demo;

import java.util.Date;

import javax.transaction.Transactional;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.qlam.demo.model.Book;
import com.qlam.demo.model.BookPublisher;
import com.qlam.demo.model.Publisher;
import com.qlam.demo.repository.BookRepository;
import com.qlam.demo.repository.PublisherRepository;

@RunWith(SpringRunner.class)
@SpringBootTest
public class Manytomany2ApplicationTests
@Autowired
private BookRepository bookRepository;

@Autowired
private PublisherRepository publisherRepository;

@Transactional
@Test
public void contextLoads()
Book bookA = new Book("Book A");
Book bookB = new Book("Book B");

Publisher publisherA = new Publisher("Publisher A");
Publisher publisherB = new Publisher("Publisher B");

BookPublisher bookPublisher = new BookPublisher();
bookPublisher.setBook(bookA);
bookPublisher.setPublisher(publisherA);
bookPublisher.setPublishedDate(new Date());
bookA.getBookPublishers().add(bookPublisher);

BookPublisher bookPublisher2 = new BookPublisher();
bookPublisher2.setBook(bookA);
bookPublisher2.setPublisher(publisherB);
bookPublisher2.setPublishedDate(new Date());
bookA.getBookPublishers().add(bookPublisher2);

BookPublisher bookPublisher3 = new BookPublisher();
bookPublisher3.setBook(bookB);
bookPublisher3.setPublisher(publisherB);
bookPublisher3.setPublishedDate(new Date());
bookB.getBookPublishers().add(bookPublisher3);

publisherRepository.save(publisherA);
publisherRepository.save(publisherB);
bookRepository.save(bookA);
bookRepository.save(bookB);
// test
System.out.println(bookA.getBookPublishers().size());


Kết quả chạy, mình chỉ copy phần chính thôi!


Hibernate: insert into publisher (name) values (?)
Hibernate: insert into publisher (name) values (?)
Hibernate: insert into book (name) values (?)
Hibernate: insert into book_publisher (published_date, publisher_id, book_id) values (?, ?, ?)
Hibernate: insert into book_publisher (published_date, publisher_id, book_id) values (?, ?, ?)
Hibernate: insert into book (name) values (?)
2

Kết quả là trong bảng Book và Publisher sẽ có 2 Book và 2 Publisher tương ứng. Còn trong bảng book_publisher sẽ có 3 dòng trong đó có 1 book sẽ có 2 publisher và 1 book sẽ có 1 publisher.


Download source code


 



Link Source: Quan hệ Many To Many cột mở rộng Hibernate với Spring Boot
Xem Tiếp