2011年4月28日 星期四

在 LÖVE 加入場景(Stage)的概念

前言

製作遊戲時,往往會需要許多 Stage,針對不同的主題設計,在必要的時候才呈現適合的 Stage,在 Flash 裡面亦同。而在 LÖVE 裡面,要加入 Stage 也是非常簡單的事情。

 

範例檔案下載

stages.love

 

操作說明

滑鼠滾輪下:下一個 stage

滑鼠滾輪上:上一個 stage

 

Screenshot

SNAGHTML3f92ba6

SNAGHTML3f959b8

SNAGHTML3f97302

 

程式碼(都在範例檔案內)

main.lua

 
require("lua/stages.lua")
 
function love.load()
    stage = 1
    stages = {
        [1] = Stage1.create(),
        [2] = Stage2.create(),
        [3] = Stage3.create()
    }
end
 
function love.draw()
    love.graphics.print("Stage: " .. stage, 0, 0)
    love.graphics.print("Mousewheel: change stage.", 0, 15)
    
    stages[stage]:draw()
end
 
function love.mousepressed(x, y, button)
    if button == "wd" then
        stage = stage + 1
        if stage > 3 then stage = 3 end
    end
    
    if button == "wu" then
        stage = stage - 1
        if stage < 1 then stage = 1 end
    end
end

 

lua/stages.lua

Stage1 = {}
Stage1.__index = Stage1
 
function Stage1.create()
    local stage = {}
    setmetatable(stage, Stage1)
    return stage
end
 
function Stage1:draw()
    love.graphics.setBackgroundColor(255, 0, 0)
    love.graphics.print("This is the stage1.", 100, 100)
end
 
Stage2 = {}
Stage2.__index = Stage2
 
function Stage2.create()
    local stage = {}
    setmetatable(stage, Stage2)
    return stage
end
 
function Stage2:draw()
    love.graphics.setBackgroundColor(0, 255, 0)
    love.graphics.print("This is the stage2.", 200, 200)
end
 
Stage3 = {}
Stage3.__index = Stage3
 
function Stage3.create()
    local stage = {}
    setmetatable(stage, Stage3)
    return stage
end
 
function Stage3:draw()
    love.graphics.setBackgroundColor(0, 0, 255)
    love.graphics.print("This is the stage3.", 300, 300)
end

2011年4月26日 星期二

遊戲「貪食蛇(snake)」發佈

前言

為熟悉 Lua / LÖVE,寫了一款古早的遊戲貪食蛇,除畫面是古早遊戲的水準以外,在操作上也盡量仿造過去。

 

安裝環境

在下載遊戲前,請先安裝 LÖVE 環境,關於安裝方式,可以參考

Lua 2D 遊戲引擎 LÖVE 入門

 

遊戲下載

snake.love

 

執行方式

若環境安裝已完成,點擊兩下 snake.love 即可。

 

操作方式

鍵盤

方向鍵:上、下、左、右

暫停鍵:p

重新開始:Enter

 

遊戲畫面
SNAGHTML4e7795

 

版本修訂紀錄

  • 2011-04-26 22:16:修正 PTT hirabbitt 板友表示移動有時快時慢的問題。
  • 2011-04-27 01:27:美化 snake body。
  • 2011-04-27 11:08:修正 point 剛好落在 snake body 造成的死機。

Lua 2D 遊戲引擎 LÖVE 入門

簡介

LÖVE 是一款 2D 的遊戲引擎,用 Lua 來進行遊戲的開發。除了跨足 Windows、Linux、Mac OS X 三種平台外,在授權上還是完全免費的,甚至可以用在商業上。

 

如果你還不知道 Lua...

相信透過 wiki 簡單的說明,可以最快速正確的認識 Lua

 

如果你知道 Lua,卻沒有下手寫過...

這份 Lua 簡體中文手冊,可以帶你快速上手 Lua

 

無論如何,本文的重點並非在於 Lua ,因此我們快速進入正文

 

安裝 LÖVE 環境

來到官網 LÖVE 點選 Installer 32-bit 下載安裝檔
image

 

下載完成後,進行安裝,安裝方式與一般軟體無異,只要一直下一步即可
SNAGHTML3ccb761

 

完成安裝後,設置環境變數(視安裝路徑決定3號紅框內的路徑),便完成了安裝
SNAGHTML3d1fa4e

 

第一個 LÖVE 程式 – Hello World!

不免俗的,來一個 Hello World 確認安裝無誤,但在這之前要談一談 LÖVE 的檔案系統架構,要執行 LÖVE 程式有兩種方法:

  1. 在某資料夾內,放入檔名為 main.lua 的檔案,再利用 love 指令執行「資料夾」。
  2. 建立一個空的 zip 檔案,放入檔名為 main.lua 的檔案,將 zip 檔案的副檔名改為 .love,再利用 love 指令執行該檔案。

PS:以上兩種方法,main.lua 都得在第一層目錄下。

 

以開發方便為前提,我們先選第一種方法來進行

 

隨意建個資料夾(這個例子中叫 demo),再建立一個檔名為 main.lua 的空檔案
image

 

用習慣的編輯器打開 main.lua 貼上底下的程式碼並存檔


main.lua

function love.draw()
    love.graphics.print('Hello World!', 400, 300)
end

 

利用 love 指令執行 demo 資料夾
image 


執行成功,便會跑出底下的畫面
SNAGHTML3e298f1


上述資料部分是從底下官方 wiki 連結整理出來的,更詳細的資料可以直接造訪
http://love2d.org/wiki/Main_Page

2011年4月21日 星期四

用 Tcl 實作發送 Snmptrap 訊息

大綱

三年前因工作需求,用純 Tcl 實作發送 snmptrap 的程式,在這紀錄一下使用方式以及備份。

 

建議可以先閱讀

 

下載程式碼與 snmptrap 接收器

 

開始進行

打開 tkcon,進行檔案的 source
 SNAGHTML5439ab4

 

打開接收器

解壓縮 snmptrap.zip 後
image

 

將 decode 內容顯示出來
SNAGHTML5521c13

SNAGHTML552417e

 

發送訊息

利用 send_trap procedure,發送成對的 OID 與 Value (這個例子發送了兩組 OID 與 Value)
SNAGHTML54bd4e6

 

從接收器這邊便可以看到確實有收到訊息
SNAGHTML54b7569

 

還可以試試

  • 用 Tcl 撰寫 snmptrapd (snmptrap的接收器)

透過 Facebook API,讓你的 Facebook Application 發佈動態消息

目的

是讓發佈動態消息可程式化,可依自己撰寫的應用邏輯,來決定何時發佈消息。

 

建議可以先閱讀

 

假設已經準備好了...

  1. 已經在 http://www.facebook.com/developers/ 建立了新的應用程式。 (在這例子上,我的應用程式叫 bmfriend_testapp)
  2. 準備了可執行 php 的 Web Server 環境。(在這例子上,我的 Web Server Domain Name 是 bmcool.no-ip.org)

 

 

開始進行

取得 fb_ca_chain_bundle.crt 以及 facebook.php

下載 facebook-php-sdk
image

 

下載最新版本(我抓到的是 facebook-php-sdk-v2.1.2-6-g04168d5.zip)
image

 

解壓縮至此
image
 

 

在src資料夾找到 fb_ca_chain_bundle.crt 以及 facebook.php
image

 

下載 demo 檔案與建置

下載 index.php ,在 Web Server 上建個資料夾(在這例子上,我的資料夾名稱是 facebook),將 fb_ca_chain_bundle.crtfacebook.php 以及 index.php 置入此資料夾
image

 

在 Facebook 上,編輯 Facebook Application 的設定

打開 Facebook Application Setting 頁面(我的 Application ID 是 204672162899646)

http://www.facebook.com/developers/apps.php?app_id=204672162899646

按下編輯設定(正常情況下,請保護好應用程式密鑰,不要讓自己以外的人知道)
image

 

點擊 Web Site
image

 

記下黃色螢光標示的部分,一個是你的 Application ID,一個是 Application Secret(正常情況下,請保護好應用程式密鑰,不要讓自己以外的人知道);而 Site URL 填入放置 fb_ca_chain_bundle.crtfacebook.php 以及 index.php 的位址並按下儲存
image

 

編輯 index.php 檔案,讓它與 Facebook Application 連結起來

打開 index.php,將底下紅框部分,改為應用程式的 Application ID 與 Application Secret
image

 

將底下紅框部分,改為應用程式的 Application ID 以及 Site URL
image 
image

 

開始使用建置好的 Facebook Application

來到 http://bmcool.no-ip.org/facebook/ 按下其中一個按鈕(我選了上面的)
image

 

登入
SNAGHTML3918ab4

 

按下同意
SNAGHTML3925294

 

跳轉回 http://bmcool.no-ip.org/facebook/ 此時已是登入狀態,此時輸入想發送的訊息以及按下送出
image

 

回到登入帳號的 facebook 主頁,便會發現發送成功!下方會標示是由申請的 Application 所發送的
image

 

 

還可以試試

  1. 將所有發送的訊息,依日期集中在同一個主題之下。(comments)
  2. 將訊息廣播給所有的朋友。(read_stream)
  3. 每天定時發送訊息給所有登入過 Facebook Application 的網友。

 

參考連結

2011年4月19日 星期二

ActionScript3.0 - 自製守塔遊戲

這是一兩年前,我剛接觸ActionScript3.0,出給自己的作業,但未完成就停止開發了,除那時工作較繁忙之外,有蠻大的原因是因為發現了現成的Flash game engine - Push Button Engine。本想用PBE重新改寫,但研究PBE需要花上更多的時間,因此便停止了開發。

點擊右方紅點開始設置塔。

下載原始檔

2011年4月18日 星期一

Facebook API概念

Facebook API的概念大致描述如下:

  1. 只有在Facebook上建立(註冊)過的Facebook Application可以使用Facebook API。
  2. 所謂Facebook Application,指的是「外部Web Server上的CGI程式」加上「Facebook Application ID與Application Secret」的資訊。
  3. 在Facebook上建立(註冊)Facebook Application,便可獲得一組「Facebook Application ID與Application Secret」。

以上