Golang Program Flow Control EP5

Golang ก็เหมือนภาษาอื่น ๆ คือจะมี IF, ELSE, FOR LOOPS, SWITH CASE อื่น ๆ

IF, ELSE IF, ELSE คำสั่งหากินของทุก ๆ ภาษา เกือบจะถูกเรียกว่า AI

อธิบายรวดเดียวกันไปเลย ด้วยโค๊ดข้างล่างนี้

// if condition_that_evaluates_to_boolean{
//      perform action1
// }else if condition_that_evaluates_to_boolean{
//      perform action2
// }else{
//      perform action3
// }

price, inStock := 100, true

if price >= 80 { // parenthesis are no required to enclose the testing condition
    fmt.Println("Too Expensive")

if price <= 100 && inStock == true { //the same with: if price <= 100 && inStock { }
    fmt.Println("Buy it!")

// In Go there is not such a thing like the Truthiness of a variable.
// Error:
// if price {
//  fmt.Println("We have price!")
// }

// only one if branch will be executed
if price < 100 {
    fmt.Println("It's cheap!")
} else if price == 100 {
    fmt.Println("On the edge")
} else { //executed only once if all the if branches are false (it's optional)
    fmt.Println("It's Expensive!")

Simple IF

อธิบายรวดเดียวกันไปเลย ด้วยโค๊ดข้างล่างนี้ ง่ายดี

package main
import (
func main() {
    // converting string to int:
    i, err := strconv.Atoi("45")
    // error handling
    if err != nil {
    } else {
    // simple (short) statement ->  the same effect as the above code
    // i and err are variables scoped to the if statement only
    if i, err := strconv.Atoi("34"); err == nil {
        fmt.Println("No error. i is ", i)
    } else {

For Loops การวนทำ ตามจำนวนข้อมูล

อธิบายรวดเดียวกันไปเลย ด้วยโค๊ดข้างล่างนี้ ง่ายดี

package main
import "fmt"
func main() {
    // printing numbers from 0 to 9
    for i := 0; i < 10; i++ {
    // has the same effect as a while loop in other languages
    // there is no while loop in Go
    j := 10
    for j >= 0 {
    // handling of multiple variables in a for loop
    for i, j := 0, 100; i < 10; i, j = i+1, j+1 {
        fmt.Printf("i = %v, j = %v\n", i, j)
    // infinite loop
    // sum := 0
    // for {
    //  sum++
    // }
    // fmt.Println(sum) //this line is never reached

หากต้องการที่จะ break (หยุดการทำงาน) หรือ continue (ต่อเนื่อง จะข้ามรอบการทำงานนั้น) จะทำอย่างไร

// It works just the same as in C,  Java or Python.
// The continue statement rejects all the remaining statements in the current iteration of the loop
// and moves the control back to the top of the loop.

// printing even numbers less than or equal to 10
for i := 1; i <= 10; i++ {
    if i%2 != 0 {
        continue    // skipping the remaining code in this iteration


// It is used to terminate the innermost for or switch statement.
// It works just the same as in C,  Java or Python.

// finding 10 numbers divisible by 13 
count := 0 
for i := 0; true; i++ {
    if i%13 == 0 {
        fmt.Printf("%d is divisible by 13\n", i)

    if count == 10 { //if 10 numbers were found, break!
        break //it breaks the current loop (inner loop if there are more loops)

// the break statement is not terminating the program entirely;
fmt.Println("Just a message after the for loop")

จะลืมได้ไง Switch Statement

package main
import "fmt"
func main() {
    language := "golang"
    switch language {
    case "Python": //values must be comparable (compare string to string)
        fmt.Println("You are learning Python! You don't use { } but indentation !! ")
        // an implicit break is added here
    case "Go", "golang": //compare language with "Go" OR "golang"
        fmt.Println("Good, Go for Go!. You are using {}!")
        // the default clause the equivalent of the else clause of an if statement
        // and gets executed if no testing condition is true.
        fmt.Println("Any other programming language is a good start!")
    n := 5
    // comparing the result of an expression which is bool to another bool value
    switch true {
    case n%2 == 0:
    case n%2 != 0:
        fmt.Println("Never here!")
    //** Switch simple statement **//
    // Syntax: statement (n:=10), semicolon and a switch condition
    //(true in this case, we are comparing boolean expressions that return true)
    // we can remove the word "true" because it's the default
    switch n := 10; true {
    case n > 0:
    case n < 0:

Golang Data Types และ Operators EP4

Data Types ก็คล้าย ๆ เหมือนภาษาอื่น ๆ

  • NUMERIC TYPES ภายใต้ type นี้จะย่อยอีกเยอะมาก อธิบายตามโค๊ดข้างล่าง
    • uint เก็บค่าตั้งแต่จำนวนที่เป็นบวก รวมถึง 0
    • int เก็บค่า เป็นลบ 0 และบวก
    • float เก็บค่าที่รูปแบบทศนิยม
    • byte นามแผงของ uint8
    • rune นามแผงของ int32
// uint8      the set of all unsigned  8-bit integers (0 to 255)
// uint16      the set of all unsigned 16-bit integers (0 to 65535)
// uint32      the set of all unsigned 32-bit integers (0 to 4294967295)
// uint64      the set of all unsigned 64-bit integers (0 to 18446744073709551615)

// int8        the set of all signed  8-bit integers (-128 to 127)
// int16       the set of all signed 16-bit integers (-32768 to 32767)
// int32       the set of all signed 32-bit integers (-2147483648 to 2147483647)
// int64       the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807)

// uint     either 32 or 64 bits
// int      same size as uint

// float32     the set of all IEEE-754 32-bit floating-point numbers
// float64     the set of all IEEE-754 64-bit floating-point numbers
// complex64   the set of all complex numbers with float32 real and imaginary parts
// complex128  the set of all complex numbers with float64 real and imaginary parts

// byte        alias for uint8
// rune        alias for int32

ตัวอย่างโค๊ด Numeric Types รูปแบบต่าง ๆ

//int type
var i1 int8 = -128     //min value
fmt.Printf("%T\n", i1) // => int8

var i2 uint16 = 65535  //max value
fmt.Printf("%T\n", i2) // => int16

var i3 int64 = -324_567_345  // underscores are used to write large numbers for a better readability
fmt.Printf("%T\n", i3)       // => int64
fmt.Printf("i3 is %d\n", i3) // => i3 is -324567345 (underscores are ignored)

//float64 type
var f1, f2, f3 float64 = 1.1, -.2, 5. // trailing and leading zeros can be ignored
fmt.Printf("%T %T %T\n", f1, f2, f3)

//rune type
var r rune = 'f'
fmt.Printf("%T\n", r) // => int32 (rune is an alias to int32)
fmt.Printf("%x\n", r) // => 66,  the hexadecimal ascii code for 'f'
fmt.Printf("%c\n", r) // => f
  • bool type เป็นได้แค่ true, false
  • string ข้อความ ต่างๆ หลาย ๆ ตัวอักษรรวมเป็น string
//bool type
var b bool = true
fmt.Printf("%T\n", b) // => bool

//string type
var s string = "Hello Go!"
fmt.Printf("%T\n", s) // => string

Array vs Slice Types

  • Array เป็น Data Type ที่กำหนดขนาดชัดเจน กำหนด size
  • Slice เป็น Data Type ที่ไม่กำหนดขนาด
//array type
var numbers = [4]int{4, 5, -9, 100}
fmt.Printf("%T\n", numbers) // =>  [4]int

//slice type
var cities = []string{"London", "Bucharest", "Tokyo", "New York"}
fmt.Printf("%T\n", cities) // => []string

Map การเก็บค่าข้อมูลโดยการกำหนด Key: Value

  • Key ของ Map จะ unique ไม่มีทางซ้ำกันได้
  • Value สามารถกำหนดได้ โดยทุก elements จะต้องเป็น Data Type แบบเดียวกัน
//map type
balances := map[string]float64{
    "USD": 233.11,
    "EUR": 555.11,
fmt.Printf("%T\n", balances) // => map[string]float64

Struct การกำหนดรูปแบบที่คล้ายการทำ Model, JPA Class ในภาษา Java

  • สามารถกำหนดตั้งชื่อได้เอง กำหนด properties ได้ไม่จำกัด แต่ละ property จะกำหนดด้วย Data Types ที่แตกต่างกันได้
//struct type
type Person struct {
    name string
    age  int
var you Person
fmt.Printf("%T\n", you) // => main.Person

Pointer Type เรื่องที่เข้าใจยาก ในบรรดาทุก Data Types

  • pointer คือตัวชี้ตำแหน่ง ถ้าใน GO ก็จะเป็นตำแหน่งการเก็บข้อมูลโดยจะไม่สามารถซ้ำๆ กับ address อื่น ได้
  • จะใช้สัญลักษณ์ * เพื่อบอกให้รู้ว่ากำลังกำหนด Type แบบ Pointer
  • โดยจะใช้ควบคู่กับ address ที่จะเป็นการบอกให้รู้ถึงที่อยู่ของ pointer นั้น ๆ จะใช้สัญลักษณ์ &
//pointer type
var x int = 2
ptr := &x                                                 // pointer to int
fmt.Printf("ptr is of type %T with value %v\n", ptr, ptr) // => ptr is of type *int with value 0xc000016168

Function Type

  • GO จะถือว่า function เป็น type รูปแบบนึงคล้าย javascript
//function type
fmt.Printf("%T\n", f) // => func()

func f() {

Operators อธิบายสั้น ๆ ด้วยโค๊ดข้างล่าง

a, b := 10, 5.5

//  +       sum
// -        difference
// *        product
// /        quotient
// %        remainder
// there is no power operator in Go. Use math.Pow(a, b) for raising to a power.

fmt.Println(a + 5)   // => 15
fmt.Println(3.1 - b) // => -2.4
fmt.Println(a * a)   // => 100
fmt.Println(a / a)   // => 1
fmt.Println(11 / 5)  // => 2

// Go is a Strong Typed Language
// fmt.Println(a * b)       // =>  invalid operation: a * b (mismatched types int and float64)
fmt.Println(a * int(b))     // => 50
fmt.Println(float64(a) * b) // => 55

// IncDec Statements
// The "++" and "--" statements increment or decrement their operands by the untyped constant 1.
x := 10
x++ // x is 11. Same as: x += 1
x-- // x is 10. Same as: x -= 1

//  =   (simple assignment)
// +=   (increment assignment)
// -=   (decrement assignment)
// *=   (multiplication assignment)
// /=   (division assignment)
// %=   (modulus assignment)

a = 10
a += 2 // => a is 12
a -= 3 // => a is 9
a *= 2 // => a is 18
a /= 3 // => a is 6
a %= 5 // => a is 1

//  ==      equal values
// !=       not equal
// >        left operand is greater than right operand
// <        left operand is less than right operand
// >=       left operand is greater than or equal to right operand
// <=       left operand is less than or equal to right operand

fmt.Println(5 == 6)   // => false
fmt.Println(5 != 6)   // => true
fmt.Println(10 > 10)  // => false
fmt.Println(10 >= 10) // => true
fmt.Println(5 < 5)    // => false
fmt.Println(5 <= 5)   // => true

// &&       logical and
// ||       logical or
// !        logical negation

fmt.Println(0 < 2 && 4 > 1) // => true
fmt.Println(1 > 5 || 4 > 5) // => false
fmt.Println(!(1 > 2))       // => true

Converting Types

  • การแปลง Type ของ Data นึง ไปเป็นอีก Type Data นึง เช่น int -> string, string -> int
var x = 3   //int type
var y = 3.2 //float type

// x = x * y //compile error ->  mismatched types

x = x * int(y) // converting float64 to int
fmt.Println(x) // => 9

y = float64(x) * y //converting int to float64
fmt.Println(y)     // => 28.8

x = int(float64(x) * y)
fmt.Println(x) // => 259

//In Go types with different names are different types.
var a int = 5   // same size as int64 or int32 (platform specific)
var b int64 = 2 // int and int64 are not the same type

// a = b // error: cannot use b (type int64) as type int in assignment
a = int(b) // converting int64 to int (explicit conversion required)

// preventing unused variable error
_ = a


s := string(99)            // int to rune (Unicode code point)
fmt.Println(s)             // => 99, the ascii code for symbol c
fmt.Println(string(34234)) // => 34234 is the unicode code point for 薺

// we cannot convert a float to a string similar to an int to a string
// s1 := string(65.1) // error

// converting float to string
var myStr = fmt.Sprintf("%f", 5.12)
fmt.Println(myStr) // => 5.120000

// converting int to string
var myStr1 = fmt.Sprintf("%d", 34234)
fmt.Println(myStr1) // => 34234

// converting string to float
var result, err = strconv.ParseFloat("3.142", 64)
if err == nil {
    fmt.Printf("Type: %T, Value: %v\n", result, result) // => Type: float64, Value: 3.142
} else {
    fmt.Println("Cannot convert to float64!")

// Atoi(string to int) and Itoa(int to string).
i, err := strconv.Atoi("-50")
s = strconv.Itoa(20)
fmt.Printf("i Type is %T, i value is %v\n", i, i) // => i Type is int, i value is -50
fmt.Printf("s Type is %T, s value is %q\n", s, s) // => s Type is string, s value is "20"

Defined Types กำหนดชื่อ Type ใหม่

  • กำหนดชื่อของ Type ที่สื่อความหมายเฉพาะ
package main
import "fmt"
type age int        //new type, int is the underlying type
type oldAge age     //new type, int (not age) is the underlying type
type veryOldAge age //new type, int (not age) is the underlying type
func main() {
    // new type speed (underlying type uint)
    type speed uint
    // s1, s2 of type speed
    var s1 speed = 10
    var s2 speed = 20
    // performing operations with the new types
    fmt.Println(s2 - s1) // -> 10
    // uint and speed are different types (they have different names)
    var x uint
    // x = s1  //error different types
    // correct
    x = uint(s1)
    _ = x
    // correct
    var s3 speed = speed(x)
    _ = s3

Golang ทำไม package fmt ถึงสำคัญสำหรับผู้เริ่มต้น EP3

package fmt คืออะไร

ใช้ I/O ที่จัดรูปแบบด้วยฟังก์ชันที่คล้ายคลึงกับ printf และ scanf ของภาษา C รูปแบบการกร มาจาก C แต่ง่ายกว่า


  • การ Print แบบขึ้นบรรทัดใหม่ ด้วย fmt.Println(“message”) //=> message
  • การ Print หลาย args แบบขึ้นบรรทัดใหม่ fmt.Println(“arg0 := “,10,”, arg1 := “,99) // => arg0 := 10, arg1 := 99
 fmt.Println("Hello Go World!") // => Hello Go World!


  • การ Print ที่จะสามารถกำหนด format ของ message ได้โดย format ที่กำหนดมีอยู่ด้วยกันหลายรูปแบบ เช่น
    • %d -> decimal
    • %f -> float
    • %s -> string
    • %q -> double-quoted string
    • %v -> value (any)
    • %#v -> a Go-syntax representation of the value
    • %T -> value Type
    • %t -> bool (true or false)
    • %p -> pointer (address in base 16, with leading 0x)
    • %c -> char (rune) represented by the corresponding Unicode code poi

ตัวอย่างการใช้งาน fmt.Printf

a, b, c := 10, 15.5, "Gophers"
grades := []int{10, 20, 30}
fmt.Printf("a is %d, b is %f, c is %s \n", a, b, c)    // => a is 10, b is 15.500000, c is Gophers
fmt.Printf("%q\n", c)                      // => "Gophers"
fmt.Printf("%v\n", grades)                 // => [10 20 30]
fmt.Printf("%#v\n", grades)                // => b is of type float64 and grades is of type []int
fmt.Printf("b is of type %T and grades is of type %T\n", b, grades) 
    // => b is of type float64 and grades is of type []int
fmt.Printf("The address of a: %p\n", &a)    // => The address of a: 0xc000016128
fmt.Printf("%c and %c\n", 100, 51011)       // =>  d and 읃  (runes for code points 101 and 51011)

แต่ถ้าอยากที่จะขึ้นบรรทัดใหม่ด้วยก็ให้ เพิ่ม \n ใน fmt.Printf(“%q\n”, c) ก็จะได้การขึ้นบรรทัดใหม่ด้วย


ใช้งานเหมือน Printf แต่จะ return เป็น string

a, b, c := 10, 15.5, "Gophers"
// fmt.Sprintf() returns a string. Uses the same verbs as fmt.Printf()
s := fmt.Sprintf("a is %d, b is %f, c is %s \n", a, b, c)
fmt.Println(s) // => a is 10, b is 15.500000, c is Gophers

Golang เรียนนรู้ Syntax ต่าง ๆ ของ GO EP2

Variables and Declarations

ตัวแปร และการประกาศค่า หลัก ๆ
  • ที่เห็นได้ชัดเจน จะมี 2 รูปแบบ คือกำหนด type ชัดเจน เช่น var s1 string และให้แปลง type ให้ตามข้อมูลที่ assign เริ่มต้น เช่น var s1 = “poolsawat.com” // จะได้ type string
  • การกำหนดค่าหลาย ๆ ค่า ก็สามารถ assings แบบนี้ var i, j int = 1, 2 ได้เช่นกัน
  • การประกาศค่าแบบสั้น ด้วย s1 := “poolsawat.com”
  • อื่น ๆ ตามโค๊ดตัวอย่างข้างล่าง
// Variables and Declarations
// Go Playground: https://play.golang.org/p/PKdAxUp8mNT
package main
import "fmt"
func main() {
    // Syntax: var var_name type
    var s1 string
    s1 = "Learning Go!"
    fmt.Println(s1) // printing string s1
    //** TYPE INFERENCE **//
    // Go deduces automatically the type of the variable by looking at the initial value (bool, int, string etc)
    var k int = 6 // not necessary to say the type (int). It is inferred from the literal on the right side of =
    var i = 5     // type int
    var j = 5.6   // type float64
    // printing i, j and k
    fmt.Println("i:", i, "j:", j, "k:", k)
    // ii == jj  // -> error: cannot assign float to int (Go is a strong typed language)
    // declaring and initializing a new variable of type string (type inference)
    var s2 = "Go!"
    _ = s2 //in Go each variable must be used or there is a compile-time error
    // _ is the Blank Identifier and mutes the error of unused variables
    // _ can be only on the left hand side of the = operator
    // multiple assignments
    var ii, jj int
    ii, jj = 5, 8 // -> tuple assignment. It allows several variables to be assigned at once
    // swapping two variables using multiple assignments
    ii, jj = jj, ii
    fmt.Println(ii, jj)
    //** Short Declaration (works only in Block Scope!) **//
    // := (colon equals syntax) used only when declaring a new variable (or at least a new variable)
    // := tells go we are going to create a new variable and go figures out what type it will be
    s3 := "Learning golang!"
    _ = s3
    // can't use short declaration at Package Scope (outside main() or other function)
    // all statements at package scope must start with a Go keyword (package, var, import, func etc)
    // multiple short declaration
    car, cost := "Audi", 50000
    fmt.Println(car, cost)
    // redeclaration with short declaration syntax
    // at least one variable must be NEW on the left side of :=
    var deleted = false
    deleted, file := true, "a.txt"
    _, _ = deleted, file
    // expressions in short declarations are allowed
    sum := 5 + 2.5
    // multiple declaration is good for readability
    var (
        age       float64
        firstName string
        gender    bool
    _, _, _ = age, firstName, gender
    // a concise way to declare multiple variables that have the same type
    var a, b int
    _, _ = a, b

Types and Zero Values

ชนิดของตัวแปร และค่า 0 (ศูนย์)

  • ตัวอย่าง type ของ GO เช่น string, int, float และอื่น ๆ เพิ่มเติม
  • หากไม่ initial value ให้ GO จะ set default value ให้ int // initialized with 0, float //initialized with 0.0,bool //initialized with false และ string //initialized with empty string
  • การตรวจสอบ type ของตัวแปร สามารถทำได้หลายวิธี 1 ในวิธีที่ง่าย คือ %T ตัวอย่าง fmt.Printf(“The type of name is: %T\n”, name)
// Types and Zero Values
// Go Playground: https://play.golang.org/p/zItROROXi64
package main
import "fmt"
func main() {
    // you must provide a type for each variable you declare or Go should be able to infer it
    var a int = 10
    var b = 15.5      // type inference (deduction)
    c := "Gopher"     // short declaration, type inference
    _, _, _ = a, b, c // Blank Identifier (_) to get rid of unused variable error
    // Go is a Statically and Strong Typed Programming Language
    // a = 3.14 -> error. A variable cannot change it's type
    // a = b    -> error. It's not allowed to assign a type to another type
    //** ZERO VALUES **//
    // An uninitialized variable or empty variable  will get the so called ZERO VALUE
    // The zero-value mechanism of Go ensures that a variable always holds a well defined value of its type
    var value int                         // initialized with 0
    var price float64                     // initialized with 0.0
    var name string                       // initialized with empty string -> ""
    var done bool                         // initialized with false
    fmt.Println(value, price, name, done) // -> 0 0.0 ""  false

Comments and Naming Convention

การ comment code และการตั้งชื่อตัวแปร และค่าอื่น ๆ
  • comment บรรทัดเดียว จะใช้ // my code un use
  • comments หลาย ๆ บรรทัด /* my code un use multi lines */
  • การตั้งชื่อไม่ควรยาวเกินความจำเป็น ต้องสื่อกับหน้าที่ของชนิดนั้น ๆ และต้องง่านต่อการดูในภายหลัง
  • ไม่ควรตั้งชื่อที่ใช้ _ (underscore) ในการตั้งชื่อ
// Comments and Naming Conventions in Go
// Go Playground: https://play.golang.org/p/pprI80SPMkS
package main
//** COMMENTS **//
// this is a single line comment
 This is a block comment.
 a := 10
var name = "John Wick" // inline comment
// Naming Conventions are important for code readability and maintainability.
// use short, concise names especially in shorter scopes
// common names for common types:
var s string   //string
var i int      //index
var num int    //number
var msg string //message
var v string   //value
var err error  //error value
var done bool  //bool, has been done?
// use mixedCase a.k.a camelCase instead of snake_case (variables and  functions)
var maxValue = 100  // recommended (camelCase)
var max_value = 100 // not recommended (snake_case)
// recommended
func writeToFile() {
// not recommended
func write_to_file() {
// write acronyms in all caps
var writeToDB = true // recommended
var writeToDb = true // not recommended
func main() {
    // use fewer letters, don’t be too verbose especially in smaller scopes
    var packetsReceived int // NOT OK, too verbose
    var n int               // OK
    _, _ = packetsReceived, n
    // an uppercase first letter has special significance to go (it will be exported in other packages)

Golang เริ่มต้น Golang Developer EP1

สวัสดีครับ พอมีเวลาว่าง ๆ เริ่มศึกษาภาษาใหม่ ๆ ก็อยากที่จะทำ series ของ Golang ไว้กับชุดบทความนี้

ติดตั้ง golang และ ทำความรู้จัก GOROOT, GOPATH

  • download golang version ล่าสุด https://golang.org/dl/
  • หลังจากติดตั้ง golang แล้ว ตรวจสอบเวอร์ชั่น ด้วย ‘go version
  • GOROOT กำหนด go compile path ด้วยคำสั่ง export GOROOT=/usr/local/go
  • GOPATH กำหนด go path ของ project ด้วย export GOPATH=$HOME/go
  • set PATH หลัก ด้วย export PATH=$GOPATH/bin:$GOROOT/bin:$PATH

เริ่ม Print “Hello Golang”

  • สร้าง directory เพื่อเก็บ code ของ workshop นี้ไว้ที่ “$GOPATH/src/master_go_programming/hello_world
  • สร้างไฟล์ “main.go” ใส่โค๊ดนี้ในไฟล์ main.go
package main

import "fmt"

func main() {

    fmt.Println("Hello Golang")

  • สั่ง go run เพื่อ compile main.go ด้วย ‘go run main.go’

Editor VScode และ extensions

รีวิวเกมส์ NFT MOO Monster เปิดเล่นวันแรกเป็นอย่างไร ติดตั้ง เชื่อมต่อกระเป๋า อธิบายระบบเกมส์เบื้องต้น

*** การลงทุนมีความเสี่ยง ผู้ลงทุนควรศึกษาข้อมูลก่อนการตัดสินใจลงทุน ***

ทำความรู็จัก Moo Monster มันคือเกมส์อะไร

Moo Monster เป็น NFT Game ฝีมือคนไทยที่ได้เปิดรอบ IDO ไปเมื่อช่วงตุลาคม ปีที่แล้ว สำหรับผู้เล่นมือใหม่สามารถเข้าเล่นได้โดยไม่ต้องลงทุน ตัวเกมส์จะเป็นแนวโจมตีโดยไม่ต้องรอรอบเล่น (เมื่อเปิดสู้ ตัวละครจะโจมตีใส่กันไม่ยั้งตามสกิล และสถานะของแต่ละตัวละคร) สามารถอ่าน white paper ของเกมส์เพื่มเติมได้ ที่นี่ White Paper

การเข้าเล่น และผลตอบแทนของเกมส์

เกมส์จะเป็นลักษณะแบบ Play to Earn โดยผู้เล่นจะต้องจัดทีมตัวละคร และสู้กับ Monster ตามด่านต่าง ๆ โดยแต่ละด่านก็จะเพิ่มความยาก และเลเวลของ Monster ก็จะสูงขึ้นไปด้วย เมื่อต่อสู้ทำลาย Monster ฝั่งตรงข้ามไปจนหมดแล้ว คุณจะถือว่าเป็นผู้ชนะ และจะได้ reward เป็น gMoo โดยการเล่นแต่ละรอบจะได้ สามารถสมัครเข้าเล่นได้จากลิ้งนี้ https://app.moo-monster.com/inventory

Reward 0.25 Moo


ระบบเกมส์จะมีส่วนที่เป็นจัดการสิ่งของผู้เล่น ที่ใช้เป็นที่สำหรับเติม/ถอน Moo ของเรานั้นเอง โดยเริ่มแรกเราจะต้องทำการ Download Moo Game Mobile (Andoid/IOS) ติดตั้งบนอุปกรณ์ให้เรียบร้อย (Emulator ก็สามารถเล่นได้ ข้อดีจะสามารถสร้าง account ได้หลายไอดี) จากนั้น login เกมส์ให้เรียบร้อย

ถัดไปให้เข้าไปเชื่อมต่อเกมส์ (ลิ้งหน้าเกมส์ที่จะเชื่อมกับ Metamask) กับ wallet ของเราซะก่อน (การเชื่อม wallet metamask) จากนั้นระบบจะให้ผู้เล่นสร้าง account สำหรับลิ้งกับ wallet กับ Moo Application Game (Andoird/IOS) โดยจะให้ใช้ลิ้งกันด้วย G-mail , Facebook (ควรเลือก Account เดียวกับที่เลือก login บน Moo Mobile App)

หรือใครอยากจะอ่านรายละเอียดเพิ่มเติมสามารถเข้าไปอ่านและทำตามขั้นตอนจาก medium.com official ของทีมงาน Moo Monster ได้เลย (ลิ้งขั้นตอนวิธีการเข้าเล่น Moo Monster)

การทำขั้นตอนดังกล่าวนี้เป็นการลิ้ง account ของระบบเกมส์ เมื่อลิ้งกันเรียบร้อยแล้วให้เข้าไปที่หน้า Moo App บนมือถือ (Emulator) ให้ทำการ Refresh Data ที่เมนูตั้งค่าเพื่อดึงตัวละคร Moo ของเราให้เกมส์สามารถมองเห็นได้ โดยไอคอนตั้งค่าจะอยู่ บนขวาของตัวเกมส์

ถ้าทำขั้นตอนเหล่านี้เรียบร้อยระบบเกมส์ก็จะสามารถดึง NFT Moo ของเรามาในเกมส์ได้แล้ว


เมื่อเข้ามาหน้าแรกของเกมส์ระบบจะแสดงตัวละครหลัก (คน) กับตัวละครผู้ช่วย (Moo) ระบบเกมส์มีระบบการอัพเกรดสเตตัสตัวละครคน ,หมู ของเราได้ โดยหนัก ๆ จะต้องใช้ไอเทมผลไม้ และ Moo บางส่วนเพื่ออัพเกรด

การจัดทีมเข้าต่อสู่ ระบบเกมส์จะให้เตรียมทีมได้ 5 ตัวละคร จากนั้นจะให้เข้าต่อสู้โดยมีด่านต่าง ๆ ตามระดับความสามารถของตัวละคร

ผลตอบแทน การ Claim Reward

เมื่อผู้เล่นได้ทำการเล่นและได้ reward แล้วจพนวนนึงระบบเกมส์จะให้ผู้เล่นสามารถเข้าไป claim ได้ใน moo wallet

ช่วงเปิดตัวเกมส์วันนี้จะมีเงื่อนไขการถอนเหรียญ ดังนี้
Min-Max: 50-500 Moo
Fee: 50%

คะแนนความสนุก และความน่าลงทุน

คะแนนความสนุก 7/10 ระบบเกมส์ทำมาสวย

ความน่าลงทุน 7/10 ให้เหตุผล ทีมพัฒนาน่าจะเห็นตัวอย่าง สำหรับเรื่องระบบเหรียญที่เฟ้อจากเกมส์อื่น ๆ แต่เกมส์เพิ่งจะเปิดไว้ใจไม่ได้เหมือนกัน

รีวิวเกมส์ NFT CryptoCar ดอยสูงมาก ข้อมูลต่าง ๆ เกี่ยวกับ CryptoCars

*** การลงทุนมีความเสี่ยง ผู้ลงทุนควรศึกษาข้อมูลก่อนการตัดสินใจลงทุน ***

ทำความรู้จัก Crypto Car มันคืออะไร

1 ในเกมส์ของค่าย Crypto City เราอาจจะพอเคยได้ยิน หรือรู้จัก CryptoCars (แข่งรถ), CryptoPlanes (แข่งเครื่องบิน), CryptoGuards (แข่งยิงปืน)

CryptoCars เกมส์แนวแข่งรถ ระบบเกมส์จะให้เราทำการเปิดกล่องเพื่อลุ้น NFT รถแข่งที่มีอยู่ด้วยกัน 5 เลเวล Classic, Common, Super Car, Rare, Legendary โดยแต่ละเลเวลจะมีจำนวนรอบการแข่งต่อวันไม่เท่ากัน โดยปกติ Classic, Common เป็นให้ 4 รอบแข่งต่อวัน เป็นต้น และเลเวลที่สูงขึ้นก็จะได้รอบเพิ่มเติมไปด้วย

โดยเกมส์เริ่มเปิดให้เล่นเมื่อช่วงต้นกันยายน ราคาเปิดตัวเกมส์ 17 บาท ปัจจุบัน ราคาเกือบจะเหลือ 0 โดยยังอยู่ที่ 4 บาท (ดอยสูงมาก) เกมส์จะให้ reward ตอบแทนเป็น ccar

การเล่น และผลตอบแทนของเกมส์

เกมส์จะมีรูปแบบการเล่นเป็นแนวจำลองการแข่งรถโดยให้ผลตอบแทนตามลำดับผลการแข่งขัน 1st (10 ccar + exp), 2nd (7.5 ccar + exp ) , 3rd (5 ccar + exp ) , 4th (2.5 ccar + exp ) , 5th (exp)

จากภาพตัวอย่างรภ เลเวล common จะมีรอบวิ่งได้ 4 รอบ เมื่อแข่งครบ 4 รอบจะแข่งรอบของวันถัดไปได้ต้องรอเวลาอีก 24 ชม. ถึงจะสามารถเข้ามาเติมน้ำมันและเริ่มกดแข่งได่อีกครั้ง

เริ่มเล่นเกม แนะนำเมนู

ทำการต่อกระเป๋า Metamask เข้ากับหน้าเกมส์ Crypto Car หน้าแรกของเกมส์จะมี Crypto Lotery ให้เสี่ยงดวงกัน สุ่มเลขละ 20 CCAR โดยจะได้รางวัล 1 20%, 2 8% ,3 4%, 4 1% ของยอดการรวมทายผล

ถัดมา ต้องทำการเติม CCAR เข้าเกมส์ก่อน ผ่านเมนู Deposit เติมเหรียญ, Withdraw ถอนเหรียญ

เมื่อเติม CCAR เข้าเกมส์แล้วจะมีวิธีซื้อรถด้วยกัน 2 แบบ

1. เปิดกล่องเพื่อลุ้นรถที่มีเลเวล Common , Classic, Super Car, Rare, Legendary

2. ซื้อจากตลาดรถ Maketplace มีตั้งแต่ราคา 550 CCAR เป็นต้นไปตามราคา

ค่าใช้จ่ายเมื่อซื้อรถทั้ง 2 แบบ

  1. การเปิดกล่องสุ่ม จะมีเงื่อนไขการเปิดอย่างน้อยต้องมีรถในความครอบครองไม่เกิน 5 คันถึงจะสามารถเปิดกล่องสุ่มได้ โดยแต่ละกล่องจะใช้ 550 CCAR ในการเปิด, จะมีค่าจดทะเบียนรถอีก 10 CCAR และจะต้องใช้อีกวันละ 2 CCAR ในการเติมน้ำมันเชื้อเพลิง
  2. จะจ่ายแต่ราคารถ XXX CCAR เท่านั้น เพราะรถผ่านการจดทะเบียนมาแล้วจึงไม่จำเป็นต้องเสียค่าจดทะเบียน
    * โดยทั้ง 2 แบบจะต้องเสียค่าเติมน้ำมัน 2 CCAR ในแต่ละวันถึงจะสามารถแข่งต่ออีกได้

การ Claim Reward

เงื่อนไขการ Lock เหรียญจะ Lock ไว้ 5 วันโดยมีการหัก Fee 40%, 30%, 20% 10%

คะแนนความสนุก และความน่าลงทุน

คะแนนความสนุก 5/10

ความน่าลงทุน 6/10 ให้เหตุผลว่าใช้ทุนไม่เยอะมาก

รีวิวเกมส์ NFT Bombcrypto เกือบ 2 เดือนเป็นอย่างไรบ้าง พร้อมเรื่องที่ต้องรู้เกี่ยวกับ bombcrypto

*** การลงทุนมีความเสี่ยง ผู้ลงทุนควรศึกษาข้อมูลก่อนการตัดสินใจลงทุน ***

เป็นอีกเกมส์ที่จะดูมีอนาคตกว่าเกมส์อื่น ๆ ของ gamefi ในวงการ NFT ที่ผมรู้จัก สำหรับเกมส์ bombcrypto ผมได้ลองลงทุนเล่นมาได้เกือบ 2 เดือน วันนี้จะมารีวิวว่าในช่วงเวลาเกือบ 2 เดือนได้ประสบการณ์อะไรจากเกมส์นี้บ้าง

ทำความรู้จัก Bombcrypto กันก่อน

Bombcrypto เปิดเกมส์มาในช่วงต้นเดือนตุลาคม 2564 เป็นเกมส์แนว play to earn ก็คือ ต้องเล่นถึงจะได้รางวัลตอบแทน


โดยตัวเกมส์เมื่อได้เห็นในครั้งแรกจะทำให้เรานึกถึงตัวเกมส์ Bomber Man เกมส์ฮิตทุกยุคทุกสมัย แต่มีการปรับรูปแบบของเกมส์ให้น่าเล่น และให้เข้ากับการให้ reward สำหรับเกมส์ NFT ในแบบของ bombcrypto

การเล่น และผลตอบแทนของเกมส์

ทุก ๆ เกมส์ของ NFT Game จะมีสิ่งหนึ่งที่คล้าย ๆ กันคือ ทุกเกมส์จะมีเหรียญ ( crypto coin ) ของแต่ละเกมส์ สำหรับ bomb ก็มีเหรียญของเกมส์เหมือนกัน ที่ชื่อว่า Bombcrypto (bcoin) ซึ่งช่วงเปิดตัวของเกมส์ราคาเหรียญอยู่ที่ 58 บาท และเคยทำราคาไปได้ถึง 281 บาทเมื่อช่วงปลายเดือนพศจิกายน ปัจจุบันของเหรียญอยู่ที่ 112 บาท (ราคา ณ วันที่ลงบทควาท) โดยการที่จะ reward รางวัล (bcoin) ของเกมส์นั้นคือการจะต้องวางระเบิดทำลายกล่องในแต่ละด่านโดยแต่ละกล่องจะมี bcoin ซ่อนอยู่ นั้นคือรางวัลทีจะได้รับ

เริ่มเล่นเกมส์ แนะนำเมนู

เริ่มต้นผู้เล่นทุกคนต้องมีกระเป๋าเก็บเหรียญ การติดตั้ง Metamask และสร้างกระเป๋า ให้เรียบร้อย จากนั้นเชื่อมต่อกระเป๋าที่ได้ทำการสร้างกับ https://app.bombcrypto.io/ ให้เรียบร้อย

เมื่อเชื่อมกับกระเป๋าของเราได้เรียบร้อย เกมส์ก็จะพาเรามาที่หน้าแรกของเกมส์โดยมีรายละเอียดแต่ละเมนูตามนี้

Taeasure Hunt : โหมดเล่นแบบปกติ ใช้ตัวละครสูงสุด 15 ตัว ช่วยกันทำลายกล่อง เพื่อผ่านด่าน

Chest: สิ่งของ ตัวละคร

House : บ้านพักตัวละคร

Heros : ตัวละคร

ซื้อตัวละคร และการเล่นเกมส์

Heros : 1 ตัวละคร เราจะใช้ 10 bcoin ในการซื้อตัวละคร (ซื้อแบบสุ่ม เพื่อโอกาสที่จะได้ตัวละคร) โดยระดับของตัวละครตามดวง
common *
rare **
super rare ***
legend ****
super regend *****
* คือความสามารถของตัวละคร
Taeasure Hunt : โหมดการเล่นที่จำเป็นต้องเลือกตัวละครเพื่อเป็นทีมช่วยทำลายกล่อง และจะได้ reward bcon

Adventure : เปิดให้เข้าเล่นได้ 18 มกรา 64

การ Claim Reward

เราจะสามารถ claim bcoin ได้ก็ต่อเมื่อมีเหรียญในหีบครบ 40 เหรียญแล้ว โดยจำเป็นอย่างมาก ที่ใน wallet (metamask ต้องมีเหรียญค้างในกระเป๋า 1 bcoin) ไม่เช่นนั้นจะไม่สามารถ claim ได้

คะแนนความสนุก และความน่าลงทุน

ผมให้ความสนุกจากการลุ้นตัวละคร 8/10
ความน่าลงทุน 8/10

ข้อมูลอื่น ๆ ที่เกี่ยวข้อง

BombCrypto Thailand (กลุ่มพูดคุยหลัก) กลุ่ม facebook

ตรวจสอบ ROI ของเกมส์ Bombcrypto

ตรวจสอบการ claim bcoin ,claim hero


How would you like to pay ?

Vocabulary Put these service in the right group

free shippingexpress mail servicebuy one get one free
QR code paymentfree giftscash
registered mailgift cardbank transfers
pick up from the store30% discount voucherbuy one get one half off
PromotionsPayment serviceDelivery service
buy one get one free
free gifts
30% discount voucher
buy one get half off
QR code payment
Bank transfers
gift card
free shipping
express mail service
registered mail
pick up from the store

Language focus: Asking about payment and delivery service

PromotionsMaking a payment
Do you have any sale promotions at the moment?
– We have …
– We offer …
– Alright, I’ll take it.
– Let me look around first.
How would you like to pay?
– I will pay by _____________, please.
-__________________, please
-______________________ is fine by me.
— cash
–debit/credit card
–QR code payment
–bank transfer
Can you send it by ___________________ ?
– an express mail service
– a registered mail.
– ______[name] courier service.
Do you have free shipping?
Will I get the product by / within __________ ?
Can I pick it / them up from the store instead ?

Sharing opinoin

Vocabulary: Complete the questions with the given words. Then share and explain you answers

rush hour (ชั่วโมงเร่งรีบ)manage (จัดการ)dream destination (ปลายทางแห่งความฝัน)make up to someone (ขอคืนดีกับใครสักคน)
fortune telling (ทำนายอนาคต)see eye to eye (เห็นตรงกัน)volunteering activity (กิจกรรมอาสาสมัคร)deal with (จัดการกับเรื่องอะไรสักอย่าง)
  1. Where is your dream desination? Why do you want to go there?
  2. Do you belive in fortune telling? What questions would you ask to know about your future?
  3. What’s the best way to make up to someone after a fight?
  4. What’s the best way to get around during rush hour in big cities?
  5. What is the best way to deal with unfriendly colleagues?
  6. What kind of volunteering activity do you prefer? Building houses or feeding animals?
  7. What’s the best way to manage time better?
  8. In your opinion is it important to see eye to eye with your boss?

Language Focus I useful Exprssion for Expression Opinions

Aksing for and OpinionExpression an Opinion
What do you think about [noun / v.ing ]?In my opinion
Do you agree that [subject + verb] / v.ing?In my view
Do you thing that [subject + verb] / v.ing?I think / belive / guess that

Practice noun clause start with “that”

  1. Do / Important / that / you / agree / is / reading / ?
    Do you agree that reading is important ?
  2. think / you / students / that / shouldn’t / questions / ask / Do / ?
    Do you think that students shouldn’t ask questions ?
  3. in / view / children / listen / should / to my / parents.
    In my view children should listen to my parents.

I like Chinese Food.

Vocabulary: Food and drink

Instant noodles (บะหมี่กึ่งสำเร็จรูป)grilled pork balls(ลูกชิ้นหมูปิ้ง)rice porridge(ข้าวต้ม)papaya salad(ส้มตำ)
bubble milk tea(ชานมไทยมุก)Calamari(ปลาหมึก)boat noodles(ก๋วยเตี๋ยวเรือ)potato chips(มันฝรั่งทอด)
chicken green curry(แกงเขียวหวาน)liquor(สุรา)soft drinks(น้ำอัดลม)spring rolls(ปอเปี๊ย)

Language Focus: Like and Dislike Expression

Expression LikesExpression Dislikes
I’m crazy about …I can’t stand …
I love …I hate …
I’m a fan of …I’m not a fan of …
I really like …I don’t like … at all
… is my favorite …… is not my favorite

Practice: correct and incorrect

  1. I love (-have) salad for dinner because it’s healthy. [X]
  2. My dad doesn’t like (+to) eat Italian food because It’s too creamy and cheesy. [X]
  3. Sarah hates durian because It’s very smelly. [/]
  4. Make is a fan of Japanese food, especially sushi.[/]
  5. My brother can’t stand [eat -> eating] garlic and he is not a fan of onion, too.[X]
  6. I’m crazy [+about] bubble milk tea. [X]

I’m going away this weekend.

– Vocabulary

have a check-up (ตรวจสุขภาพ)go away on vacation (วันหยุดพักผ่อน)check out a new restaurant (ลองร้านอาหารใหม่)give away things (ให้สิ่งของ,บริจาค)
tidy up the house (ทำความสะอาดบ้าน)put away money (เก็บเงิน,ออมเงิน)work on a project (ทำโปรเจค)stay up late (นอนดึก)
meet up with friends (พบปะสังสรรค์)stop by a coffee shop (แวะร้านกาแฟ)watch some shows (ดูรายการทีวีโชว์)sleep in (ตื่นสาย)

– Language Focus: Present Continuous for Future Plans

Present continuous is used to talk about future plans or arrangement for events in the future

  • Affirmative: Subject + verbs to be + v.ing + other words.
    – I am visiting my family in Chiangmai next week.
    – Zack is going away this weekend.
    – My friends are staying up late tomorrow night.
  • Yes-No question: Verb to be + subject + v.ing + other words?
    – Are you doing anything tomorrow?
    – Is Sara having a checkup next week?
  • WH-question: WH + Verb to be + subject +v.ing + other words?
    – Where are you doing tomorrow ?
    – Who is she meeting next week?

_ Practice: Complete these conversations with the present continuous form of the verb.

  1. A: What are you doing this weekend?
    B: I am staying home all weekend. Some friends are coming over to watch a basketball game. The Tiger is playing.
  2. A: I am getting a new TV on Wednesday, finally! What are you doing on Friday? Do you want to come over?
    B: I’d love to, but i can’t. Joe and I are visiting his parents this weekend. We are leaving on Friday after work.
  3. A: Is Jane stoping by the coffee shop tomorrow morning?
    B: No, she running an errand for her mom is the morning and she is coming straight to work.

My Behavior

– Vocabulary

nervous (วิตกกังวล)jealous (อิจฉา)surprised (ประหลาดใจ)annoyed (ลำคาญ)relaxed (ผ่อนคลาย)
confused (สับสน)exhausted (เหนื่อย)stressed (เครียด)enthusiastic (กระตือรือล้น)proud (ภูมิใจ)
joyful (มีความสุข)frustrated (หงุดหงิด)excited (ตื่นเต้น)lonely (เหงา)frightened (กลัว)

– Language Focus: Zero Conditional

  • Zero conditional us used to decribe things that are generally true, routines and habits.
  • Use the present simple tense for both the “if” clause and the “main clause”

structure : If / when subject + v.1 + subject + v.1

A: What do you do if you have a really important exam?
B: If I have a really important exam, I study a lot.


  1. If I’m nervous before and exam. I take a deep breath and try to relax.
  2. When I’m busy with chores at home, I ask my family member to do some.
  3. If I wake up and feel hungry, I have simething healthy, like an apple.
  4. When I get angry at someone, I usaully don’t say anything to him or her.
  5. If my friends don’t call me for a few days, I start to get lonely.
  6. When I feel sleepy on Sunday mornings, I like to stay in bed.

Healthy Habits

– Vocabulary

eat a balance diet (กินอาหารที่สมดุล)protect your skin (ปกป้องผิวของคุณ)go online all day (เล่นอินเตอร์เน็ตทุกวัน)
avoids oily foods (เลี่ยงอาหารมัน)control portions (ควบคุมปริมาณอาหาร)reduce stress (ลดความเครียด)
drink soft drinks (ดื่มเครื่องดื่มอัดลม)lift weights (ยกน้ำหนัก)take supplements (ทานอาหารเสริม)
drink alcohol (ดื่มเครื่องดื่มแอลกอฮอล์)get enough sleep (นอนให้เพียงพอ)stay up late (นอนดึก)

– Language Focus: How Questions

How + describing word [คำขยาย] + do you / are you /is … + … ?

How often do you go to the gym?
I go three on four days a week.
How healthy is your lifestyle?
My lifestyle is unhealthy.
How long do you spend time at the gym?
I spend about an hour at the gym.
How many meals do you eat in a day?
i eat five small meals.
How well do you balance your diet?
I balance my diet not very well.
How picky are you when choosing a restaurant?
I’m very picky when choosing a restaurant.
How much sleep do you get?
I sleep about 7-8 hours.
How important is cofee to you?
Coffee is pretty important for me.

– Practice: Let’s translate the sentences into English

  1. คุณดื่มแอลกอฮอล์บ่อยแค่ไหน?
    How often do you drink algohol?
  2. คุณปกป้องผิวของคุณดีแค่ไหน?
    How well do you protect yuor skin?
  3. คุณเรื่องมากขนาดไหนเวลาคุณไปเที่ยว
    How picky are you when your travel?
  4. ออกกำลังกายสำคัญกับคุณมากแค่ไหน?
    How important is excercies to you?
  5. คุณลดความเครียดได้ดีแค่ไหน?
    How well do you reduce stress?
  6. คุณดื่มน้ำเยอะแค่ไหนในหนึ่งวัน?
    How much do you drink water in a day?
  7. คุณใช้เวลากับอินเตอร์เน็ตนานแค่ไหน?
    How long do you go online?

Pitching and idea

– Vocabulary

worth a tryคุ้มค่าที่จะลอง
try outลอง
achieveสำเร็จ, ได้รับ
key pointประเด็นหลัก, จุดประเด็น
customers’ needsความต้องการของลูกค้า

– Language Focus: Pitching phrases

Pitching an idea phrases
I would like to propose …
I belive that …
It’s worth a try to …
I can guarantee that …
We can … to attract …
Talking about advantages
The advantage of … is [that] … /The advantages of … are[that]…
The benefit of … is [that] … / The benefits of … are [that] …
The key point of … are …
Moreover, …
In adition, …
Op top of that, …

– Practice: Translate the sentences into English

  1. ข้อดีของการทำงาน 4 วันต่อสัปดาห์คือพนักงานมีความสุขขึ้นและทำงานได้ดีขึ้น
    The advantages of working 4 days are that employees are happier and work better.
  2. พวกเราสามารถโปรโมทสินค้าที่สำนักงานหลาย ๆ แห่ง เพื่อดึงดูพนักงานบริษัทให้มากขึ้น
    We can promote the product in many offices to attract more company employee.
  3. ถ้าเราให้สินค้าตัวอย่างฟรี ฉันรับรองได้ว่าลูกค้าจะกลับมาซื้ออีกแน่ๆ
    If we give free samples I can guarantee that customer will return a purchase.
  4. ข้อดีของการมีคลาสภาษาอังกฤษให้พนักงานเรียนหลังเลิกงาน คือ พนักงานสามารถคุยกับลูกค้าต่างชาติได้ดีขึ้น
    The advantage of having english class for employee offer work that they can communicate with international customers better.