Arduino製作俄羅斯方塊小遊戲(一)整體設計思路

emmm,雖然標題是Arduino,但我其實用的不是Arduino,是chipKIT。爲什麼標題叫Arduino呢,因爲玩Arduino的小白多啊。
你看,這就叫標題黨【Doge】

雖然我的確不是用的Arduino,但我的確用的是Arduino的IDE編譯的啊。單片機芯片是chipKIT,開發板是老師做的,我拿來寫個俄羅斯方塊,順便水一個大作業。所以說想複製粘貼直接白嫖的朋友,對不起啦。

話雖如此,既然用Arduino的IDE,好多關鍵字也是跟Arduino一樣的,所以只要會C語言,應該就可以看懂了(雖然我大部分跟單片機相關的部分都是用位操作實現的)
而且有一說一,俄羅斯方塊也不是什麼很難寫的東西,大致看看思路就好,具體的代碼還是要自力更生的。
PS:第二篇和單片機沒有什麼關係,如果只想看遊戲設計思路的,可以直接移步第二篇

第一部分先說一下思路吧。其實就是把一個C語言寫的俄羅斯方塊放在單片機上去實現。這裏我是分成了三部分去設計。分別是硬件部分,單片機部分,遊戲部分。

硬件部分就是線路啦。我用了一個chipKIT的開發板,一塊160*80的LCD屏幕擴展板,以及四個遊戲按鍵。四個按鍵連接到四個引腳上,輸入一側配置了下拉電阻,另一側連接3v。按鍵不按時IO口爲低電平,按下後IO口爲高電平。然後以這些IO口的電平變化作爲外部中斷的觸發源。因爲LCD屏幕佔用的一些IO口,中斷不太夠用,所以下的按鍵沒有用中斷,其他三個中斷均配置爲上升沿出發。

當時自己畫的一個簡單的線路圖,如果單片機有下拉電阻可直接用單片機的,Vcc注意選3v不要選5v:

好久沒用過洞洞板,及其醜陋的佈局和失敗的走錫和飛線…唉
在這裏插入圖片描述
在這裏插入圖片描述然後是單片機部分,這一部分主要就是LCD的通信問題(用Arduino的同學可以直接pass了,有現成的庫U8glib,不過效果怎麼樣我就不知道了,可能畫面會卡頓?還是建議不要用庫自己寫一下試試,挺鍛鍊能力的)以及中斷的配置。這也是我第一次直接通過操作寄存器而非用現成的庫函數來實現相應的功能,不得不說,自己去看芯片的說明手冊,然後自己嘗試去實現,還是十分有成就感的。
這一部分我就不講解了,因爲我用的單片機和你們用的大概率不是一款,有興趣的朋友可以移步源碼的鏈接自己看一下。這裏大概介紹一下某寫遊戲部分用到的函數的功能,以供參考:

//設置前景色的RGB值
void gui_set_frontColor(unsigned char fv_red, unsigned char fv_grn, unsigned char fv_blu);

/*這兩個函數用於橫屏時顯示字符,光標位置爲字符的左上角,字符大小高12寬8*/
void lcd_putChar2(unsigned char fv_char);
void gui_put_str2(char *str_ptr, unsigned char str_len);

//繪製遊戲的框架
void DrawFrame();

//繪製類型爲form,形狀爲shape,基點座標爲(x,y)的俄羅斯方塊
void DrawTetris(u8 x, u8 y, u8 form, u8 shape);

//清除類型爲form,形狀爲shape,基點座標爲(x,y)的俄羅斯方塊
void ClearTetris(u8 x, u8 y, u8 form, u8 shape);

然後是遊戲部分了,這一部分放到下一篇說吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章