用ncurses寫六行情詩(一)

2021-10-09 09:42:05 字數 1818 閱讀 6347

三、分析

總結

i love three things in this world

sun,moon and you

sun for morning

moon for night

and you

forever

這六行詩出自義大利詩人william michael rossetti 的life of john keats,寫於2023年。以下是我最喜歡的中文翻譯:

浮世三千,吾愛有三。

日,月與卿。

日為朝,月為暮,

卿為朝朝暮暮。

我這次要做的就是用c語言將這六行詩「優美」地展現在螢幕上,程式猿的生活中也是要有浪漫的。當然,原先簡陋的控制台視窗是沒法滿足我的。這時就要請出今天的主角了——ncurses,它為我們在這種簡單視窗上「優美」地排布文字提供了極大的便利。

以ubuntu為例,可以用如下命令安裝sudo apt-get install libncurses5-dev。由於ncurses是linux獨有的,所以window下不能直接安裝使用,不過可以用pdcurses替代。詳情可以參考這篇文章

另外,在使用gcc命令編譯**時,要記得加上-lncurses,例如:

gcc test.c -o test -lncurses
安裝的事不再贅述,趕快進入正題。

#include

//因為涉及到了處理字串

#include

//因為用到了usleep

#include

//因為主角

char

*poem=

;

視窗的初始化

initscr()

;//初始化螢幕

raw();

//禁止行緩衝

noecho()

;//禁止輸入的字元出現在螢幕上

curs_set(0

);//不顯示游標

相關變數的初始化

int width=80;

//視窗寬度

int hight=24;

//視窗高度

int x=

0,y=

0,i=0;

//x,y用來確定字元列印的座標,i用來遍歷六行詩

while(1

)

特點:精簡。前後總共也就30多行的**,非常精簡地實現了比較「優美」地在視窗上列印六**詩的效果。

效果:大概就是自上而下地一行行地居中列印情詩,列印完整首詩會清屏,然後打完整個窗體最後一行後,會從第一行重新開始。想知道完整的效果不妨自己試試。

問題:這是我的初個版本,而且又這麼簡短,所以問題還是有不少。

1.窗體的大小必須是80*24(預設的)才能正常列印,新的改進需要能適應不同尺寸的窗體。

2.用%模運算輔助遍歷的方式,不利於**的除錯和閱讀(雖然很精簡和巧妙)。

3.不夠「優美」。追求美的過程能使人們進步,所以再「優美」也不為過。還有很多其他的列印方式可以嘗試,比如像電影謝幕時的滾動字幕或者彈幕之類的。ncurses的潛能遠遠還沒有被挖掘出來。

我了解到ncurses再嵌入式中運用的很多,用起來相對簡單,所以值得好好研究一番。這次寫情詩只是一次簡單的嘗試,用起來還是挺順手的,之後我還會有改進的版本。期待能玩出更多的花樣吧。

用yaml寫用例

第一步 安裝yaml,在執行裡輸入 pip install pyyaml 檢驗是否安裝成功,在pycharm裡輸入 import yaml 第二步 建立乙個file,字尾寫yaml或yml 在yml檔案裡寫入單個使用者名稱和密碼 開啟yml檔案並以字典的形式列印出來 執行結果 在yml檔案裡寫入多個...

48 用《六人行》的調調說話!

rachel 想要模仿 rachel 你得有能耐在心煩的時候高開低走的說話 以尖銳的嗓音開頭,以絮絮叨叨 自言自語結尾 而且 寶貝 甜心 之類的還要常掛嘴邊。monica 像monica 那樣說話,只需在主句後加上 不是嗎?管它有沒必要。而且要變得神經質一些,哪怕講好話也得惡形惡狀。被人表揚後,逢人...

用VC寫執行緒

handle hworkthread hworkthread createthread null,0,lpthread start routine startworkthread,執行緒入口函式 info,傳遞引數給執行緒入口函式 0,null 其中startworkthread為執行緒主函式,其必...