適合超新手看的telnet 小遊戲《生命線》
來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。在學習golang的這幾天在玩一個手機遊戲叫《生命線》,覺得挺有趣,想想能不能用golang 做一個小雛形出來。順便學習一下 golang對mysql的操作。首先,進入mysql 操作```#首先建立一個資料庫CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;#表結構是這樣,像‘樹’,當你做出選擇的時候,就根據 left_event_id 尋找下一個事件CREATE TABLE `events` ( `event_id` INT(10) NOT NULL PRIMARY KEY auto_increment, `event_detail` VARCHAR(1000) NULL, `left_event_id` INT(10), `right_event_id` INT(10), `left_option` VARCHAR(25), `right_option` VARCHAR(25))#先插入幾條資料試試看INSERT INTO events SET event_id=1,event_detail="這裡是ECUST219號,呼叫指揮部,收到請回複,OVER。\n這裡是ECUST219號,呼叫指揮……哦,天哪,終於有人回應我了,是指揮部嗎?",left_event_id=2,right_event_id=3,left_option="是的,發生了什麼事?",right_option="不是,發生了什麼事?"INSERT INTO events SET event_id=2,event_detail="哦,天哪。指揮部,我現在正在site-768,探險隊全……除了我,全員犧牲,希望能儘快派來救援。",left_event_id=4,right_event_id=5,left_option="沒有救援",right_option="對不起"INSERT INTO events SET event_id=3,event_detail="哦,天哪。別掛斷!求你了,別掐斷訊號,你是這幾天裡唯一回應我的人了。",left_event_id=6,right_event_id=7,left_option="發生啥事?",right_option="你怎麼了?"```哈哈,隨便寫了點東西在裡面。然後開始golang 代碼,總共不超過100行```package main//匯入包import ("bufio""database/sql""fmt""net"_ "github.com/go-sql-driver/mysql")var (event_id int //事件idevent_detail string //事件內容left_event_id int //左子事件idright_event_id int //右子事件idleft_option string //左子事件選項right_option string //右子事件選項其實就是a or b)func checkErr(err error) {if err != nil {panic(err)}}/*將得到的資訊輸出到終端*/func echo(c net.Conn, db *sql.DB, id int) {row := db.QueryRow("SELECT * FROM events WHERE event_id=?", id)err := row.Scan(&event_id, &event_detail, &left_event_id, &right_event_id, &left_option, &right_option)if err == sql.ErrNoRows {fmt.Fprintf(c, "遊戲結束")c.Close()return}fmt.Fprintf(c, "\n\033[1;37m%s\n\n\033[0;31ma)%s\n\nb)%s\n", event_detail, left_option, right_option)}/*擷取終端輸入並處理*/func handleConn(db *sql.DB, c net.Conn) {event_id = 1echo(c, db, event_id)input := bufio.NewScanner(c)for input.Scan() {switch input.Text() {case "a":event_id = left_event_idecho(c, db, event_id)case "b":event_id = right_event_idecho(c, db, event_id)case "exit":c.Close()returndefault:continue}}}func main() {db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")defer db.Close()checkErr(err)//echo(db, event_id)listener, err := net.Listen("tcp", "localhost:8888")checkErr(err)for {conn, err := listener.Accept()checkErr(err)go handleConn(db, conn)}}```,慘不忍睹470 次點擊