日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

LogoSharp:Logo语言的C#实现

發布時間:2023/12/4 C# 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LogoSharp:Logo语言的C#实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上周在朋友中問了一圈,發現沒有幾個人知道Logo語言的,或許,這門古老的語言現在用的人已經非常少了,除了國外有少量的用戶將Logo語言用于教育外,估計國內不會有人使用這門語言。其實,Logo語言本來也就是以編程教育為目的的一門寓教于樂的編程語言,因此,對于小朋友學計算機編程還是有些幫助的,使用Logo控制小海龜在屏幕上畫出各種美妙的圖案,可以讓小朋友對編程產生濃厚的興趣。

在90年代我剛剛接觸電腦的時候,當時國內比較流行的就是各種品牌的學習機,比較有名的有中華學習機、小霸王學習機、裕興電腦等。其中有些學習卡中就自帶LOGO繪圖語言,比如,裕興電腦的早期學習卡帶中就帶有LOGO語言:

在LOGO語言中,使用一些非常簡單的命令,就能夠繪制出非常漂亮的圖案。比如,執行以下指令:

這段指令的意思是,讓小海龜向前爬行100步,然后向右旋轉144度,以此重復5次,就畫出了一顆五角星。有關LOGO語言的詳細介紹,可以參考百度百科相關介紹。

出于興趣以及對童年的回憶,我使用C#語言,基于Irony語法解析器生成框架,實現了LOGO語言的語法解析和執行系統:LogoSharp。于是,我可以在自己的應用程序中使用LogoSharp來實現LOGO程序的執行,并控制海龜實現圖形繪制:

LogoSharp基于MIT協議開源,地址是:https://github.com/daxnet/logo-sharp。我也將其封裝成NuGet包,可以在.NET Framework以及.NET Core下直接使用。首先,將LogoSharp NuGet包添加到自己的項目中,注意,目前是Preview的版本,所以,如果使用Visual Studio中的NuGet界面,需要勾選Include prerelease的復選框。如果使用Package Manager Console,那只要敲入命令就行了:

1

Install-Package LogoSharp -Version 0.9.20-preview

然后,在你的應用程序中使用LogoSharp:

1

2

3

4

5

6

7

static void Main(string[] args)

{

????var logo = new Logo();

????logo.Forward += (s, e)

????????=> Console.WriteLine($"Forwarded {e.Steps} steps.");

????logo.Execute("FD 102");

}

LogoSharp開發框架本身是基于事件的,也就是,只要有控制小海龜動作的指令被執行,就會產生一個對應的事件,比如上面的代碼中,執行FD 102指令時,就會產生一個Forward事件,表示此時需要讓小海龜向前走102步,在這個演示代碼中,Forward事件處理函數就會將前進步數輸出到控制臺。

在LogoSharp的源代碼中,有一個測試程序,就是上面動圖所演示的這個程序,它是一個Windows Forms的應用程序,它就是訂閱了LogoSharp產生的事件,然后控制小海龜的運動,并通過GDI+在指定的窗體上繪制圖形。

目前,LogoSharp支持以下功能:

語言特性

  • 變量的定義與使用

    • MAKE指令

    • 局部變量與全局變量

  • 表達式

    • 一元表達式(Unary Expression)

    • 二元表達式(Binary Expression)

    • 常量表達式(Constant Expression)

    • 函數調用表達式(Function Call Expression)

  • 過程(TO … END程序結構)

  • 函數調用

    • 平方根函數(SQRT)

    • 隨機函數(RANDOM)

  • 內聯注釋行,使用分號(;)作為注釋起始符

基本行為控制命令

  • PENDOWN/PD:下筆,此時移動海龜,會進行線段繪制

  • PENUP/PU:提筆,此時移動海龜,不會進行繪制

  • SETPENCOLOR/SETPC/PC:設置線條的顏色

  • SETPENSIZE:設置線條的粗細

  • PENERASE/PE:設置下筆行為為擦除行為

  • PENNORMAL/PN:設置下筆行為為繪制行為

基本繪制命令

  • LEFT/LT:向左旋轉

  • RIGHT/RT:向右旋轉

  • FORWARD/FD:向前步進

  • BACKWARD/BK/BACK:向后倒退

  • DELAY:海龜行為間隔延遲,單位:毫秒

  • DRAW/CLS/CLEARSCR/CLEARSCREEN/CS:清除屏幕內容

海龜控制命令

  • HOME:海龜歸位到屏幕中心

  • SHOWTURTLE/ST:將海龜顯示在屏幕上

  • HIDETURTLE/HT:將海龜隱藏起來

流程控制命令

  • REPEAT:重復執行,支持RepCount內部參數,用于指代當前的迭代數

目前LogoSharp還有很多可以完善的地方:

  • IF/WHILE語句暫不支持,但很快會支持

  • 目前不支持一條語句分行編寫,造成的結果是,有可能一條語句會寫得很長

  • 除了上面列表中的命令,其它命令暫不支持,不過今后也會陸續加入

  • 不支持布爾值和布爾表達式以及邏輯操作

  • 內置函數調用需要用花括號括起來,比如:{SQRT 2}。主要是因為函數調用本身是表達式,而其參數列表也是表達式,那么,如果不用括號這樣的界定符括起來,語法上就會出現二義性。比如:hello world 2,你可以說hello是調用函數的函數名,它有兩個參數:world和2,也可以說hello是一個沒有參數的函數調用,而world是另一個函數,它的參數為2

此外,今后也會加入更多的內建函數,并使得函數擴展更為方便。

LogoSharp是一個非常有趣的項目,今后我會進一步做一些擴展,比如豐富函數庫以及提供更好的編程環境等。后續我也會介紹一些有關Irony語法解析器生成框架的內容,以及LogoSharp實現中遇到的一些有趣的問題及其解決辦法。

原文地址:https://sunnycoding.cn/2019/07/09/logo-sharp-csharp-implementation/


.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總?http://www.csharpkit.com?

總結

以上是生活随笔為你收集整理的LogoSharp:Logo语言的C#实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。