SlideShare uma empresa Scribd logo
1 de 95
Baixar para ler offline
IntroductiontoProgramming
with
JavaScript
JavaScriptから始める
プログラミング2016
京都大学工学部情報学科
計算機科学コース3回
KMC2回 drafear
第2回
IntroductiontoProgramming
withJavaScript 自己紹介
• id
- drafear(どらふぃあ, どらふぁー)
• 所属
- 京都大学 工学部 情報学科 計算機科学コース 3回
• 趣味
- ゲーム(特にパズルゲー), ボドゲ, ボカロ, twitter
• 参加プロジェクト
- これ, 競プロ, ctf, 終焉のC++, coq, 組み合わせ最適化読書会
※青: 新入生プロジェクト
@drafear
2@drafear_ku @drafear_carryok @drafear_evolve @drafear_sl @gekimon_1d1a @cuigames
IntroductiontoProgramming
withJavaScript
• 学部学科
• id (入部してたら) or 名前
• 趣味
• 京大付近の好きな飲食店(あれば)
自己紹介
1. KMC 2回生
2. 新入生
3. KMC 3回生
4. KMC 4回生
5. KMC n回生
3
IntroductiontoProgramming
withJavaScript この講座で使用するブラウザとエディタ
• Google Chrome
- https://chrome.google.com
• Atom
- https://atom.io/
4
IntroductiontoProgramming
withJavaScript てんぷれ
• 以下から雛形をダウンロードしてください
- https://github.com/kmc-jp/js2016
5
IntroductiontoProgramming
withJavaScript 今日の目標
• HTML, CSS の違いを理解する
• CSSをいじってデザインしてみる
• じゃんけんを作る
6
IntroductiontoProgramming
withJavaScript 本日の内容
• HTML
- div要素 と span要素 の違い
• CSS
- テキストの装飾
- ボックス
- ホバー, アニメーション
• JavaScript
- 数学関数(特に乱数)
- 論理値
- if ~ else 文
- return の挙動
7
IntroductiontoProgramming
withJavaScript 注意
• 新しいことがたくさん出てきますが
全部覚える必要はありません
• こんなのあったなーくらいでおkです
• 必要になれば調べれば良いので
• 重要な項目は、やってるうちに覚えます
8
IntroductiontoProgramming
withJavaScript 復習
• 第1回のスライドを見て復習していきます
9
IntroductiontoProgramming
withJavaScript 復習問題
• ボタンをクリックすると Hello! と表示する
HTML, JavaScriptを書いて下さい
10
IntroductiontoProgramming
withJavaScript
<button id="btn">Click Me!!</button>
<span id="text"></span>
index.html
復習問題
• ボタンをクリックすると Hello! と表示するプログラムを
書いて下さい
11
document.getElementById("btn").addEventListener("click", (e) => {
document.getElementById("text").textContent = "Hello!!";
});
main.js
IntroductiontoProgramming
withJavaScript Mathオブジェクト (数学関数)
• Math.max(a, b)
- a と b の大きい方を返します
• Math.min(a, b)
- a と b の小さい方を返します
12
main.js
console.log( Math.max(2, 10) ); // 10
console.log( Math.min(2, 10) ); // 2
IntroductiontoProgramming
withJavaScript Mathオブジェクト (数学関数)
• Math.floor(x)
- xを切り捨てた値を返します
• Math.ceil(x)
- xを切り上げた値を返します
• Math.round(x)
- xを四捨五入した値を返します
13
main.js
console.log( Math.floor(3.5) ); // 3
console.log( Math.ceil(3.5) ); // 4
console.log( Math.round(3.5) ); // 4
console.log( Math.round(3.49) ); // 3
console.log( Math.floor(-3.5) ); // -4
IntroductiontoProgramming
withJavaScript Mathオブジェクト (数学関数)
• Math.pow(x, y)
- xy を返します
• Math.sqrt(x)
- x を返します
• Math.sin(x)
- sin(x) を返します
- xはラジアン単位です
• Math.abs(x)
- |x| を返します
• Math.PI
- π = 3.14159… (定数)
14
IntroductiontoProgramming
withJavaScript
main.js
Mathオブジェクト (数学関数)
• Math.random()
- 0以上1未満の乱数(ランダムな数)を返します
15
console.log( Math.random() );
console.log( Math.random() );
console.log( Math.random() );
console.log( Math.random() );
console.log( Math.random() );
IntroductiontoProgramming
withJavaScript
main.js
整数値の乱数
• 0 から n-1 までの乱数を生成します
16
let randN = (n) => {
return Math.floor( Math.random()*n );
}; > randN(10)
0
> randN(10)
4
> randN(10)
7
動作例
IntroductiontoProgramming
withJavaScript 演習
1. Math.round を使わずに四捨五入する関数 round を
作って下さい
- let round = (x) => { … }
- 𝑥 ≥ 0 と仮定して良い
2. 1~6の乱数を生成する関数 diceRoll を作って下さい
- let diceRoll = () => { … }
3. 三角形の3辺の長さから面積を計算する関数 S を
作って下さい
- let S = (a, b, c) => { … }
17
IntroductiontoProgramming
withJavaScript
main.js
演習
1. Math.round を使わずに四捨五入する関数 round を
作って下さい
- 0.5 足して切り捨て
18
let round = (x) => {
return Math.floor(x + 0.5);
};
IntroductiontoProgramming
withJavaScript 演習
2. 1~6の乱数を生成する関数 diceRoll を作って下さい
- randN(6) + 1
19
main.js
let diceRoll = () => {
// return randN(6) + 1;
return Math.floor( Math.random()*6 ) + 1;
};
IntroductiontoProgramming
withJavaScript 演習
3. 三角形の3辺の長さから面積を計算する関数 S を
作って下さい
- ヘロンの公式
 𝑆 = 𝑠 𝑠 − 𝑎 𝑠 − 𝑏 𝑠 − 𝑐 , 𝑠 =
𝑎+𝑏+𝑐
2
20
main.js
let S = (a, b, c) => {
let s = (a + b + c) / 2;
return Math.sqrt(s * (s - a) * (s - b) * (s - c));
};
IntroductiontoProgramming
withJavaScript 論理値
• 論理値には 真(true) と 偽(false) の2種類があります
21
main.js
let flag = true;
console.log(flag); // true
IntroductiontoProgramming
withJavaScript 比較演算子
• a < b
- a が b より小さいとき true
- そうでないとき false
• a > b
- a が b より大きいとき true
- そうでないとき false
22
main.js
let a = 10;
let b = 5;
console.log(a < b); // false
console.log(a > b); // true
console.log(a < a); // false
IntroductiontoProgramming
withJavaScript 比較演算子
• a <= b
- a が b 以下のとき true
- そうでないとき false
• a >= b
- a が b 以上のとき true
- そうでないとき false
23
main.js
let a = 10;
let b = 5;
console.log(a <= b); // false
console.log(a >= b); // true
console.log(a <= a); // true
IntroductiontoProgramming
withJavaScript 比較演算子
• a === b
- a と b が等しいとき true
- そうでないとき false
• a !== b
- a と b が等しくないとき true
- そうでないとき false
24
main.js
let a = 10;
let b = 5;
console.log(a === b); // false
console.log(a !== b); // true
console.log(a === a); // true
IntroductiontoProgramming
withJavaScript
main.js
if 文
• if (論理値) { 処理 }
- 論理値 が true のとき 処理 を行います
25
let a = 10;
let b = 5;
if (a > b) {
console.log("a > b");
}
IntroductiontoProgramming
withJavaScript if ~ else 文
• if (論理値) { 処理1 } else { 処理2 }
- 論理値 が true のとき 処理1 を行います
- 論理値 が false のとき処理2 を行います
26
main.js
let a = 10;
let b = 5;
if (a > b) {
console.log("a > b");
}
else {
console.log("a <= b");
}
IntroductiontoProgramming
withJavaScript if ~ else if ~ else 文
• { 処理 } の命令が1つのとき { 処理 } の { } を省略でき
とくに, if が続くときに省略します
27
main.js
let a = 10;
let b = 5;
if (a === b) {
console.log("a === b");
}
else if (a < b) {
console.log("a < b");
}
else {
console.log("a > b");
}
IntroductiontoProgramming
withJavaScript
main.js
論理演算子
• && 演算子
- and をとります
- true && true のときはtrue, それ以外のときはfalse
• || 演算子
- or をとります
- false || false のときはfalse, それ以外のときはtrue
28
let a = 10;
let b = 5;
let flagAnd = a !== 10 && b >= 0; // 𝑎 ≠ 10 かつ 𝑏 ≥ 0
let flagOr = a !== 10 || b >= 0; // 𝑎 ≠ 10 または 𝑏 ≥ 0
console.log(flagAnd); // false
console.log(flagOr); // true
IntroductiontoProgramming
withJavaScript
main.js
論理否定演算子
• !a
- aが true のとき false
- aが false のとき true
29
let flag = true;
flag = !flag;
console.log(flag); // false
IntroductiontoProgramming
withJavaScript return
• returnを実行するとそこで関数は終了します
30
main.js
let func = () => {
console.log(1);
return;
console.log(2);
return;
};
func(); // 1のみ出力される
IntroductiontoProgramming
withJavaScript 演習
1. Math.max(a, b) を使わずに a と b の大きい方を返す関数
max を作って下さい
- let max = (a, b) => { … }
2. 実行すると, 50%の確率で ”表” , 50%の確率で ”裏”
とコンソールに出力される関数 flip を作って下さい
- let flip = () => { … }
31
IntroductiontoProgramming
withJavaScript
main.js (別解)
演習
1. Math.max(a, b) を使わずに a と b の大きい方を返す関数
max を作って下さい
32
main.js
let max = (a, b) => {
if (a > b) return a;
return b;
};
let max = (a, b) => {
return a + b - Math.min(a, b);
};
IntroductiontoProgramming
withJavaScript 演習
2. 実行すると, 50%の確率で ”表” , 50%の確率で ”裏”
とコンソールに出力される関数 flip を作って下さい
33
main.js
let flip = () => {
if ( Math.random() < 0.5 ) {
console.log(“表”);
}
else {
console.log(“裏”);
}
};
IntroductiontoProgramming
withJavaScript CSS
• 次は, CSS を学んでいきます
• CSSは骨組みのHTMLにデザインしていくものです
• Atomの画面を3分割しましょう (右クリック → Split hoge)
34
IntroductiontoProgramming
withJavaScript CSS
• CSSでどんなことができるの?
- http://www.nxworld.net/tips/css-only-button-design-and-hover-
effects.html
- http://www.nemuchan.com/css3/wk_base04.html
- http://coliss.com/articles/build-websites/operation/css/css3-form-
styling-cheat-sheet.html
35
IntroductiontoProgramming
withJavaScript
index.html
class属性
• CSSを適用するためにまずclass属性を設定します
- 雛形の「内容」の部分だけいじっていきます
36
<span class="class1">text</span>
IntroductiontoProgramming
withJavaScript
style.css
text装飾
• style.css に次のように記述します
37
.class1 {
color: red;
font-weight: bold;
font-size: 40px;
text-decoration: underline;
}
index.html
<span class="class1">text</span>
IntroductiontoProgramming
withJavaScript text装飾
• 文法
- .クラス名 { プロパティ名1: 値1; プロパティ名2: 値2; }
• プロパティ (順不同)
- color: red
色を指定します
rgb(180, 220, 180) や #aabbcc でRGB指A定できます
- font-weight: bold
太字にします
- font-size: 40px
文字の大きさを指定します. 単位はここではpxで指定します(他の単位は割愛).
- text-decoration: underline
下線を引きます
38
IntroductiontoProgramming
withJavaScript 複数のクラス指定
• 1つの要素に複数のクラスを指定できます
39
index.html
<span class="red underline">text</span>
style.css
.red {
color: red;
}
.underline {
text-decoration: underline;
}
IntroductiontoProgramming
withJavaScript 演習
• 次のような表示をするものを作って下さい
40
IntroductiontoProgramming
withJavaScript 演習
41
index.html
<span class="red">Hell</span><span class="green">o, </span><span class="blue">World!!</span>
style.css
.red {
color: red;
}
.green {
color: green;
}
.blue {
color: blue;
}
IntroductiontoProgramming
withJavaScript JavaScriptでclassをいじる
• elem.classList.add("className")
- 要素にクラス [className] を追加する
• elem.classList.remove("className")
- 要素からクラス [className] を削除する
• elem.classList.toggle("className")
- 要素がクラス [className] を持っていれば remove
持っていなければ add
42
IntroductiontoProgramming
withJavaScript JavaScriptでclassをいじる
• elem.classList.contains("className")
- 要素がクラス [className] を持っていたら true, なければ false
• elem.className = "";
- 要素のクラスをクリアする
43
IntroductiontoProgramming
withJavaScript JavaScriptでclassをいじる
44
index.html
<div id="text">hogehoge</div>
<button id="btnRed">赤</button>
<button id="btnGreen">緑</button>
<button id="btnBlue">青</button>
style.css
.red {
color: red;
}
.green {
color: green;
}
.blue {
color: blue;
}
IntroductiontoProgramming
withJavaScript JavaScriptでclassをいじる
45
main.js
let prevClass = null;
let changeClass = (c) => { // change class to c
let target = document.getElementById("text");
if (prevClass !== null) {
target.classList.remove(prevClass);
}
target.classList.add(c);
prevClass = c;
};
document.getElementById("btnRed").addEventListener("click", (e) => {
changeClass("red");
});
document.getElementById("btnGreen").addEventListener("click", (e) => {
changeClass("green");
});
document.getElementById("btnBlue").addEventListener("click", (e) => {
changeClass("blue");
});
IntroductiontoProgramming
withJavaScript display: none;
• cssのプロパティ display に none を指定すると…
- その要素が非表示になる
46
<div>elem1</div>
<div class="hide">elem2</div>
<div>elem3</div>
index.html
.hide {
display: none;
}
style.css
IntroductiontoProgramming
withJavaScript 演習
• タイトル<h2>~</h2>をクリックすると内容<div>~</div>の
表示非表示が切り替わるようにしてみよう
- index.html も適宜編集して下さい
47
<h2>タイトル</h2>
<div>内容</div>
index.html
IntroductiontoProgramming
withJavaScript 演習
• タイトル<h2>~</h2>をクリックすると内容<div>~</div>の
表示非表示が切り替わるようにしてみよう
48
<h2 id="title">タイトル</h2>
<div id="content">内容</div>
index.html
document.getElementById("title").addEventListener("click", (e) => {
document.getElementById("content").classList.toggle("hide");
});
main.js
.hide {
display: none;
}
style.css
IntroductiontoProgramming
withJavaScript 演習 (別解)
• タイトル<h2>~</h2>をクリックすると内容<div>~</div>の
表示非表示が切り替わるようにしてみよう
49
<h2 id="title">タイトル</h2>
<div id="content">内容</div>
index.html
document.getElementById("title").addEventListener("click", (e) => {
let elem = document.getElementById("content");
if (elem.classList.contains("hide")) {
elem.classList.remove("hide");
}
else {
elem.classList.add("hide");
}
});
main.js
.hide {
display: none;
}
style.css
IntroductiontoProgramming
withJavaScript 演習のものに装飾してみる
• タイトルにカーソルを合わせたときの挙動を変えよう
- main.js はそのまま
50
.hide {
display: none;
}
.title {
cursor: pointer;
}
.title:hover {
text-decoration: underline;
}
.content {
margin-left: 20px;
}
style.css
<h2 id="title" class="title">タイトル</h2>
<div id="content" class="content">内容</div>
index.html
IntroductiontoProgramming
withJavaScript 演習のものに装飾してみる
• cursor: pointer;
- 要素にマウスカーソルを合わせたときの
アイコンの種類
- 一覧
http://www.tagindex.com/stylesheet/page/c
ursor.html
• .title:hover
- titleクラスが設定された要素に
マウスオーバーされた状態の設定
• margin-left: 20px;
- 要素の左側に20pxだけ余白を設ける
- margin-top/right/bottom/left
51
.hide {
display: none;
}
.title {
cursor: pointer;
}
.title:hover {
text-decoration: underline;
}
.content {
margin-left: 20px;
}
style.css
IntroductiontoProgramming
withJavaScript hoverのサンプル
• マウスオーバーで赤文字にするサンプルです
52
<span class="hoverRed">てきすと</span>
index.html
.hoverRed:hover {
color: red;
}
style.css
IntroductiontoProgramming
withJavaScript ボックス
• HTML要素は全て長方形の領域を持っています
• その領域に装飾してみます
53
index.html
<div class="class1">text</div>
style.css
.class1 {
border: 3px solid red;
background-color: orange;
}
IntroductiontoProgramming
withJavaScript border, background-color
• border: 3px solid red;
- 枠線の 太さが3px で 一重線 で 赤色
- solid
一重線
double(二重線), none(なし) など
• background-color: orange;
- 背景色
- 背景に画像を使う場合
background-image: url(“画像へのpath”);
背景画像の縦ループ, 横ループなどはまた別のプロパティ指定でできます
54
IntroductiontoProgramming
withJavaScript 色の指定
1. white, black, red, …
- 一覧: http://www5.plala.or.jp/vaio0630/hp/c_code.htm
2. #000000 ~ #FFFFFF (or #ffffff)
3. #000 ~ #FFF (or #fff)
4. rgb(0~255, 0~255, 0~255)
5. rgb(0%~100%, 0%~100%, 0%~100%)
6. hsl(色相(0以上360未満), 彩度(0~100%), 輝度(0~100%))
55
IntroductiontoProgramming
withJavaScript 色の指定(alpha値: 透明度)
• 書式
- rgba(red, green, blue, alpha)
- hsla(hue, saturation, lightness, alpha)
• 値
- 0(透明) ~ 1(不透明)
56
IntroductiontoProgramming
withJavaScript 色の指定(alpha値: 透明度)
• 例
57
<div class="box1">
<div class="box2"></div>
</div>
index.html
.box1 {
width: 100px; /* 横幅 */
height: 150px; /* 縦幅 */
background-color: red;
}
.box2 {
width: 60px; /* 横幅 */
height: 60px; /* 縦幅 */
background-color: rgba(0, 0, 0, 0.4);
border: 1px solid black;
}
style.css
IntroductiontoProgramming
withJavaScript 演習
• マウスオーバーで背景色が変化するボタンを作ってみましょう
58
<button class="button1">button</button>
index.html
IntroductiontoProgramming
withJavaScript 演習
• 例 (枠線の色も変えていますが)
59
.button1 {
width: 100px; /* 横幅 */
height: 100px; /* 縦幅 */
background-color: rgb(190, 220, 190);
border: 1px solid rgb(150, 180, 150);
}
.button1:hover {
background-color: rgb(220, 240, 220);
border: 1px solid rgb(170, 200, 170);
}
style.css
IntroductiontoProgramming
withJavaScript 豆知識
• クリックした時に表示される青い縁取りが気になる場合は
outline: none; を追加すると表示されなくなります
60
.button1 {
width: 100px; /* 横幅 */
height: 100px; /* 縦幅 */
background-color: rgb(190, 220, 190);
border: 1px solid rgb(150, 180, 150);
outline: none;
}
.button1:hover {
background-color: rgb(220, 240, 220);
border: 1px solid rgb(170, 200, 170);
}
style.css
IntroductiontoProgramming
withJavaScript アニメーション
• マウスオーバー時に ふわっ と背景色を変化させてみる
- transition: プロパティ 時間;
- [プロパティ] の値が変化するとき
[時間] の間でなめらかに変化する
- 全てのプロパティに対して設定
する場合は all を指定する
61
.button1 {
width: 100px; /* 横幅 */
height: 100px; /* 縦幅 */
background-color: rgb(190, 220, 190);
border: 1px solid rgb(150, 180, 150);
outline: none;
transition: all 0.3s; /* これだけ! */
}
.button1:hover {
background-color: rgb(220, 240, 220);
border: 1px solid rgb(170, 200, 170);
}
style.css
IntroductiontoProgramming
withJavaScript アニメーション
• マウスオーバー時に ふわっ と背景色を変化させてみる
- 複数のプロパティを指定したい場合以下のようにする
62
.button1 {
width: 100px; /* 横幅 */
height: 100px; /* 縦幅 */
background-color: rgb(190, 220, 190);
border: 1px solid rgb(150, 180, 150);
outline: none;
transition-property: background-color, border-color;
transition-duration: 0.3s;
}
.button1:hover {
background-color: rgb(220, 240, 220);
border: 1px solid rgb(170, 200, 170);
}
style.css
IntroductiontoProgramming
withJavaScript padding, border, margin (重要)
• 先ほど出てきた width, height などについて説明します
63
index.html
<div class="class1">text</div>
<div class="class1">text</div>
<div class="class1">text</div>
style.css
.class1 {
width: 60px;
height: 30px;
margin: 10px;
padding: 5px;
border: 3px solid red;
background-color: orange;
}
IntroductiontoProgramming
withJavaScript padding, border, margin (重要)
64
style.css
.class1 {
width: 60px;
height: 30px;
margin: 10px;
padding: 5px;
border: 3px solid red;
background-color: orange;
}
https://www.addedbytes.com/articles/for-
beginners/the-box-model-for-beginners/
IntroductiontoProgramming
withJavaScript 問題
65
style.css
.class1 {
width: 60px;
height: 30px;
margin: 10px;
padding: 5px;
border: 3px solid red;
background-color: orange;
}
https://www.addedbytes.com/articles/for-
beginners/the-box-model-for-beginners/
• この幅は 何px でしょう
IntroductiontoProgramming
withJavaScript 答え
66
style.css
.class1 {
width: 60px;
height: 30px;
margin: 10px;
padding: 5px;
border: 3px solid red;
background-color: orange;
}
https://www.addedbytes.com/articles/for-
beginners/the-box-model-for-beginners/
height + padding*2 + border*2
= 46px
IntroductiontoProgramming
withJavaScript 計算つらひ
67
• box-sizing プロパティ
- width, heightの計算方法を変更する
- 値
content-box (default)
padding-box
border-box
https://nulab-inc.com/ja/blog/nulab/css-basics-for-engineer-boxmodel/
IntroductiontoProgramming
withJavaScript box-sizing
68
style.css
.class1 {
width: 76px;
height: 46px;
margin: 10px;
padding: 5px;
border: 3px solid red;
background-color: orange;
box-sizing: border-box;
}
https://www.addedbytes.com/articles/for-
beginners/the-box-model-for-beginners/
46px
IntroductiontoProgramming
withJavaScript content
• 子要素は親要素のcontent領域の左上から順に配置されます
69
<div class="box1">
<div class="box2"></div>
<div class="box2"></div>
</div>
index.html
.box1 {
width: 100px; height: 150px;
background-color: red;
}
.box2 {
width: 60px; height: 60px;
background-color: rgba(0, 0, 0, 0.4);
border: 1px solid black;
}
style.css
IntroductiontoProgramming
withJavaScript 演習
• 次のような表示をするものを作って下さい
• 時間が余ったら装飾してみましょう
- 半透明にする
- カーソルを合わせると背景色が変わる
- カーソルを合わせるとボックスの大きさが変わる
- アニメーションを付ける
70
IntroductiontoProgramming
withJavaScript 演習
71
index.html
<div class="box1">
<div class="box2">text</div>
<div class="box3">text</div>
</div>
style.css
.box1 {
width: 80px;
height: 100px;
padding: 40px;
background-color: blue;
}
.box2 {
width: 40px;
height: 40px;
background-color: green;
}
.box3 {
width: 40px;
height: 40px;
background-color: red;
}
IntroductiontoProgramming
withJavaScript 演習
72
style.css
.box1 {
width: 80px;
height: 100px;
padding: 40px;
background-color: blue;
}
.box2,
.box3 {
width: 40px;
height: 40px;
}
.box2 { background-color: green; }
.box3 { background-color: red; }
• 同じ設定はまとめられます
IntroductiontoProgramming
withJavaScript div と span の違い (重要)
• spanは囲むだけ, divは四角いブロックを生成する
• だからspanにはwidth等が設定できない
• divの後には改行が入る
• 次回、より詳しく説明します
73
IntroductiontoProgramming
withJavaScript じゃんけん
• 作ります
- http://drafear.ie-t.net/js2016/rps/
74
IntroductiontoProgramming
withJavaScript じゃんけん
• 構造を定めます
75
div
div
div
button
button button button
div
<div>
<div>0勝 0敗 0分</div>
</div>
<div>
<button></button>
</div>
<div>
<button>ぐー</button>
<button>ちょき</button>
<button>ぱー</button>
</div>
index.html
IntroductiontoProgramming
withJavaScript じゃんけん
• id, classを振っていきます
76
<div class="centering">
<div id="result" class="result">0勝 0敗 0分</div>
</div>
<div class="centering">
<button id="enemyHand" class="hand disable"></button>
</div>
<div class="centering">
<button id="rock" class="hand">ぐー</button>
<button id="scissors" class="hand">ちょき</button>
<button id="paper" class="hand">ぱー</button>
</div>
index.html
IntroductiontoProgramming
withJavaScript じゃんけん
• 中央寄せします
• 次回ちゃんと説明するので
今のところは "おまじない" で大丈夫です
77
.centering {
display: flex;
justify-content: center;
align-items: center;
}
style.css
IntroductiontoProgramming
withJavaScript じゃんけん
• .hand, .result をデザインします
- .centering { … } は消さずに追記して下さい
78
.hand {
margin: ...;
width: ...;
height: ...;
background-color: ...;
border: ...;
border-radius: 3px; /* 角を丸める */
outline: none;
}
.result {
...
text-align: center; /* テキスト中央寄せ */
cursor: default;
}
style.css
.hand {
margin: 20px;
width: 60px;
height: 80px;
background-color: white;
border: 2px solid rgb(240, 220, 220);
border-radius: 3px;
outline: none;
}
.result {
width: 300px; /* height は指定しない */
margin: 10px;
padding: 3px;
border: 2px solid rgb(220, 240, 220);
background-color: rgb(230, 255, 220);
border-radius: 3px;
text-align: center;
cursor: default;
}
style.css (サンプル)
IntroductiontoProgramming
withJavaScript じゃんけん
• :not(条件)
- 条件に一致しないもの
- 例) .a:not(.b)
クラスa が設定されていて クラスb が設定されていない要素
79
.hand:not(.disable) {
cursor: pointer;
}
.hand:not(.disable):hover {
background-color: rgb(255, 230, 230);
}
style.css (サンプル)
IntroductiontoProgramming
withJavaScript じゃんけん
• 次はJavaScript部分になります
80
let drawCount = 0; // 引き分けになった回数
let winCount = 0; // 勝利した回数
let loseCount = 0; // 敗北した回数
let selectHand = (myHand) => { /* myHand番の手を出したときの処理 */ }
document.getElementById("rock").addEventListener("click", (e) => {
selectHand(0);
});
document.getElementById("scissors").addEventListener("click", (e) => {
selectHand(1);
});
document.getElementById("paper").addEventListener("click", (e) => {
selectHand(2);
});
main.js
IntroductiontoProgramming
withJavaScript じゃんけん
• selectHandを実装しましょう
81
let drawCount = 0; // 引き分けになった回数
let winCount = 0; // 勝利した回数
let loseCount = 0; // 敗北した回数
// [myHand] 0:ぐー / 1:ちょき / 2:ぱー
let selectHand = (myHand) => {
let enemyHand = Math.floor( Math.random()*3 ); // 相手の手
/*
drawCount, winCount, loseCount を更新する
(fill in here)
*/
update(enemyHand); // 画面に反映する
};
let update = (enemyHand) => { ... }
main.js
IntroductiontoProgramming
withJavaScript じゃんけん
• selectHandを実装しましょう
82
let selectHand = (myHand) => {
let enemyHand = Math.floor( Math.random()*3 );
if (myHand === enemyHand) { // draw
drawCount += 1;
}
else if ( (myHand+1) % 3 === enemyHand ) { // win
winCount += 1;
}
else { // lose
loseCount += 1;
}
update(enemyHand);
};
main.js
IntroductiontoProgramming
withJavaScript じゃんけん
• 画面に反映する関数 update を実装しましょう
83
let update = (enemyHand) => {
let enemyHandName = "";
/*
enemyHand(0, 1, 2) から enemyHandName("ぐー", "ちょき", "ぱー") に変換
(fill in here)
*/
document.getElementById("enemyHand").textContent = /* (fill in here) */;
document.getElementById("result").textContent = /* (fill in here) */;
};
main.js
IntroductiontoProgramming
withJavaScript じゃんけん
• 画面に反映する関数 update を実装しましょう
84
let update = (enemyHand) => {
let enemyHandName = "";
if (enemyHand === 0) {
enemyHandName = "ぐー";
}
else if (enemyHand === 1) {
enemyHandName = "ちょき";
}
else if (enemyHand === 2) {
enemyHandName = "ぱー";
}
document.getElementById("enemyHand").textContent = enemyHandName;
document.getElementById("result").textContent =
`${winCount}勝 ${loseCount}敗 ${drawCount}分`;
};
main.js
IntroductiontoProgramming
withJavaScript じゃんけん
• 最初にupdate(-1)を呼んで画面を初期化するようにしましょう
85
let drawCount = 0; // 引き分けになった回数
let winCount = 0; // 勝利した回数
let loseCount = 0; // 敗北した回数
let selectHand = (myHand) => { ... }
let update = (enemyHand) => { ... }
document.getElementById("rock").addEventListener("click", (e) => { ... });
document.getElementById("scissors").addEventListener("click", (e) => { ... });
document.getElementById("paper").addEventListener("click", (e) => { ... });
update(-1); // 追加
main.js
IntroductiontoProgramming
withJavaScript じゃんけん
• 完成!! お疲れ様です!!
86
IntroductiontoProgramming
withJavaScript じゃんけん
• 余力があれば改造してみてください
- AIを変える
"ぐー", "ちょき", "ぱー" からランダムに選んでいるが
「特定の手しか出さない」「絶対に勝つ手を出す」「ローテーション」など
- 前に自分が選んだ手が分かりやすいようにデザインする
- 勝率を出す
- ルールを追加する
「前に出した手は出せない」など
87
IntroductiontoProgramming
withJavaScript ファミコンゲーム作れる!?
88
http://www.amazon.co.jp/%E3%83%8A%E3%83%A0%E3%82%B3-
%E3%83%9E%E3%82%A4%E3%83%B3%E3%83%89%E3%82%B7%E3%83%BC%E3%82%AB%E3%83%BC/dp/B000068H3D
IntroductiontoProgramming
withJavaScript マインドシーカー作れる!?
• タイトル
- マインドシーカー
• 発売日
- 1989年4月18日
• 制作会社
- ナムコ
• 機種
- ファミコン
• 定価
- 6500円+税
89
マインドシーカー
IntroductiontoProgramming
withJavaScript ゲーム概要
超能力者養成ソフト
90
IntroductiontoProgramming
withJavaScript ゲーム概要
91
念力
予知 透視
IntroductiontoProgramming
withJavaScript 念力
92
念じてランプを点灯させる
IntroductiontoProgramming
withJavaScript 透視
93
カードの模様を当てる
IntroductiontoProgramming
withJavaScript 予知
94
光るランプがどれかを当てる
IntroductiontoProgramming
withJavaScript 今後の予定
• 5/22(日) 13:00 ~ 16:00
- JavaScriptの基礎をマスターする
- CSSでレイアウトを学ぶ
- ゴリラを倒すゲームを作る
• 5/29(日) 13:00 ~ 16:00
- 復習回
- atomの便利なプラグイン紹介
- 何かを作ろう
• 6/5(日) 13:00 ~ 16:00
- 避けゲーを作る 95

Mais conteúdo relacionado

Mais procurados

Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPyShiqiao Du
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTtakesako
 
RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介MITSUNARI Shigeo
 
Rubyによるデータ解析
Rubyによるデータ解析Rubyによるデータ解析
Rubyによるデータ解析Shugo Maeda
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイドTakahiro Itagaki
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013Ryo Sakamoto
 
Ruby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrakeRuby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrakeMasahiro Tanaka
 
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編Unity Technologies Japan K.K.
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用Shintaro Fukushima
 
【Unity道場スペシャル 2017札幌】乱数完全マスター
【Unity道場スペシャル 2017札幌】乱数完全マスター 【Unity道場スペシャル 2017札幌】乱数完全マスター
【Unity道場スペシャル 2017札幌】乱数完全マスター Unity Technologies Japan K.K.
 
And/Or/Callグラフの提案とソースコード検索への応用
And/Or/Callグラフの提案とソースコード検索への応用And/Or/Callグラフの提案とソースコード検索への応用
And/Or/Callグラフの提案とソースコード検索への応用Kamiya Toshihiro
 
Popcntによるハミング距離計算
Popcntによるハミング距離計算Popcntによるハミング距離計算
Popcntによるハミング距離計算Norishige Fukushima
 
入門機械学習1,2章
入門機械学習1,2章入門機械学習1,2章
入門機械学習1,2章Kazufumi Ohkawa
 

Mais procurados (20)

Introduction to NumPy & SciPy
Introduction to NumPy & SciPyIntroduction to NumPy & SciPy
Introduction to NumPy & SciPy
 
x86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNTx86x64 SSE4.2 POPCNT
x86x64 SSE4.2 POPCNT
 
RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介RSA鍵生成脆弱性ROCAの紹介
RSA鍵生成脆弱性ROCAの紹介
 
R -> Python
R -> PythonR -> Python
R -> Python
 
Rubyによるデータ解析
Rubyによるデータ解析Rubyによるデータ解析
Rubyによるデータ解析
 
問合せ最適化インサイド
問合せ最適化インサイド問合せ最適化インサイド
問合せ最適化インサイド
 
R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11R-hpc-1 TokyoR#11
R-hpc-1 TokyoR#11
 
フラグを愛でる
フラグを愛でるフラグを愛でる
フラグを愛でる
 
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
Ruby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrakeRuby科学データ処理ツールの開発 NArrayとPwrake
Ruby科学データ処理ツールの開発 NArrayとPwrake
 
Prosym2012
Prosym2012Prosym2012
Prosym2012
 
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
【Unity道場スペシャル 2017京都】乱数完全マスター 京都編
 
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
統計解析言語Rにおける大規模データ管理のためのboost.interprocessの活用
 
【Unity道場スペシャル 2017札幌】乱数完全マスター
【Unity道場スペシャル 2017札幌】乱数完全マスター 【Unity道場スペシャル 2017札幌】乱数完全マスター
【Unity道場スペシャル 2017札幌】乱数完全マスター
 
And/Or/Callグラフの提案とソースコード検索への応用
And/Or/Callグラフの提案とソースコード検索への応用And/Or/Callグラフの提案とソースコード検索への応用
And/Or/Callグラフの提案とソースコード検索への応用
 
Popcntによるハミング距離計算
Popcntによるハミング距離計算Popcntによるハミング距離計算
Popcntによるハミング距離計算
 
入門機械学習6章
入門機械学習6章入門機械学習6章
入門機械学習6章
 
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
入門機械学習1,2章
入門機械学習1,2章入門機械学習1,2章
入門機械学習1,2章
 

Destaque

ひまわり本7章
ひまわり本7章ひまわり本7章
ひまわり本7章CHY72
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編京大 マイコンクラブ
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったCHY72
 
数値解析と物理学
数値解析と物理学数値解析と物理学
数値解析と物理学すずしめ
 
タイ文字と若干情報科学[修正版]
タイ文字と若干情報科学[修正版]タイ文字と若干情報科学[修正版]
タイ文字と若干情報科学[修正版]. きぷ
 
フォントの選び方・使い方
フォントの選び方・使い方フォントの選び方・使い方
フォントの選び方・使い方k maztani
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.kiki utagawa
 
Pietソースコード精読
Pietソースコード精読Pietソースコード精読
Pietソースコード精読Hideaki Nagamine
 
リクルートテクノロジーズの産学連携への取り組み
リクルートテクノロジーズの産学連携への取り組みリクルートテクノロジーズの産学連携への取り組み
リクルートテクノロジーズの産学連携への取り組みRecruit Technologies
 

Destaque (18)

C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回C#でゲームを作る2016 第5回
C#でゲームを作る2016 第5回
 
C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回C#でゲームを作る2016 第3回
C#でゲームを作る2016 第3回
 
ひまわり本7章
ひまわり本7章ひまわり本7章
ひまわり本7章
 
C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回C#でゲームを作る2016 第7回
C#でゲームを作る2016 第7回
 
C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回
 
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
 
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
 
Altseed
AltseedAltseed
Altseed
 
FM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作ったFM音源をいじれるWebサービスを作った
FM音源をいじれるWebサービスを作った
 
数値解析と物理学
数値解析と物理学数値解析と物理学
数値解析と物理学
 
タイ文字と若干情報科学[修正版]
タイ文字と若干情報科学[修正版]タイ文字と若干情報科学[修正版]
タイ文字と若干情報科学[修正版]
 
フォントの選び方・使い方
フォントの選び方・使い方フォントの選び方・使い方
フォントの選び方・使い方
 
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
Pythonの処理系はどのように実装され,どのように動いているのか? 我々はその実態を調査すべくアマゾンへと飛んだ.
 
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
 
Pietソースコード精読
Pietソースコード精読Pietソースコード精読
Pietソースコード精読
 
Ultra piet
Ultra pietUltra piet
Ultra piet
 
リクルートテクノロジーズの産学連携への取り組み
リクルートテクノロジーズの産学連携への取り組みリクルートテクノロジーズの産学連携への取り組み
リクルートテクノロジーズの産学連携への取り組み
 
Pietのエディタを作った話
Pietのエディタを作った話Pietのエディタを作った話
Pietのエディタを作った話
 

Semelhante a 第2回 JavaScriptから始めるプログラミング2016

なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriYuta Okamoto
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScriptAshitaba YOSHIOKA
 
ji-3. 条件分岐と場合分け
ji-3. 条件分岐と場合分けji-3. 条件分岐と場合分け
ji-3. 条件分岐と場合分けkunihikokaneko1
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Toshio Ehara
 
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnJavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnKoji Ishimoto
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめgion_XY
 
Coq 20100208a
Coq 20100208aCoq 20100208a
Coq 20100208atmiya
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1NISHIMOTO Keisuke
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部NVIDIA Japan
 
Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料Etsuji Nakai
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングTanUkkii
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和schoowebcampus
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1Susisu
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 

Semelhante a 第2回 JavaScriptから始めるプログラミング2016 (20)

なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuri
 
今さら始めるCoffeeScript
今さら始めるCoffeeScript今さら始めるCoffeeScript
今さら始めるCoffeeScript
 
ji-3. 条件分岐と場合分け
ji-3. 条件分岐と場合分けji-3. 条件分岐と場合分け
ji-3. 条件分岐と場合分け
 
Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料Java初心者勉強会(2015/08/07)資料
Java初心者勉強会(2015/08/07)資料
 
JavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 AutumnJavaScript/CSS 2015 Autumn
JavaScript/CSS 2015 Autumn
 
ji-2. 計算
ji-2. 計算ji-2. 計算
ji-2. 計算
 
Objc lambda
Objc lambdaObjc lambda
Objc lambda
 
Rust samurai#01
Rust samurai#01Rust samurai#01
Rust samurai#01
 
Hupc 1
Hupc 1Hupc 1
Hupc 1
 
HiRoshimaR3_IntroR
HiRoshimaR3_IntroRHiRoshimaR3_IntroR
HiRoshimaR3_IntroR
 
Cython ことはじめ
Cython ことはじめCython ことはじめ
Cython ことはじめ
 
Coq 20100208a
Coq 20100208aCoq 20100208a
Coq 20100208a
 
Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1Siphone coffeemaker okayama-js-1
Siphone coffeemaker okayama-js-1
 
20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部20190625 OpenACC 講習会 第3部
20190625 OpenACC 講習会 第3部
 
Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料Haskell勉強会 14.1〜14.3 の説明資料
Haskell勉強会 14.1〜14.3 の説明資料
 
ECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミングECMAScript6による関数型プログラミング
ECMAScript6による関数型プログラミング
 
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
 
JavaScript 講習会 #1
JavaScript 講習会 #1JavaScript 講習会 #1
JavaScript 講習会 #1
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 

第2回 JavaScriptから始めるプログラミング2016