2019年2月27日 星期三
150 元桌遊展
150 元桌遊展是由桌遊資深玩家 蔡惠強 以及 Smoox 召集主辦,這是第一屆舉辦,我非常榮幸能有機會參與這項活動,他們主辦這項活動,是希望鼓勵設計師們用自己的創意和執行力,把自己的遊戲構想用最經濟的成本把它具現化。即使沒有華麗的美術或是豪華的配件,也能讓玩家們有機會體驗到遊戲核心的樂趣。
誠摯邀請大家一起來,現場我將親自解說 4rdp 益智拼圖的故事,以及未來的發展,也歡迎各位回饋意見。
現場每一套展出的桌遊,全部訂價 150 元,入場需要買門票,
時間:3/3(日) 13:00-18:30
地點:布萊梅桌遊專賣店 (伊通街47號,捷運松江南京站)
門票:門票皆可在活動當天免費兌換遊戲
2019年2月23日 星期六
訓練數學感 204 ─ 正方形內的追逐
有兩隻甲蟲分別在正方形對角 A B 兩端,B 蟲追 A 蟲,A 蟲要躲避 B 蟲的追擊,兩者各自採取最佳策略行動,兩者的運動方向隨時可以改變,但是兩者的行動軌跡都不能超出正方形範圍,並且兩者速度都固定是 V,請問 B 蟲追得到 A 蟲嗎?
2019年2月19日 星期二
ROSA 系統開發 65 ─ MENU 選單
上一期 ROSA 開發處理了日期與時間,因為 Nokia 5110 LCD 可顯示 48 x 84 pixels,所以它可顯示 6 x 14 字元,因此弄一個功能選單,本文就此說明。
第一行顯示日期時間,第二行顯示選單標題以反黑標示,第三到第六行為選單內容,另外左邊保留一 > 符號,用來表示選擇某個選項。
#include "..\ROSA_DEFINE.h"
#if defined(DISPLAY_NONE)
#define ledPin 13 // 第13隻接腳控制 LED 明滅。
byte state = 0;
void ROSA_DISPLAY_SETUP() {
// put your setup code here, to run once:
pinMode(ledPin, OUTPUT);
}
void ROSA_DISPLAY_LOOP() {
state = 1 - state;
if (state==0)
digitalWrite(ledPin, LOW); // 設定PIN13腳位為低電位= 0V ,LED 熄滅
else
digitalWrite(ledPin, HIGH); // 設定PIN13腳位為高電位= 5V ,LED 發亮
}
void ROSA_DISPLAY_DATE() {
}
void ROSA_DISPLAY_TIME() {
}
#elif defined(DISPLAY_5110)
#include
#include
Adafruit_PCD8544 display = Adafruit_PCD8544(9, 10, 11, 13, 12);
char items[5];
char select;
void ROSA_DISPLAY_SETUP() {
// put your setup code here, to run once:
display.begin();
// init done
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(BLACK);
}
void ROSA_DISPLAY_LOOP() {
display.clearDisplay();
display.setCursor(0,0);
display.print(PRODUCT);
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.println(VERSION);
display.setTextColor(BLACK);
display.setCursor(0,30);
//display.display();
}
void ROSA_DISPLAY_DATE() {
char buf[5];
sprintf(buf, "2%03d.", year);
display.print(buf);
sprintf(buf, "%02d.", month);
display.print(buf);
sprintf(buf, "%02d", day);
display.println(buf);
display.display();
}
void ROSA_DISPLAY_TIME() {
char buf[3];
sprintf(buf, "%02d:", hour);
display.print(buf);
sprintf(buf, "%02d:", minute);
display.print(buf);
sprintf(buf, "%02d", second);
display.println(buf);
display.display();
}
void ROSA_DISPLAY_DATE_TIME(byte location) {
char buf[3];
if (location == 0) {
display.clearDisplay();
display.setCursor(0,0);
display.setTextColor(BLACK);
}
sprintf(buf, "%02d.", month);
display.print(buf);
sprintf(buf, "%02d ", day);
display.print(buf);
sprintf(buf, "%02d:", hour);
display.print(buf);
sprintf(buf, "%02d:", minute);
display.print(buf);
sprintf(buf, "%02d", second);
display.print(buf);
display.display();
}
#define ROSA_MENU(hd, it1, it2, it3, it4, sel) {items[0]=hd; items[1]=it1; items[2]=it2; items[3]=it3; items[4]=it4; select=sel;}
#define MENU_TEXT(ln) {for (byte i=0 ; i<12 ; i++){display.print((char) pgm_read_byte(&MENUTEXT[ln][i]));}}
void ROSA_DISPLAY_MENU() {
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.setCursor(0,8);
display.print(" ");
MENU_TEXT(items[0]);
display.setTextColor(BLACK);
display.setCursor(12,16);
MENU_TEXT(items[1]);
display.setCursor(12,24);
MENU_TEXT(items[2]);
display.setCursor(12,32);
MENU_TEXT(items[3]);
display.setCursor(12,40);
MENU_TEXT(items[4]);
display.setCursor(0,(select+1)*8);
display.print(">");
display.display();
}
#endif
2019年2月15日 星期五
訓練數學感 203 ─ 射龍門
據說射龍門的撲克牌玩法流行於香港,通常用於賭博。
莊家負責發牌,玩家會先拿到兩張牌,然後以第三張牌跟前兩張牌的點數比較來決定輸贏,如果第三張牌點數在前兩張之間,玩家贏,否則算輸。像在踢足球,把球踢進球柱之間才算贏,所以稱為「射龍門」。
點數排列,A, 2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K,分別代表 1 ~ 13,所有玩家先下注,例如每注最低金額為 10 元,大家在桌面中間押注當初始彩金,然後莊家發給所有玩家兩張牌,假設有十位玩家大家都押注十元,此時彩金總額為 100 元,第一位玩家拿到 4 和 10 兩張牌,他可以根據當時桌上彩金多寡喊注,假設他喊 60 元,莊家對他發出第三張牌,如果第三張牌是 5, 6, 7, 8, 9 中任一張,玩家贏,他可以拿走 60 元,如果號碼是 A, 2, 3, J, Q, K 在門柱之外,玩家輸,他要補入 60 元當彩金,若第三張號碼為 4, 10,表示撞柱也是輸,要賠入喊注加倍金額 120 元當彩金,後面的玩家根據當時桌面的金額繼續喊注,直到彩金清空。
如果兩張門柱牌是一樣時,要猜大小,比如兩張 5,玩家說猜大,只要第三張比 5 大就是贏,比 5 小就是輸,撞柱一樣雙倍罰金。
假設只有兩位玩家,每人都押注 10 元,然後喊注 20 元,請問第一位玩家的期望值是多少?
2019年2月11日 星期一
ROSA 系統開發 64 ─ 日期時間的顯示
ROSA 系統函式庫化,跟其它 Arduino 函式庫是有些差異的,因為一般的 Arduino 函式庫採取草稿碼 / 匯入程式庫 / 加入 ZIP 程式庫,然後 ino 主程式 #include <...> 就可以使用這些程式庫,而 ROSA 的函式庫是不匯入程式庫的,為什麼要這麼做?因為 ROSA 的函式庫跟其它函式庫不同在它會去含入外部定義的資料,這使得 ROSA 的函式庫必須跟主程式在同一目錄下。
這個新版程式的函式庫先設計兩個:ROSA_TIMER.cpp 及 ROSA_DISPLAY.cpp
顧名思義,TIMER 處理時間與日期,DISPLAY 處理顯示部分,
// (C) 2019, Bridan Wang, CC BY-NC-SA 3.0 TW
// This is a demo program applied Robot Operation System for Arduino
// http://4rdp.blogspot.tw/search/label/ROSA%20(Arduino)
//軟件許可協議
//
//研發養成所 Bridan Wang 提供此軟體供學校教育或個人單獨使用
//對外分享展示本軟體時,請說明來源來自研發養成所
//你可以架構在本軟體基礎上,設計新功能或修改
//本軟體屬於 Bridan 和或其它原始碼供應商,並受適用的法律版權保護
//此軟體按“原樣”提供,可能含有錯誤,不作任何明示,暗示或法律的保證
//本軟體僅限 Arduino 部分微控制器產品,適用於特定用途
// Bridan 在任何情況、環境以及特殊使用不負任何原因損害賠償責任
//
//這是 ROSA 韌體版本的一部分。
//
//建議使用 Arduino-1.8.8 以後版本編譯,因為有發現之前版本有錯誤情形
/***********************************************************
// Include
************************************************************/
#include "ROSA_DEFINE.h"
#include ".\ROSA\ROSA_TIMER.cpp"
#include ".\ROSA\ROSA_DISPLAY.cpp"
/***********************************************************
// Main Program
************************************************************/
void setup() {
ROSA_TIMER_SETUP();
ROSA_DISPLAY_SETUP();
}
void loop()
{
ROSA_TIMER_RUNNING();
}
/***********************************************************
// SYSTEM TIMER
************************************************************/
void TIMER_2ms()
{
}
void TIMER_10ms()
{
}
void TIMER_100ms()
{
}
void TIMER_1sec()
{
ROSA_DISPLAY_LOOP();
ROSA_DISPLAY_DATE();
ROSA_DISPLAY_TIME();
}
2019年2月7日 星期四
第二次使用 Funday 心得
以前求學時,不喜歡背誦,數理是我的強項,而英文一直是最弱的學科,在學習習慣方面,深受父親的影響,喜歡獨自自修,加上個性沉靜寡言,所以英文很難大幅進步。
文法的貫通是受旋元佑所著的「英文魔法師之文法俱樂部」啟蒙,讓我單字量穩定累積,屬 Lingvist APP 效果最好,而
2019年2月3日 星期日
ROSA 系統開發 63 ─ LCD 基本顯示測試
上一期介紹了 Nokia 5110 LCD 硬體,今天就驅動程式進一步介紹,這裡寫了一個基本顯示測試,下面是 ROSA_DISPLAYcpp 的內容:
#include "..\ROSA_DEFINE.h"
#if defined(DISPLAY_NONE)
#define ledPin 13 // 第13隻接腳控制 LED 明滅。
byte state = 0;
void ROSA_DISPLAY_SETUP() {
// put your setup code here, to run once:
pinMode(ledPin, OUTPUT);
}
void ROSA_DISPLAY_LOOP() {
state = 1 - state;
if (state==0)
digitalWrite(ledPin, LOW); // 設定PIN13腳位為低電位= 0V ,LED 熄滅
else
digitalWrite(ledPin, HIGH); // 設定PIN13腳位為高電位= 5V ,LED 發亮
}
#elif defined(DISPLAY_5110)
#include
#include
Adafruit_PCD8544 display = Adafruit_PCD8544(9, 10, 11, 13, 12);
void ROSA_DISPLAY_SETUP() {
// put your setup code here, to run once:
display.begin();
// init done
}
void ROSA_DISPLAY_LOOP() {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(BLACK);
display.setCursor(0,0);
display.println(PRODUCT);
display.setTextColor(WHITE, BLACK); // 'inverted' text
display.println(VERSION);
display.display();
}
#endif