Introduction - AI in Game Developement and Physics in Game

advertisement
บทบาทและความสาคัญของการใช้ฟิ สิกส์
ในการพัฒนาเกม
หลักการของฟิ สิกส์เป็ นสิ่ งทีเ่ ป็ นทีน
่ ิยมมากในฟิ ลด ์
ของการสร้างเกมเนื่องจากจะไมมี
่ ก
ี ารตอบ
่ เกมทีม
โ ต้ เ ค ลื่ อ น ไ ห ว ที่ ด ี เ ล ย ถ้ า ป ร า ศ จ า ก ร ะ บ บ
Physics engine ทีด
่ ี ซึ่งทุกวันนี้ก็ม ี engine
ให้เลือกใช้มากมายหลายคายหลายบริ
ษท
ั แตละ
่
่
บริษั ท ก็ พ ยามบ่ งบอกถึ ง ข้ อดีข องตัว เอง เช่ น
ราคา ความยืดหยุนต
่
่ างจาก
้ งาน แตต
่
่ อการใช
เมือ
่ 10 ปี ทีแ
่ ล้วอยางสิ
่ ้ นเชิง คูมื
่ อการเรียนนี้จะ
เป็ นขัน
้ ตอนการสร้าง Physics engine โดยเริม
่
จากพืน
้ ฐานทางคณิตศาสตร ์ หลักการทางฟิ สิกส์
บทบาทและความสาคัญของการใช้ฟิ สิกส์
ในการพัฒนาเกม
เพือ
่ เพิม
่ ความน่าสนใจและความสมจริงในการ
แสดงผลของเกมของเรา
2. เพือ
่ เพิม
่ วิธก
ี ารเลนเกมที
แ
่ ปลกใหมยิ
้
่
่ ง่ ขึน
1.
ที่มา: http://unity3d.com/gallery/demos/live-demos#shadows
พืน
้ ฐานทางคณิตศาสตร:์ คณิตศาสตรที
์ ่
ผู้อานต
องรู
่
้
้
Download
กฎของความน่าจะเป็ น
และการสุ่ม
Physics in game development
Introduction

As you probably know, there is a lot of
randomness in the world. If a golfer hits a golf
ball ten times, chances are it will wind up in ten
different locations when it comes to rest. At the
same time, there is often some structure to the
randomness.
Advantage

Probability techniques will allow you to build structured
randomness into your games. Rather than having a flight
of arrows all travel along the same trajectory, which
would be boring and fake-looking, probability techniques
can give the arrows a range of initial velocities and flight
angles for a much more realistic appearance. Probability
techniques can be used to vary the speeds of
snowmobiles in a snowmobile game, how far golf balls
ความน่าจะเป็ นพืน
้ ฐาน




การโยนเหรียญ เช่น โยนเหรียญ สามเหรียญ
พร้อมกัน 3 เหรียญ โอกาสทีจ
่ ะออกหัวพรอมกั
น
้
คือเทาไหร
่
่
1/(2*2*2)=1/8
โยนเหรียญ สามเหรียญพรอมกั
น 3 เหรียญ
้
โอกาสทีจ
่ ะออกหัวหรือกอยพร
อมกั
นคือเทาไหร
้
้
่
่
2/(2*2*2)=1/4
Random Number Generation



การ Random ดวยค
าอยู
ระหว
าง
x ถึง y
้
่
่
่
เช่น Random(10,20)
แตละภาษาก็
มโี ค๊ดการเขียนแตงต
นไป
่
่ างกั
่
Java
import java.util.Random; // program uses class Random
{
public static void main(String[] args)
{
double result;
Random random = new
Random();
result=random.nextDouble();
System.out.println(result);
}
}
ภาษาอืน
่ ๆ
rand(10,20)
หรือ
rand()
Random Number Generation




ปกติแลวการ
Random นั้นจะเป็ นการ สุ่มอยู่
้
ในช่วง 0 ถึง 1 ถ้าเราตองการ
้
การ Random คาระหว
างตั
วเลขสองตัวเลข
่
่
เช่น Random คาระหว
าง
10 กับ 15
่
่
เราจะเขียนโค๊ดกันอยางไร
่
ให้ y เทากั
่ บขอบบน
ให้ x เทากั
่ บขอบลาง
่
(y-x)*Random()+x
Probability Functions

A probability function, also referred to as a probability
distribution function, is simply a mathematical expression
or geometrical curve that models the probability of an
event occurring within certain dimensions. Probability
functions are used in scientific modeling all the time.
Typical Probability Function
Cumulative Probability Function
Gaussian Distribution
Uniform (0-1)
จ
่ ะเกิดเท
การสุ่มเลขระหวาง
0 กับ 1ดวยโอกาสที
่
้
Triangular
น้อยสุดฐานนิยม
มากสุด
น้อยสุด
น้อยสุด
ฐานนิยม
มากสุด
ฐานนิยมากส
Roulette
http://www.youtube.com/
watch?v=Zf0ev4h-zfk
การเขียนการสุ่มแบบ Roulette
D1,25
0
D4, 25
D1, 25
D3, 25
D2, 25
D2,25
25
D3,25
50
D4,25
75
100
Roulette



เพิม
่ ความซับซ้อนในการ Random ทาให้เกมดู
สมจริงมากขึน
้ อีก
ใช้สราง
AI หรือ ปัญญาประดิษฐ ์ เช่น
้
Roulette ใน Genetics Algorithm.
วิธก
ี ารเขียนการทางานของ Roulette
ตัวอยาง
่

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
มีทางเลือกอยู่ 4 ทาง ดวยความถี
เ่ ป็ น 50,25,5 และ 20
้
จงใช้ Roulette ทิศทางทีจ
่ ะไป
matrix_pop=[50 25 5 20];
rtest = (sum(matrix_pop)).*rand();
total_pop=0;
for i=1:4
total_pop=total_pop+matrix_pop(i);
if (total_pop>= rtest )
matrix_return=i;// ทิศทางทีถ
่ ก
ู สุ่ม
break;
end
end
การเขียนการสุ่มแบบ Roulette

มีทางเลือกอยู่ 4 ทาง ดวยความถี
เ่ ป็ น 50,25,5 และ 20 จง
้
ใช้ Roulette ทิศทางทีจ
่ ะไป
D4, 20
D3, 5
D1, 50
D2, 25
D1,25
0
D2,25
50
D3
,25
75 80
D4,25
100
การเขียนการสุ่มแบบ Roulette

1.สรางตั
วแปรชือ
่ matrix_pop เก็บคา่
้
ความน่าจะเป็ นทัง้ หมด
D4, 20
D3, 5
D1, 50
matrix_pop =[50
25 5 20]
D2, 25

2. สร้างตัวแปรชือ
่ rtest จากนั้นทาการสุ่มคาความน
่
่ าจะเป็ น
ตัง้ แต่ [0-sum(matrix_pop)]
100]
สมมุตวิ าสุ
่ ่ มไดค
้ าเป็
่ น 77.45
[0 -
การเขียนการสุ่มแบบ Roulette

3. สร้างตัวแปรชือ
่ total_pop จากนั้นกาหนดให้มีคาเป็
่ น
0

D4, 20
D3, 5
D1, 50
D2, 25
4. ทาการวนลูปการทางานของโปรแกรมเทากั
่ บ
จานวนของทิศทางทัง้ หมด
้ ้ม ี 4 ทิศทาง, D1, D2, D3, D4)
์ อนี
ทุ(โจทย
กรอบ ข


4.1 ทาการอัพเดทคา่
total_pop=total_pop+matrix_pop[i]
4.2 ทาการตรวจสอบคาของ
total_pop วา่
่
มากกวาหรื
อเทากั
่
่ บ rtest หรือยัง ถ้าเป็ นจริง
ให้ส่งคาทิ
่ ศนั้นเป็ นทิศทางสุ่มออกมา
การเขียนการสุ่มแบบ Roulette
D4, 20
D3, 5
D1, 50
D2, 25
รอบที่ (i)
rtest
total_pop
rtest>=total_pop
1
72.45
0+50=50
เท็จ
2
72.45
50+25=75
เท็จ
3
72.45
75+5=80
จริง
การประยุกต์ใช้งานจริง
D, 20
C, 5
A, 50
B, 25
การประยุกต์ใช้งานจริง
roulette1.html
roulette2.html
roulette3.html
roulette4.html
roulette5.html
roulette6.html
roulette7.html
roulette8.html
roulette9.html
roulette10.html
roulette11.html and roulette12.html
ตั้งบอลที่ตาแหน่ ง (220,250)
กด key==1 ยิงตาแหน่ ง A
กด key==2 ยิงตาแหน่ ง B
กด key==3 ยิงตาแหน่ ง C
กด key==4 ยิงตาแหน่ ง D
กด Esc กลับไปตั้งบอลใหม่
roulette13.html
กด key==1 ยิงตาแหน่ ง A
กด key==2 ยิงตาแหน่ ง B
กด key==3 ยิงตาแหน่ ง C
กด key==4 ยิงตาแหน่ ง D
กด Esc กลับไปตั้งบอลใหม่
Download