国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

他凌晨1:30給我開源的游戲加了UI|模擬龍生,掛機(jī)冒險(xiǎn)

這篇具有很好參考價(jià)值的文章主要介紹了他凌晨1:30給我開源的游戲加了UI|模擬龍生,掛機(jī)冒險(xiǎn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、前言

新年就要到了,祝大家新的一年:?? 龍行龘龘,?? 前程?hào)T朤!

白澤花了點(diǎn)時(shí)間,用 800 行 Go 代碼寫了一個(gè)控制臺(tái)的小游戲:《模擬龍生》,在游戲中你將模擬一條新生的巨龍,開始無(wú)盡的冒險(xiǎn)!

3天前的《??模擬龍生|500行Go代碼寫一個(gè)隨機(jī)冒險(xiǎn)游戲|巨龍修為挑戰(zhàn)》文章中已經(jīng)對(duì)核心玩法和游戲核心架構(gòu)做了介紹,但是第一版實(shí)在是寫得匆忙,編碼不夠優(yōu)雅。

??幸得熱心同學(xué)提了 pr 優(yōu)化了部分代碼邏輯,甚至凌晨1:30給游戲加了 UI,在這個(gè)基礎(chǔ)上,白澤也為游戲增加了排行榜功能,這篇文章講解一下相比3天前,《模擬龍生》的一些架構(gòu)上的變化以及玩法的更新。

他凌晨1:30給我開源的游戲加了UI|模擬龍生,掛機(jī)冒險(xiǎn),golang,游戲,開源,開源,游戲,ui

?? 游戲更新主要包含:

  • 使用 termdash(基于終端窗口的跨平臺(tái)儀表盤)作為 UI。

  • 架構(gòu)升級(jí),使用 channel 傳遞游戲內(nèi)所有 IO 內(nèi)容,面向協(xié)程編程。

  • 增加排行榜玩法。

公眾號(hào) 「白澤talk」,我也開源了一個(gè) Go 學(xué)習(xí)倉(cāng)庫(kù):包含我寫作的 Go 各階段學(xué)習(xí)文章、讀書筆記、電子書、簡(jiǎn)歷模板等,歡迎 star。

白澤目前正在打造一個(gè)氛圍良好的行業(yè)交流群(游戲交流群),文章的更新也會(huì)提前預(yù)告,歡迎加入:622383022。

二、核心玩法

  • 玩法流程:

具體參詳前一篇文章,后續(xù)也會(huì)盡快在倉(cāng)庫(kù)的 README 部分更新新增內(nèi)容玩法手冊(cè)。

游戲核心玩法:掛機(jī)、打怪、冒險(xiǎn)、修煉。

他凌晨1:30給我開源的游戲加了UI|模擬龍生,掛機(jī)冒險(xiǎn),golang,游戲,開源,開源,游戲,ui

  • 游玩體驗(yàn)(gif):
    1. 分配100點(diǎn)能力值,并進(jìn)行x輪冒險(xiǎn),這里我輸入100。
    2. 選擇2開始冒險(xiǎn),進(jìn)行50輪,但冒險(xiǎn)中第41輪意外死亡,丟失9輪冒險(xiǎn)次數(shù)。
    3. 選擇1返回修養(yǎng),進(jìn)行10輪,恢復(fù)生命值和提升修為。
    4. 選擇2開始冒險(xiǎn),進(jìn)行40輪,最后獲得修為2093進(jìn)入排行榜第三名。

他凌晨1:30給我開源的游戲加了UI|模擬龍生,掛機(jī)冒險(xiǎn),golang,游戲,開源,開源,游戲,ui

三、更新內(nèi)容

3.1 termdash 構(gòu)建 UI

Termdash 是一款基于終端的跨平臺(tái)定制儀表盤。只要將需要展示的消息,發(fā)送給 termdash 庫(kù)負(fù)責(zé) UI 展示的結(jié)構(gòu)體,則可以將其以儀表盤的形式,動(dòng)態(tài)展示更新。

他凌晨1:30給我開源的游戲加了UI|模擬龍生,掛機(jī)冒險(xiǎn),golang,游戲,開源,開源,游戲,ui

《模擬龍生》將游戲 UI 區(qū)域分成歷史記錄區(qū)、排行榜區(qū)、數(shù)值區(qū)、操作提示區(qū)、輸入?yún)^(qū)。

界面布局

termdash 的界面布局與 HTML 的 div 布局有些相似,通過(guò) container 將區(qū)域進(jìn)行分割,可以水平分割也可以垂直分割,下面這段代碼就是 dragon 游戲當(dāng)中,歷史記錄區(qū)域與排行榜區(qū)域布局。

container.SplitPercent(50) 這行代碼表示各占百分之五十空間。

// 歷史記錄區(qū)域布局 & 排行榜區(qū)域布局
container.Right(
   container.SplitVertical(
      container.Left(
         container.PlaceWidget(historyPanel),
         container.BorderTitle(HistoryAreaBorderTitle),
         container.Border(HistoryAreaBorderStyle),
         container.BorderColor(HistoryAreaBorderColor),
         container.KeyFocusSkip(),
      ),
      container.Right(
         container.PlaceWidget(rankPanel),
         container.BorderTitle(RankAreaBorderTitle),
         container.Border(RankAreaBorderStyle),
         container.BorderColor(RankAreaBorderColor),
         container.KeyFocusSkip(),
      ),
      container.SplitPercent(50),
   ),
),

3.2 使用 channel 傳遞消息

整個(gè)游戲的左下角是用戶唯一的輸入?yún)^(qū)域,通過(guò)捕獲用戶的輸入,觸發(fā)相遇的游戲邏輯之后,通過(guò) channel 將數(shù)據(jù)發(fā)送到對(duì)應(yīng)的 container 區(qū)域進(jìn)行展示。

他凌晨1:30給我開源的游戲加了UI|模擬龍生,掛機(jī)冒險(xiǎn),golang,游戲,開源,開源,游戲,ui

每一個(gè)游戲區(qū)域,在 printer 結(jié)構(gòu)體中,都有對(duì)應(yīng)的屬性字段,比如 historyText 字段對(duì)應(yīng)著“龍生經(jīng)歷”區(qū)域,而每一個(gè)區(qū)域也都有對(duì)應(yīng)的一個(gè)channel 用于接收消息,如 history 就是用于接收龍生經(jīng)歷的 channel。

// 創(chuàng)建消息打印器結(jié)構(gòu)體
p := &printer{
   terminal:        terminal,
   ctx:             ctx,
   container:       c,
   // 歷史記錄消息接收
   history:         make(chan historyInfo),
   // 歷史記錄區(qū)域 UI
   historyText:     historyPanel,
   rank:            make(chan rankInfo),
   rankText:        rankPanel,
   operateHintText: operationHint,
   operateHint:     make(chan string),
   scanned:         make(chan string),
   flushChannel:    make(chan struct{}),
   values:          values,
   experienceBar:   experience,
   hpBar:           hpBar,
   keyBinding: func(k *terminalapi.Keyboard) {
      // Ctrl + W 退出
      if k.Key == keyboard.KeyCtrlW {
         cancel()
         os.Exit(0)
      }

      // Enter 完成輸入
      if k.Key == keyboard.KeyEnter {
         value := inputs.ReadAndClear()
         p.scanned <- value
      }
   },
}
// 更新數(shù)值面板區(qū)域
go p.updateValuesPanel()
// 接收并打印龍的經(jīng)歷到歷史經(jīng)歷區(qū)域
go p.receiveHistory()
// 接收并打印操作提示語(yǔ)區(qū)域
go p.receiveOperateHint()
// 接收并打印信息到排行榜區(qū)域
go p.receiveRank()

只有先從 channel 中獲取到了消息,才能將消息在對(duì)應(yīng) UI 區(qū)域展示。以龍的冒險(xiǎn)為例,如果龍正在參與冒險(xiǎn),則每過(guò)0.5秒會(huì)在龍生經(jīng)歷(歷史記錄)區(qū)域打印一條記錄,如:剩余壽命 xxx 輪,你打敗了 xxx,修為增加 xxx。

而UI 上的內(nèi)容展示與程序執(zhí)行關(guān)系如下:

  1. 提前啟動(dòng) go 協(xié)程監(jiān)聽 history 這個(gè) channel,獲取要打印到 UI 區(qū)域的龍的經(jīng)歷。(調(diào)用的是 p.receiveHistory())。
  2. 每隔0.5秒處理業(yè)務(wù),將需要打印的信息發(fā)送給 p.history 這個(gè) channel。
// 接收歷史數(shù)據(jù),并換行
func (p *printer) addHistoryLn(info historyInfo) {
	info.info += "\n"
	p.history <- info
}

// 接收歷史數(shù)據(jù)處理方法
func (p *printer) receiveHistory() {
   go func() {
      for {
         select {
         case info := <-p.history:
            p.historyText.Write(info.info, info.options...)
         }
      }
   }()
}

游戲中所有 UI 區(qū)域的內(nèi)容都是通過(guò)最終調(diào)用 p.xxx.Write() 方法輸出到 UI 儀表盤上的,而諸如 historyText 這個(gè)屬性對(duì)應(yīng)的數(shù)據(jù)類型,都是 termdash 庫(kù)所提供的。

3.3 排行榜玩法

在游戲開始之初會(huì)打印之前歷史記錄中,最終獲得經(jīng)驗(yàn)值最高的10條記錄,降序排列。并在游戲正常結(jié)束(非 CTRL + W 形式結(jié)束)后,如果進(jìn)入前十,則更新榜單。

他凌晨1:30給我開源的游戲加了UI|模擬龍生,掛機(jī)冒險(xiǎn),golang,游戲,開源,開源,游戲,ui

排行榜的實(shí)現(xiàn):

  1. sqlite3 作為數(shù)據(jù)庫(kù),對(duì)應(yīng) rank.db 文件,運(yùn)行程序時(shí)如果不存在則會(huì)自動(dòng)創(chuàng)建。
  2. 對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)處理方法:
// 創(chuàng)建消息打印器結(jié)構(gòu)體
p := &printer{
   // rank 數(shù)據(jù)接收 channel
   rank:            make(chan rankInfo),
   // rank UI 區(qū)域
   rankText:        rankPanel,
}
// 接收并打印信息到排行榜區(qū)域
go p.receiveRank()

// 接收排行榜數(shù)據(jù),并換行
func (p *printer) addRankLn(info rankInfo) {
	info.info += "\n"
	p.rank <- info
}

// 展示排行榜
func showRank(ranks []*Rank, rank *Rank) {
	p.rankText.Reset()
	for i, r := range ranks {
		s := fmt.Sprintf("第%v名,龍的ID:%v,名稱:%v,經(jīng)驗(yàn)值:%v,攻擊力:%v,防御力:%v,生命值:%v", i+1, r.DragonID, r.Name, r.Experience, r.Attack, r.Defense, r.Life)
		if r.equal(rank) {
			s = "??" + s
		}
		s = s + "\n"
		p.addRankLn(newRankInfo(s))
	}
}

四、小結(jié)

?? 下一階段的打算

  • 趣味性:優(yōu)化 NPC 和隨機(jī)事件的內(nèi)容。

  • 功能性:待定

歡迎評(píng)論對(duì)《模擬龍生》游玩的體驗(yàn),有好的想法也可以一起交流,當(dāng)然也歡迎多多 pr。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-820846.html

到了這里,關(guān)于他凌晨1:30給我開源的游戲加了UI|模擬龍生,掛機(jī)冒險(xiǎn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • NOIP2023模擬9聯(lián)測(cè)30-金牌

    link 記 d u d_u d u ? 表示 u u u 到 1 1 1 的距離。 預(yù)處理出 s u m u = ∑ v ∈ T u 2 d v ? d u sum_u=sumlimits_{vin T_{u}}2^{d_v-d_u} s u m u ? = v ∈ T u ? ∑ ? 2 d v ? ? d u ? 。 考慮兩種情況 x x x 和 y y y 都不是 l c a lca l c a 。答案就是 2 dis ? ( x , y ) ∑ u ∈ T x 2 d u ? d x ∑ v ∈ T y 2 d v

    2024年02月06日
    瀏覽(16)
  • JVM實(shí)戰(zhàn)(30)——模擬堆內(nèi)存溢出

    JVM實(shí)戰(zhàn)(30)——模擬堆內(nèi)存溢出

    作者簡(jiǎn)介:大家好,我是smart哥,前中興通訊、美團(tuán)架構(gòu)師,現(xiàn)某互聯(lián)網(wǎng)公司CTO 聯(lián)系qq:184480602,加我進(jìn)群,大家一起學(xué)習(xí),一起進(jìn)步,一起對(duì)抗互聯(lián)網(wǎng)寒冬 學(xué)習(xí)必須往深處挖,挖的越深,基礎(chǔ)越扎實(shí)! 階段1、深入多線程 階段2、深入多線程設(shè)計(jì)模式 階段3、深入juc源碼解析

    2024年01月25日
    瀏覽(20)
  • 開源虛擬現(xiàn)實(shí)引擎。CARLA是一個(gè)基于Unreal Engine 4開發(fā)的游戲引擎,支持模擬各種汽車、摩托車、軌道交通信號(hào)等車輛的行駛行為,并且提供了一套API接口,供開發(fā)者進(jìn)行調(diào)用,用來(lái)進(jìn)行地圖構(gòu)建

    作者:禪與計(jì)算機(jī)程序設(shè)計(jì)藝術(shù) 目前,市面上存在多個(gè)智能汽車解決方案,包括滴滴、理想汽車、百度無(wú)人駕駛等,均由大型科技公司或各個(gè)公司開發(fā),其中一些公司如理想汽車、百度、字節(jié)跳動(dòng)等已經(jīng)取得了較為豐碩的成果。隨著技術(shù)的發(fā)展,人們?cè)絹?lái)越關(guān)注智能汽車在未

    2024年02月08日
    瀏覽(38)
  • 【Arduino30】DS1302時(shí)鐘芯片模擬值實(shí)驗(yàn)

    【Arduino30】DS1302時(shí)鐘芯片模擬值實(shí)驗(yàn)

    DS1302芯片:1片 32.768kHz晶振:1個(gè) 面包板:1個(gè) 杜邦線:若干 DS1302是由美國(guó)DALLAS公司推出的具有涓細(xì)電流充電能力的低功耗實(shí)時(shí)時(shí)鐘芯片。它可以對(duì)年、月、日、周、時(shí)、分、秒進(jìn)行計(jì)時(shí),并且具有閏年補(bǔ)償?shù)榷喾N功能。 DS1302常用于以下場(chǎng)景: 電子時(shí)鐘和鐘表: DS1302可以通過(guò)

    2024年02月09日
    瀏覽(82)
  • 邊玩邊學(xué),30個(gè)Python小游戲(含源碼)

    邊玩邊學(xué),30個(gè)Python小游戲(含源碼)

    大家好,我是小F~ 經(jīng)常聽到有朋友說(shuō),學(xué)習(xí)編程是一件非??菰餆o(wú)味的事情。其實(shí),大家有沒(méi)有認(rèn)真想過(guò),可能是我們的學(xué)習(xí)方法不對(duì)? 比方說(shuō),你有沒(méi)有想過(guò),可以通過(guò)打游戲來(lái)學(xué)編程? 今天我想跟大家分享 30個(gè)Python小游戲 ,教你如何通過(guò)邊打游戲邊學(xué)編程! 相關(guān)文件及

    2024年02月14日
    瀏覽(16)
  • 好可怕!情侶住酒店凌晨被人開門闖入

    近日,深圳南山區(qū)一家酒店的服務(wù)員的不當(dāng)行為引發(fā)了隱私權(quán)的問(wèn)題。 據(jù)媒體報(bào)道,5月13日凌晨,王先生和女友在深圳南山區(qū)一家酒店入住,凌晨2點(diǎn)二人已經(jīng)熟睡,突然有人推門而入。 經(jīng)調(diào)查發(fā)現(xiàn),闖入的人竟然是酒店的男服務(wù)員。 好可怕,半夜三更突然有人進(jìn)來(lái)真的可怕

    2024年02月05日
    瀏覽(16)
  • 【深度學(xué)習(xí):MPT-30B】提高開源基礎(chǔ)模型的標(biāo)準(zhǔn)

    【深度學(xué)習(xí):MPT-30B】提高開源基礎(chǔ)模型的標(biāo)準(zhǔn)

    隆重推出 MPT-30B,它是我們開源模型基礎(chǔ)系列中功能更強(qiáng)大的新成員,在 NVIDIA H100 Tensor Core GPU 上使用 8k 上下文長(zhǎng)度進(jìn)行訓(xùn)練。 在這里嘗試 HuggingFace 上的 MPT-30B-Chat! 自 5 月份推出 MPT-7B 以來(lái),ML 社區(qū)熱切地接受開源 MosaicML 基礎(chǔ)系列模型。 MPT-7B 基礎(chǔ)、-Instruct、-Chat 和 -Story

    2024年02月22日
    瀏覽(23)
  • 30分鐘了解所有引擎組件,132個(gè)Unity 游戲引擎組件速通!【收藏 == 學(xué)會(huì)】

    30分鐘了解所有引擎組件,132個(gè)Unity 游戲引擎組件速通!【收藏 == 學(xué)會(huì)】

    ?? 博客主頁(yè):https://xiaoy.blog.csdn.net ?? 本文由 呆呆敲代碼的小Y 原創(chuàng),首發(fā)于 CSDN ?? ?? 學(xué)習(xí)專欄推薦:Unity系統(tǒng)學(xué)習(xí)專欄 ?? 游戲制作專欄推薦:游戲制作 ??Unity實(shí)戰(zhàn)100例專欄推薦:Unity 實(shí)戰(zhàn)100例 教程 ?? 歡迎點(diǎn)贊 ?? 收藏 ?留言 ?? 如有錯(cuò)誤敬請(qǐng)指正! ?? 未來(lái)很長(zhǎng)

    2024年02月11日
    瀏覽(130)
  • 新掛機(jī)賺錢項(xiàng)目,閑置手機(jī),電腦掛機(jī)賺錢的方法

    新標(biāo)題:利用閑置手機(jī)和電腦掛機(jī)賺錢的全新項(xiàng)目,輕松實(shí)現(xiàn) passively income 文章: 近年來(lái),隨著科技的不斷進(jìn)步,掛機(jī)賺錢成為一種備受關(guān)注的賺錢方式。通過(guò)利用閑置的手機(jī)和電腦,在不占用太多時(shí)間和精力的前提下,可以實(shí)現(xiàn)被動(dòng)收入。本文將介紹一個(gè)全新的掛機(jī)賺錢項(xiàng)

    2024年02月04日
    瀏覽(20)
  • 微信小程序畢業(yè)設(shè)計(jì)作品成品(30)微信小程序駕校模擬考試系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    微信小程序畢業(yè)設(shè)計(jì)作品成品(30)微信小程序駕校模擬考試系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    博主介紹: 《Vue.js入門與商城開發(fā)實(shí)戰(zhàn)》《微信小程序商城開發(fā)》圖書作者,CSDN博客專家,在線教育專家,CSDN鉆石講師;專注大學(xué)生畢業(yè)設(shè)計(jì)教育和輔導(dǎo)。 所有項(xiàng)目都配有從入門到精通的基礎(chǔ)知識(shí)視頻課程,免費(fèi) 項(xiàng)目配有對(duì)應(yīng)開發(fā)文檔、開題報(bào)告、任務(wù)書、PPT、論文模版

    2024年02月07日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包