适合超新手看的telnet 小游戏《生命线》

golang_291 · 2017-12-01 07:54:11 · 2238 次点击 · 预计阅读时间 3 分钟 · 大约8小时之前 开始浏览    
这是一个创建于 2017-12-01 07:54:11 的文章,其中的信息可能已经有所发展或是发生改变。

在学习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 //事件id

    event_detail   string //事件内容
    left_event_id  int //左子事件id
    right_event_id int //右子事件id
    left_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 = 1
    echo(c, db, event_id)
    input := bufio.NewScanner(c)
    for input.Scan() {
        switch input.Text() {
        case "a":
            event_id = left_event_id
            echo(c, db, event_id)
        case "b":
            event_id = right_event_id
            echo(c, db, event_id)
        case "exit":
            c.Close()
            return
        default:
            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)
    }
}

效果图,惨不忍睹 a.jpg


有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2238 次点击  
加入收藏 微博
1 回复  |  直到 2017-12-02 13:22:00
shiqiang_ruan
shiqiang_ruan · #1 · 7年之前

有意思~~

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传