//=============================================================================
//
// GkEmblemMaker.js JAVAScript Emblem Maker エンブレムメーカー
// Programmed by G.K.2018
//
//=============================================================================
//変数の宣言===================================================================
var canvas; //キャンバスオブジェクト
var ctx; //描画コンテキスト
var winWidth = 500; //CANVASの横幅
var winHeight = 600; //CANVASの高さ
var selectStep = 0; //選択項目のステップ数
var selectValue = new Array(); //選択値の配列
var mesStr = new Array(); //表示メッセージ
var cx = 0; //クリック(タッチ)位置X
var cy = 0; //クリック(タッチ)位置Y
var bton = 0; //タッチしたボタンの番号
//関数の宣言========================================================================
//クリック(タップ)時のイベント----------------------
function onDown(e) {
var rect = e.target.getBoundingClientRect();
cx = parseInt(e.clientX - rect.left);
cy = parseInt(e.clientY - rect.top);
if(bton == 0) {
checkButtonOn();
}
draw();
}
//タップ時のイベント----------------------
function onDown2(e) {
e.preventDefault();
var rect = e.target.getBoundingClientRect();
var touchObject = e.changedTouches[0];
cx = parseInt(touchObject.clientX - rect.left);
cy = parseInt(touchObject.clientY - rect.top);
if(bton == 0) {
checkButtonOn();
}
draw();
}
//初期化処理-------------------------------------------
function init() {
//描画コンテキストの取得
canvas = document.getElementById("mainCanvas");
if ( ! canvas || ! canvas.getContext ) { return false; }
ctx = canvas.getContext('2d');
//イベントの追加
canvas.addEventListener('mousedown', onDown, false);
canvas.addEventListener('touchstart', onDown2, false);
selectStep = 0;
//選択値の初期化
for(var i=0; i<11; i++) {
selectValue[i] = -1;
}
}
//背景を描画------------------------------------------
function draw() {
ctx.clearRect(0, 0, 500, 600); //画面のクリア
draw_Emblem();
draw_Menu();
//メッセージの表示
set_MessageStr();
ctx.fillStyle = "rgb(0, 0, 0)";
ctx.font = "20px 'MS Pゴシック'"; //表示フォントの設定
ctx.fillText(mesStr[0], 10, 20);
ctx.fillText(mesStr[1], 30, 50);
ctx.fillText(mesStr[2], 30, 75);
bton = 0;
}
//最初に実行------------------------------------------
function main(){
init();
draw();
}
//表示メッセージをセットする--------------------------
function set_MessageStr() {
mesStr[0] = "";
mesStr[1] = "";
mesStr[2] = "";
switch(selectStep) {
case 0:
mesStr[0] = "[はじめましょう]";
mesStr[1] = "画面をタップすると選択項目が出てくるので、";
mesStr[2] = "お好きな色や形を選んでください。";
break;
case 1:
mesStr[0] = "[ステップ 01/10]";
mesStr[1] = "背景色を選んでください。(左上4分の1)";
break;
case 2:
mesStr[0] = "[ステップ 02/10]";
mesStr[1] = "背景色を選んでください。(右上4分の1)";
break;
case 3:
mesStr[0] = "[ステップ 03/10]";
mesStr[1] = "背景色を選んでください。(左下4分の1)";
break;
case 4:
mesStr[0] = "[ステップ 04/10]";
mesStr[1] = "背景色を選んでください。(右下4分の1)";
break;
case 5:
mesStr[0] = "[ステップ 05/10]";
mesStr[1] = "中央円の大きさを選んでください。";
break;
case 6:
mesStr[0] = "[ステップ 06/10]";
mesStr[1] = "中央円の色を選んでください。";
break;
case 7:
mesStr[0] = "[ステップ 07/10]";
mesStr[1] = "四角形の位置を選んでください。";
break;
case 8:
mesStr[0] = "[ステップ 08/10]";
mesStr[1] = "四角形の色を選んでください。";
break;
case 9:
mesStr[0] = "[ステップ 09/10]";
mesStr[1] = "小円の位置を選んでください。";
break;
case 10:
mesStr[0] = "[ステップ 10/10]";
mesStr[1] = "小円の色を選んでください。";
break;
case 11:
mesStr[1] = "完成!!!!";
break;
}
//mesStr[2] = " " + cx + "," + cy + "," + bton; //debug
}
//エンブレムを条件に従って描画する--------------------
function draw_Emblem() {
var xpos = 0;
var ypos = 0;
ctx.globalAlpha = 1;
//[STEP 01] 背景-左上
if(selectValue[1] > -1) {
set_Color(selectValue[1]);
ctx.fillRect(0, 100, 250, 250);
}
//[STEP 02] 背景-右上
if(selectValue[2] > -1) {
set_Color(selectValue[2]);
ctx.fillRect(250, 100, 250, 250);
}
//[STEP 03] 背景-左下
if(selectValue[3] > -1) {
set_Color(selectValue[3]);
ctx.fillRect(0, 350, 250, 250);
}
//[STEP 04] 背景-右下
if(selectValue[4] > -1) {
set_Color(selectValue[4]);
ctx.fillRect(250, 350, 250, 250);
}
//[STEP 05、06] 中央円
if(selectValue[5] > -1) {
var radius = 200;
if(selectValue[5] == 0 || selectValue[5] == 1 || selectValue[5] == 2) { radius = 270; }
if(selectValue[5] == 3 || selectValue[5] == 4 || selectValue[5] == 5) { radius = 180; }
if(selectValue[5] == 6 || selectValue[5] == 7 || selectValue[5] == 8) { radius = 90; }
ctx.beginPath();
ctx.arc(250, 350, radius, 0, Math.PI*2, true);
if(selectValue[6] == -1) {
//線のみ
ctx.stroke();
}
else
{
//塗りつぶしあり
set_Color(selectValue[6]);
ctx.fill() ;
}
}
//[STEP 07、08] 四角形
if(selectValue[7] > -1) {
if(selectValue[7] == 0 || selectValue[7] == 3 || selectValue[7] == 6) { xpos = 0; }
if(selectValue[7] == 1 || selectValue[7] == 4 || selectValue[7] == 7) { xpos = 166; }
if(selectValue[7] == 2 || selectValue[7] == 5 || selectValue[7] == 8) { xpos = 332; }
if(selectValue[8] == -1) {
//線のみ
ctx.strokeStyle = "rgb(0, 0, 0)";
ctx.strokeRect(xpos, 100, 166, 500);
}
else
{
//塗りつぶしあり
set_Color(selectValue[8]);
ctx.fillRect(xpos, 100, 166, 500);
}
}
//[STEP 09、10] 小丸
if(selectValue[9] > -1) {
switch(selectValue[9])
{
case 0: xpos = 83; ypos = 83; break;
case 1: xpos = 250; ypos = 83; break;
case 2: xpos = 417; ypos = 83; break;
case 3: xpos = 83; ypos = 250; break;
case 4: xpos = 250; ypos = 250; break;
case 5: xpos = 417; ypos = 250; break;
case 6: xpos = 83; ypos = 417; break;
case 7: xpos = 250; ypos = 417; break;
case 8: xpos = 417; ypos = 417; break;
}
ctx.beginPath();
ctx.arc(xpos, ypos+100, 80, 0, Math.PI*2, true);
if(selectValue[10] == -1) {
//線のみ
ctx.stroke();
}
else
{
//塗りつぶしあり
set_Color(selectValue[10]);
ctx.fill() ;
}
}
//外枠の描画
set_Color(0);
ctx.fillRect(0, 0, 500, 100);
ctx.globalAlpha = 1.0;
ctx.strokeStyle = "rgb(0, 0, 0)";
ctx.strokeRect(0, 100, 500, 500);
}
//メニューを表示する---------------------------------
function draw_Menu() {
if(selectStep > 10) {
return;
}
ctx.globalAlpha = 0.8;
ctx.fillStyle = "rgb(255, 255, 255)";
ctx.fillRect(100, 200, 300, 300);
ctx.strokeStyle = "rgb(0, 0, 0)";
ctx.strokeRect(100, 200, 300, 300); //外枠の描画
switch(selectStep) {
case 0:
ctx.fillStyle = "rgb(0, 0, 0)";
ctx.font = "22px 'MS Pゴシック'"; //表示フォントの設定
ctx.fillText("タッチしてください。", 170, 350);
break;
//色メニュー
case 1:
case 2:
case 3:
case 4:
case 6:
case 8:
case 10:
set_Color(0);
ctx.fillRect(100, 200, 100, 100);
set_Color(1);
ctx.fillRect(200, 200, 100, 100);
set_Color(2);
ctx.fillRect(300, 200, 100, 100);
set_Color(3);
ctx.fillRect(100, 300, 100, 100);
set_Color(4);
ctx.fillRect(200, 300, 100, 100);
set_Color(5);
ctx.fillRect(300, 300, 100, 100);
set_Color(6);
ctx.fillRect(100, 400, 100, 100);
set_Color(7);
ctx.fillRect(200, 400, 100, 100);
set_Color(8);
ctx.fillRect(300, 400, 100, 100);
break;
//大きさメニュー大中小
case 5:
ctx.strokeRect(100, 200, 300, 100);
ctx.strokeRect(100, 300, 300, 100);
ctx.strokeRect(100, 400, 300, 100);
ctx.fillStyle = "rgb(0, 0, 0)";
ctx.font = "36px 'MS Pゴシック'"; //表示フォントの設定
ctx.fillText("大", 232, 232+25);
ctx.fillText("中", 232, 332+25);
ctx.fillText("小", 232, 432+25);
break;
//位置メニュー左中右
case 7:
ctx.strokeRect(100, 200, 100, 300);
ctx.strokeRect(200, 200, 100, 300);
ctx.strokeRect(300, 200, 100, 300);
ctx.fillStyle = "rgb(0, 0, 0)";
ctx.font = "36px 'MS Pゴシック'"; //表示フォントの設定
ctx.fillText("左", 132, 332+25);
ctx.fillText("中", 232, 332+25);
ctx.fillText("右", 332, 332+25);
break;
//位置メニュー9か所
case 9:
for (var i=0; i<3; i++) {
for (var j=0; j<3; j++) {
ctx.strokeRect(100 + j*100, 200 + i*100, 100, 100);
}
}
ctx.fillStyle = "rgb(0, 0, 0)";
ctx.font = "18px 'MS Pゴシック'"; //表示フォントの設定
ctx.fillText("左上", 132, 232+25);
ctx.fillText(" 上 ", 232, 232+25);
ctx.fillText("右上", 332, 232+25);
ctx.fillText(" 左 ", 132, 332+25);
ctx.fillText("中央", 232, 332+25);
ctx.fillText(" 右 ", 332, 332+25);
ctx.fillText("左下", 132, 432+25);
ctx.fillText(" 下 ", 232, 432+25);
ctx.fillText("右下", 332, 432+25);
break;
}
ctx.fillStyle = "rgb(255, 255, 255)";
ctx.globalAlpha = 1.0;
}
//色をセットする--------------------------------------
function set_Color(num) {
switch(num) {
case 0:
ctx.fillStyle = "rgb(255, 255, 255)";
break;
case 1:
ctx.fillStyle = "rgb(128, 128, 128)";
break;
case 2:
ctx.fillStyle = "rgb(0, 0, 0)";
break;
case 3:
ctx.fillStyle = "rgb(255, 0, 0)";
break;
case 4:
ctx.fillStyle = "rgb(0, 255, 0)";
break;
case 5:
ctx.fillStyle = "rgb(0, 0, 255)";
break;
case 6:
ctx.fillStyle = "rgb(255, 255, 0)";
break;
case 7:
ctx.fillStyle = "rgb(0, 255, 255)";
break;
case 8:
ctx.fillStyle = "rgb(255, 0, 255)";
break;
}
}
//メニューを押しているかを調べる-----------------------
function checkButtonOn() {
bton = 0;
//メニュー内のタッチチェック
if(cx > 100 && cx < 400 && cy > 200 && cy < 500) {
bton = parseInt((cx - 100) / 100) + parseInt((cy - 200) / 100) * 3;
selectValue[selectStep] = bton;
//選択ステップを進める
if(selectStep < 11) {
selectStep ++;
}
}
}
//ウィンドウを閉じる----------------------------------
function MM_closeFloatWindow(theURL) {
window.close(this);
}
|