跳到主要內容

發表文章

目前顯示的是有「Sample」標籤的文章

TextBox如何顯示行號

用C#來開發工具有很高的生產力,不過有些功能還是需要自己實作或是要找其它資源作整合。例如TextBox元件就沒有像許多文字編輯器都有的顯示文件行號的功能,這個功能需要自己想辨法。要作到顯示行號,有幾種方法,而下面要介紹的是一個較簡單的實現方法。 基本概念是這樣: 在TextBox左邊加一個Panel元件,在Panel上根據目前TextBox的位置顯示行號在其上 每當TextBox內容變更(OnTextChanged)或垂直捲軸發生滾動(OnVScroll)時重畫Panel 想法很簡單,實作也同樣不難。 在Form放上一個Panel元件,屬性設置如下: (Name) = panel1 BorderStyle = None Dock = Left 接著放上一個RichTextBox元件,,屬性設置如下: (Name) = textBox1 BorderStyle = None Dock = Fill WordWrap = False 完成後如下圖所示。 接下來是加上事件的處理。 在TextBox上加上TextChanged和VScroll二個事件處理函式。 private void textBox1_TextChanged(object sender, EventArgs e) {   panel1.Invalidate(); } private void textBox1_VScroll(object sender, EventArgs e) {   panel1.Invalidate(); } 當文字內容變更或發生捲動時,重畫在Panel上的行號,反應目前的狀態。 接下來加上Panel的Paint事件處理,在這裡面把行號顯示出來。這部份的處理主要分幾個部份。 計算可見範圍的行號,這樣作是避免作多虛功,只畫需要畫的部份 建立一個Off Screen Graphics,先畫在這個緩衝區上,然後再一次貼上畫面,這樣作是為了避免畫面更新如果不夠快的話會造成閃爍 底下是部份程式碼。 private void panel1_Paint(object sender, PaintEventArgs e) {   // ...

單人撲克牌遊戲 - 蒙地卡羅

新增一個簡單的單人撲克牌遊戲: 蒙地卡羅 ,簡單介紹一下玩法。 下載 事先排列好5x5張牌。 每次移動一張可以配對的牌,並消除這對牌。在上下、左右及斜向相隣的二張牌,只要擁有同樣數字(不計花色),即可配對。 消除二張配對的牌後,剩餘的牌以往左往上的方式補滿空隙,接著在發新牌補滿後面的空格。 重覆步驟2~3,直到沒有牌可以配對及發完所有牌為止。 結果有二種。一個是勝利,成功的消除掉所有牌。另一個是Gameover沒有牌可以再作配對。

踩地雷

新增一個簡單的範例:踩地雷。 下載

good基礎教學

這篇文章要來一步步製作一個彈跳球的範例,完成後相信對good會有一個基本的認識。 ; 1, 首先打開good編輯器,這時專案是空白的,按下Ctrl+S將空白專案儲存為bounceball.txt。 2, 接著在工具列上點擊NewTexture或選單Project->NewTexture加入用來作為彈跳球的face.png。 會使用png格式的圖檔的目的是,因為我們這張圖會用到鏤空效果,png格式可以帶alpha,我們可以很容易利用png的alpha來作alpha鏤空。 * 所有會使用到的圖形,我們都需要以加入貼圖的方式事先加入到good專案內才能夠使用。 3, 再用同樣的方式加入一張準備用來作為背景的圖形lace_0103.gif。 到此先按Ctrl+S存檔。(隨時存檔是個需要養成的好習慣) 4, 接下來在工具列上點擊NewSprite或選單Project->NewSprite加入一個精靈。一般在遊戲中,在畫面上會動的人物怪物等等我們把它叫作精靈(Sprite)物件,以我們要製作的範例來說,我們現在要建立一個表示彈跳球的精靈。 我們前面共加入了二張圖,要用來作為彈跳球的圖是tex1,這個名稱我們也可以在加入圖形時自己命名。這張圖的大小是107x107,所以我們在TileWidth/Height上填入了107和107,表示要使用整張圖。同時我們在name欄位自己填入了ball這個名字,當然也可以像加入圖形時保留空白,讓編輯器為我們自動加上名字。 完成後要加入一個空白的精靈,我們需要加入影格才能在畫面上顯示東西。因為我們已經事先設定好要使用整個圖形的大小,所以可以看到在右下角的貼圖檢視區上選取了整張的圖(透明紅色),接著按下貼圖上方的新增影格鈕加入影格。這樣就完成了精靈的設定,再按下Ctrl+S存檔。 5, 接下來在工具列上點擊NewLevel或選單Project->NewLevel新增一個空白關卡,準備來建立我們的遊戲場景。 good的關卡是我們實際執行遊戲時會呈現在畫面上的東西,我們可以建立很多不同的關卡,但同一時間只會有一個正在執行。我們可以在關卡上擺放各種物件,像是背景地圖或精靈等等,這些物件在關卡執行時都會顯示在畫面上。 首先我們加入一個背景圖,在關卡編輯器上方的工具列點擊NewTextureBg選擇tex2也就是我們事先加入的背景貼圖,完成...

Stge基礎教學

這篇文章作為stge script的入門教學,會告訴你如何撰寫stge script來描述簡單的彈幕效果並整合到good裡,透過good的顯示功能呈現到畫面上。要補充說明的是,雖然stge script最初是為了射擊遊戲而設計的,但因為它也有基本足夠的彈性,所以也能夠作為粒子效果來應用。 ; 1, 首先打開good Game Editor,按下Ctrl+S儲存空白專案,命名為StgeTest1.txt。 2, 接著在工具列上點擊新增空白關卡(New Level),或點擊選單Project->New Level...加入空白關卡。 3, 在新關卡(level1)的屬性檢視器上的ClearColor,開啟顏色選擇對話盒並設定成黑色。 4, 在工具列上點擊新增空白腳本(New Script),或點擊選單Project->New Script...加入空白腳本,檔案名稱填StgeTest1.lua。 5, 在資源樹上點擊level1回到空白關卡1的屬性檢視器,在Script欄位上填入Level。 6, 按下Ctrl+S儲存檔案。 現在已建立基本的資源,接下來全部使用script來建立我們要的功能。首先撰寫一些good script作出基本框架。 Level= {} Level.OnCreate = function(param)   Stge.RunScript('StgeTest1') end Level.OnNewParticle = function(param, particle)   local obj = Good.GenObj(-1, -1)   Good.SetDim(obj, 0,0, 3, 3)   Good.SetBgColor(obj, 0xffff0000)   Stge.BindParticle(particle, obj) end Level.OnKillParticle = function(param, particle)   Good.KillObj(Stge.GetParticleBind(particle)) end 如上,我們有個叫作Level的table,並加入了三個空白的function,這三個function是...

good sample list

在一邊開發good編輯器及核心功能的時候,也同時會製作使用到對應功能的小專案來作測試。目前總共有8個範例,有的是很小的測試程式,也有的是具體而微的小遊戲,下面作個整理及簡單介紹。 weeder 鋤草機 這是最早作的範例,因為 鋤草機 這個小遊戲感覺起來最單純,所以就拿它作為一個標的,以把它用good實作出來為目標來開發good相關功能。一開始只編輯了一個關卡,後來花了點時間,將原作裡12個關卡全部編輯出來,作成完整版。 zelda 薩爾達 這是最早開發good的起因,為了重製薩爾達作為練習。一開始重點放在地圖編輯器上,也花了不少時間編輯世界地圖。整合了 Lua 後,再加上一小段程式碼,讓林克可以在地圖上走動。不過和最終的目標還相差太遠,只能在地圖上走走路,作些簡單的碰撞,只好等有機會再繼續未完成的工作。 mmc 魔法寶石方塊 為了驗證good也能製作出這種類型的遊戲,花了幾天時間編輯實作這個小遊戲的雛型出來,效果還不錯。 texture 貼圖物件 加上這個功能後,才能以更簡單的方法製作拼圖遊戲。沒有這個功能,也能作出拼圖這樣的遊戲,只不過是需要使用較曲折麻煩的方法作到。 color 色塊物件 有了色塊物件後,就不必以填貼圖的方式來填色,省圖又方便。 stge 粒子系統 很早就規劃打算要整合stge模組。雖然stge本來是專門設計來製作彈幕射擊遊戲,但因為它本身的設計就是一個以粒子為核心的系統,所以不一定只能被用來製作射擊遊戲,也能夠作為一般用途的粒子系統。目前還不算100%整合完成,但已經可以拿來作應用。等到更完整的整合完成後,就能用good來重製 25940p 。 puzzle 拼圖 在貼圖物件功能加入後,就能很簡單的製作出這類型的應用。 mario 瑪莉歐 這是拿來作gameplay練習的小品,實際上寫的不是很好,細節部份還有許多加強的空間。