Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import QtQuick 1.1
- import QtWebKit 1.0
- Rectangle {
- id: root
- width: 500
- height: 500
- WebView {
- id: webView
- anchors.fill: parent
- url: "http://gdd-2011-quiz-japan.appspot.com/webgame/problem"
- // カードの枚数
- property int length: -1
- // カードの色の配列
- property variant cards: []
- onLoadFinished: {
- // ログインとかの処理が終わって以下の url が表示されたら全ての色を調べるモードへ移行
- if (url == "http://gdd-2011-quiz-japan.appspot.com/webgame/problem") {
- webView.length = -1;
- webView.cards = new Array();
- state = "check";
- }
- }
- Timer {
- repeat: true
- running: true
- interval: 1000 * 60 * 60
- onTriggered: {
- // たまにネットワークやタイミングの問題などで止まるので
- // 定期的にリセット
- webView.reload.trigger();
- }
- }
- Timer {
- id: checkTimer
- repeat: true
- interval: 100
- onTriggered: {
- // 全ての色をチェック
- if (webView.length == -1) {
- // カードの数を取得
- webView.length = webView.evaluateJavaScript('document.getElementsByTagName("td").length');
- }
- // 全ての色を取得していなかったら
- if (webView.cards.length < webView.length) {
- var index = webView.cards.length;
- for (var i = 0; i < 2; i++) {
- // 2枚めくる
- var js = 'conc.flip(' + (index + i) + ');';
- webView.evaluateJavaScript(js);
- }
- for (var i = 0; i < 2; i++) {
- // カードの CSS から色を取得
- var js = 'document.getElementById("card' + (index + i) + '").style.cssText;';
- var cssText = webView.evaluateJavaScript(js);
- if (cssText.match(/^background\-color: rgb\([0-9]+, [0-9]+, [0-9]+\);/)) {
- var cards = webView.cards;
- // 実際は色の部分だけではなく CSS 全体を保存してたり
- cards.push(cssText);
- webView.cards = cards;
- } else {
- console.debug("doesn't match", cssText);
- }
- }
- } else {
- // 全ての色の取得が終わっていたら問題を解くモードへ移行
- webView.state = "solve"
- }
- }
- }
- Timer {
- id: solveTimer
- repeat: true
- interval: 100
- onTriggered: {
- // 全てのカードを調べて
- for (var i = 0; i < webView.length; i++) {
- var js = 'document.getElementById("card' + i + '").style.cssText';
- // カードの色がなかったら
- if(webView.evaluateJavaScript(js) == "") {
- // ひっくり返す
- js = 'conc.flip(' + i + ');';
- webView.evaluateJavaScript(js);
- // i 番目と同じ色のカードを探す
- for (var j = i + 1; j < webView.length; j++) {
- if (webView.cards[i] == webView.cards[j]) {
- // 見つけたらひっくり返す
- js = 'conc.flip(' + j + ');';
- webView.evaluateJavaScript(js);
- // 他にカードの色がないのがないかチェック(超手抜き!)
- for (var k = i; k < webView.length; k++) {
- var js = 'document.getElementById("card' + k + '").style.cssText';
- if(webView.evaluateJavaScript(js) == "") {
- // あったら続行
- return;
- }
- }
- // なかったら解決したモードへ
- webView.state = "solved";
- }
- }
- }
- }
- }
- }
- Timer {
- id: solvedTimer
- repeat: false
- interval: 15000
- onTriggered: {
- // 次の問題の準備が整うまで 15 秒くらい待ってからスタート
- webView.length = -1;
- webView.cards = new Array();
- webView.state = "check"
- }
- }
- onStateChanged: console.debug("state", state)
- states: [
- State {
- name: "check"
- PropertyChanges {
- target: checkTimer
- running: true
- }
- },
- State {
- name: "solve"
- PropertyChanges {
- target: solveTimer
- running: true
- }
- },
- State {
- name: "solved"
- PropertyChanges {
- target: solvedTimer
- running: true
- }
- }
- ]
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement