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

golang_291 · · 2099 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

在学习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](https://static.studygolang.com/171201/07156b2c57ab9e6eb1759dcdf3d17cca.jpg)

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

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

2099 次点击  
加入收藏 微博
1 回复  |  直到 2017-12-02 13:22:00
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传