2019年2月27日 星期三

150 元桌遊展

https://4rdp.blogspot.com/2019/02/150.html?m=0


150 元桌遊展是由桌遊資深玩家 蔡惠強 以及 Smoox 召集主辦,這是第一屆舉辦,我非常榮幸能有機會參與這項活動,他們主辦這項活動,是希望鼓勵設計師們用自己的創意和執行力,把自己的遊戲構想用最經濟的成本把它具現化。即使沒有華麗的美術或是豪華的配件,也能讓玩家們有機會體驗到遊戲核心的樂趣。

誠摯邀請大家一起來,現場我將親自解說 4rdp 益智拼圖的故事,以及未來的發展,也歡迎各位回饋意見。

現場每一套展出的桌遊,全部訂價 150 元,入場需要買門票,

時間:3/3(日) 13:00-18:30
地點:布萊梅桌遊專賣店 (伊通街47號,捷運松江南京站)

門票:門票皆可在活動當天免費兌換遊戲

2019年2月23日 星期六

訓練數學感 204 ─ 正方形內的追逐

https://4rdp.blogspot.com/2019/02/204.html?m=0

有兩隻甲蟲分別在正方形對角 A B 兩端,B 蟲追 A 蟲,A 蟲要躲避 B 蟲的追擊,兩者各自採取最佳策略行動,兩者的運動方向隨時可以改變,但是兩者的行動軌跡都不能超出正方形範圍,並且兩者速度都固定是 V,請問 B 蟲追得到 A 蟲嗎?

2019年2月19日 星期二

ROSA 系統開發 65 ─ MENU 選單

https://4rdp.blogspot.com/2019/02/rosa-65-menu.html?m=0


上一期 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 ─ 射龍門

https://4rdp.blogspot.com/2019/02/203.html?m=0

據說射龍門的撲克牌玩法流行於香港,通常用於賭博。

莊家負責發牌,玩家會先拿到兩張牌,然後以第三張牌跟前兩張牌的點數比較來決定輸贏,如果第三張牌點數在前兩張之間,玩家贏,否則算輸。像在踢足球,把球踢進球柱之間才算贏,所以稱為「射龍門」。

點數排列,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 ─ 日期時間的顯示

https://4rdp.blogspot.com/2019/02/rosa-64.html?m=0


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 心得

https://4rdp.blogspot.com/2019/02/funday.html?m=0

兩年前曾經短期使用 Funday 過,後來閒暇時間放在創客與桌遊製作方面,就沒再繼續,去年底 Funday 的業務再次跟我接洽,正好現在工作內容也有轉變,工作上有更多使用英文的需求,所以重拾學習的動力。

以前求學時,不喜歡背誦,數理是我的強項,而英文一直是最弱的學科,在學習習慣方面,深受父親的影響,喜歡獨自自修,加上個性沉靜寡言,所以英文很難大幅進步。

文法的貫通是受旋元佑所著的「英文魔法師之文法俱樂部」啟蒙,讓我單字量穩定累積,屬 Lingvist APP 效果最好,而

2019年2月3日 星期日

ROSA 系統開發 63 ─ LCD 基本顯示測試

https://4rdp.blogspot.com/2019/02/rosa-63-lcd.html?m=0

上一期介紹了 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