基本情報

このページではIoTコンテンツ(遠心分離器)をベースにして、新しいコンテンツを「フォーク」できます。フォークしたコンテンツは、プロジェクトの一覧ページに新しい項目として表示されます。元の項目を上書きしたい場合は編集してください。

※写真URLは.jpg, .jpeg, .pngのいずれかで終わるもの、またはGyazoへアップロードされたページのURL(https://gyazo.com/hogehogeなど)に対応しています。

※IoTコンテンツの説明、エントリポイントに関する情報 main: index.js およびf3jsモジュールへの依存情報 dependencies: { f3js: (略) } は、この欄の内容とマージされるため記入不要です。

カードのプレビュー
遠心分離器
'16/9/5 1:41
ボタンを連打するゲームです
arc@dmz

プライベートコンテンツ

チェックを外すと、このコンテンツはすぐ一覧に公開され、誰でもアクセスできるようになります。 なるべくコンテンツを共有していただきたいので、チェックは初めから外れています。また、ログインしていない状態ではチェックをつけられません。 一度公開されたコンテンツは、プライベートにできません。(一度チェックを外すと、以降そのコンテンツを編集するときにはチェックをつけられなくなります。)

ソースコード

マイコン・小型コンピュータのプログラムのソースコードを記述してください。f3jsパッケージをrequireすることで筐体設計が可能です。詳しくはAPIドキュメントをご覧ください。

var grove =require("jsupm_grove"); var sensorModule = require('jsupm_ttp223'); var touch = new sensorModule.TTP223(3); var LCD = require("jsupm_i2clcd"); var lcd = new LCD.Jhd1313m1(6, 0x3E, 0x62); var shuffle = function() {return Math.random()-.5}; var t = [0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7]; t.sort(shuffle); var startTime; function startTimer(){ startTime = new Date(); } function getTime(){ var time = new Date(); return time-startTime; } function calc(){ var sum = 0; for(i = 0; i < 16; i++){ for(j = i+1; j < 16; j++){ if(t[i]>t[j]) sum++; } } return sum; } var d = calc(); var f3js = require('f3js') , c = f3js.createContainer() , x = 10 , y = 10 , width = 100 , height = 105 , thickness = 42 , jw = 7 , jh = 2; c.x = x; c.y = y; var p = c.jrc(0, 0, width, height, jw, jh); c.add(touch, { x: 80 + 0, y: 80 + 0 }); c.drawRectangle(15, 59, 10, 6); c.drawRectangle(45, 59, 10, 6); c.drawRectangle(75, 59, 10, 6); var ps = p.extrude(45); ps[0].x = width + 5; ps[0].y = jh; ps[1].x = width + 5; ps[1].y = (thickness + 5) * 2 + jh; ps[2].x = width + 5; ps[2].y = thickness + 5 + jh; ps[3].x = width + 5; ps[3].y = (thickness + 5) * 3 + jh; ps[4].x = 0; ps[4].y = height + 5; for (var i = 0; i < ps.length; i ++) { c.add(ps[i]); } ps[1].drawRectangle(jh + 5, thickness - jh - 5, height - jh*2 - 10, -10); function t2s(t){ var s = ''; for(i = 0; i < 16; i++){ s += t[i].toString(16); } return s; } function display(t){ lcd.setCursor(0, 0); lcd.write(t2s(t)); lcd.setCursor(1, 0); lcd.write(('0'+calc()).slice(-2)); } function arrange(t, b, x){ for(j = 0; j < Math.abs(b); j++){ var i = Math.floor(Math.random()*15); if((b>0 && t[i]>t[i+1]) || (b<0 && t[i]<t[i+1])){ var tt = t[i+1]; t[i+1] = t[i]; t[i] = tt; x--; if(x<=0) return; } } } function sorted(t){ for(i = 0; i < 15; i++){ if(t[i]>t[i+1]) return false; } return true; } var idleInterval = false; var prev = 0; function startIdle() { display(t); idleInterval = setInterval(function() { var curr = touch.value(); if(curr) curr = 1; else curr = 0; console.log(curr.toString()); if (prev == 0 && curr > 0) { console.log('touched'); console.log(t2s(t)); if(sorted(t)){ var time = getTime(); var score = Math.floor(d/time*10000); lcd.setCursor(1, 0); var scoreStr = 'SCORE: ' + score.toString(); console.log(scoreStr); lcd.write(scoreStr); clearInterval(idleInterval); idleInterval = false; return; } arrange(t, 10); } else { if(Math.random()<0.3) arrange(t, -1, 1); } display(t, 3); prev = curr; }, 100); } var interval = false, score; function stopGame() { if (interval) { clearInterval(interval); interval = false; } if (!idleInterval) { startIdle(); } } function startGame() { } startTimer(); startIdle(); process.on('SIGINT', function() { if (interval) { clearInterval(interval); } lcd.setColor(255, 255, 255); process.exit(0); });
カスタマイズ

このコンテンツにはカスタマイズできる項目がありません。

表示オプション
ソースコード中で変数宣言にコメントをつけるとカスタマイズ項目としてGUIウィジェットが表示されます。グレーアウトしているウィジェットはユーザが提案した項目で、ソースコード末尾の変数宣言に対応しています。

設計のダウンロード

モジュール

このプロジェクトは組み立てにモジュールを必要としません。

レイアウト
プログラム

ログインしないと使えない機能です。