Hatena::Groupuwsc

CX's UWSC Diary

Windows 自動化ツール「UWSC」を使って何が出来るかを探求する日記です。構文をマスターしたい方はこちらをどうぞ→UWSC 基礎文法最速マスター
こくばん.in」投稿サンプル
アインシュタイン マリオとクッパ 千円札(見本) 猫
eピアノ」「Google Moog」自動演奏サンプル
eピアノ Google Moog
はてなロクロ」投稿サンプル
マリオ テトリス デフォルトさん はてなロゴ 全自動マリオ 3Dプロッタ
はてなハイク」投稿サンプル
デフォルトさん カラーパレット カラーパレット マリオ ルイージ カラーパレット 日本地図

2008-02-27こくばん.in - アインシュタイン プロッタ

アインシュタイン プロッタ

| 04:47 |  アインシュタイン プロッタ - CX's UWSC Diary を含むブックマーク はてなブックマーク -  アインシュタイン プロッタ - CX's UWSC Diary

  • ソース

kokuban_e-mc2_plotter.uws [ダウンロード]

kokuban_e-mc2_plotter.bmp [ダウンロード]

// ---------------------------------------------------------
// File : kokuban_e-mc2_plotter.uws Ver0.01
// ---------------------------------------------------------
// 
// <使用上の注意>
// ・このスクリプトはWindows 自動化ソフト「UWSC」を使った「こくばん.in」自動化スクリプトです。
// ・以下の環境でのみスクリプトの動作確認済みです。
//   ・解像度:1280x1024, Windows XP(クラシックモード) + IE7(ウィンドウ最大化、ツールバー無し)。タスクバーは下に配置。
// ・中断する場合は [Alt] + [F2] です。動作中にウィンドウを切り替えないでください。誤動作します。
//
// <使用ツール>
// ■ UWSC Free版 Ver4.4
// http://www.uwsc.info/download.html
// 
// <スクリプトを作成した人>
// id:cx20
// 
// <変更履歴>
// 2008/02/27 Ver0.01 とりあえず版作成。

Option Explicit

Public g_winID_kokuban = 0

g_winID_kokuban = こくばんのウィンドウIDを取得()
Ifb g_winID_kokuban = -1 Then
    MsgBox( "こくばん.in が起動していない為、スクリプトを終了します。" )
    ExitExit
EndIf

// 「こくばん.in」ページをアクティブ化
ACW(g_winID_kokuban)

Public g_x = 314 // 描画開始位置(IE7 最大化時)
Public g_y = 310 // 描画開始位置
Public g_height = 778-g_y
Public g_width  = 944-g_x
Public g_r = 25  // 円の半径
Public g_pi = 3.14159265 // PI
Public g_wait = 5 // 実行までの待ち時間(ミリ秒)
//Public g_wait = 0 // 実行までの待ち時間(ミリ秒)

// 「ペイント」のウィンドウIDを取得
Public g_winID_mspaint = GETID("ペイント")
Ifb g_winID_mspaint = -1 Then
   MsgBox( "ペイントが起動していない為、スクリプトを終了します。" )
   ExitExit
EndIf

//黒板に何か描く
ペイントの内容を黒板に描く

Function こくばんのウィンドウIDを取得()
    Dim winID = 0

    // 「こくばん.in」のウィンドウIDを取得(IE6 版)
    winID = GETID("こくばん.in - Microsoft Internet Explorer","IEFrame")
    Ifb winID <> -1 Then
        Result = winID
        Exit
    EndIf
    
    // 「こくばん.in」のウィンドウIDを取得(IE7 版)
    winID = GETID("こくばん.in - Windows Internet Explorer","IEFrame")
    Ifb winID <> -1 Then
        Result = winID
        Exit
    EndIf

    // 「こくばん.in」のウィンドウIDを取得(Firefox 版)
    winID = GETID("こくばん.in - Mozilla Firefox","MozillaUIWindowClass")
    Ifb winID <> -1 Then
        Result = winID
        Exit
    EndIf

    Result = winID
Fend

Procedure ペイントの内容を黒板に描く()
    // 「ペイント」をアクティブ化
    ACW(g_winID_mspaint)

    Dim g_baseX = Status( g_winID_mspaint, ST_CLX ) + 61  // ツールボックスのサイズを考慮
    Dim g_baseY = Status( g_winID_mspaint, ST_CLY ) + 6   // ツールボックスのサイズを考慮
    Print "g_baseX = [" + g_baseX + "]"
    Print "g_baseY = [" + g_baseY + "]"
    
    Dim canvas_x = 65
    Dim canvas_y = 72
    Dim strCanvas[canvas_x][canvas_y]
    Dim x
    Dim y
    Dim pos_x
    Dim pos_y
    Dim color
    Dim strLine
    
    Dim nColorIndex
    // 画像データを配列にセット
    For y = 0 To canvas_y // 72
        strLine = ""
        For x = 0 To canvas_x // 65
            pos_x = g_baseX + x
            pos_y = g_baseY + y
            color = PEEKCOLOR( pos_x, pos_y )
            //Print "PEEKCOLOR( " + pos_x + ", " + pos_y + " ) = [" + color + "]"
            Select color
                Case $000000
                    strCanvas[x][y] = "0"
                Case $404040
                    strCanvas[x][y] = "1"
                Case $808080
                    strCanvas[x][y] = "2"
                Case $C0C0C0
                    strCanvas[x][y] = "3"
                Case $FFFFFF
                    strCanvas[x][y] = "4"
                Default
                    strCanvas[x][y] = "9"
            Selend
            
            strLine = strLine + strCanvas[x][y]
            
        Next
        Print strLine
    Next
    
    Dim nCount
    
    Dim nLarge
    nLarge = 7 // 1 dot = 7 pixel
    Dim nDepth

    // 画像データを配列にセット
    For y = 0 To ( canvas_y - 1 )
        For x = 0 To ( canvas_x -1 )
            pos_x = g_x + x * nLarge + Int(Random(3)) + 85 // センタリング
            pos_y = g_y + y * nLarge + Int(Random(3))
            nDepth = Int(strCanvas[x][y])
            Print "指定回数ドットを描く( [" + x + "], [" + y + "], [" + nDepth + "])"
            Ifb nDepth <> 0 Then
                指定回数ドットを描く( pos_x, pos_y, nDepth )
            EndIf
        Next
    Next
Fend

Procedure 黒板に何か描く()
    Dim x
    Dim y
    Dim pos_x
    Dim pos_y
    Dim max_x
    Dim max_y
    max_x = 90
    max_y = 66

    Dim nLarge
    nLarge = 7 // 1 dot = 7 pixel
    Dim nColor
    Dim nDepth
    For y = 0 To max_y - 1 Step 5
        For x = 0 To max_x -1 Step 5
            pos_x = g_x + x * nLarge
            pos_y = g_y + y * nLarge
            nColor = Int(Random(6))
            チョークを色番号で選択( nColor )
            nDepth = Int(Random(5)+1)
            指定回数ドットを描く( pos_x, pos_y, nDepth )
        Next
    Next
Fend


Procedure 指定回数ドットを描く( x, y, nCount )
    Dim i
    For i = 1 To nCount
        BTN(LEFT,CLICK, x, y, g_wait)
    Next
Fend

Procedure チョークを選択( dotChar )
    Dim nColor
    nColor = 色番号を取得( dotChar )
    チョークを色番号で選択( nColor )
Fend

Procedure チョークを色番号で選択( nColor )
    Dim x
    Dim y
    Dim nSpace
    x = 342 // 白チョーク位置(暫定)
    y = 801 // 白チョーク位置(暫定)
    nSpace = 81 // チョークの位置の間隔
    BTN(LEFT, DOWN, x + nSpace * nColor, y, g_wait)
    BTN(LEFT, UP,   x + nSpace * nColor, y, g_wait)
Fend

Function 色番号を取得( dotChar )
    Public HashTbl colorTable
    // 色名→色番号変換
    colorTable["無"] = -1 // 透明
    colorTable["白"] = 0  // 白
    colorTable["赤"] = 1  // 赤
    colorTable["青"] = 2  // 青
    colorTable["緑"] = 3  // 緑
    colorTable["黄"] = 4  // 黄色
    colorTable["茶"] = 5  // 茶色

    Result = colorTable[dotChar]
Fend