Lesson 2
第一次寫程式果真是一場硬仗。
請使用方向鍵操控此投影片。
最右邊的是回家作業,以及推薦寫的題目。
前言
前言
大家上週過得還好嗎?
下周我要去中央大學所以要請假一次。
今天前五分鐘開個網路
讓大家裝個有點用的東西叫做...sget
在終端機打下 npm install sget
我們可以利用他做一些極簡單遊戲
npm = node.js package manager
翻譯蒟蒻 -> node.js 套件管理員
套件跟我們待會要講的 function 有關係
install 就是安裝
所以你可以透過 npm install _____(套件名稱) 來安裝套件
npm install sget
https://www.npmjs.com/package/sget
裡面會有這個「套件」(Package) 的介紹與範例
var sget = require ('sget');
var something = sget ('Say something. I\'ll wait.');
console.log ('You said', something);
sget ('Leave word and you will be heard.', function(data) {
console.log ('I heard you said', data);
});
console.log ('\nThis test is not over.');
sget 就是個你每次呼叫他,
他都會讓 Terminal 停下來等你打字輸入東西,
並擷取該行內容存起來的函式 (Function)。
有了這個再加上上一周我們教的東西,
就可以做很多小遊戲啦。
一定會輸的猜拳、猜數字、終極密碼...等等。
今日正課 Chapter 1
來用上周進度 + sget 來做點小東西。
首先,學會用 sget。
var sget = require ('sget'); // require 是呼叫套件用的函式
var something = sget ('Say something. I\'ll wait.'); // 呼叫 sget
console.log ('You said', something);
然後寫一個可以跟電腦猜拳的遊戲吧!
我們先當把 Y 當剪刀、O 當石頭、U 當布。
var sget = require ('sget'); // require 是呼叫套件用的函式
var PSS = sget ('Paper(U), Scissor(Y), Stone(O) ?');
if (PSS[0] == "U"){
}
else if (PSS[0] == "Y"){
}
//...剩下你們試著自己寫寫看
然後寫一個可以跟電腦猜拳的遊戲吧!
我們先當把 Y 當剪刀、O 當石頭、U 當布。
PSS[0] 是什麼東西呢?
是下一次上課的內容,[0] 代表的是此陣列的第一項。
陣列 (array) 是一個一次存有多項變數的...變數。
這次課程用到的 PSS[0]
代表著取出 PSS 這個字串(一堆字的陣列)的第一個字。
所以你輸入 You are smart. 他只會取得 Y。
第 0 項 [0] 是第 1 個字,第 1 項 [1] 則是取第二個字。
上次教到這。
所以往右往下都是新的內容
今日主題:自己寫寫看
大家加油 XD
今日主題:自己寫寫看
所以說要怎麼讓電腦會自己出拳?
隨機出拳?
http://lmgtfy.com/?q=JavaScript+random
Math.random()
console.log ( Math.random() );
// Math.random() 會產生一個 0 ~ 1 之間的亂數
// 也就是最小值是 0,最大值是 0.99999....,不會到 1。
var a = Math.random(); // 可以這樣取得該數字
// 該怎麼讓這個 Math.random() 變成我們要用的東西?
// 猜謎時間~我們怎麼讓它變成只有三種可能性?
Math.floor() 取小數點前面的整數
console.log ( Math.floor (Math.random() * 10) );
// Math.random() 會產生一個 0 ~ 1 之間的亂數
// 所以 * 10 之後,就會變成 0 ~ 10 之間的亂數
// Math.floor 之後只會取整數,所以是 0 ~ 9
//用 for 來試幾次看看吧!
console.log ( Math.floor (Math.random() * 10) + 10 );
// 在後面 + 10 後範圍就變成 10 ~ 19
讓電腦用亂數猜拳
GO!
讓電腦用亂數猜拳
現在試試看猜拳猜到有一方贏三把為止。
中場休息
我喝點水
今日正課 Chapter 1.5
陣列 Array 與 字串 String
真希望可以教完陣列,你們就可以回家寫簡易的棋盤遊戲了
(像是五子棋、踩地雷等)
a = [1, 2, 3];
for(i = 0; i < 3; i++)
console.log( a[i] );
//陣列的項次是從 0 開始的
//陣列有許多已經寫好的函式可用
//push, pop, shift, unshift, join, reverse, slice, sort......
// 可以回家自己試試看
a.push(4);
console.log( a );
a.reverse();
console.log( a );
a = "Happy New Year!";
for(i = 0; i < a.length; i++)
console.log( a[i] );
//字串的項次也是從 0 開始的
//字串也有許多已經寫好的函式可用
//length, substring(), toLowerCase()... 等等
// 可以回家自己試試看
a = a.substring(0, 4)
console.log(a);
console.log(a.toLowerCase());
所以陣列能幹麻?
來,說說看
所以陣列能幹麻?
agar.io 的排行榜
應該說...各種遊戲的排行榜都有用到陣列的概念
將分數按大小排好,就是排序 (sort)
很多遊戲做的掉寶率區間控制也是用陣列配合亂數來操作的
a = [6, 10, 100, 1, 76];
console.log(a);
a.sort();
console.log(a);
// 還可以做二維陣列,就像綠豆糕...我是說就像棋盤一樣
b = [ [11, 12], [21, 22] ]
console.log(b);
console.log( b[0][1] );
console.log( b[1][0] );
練習時間
把剛剛的猜拳再更新一下。
我們來把每回合的輸贏放進一個陣列裡,
最後印出猜拳的紀錄表。
今日正課 Chapter 2
function()
function 函式
這對你們來說是新的觀念,容我解釋解釋
簡單來說,這是一個獨立的小程式。
function HelloHello() {
console.log("Hello World!!");
}
function adder( a, b ){
return a + b;
}
HelloHello();
console.log(adder(3, 7));
看起來好像沒什麼特別的,但是想想剛剛的猜拳...
如果今天猜拳要寫成:
猜五把,贏的多的人獲勝,
若平手,猜到一人連續贏兩把為止。
你要怎麼寫?
for(){
//猜拳
}
while(){
// 猜拳
// 再猜拳
}
// 好像有點浪費空間阿
function PSS_game ( a ){
// a = 1(Y), 2(O), 3(U); 別忘記
//直接在這邊亂數生成並回傳誰贏
// return 1; 你贏,return 2; 電腦贏
}
for(){
if ( PSS_game (PSS[0]) == 1)
...
}
while(){
...
}
完成這個吧。
function likeLoop ( a ){
//function 還可以呼叫自己
if ( a < 10 ){
console.log(a);
a = a + 1;
likeLoop(a);
}
}
likeLoop ( 0 );
這種直接或間接地呼叫自己的做法,
我們稱之為遞迴 (Recursion),跟 for, while 迴圈 (Loop) 相似
然而這兩者的功能與效能不太一樣,
幾乎所有的 迴圈 可以由 遞迴 來實作,但反過來就不行。
看似好用,但是遞迴非常的浪費資源。
練習時間
用遞迴的方法算算看 1 + 2 + ... + N
回家作業
請安裝 Unity3D,自己學著安裝吧!
另外,大家不是都有 FB 所以改用 Google Groups,快接受邀請
回家作業
你們可以來寫踩地雷跟五子棋了喔喔喔喔喔喔喔喔
可以遇到問題就寄信騷擾老師
老師之後就要去找工作了但是還是有時間回信幫助你們的
Lesson 2 上完這堂課就可以自己寫棋盤類遊戲啦!
By every85713
Lesson 2 上完這堂課就可以自己寫棋盤類遊戲啦!
- 450