BẮT ĐÂU VỚI GAME MAKER ( 6.1 VÀ 7 PRO )I. THẢO LUẬN 1 TÍ .
hiện nay việc dùng engine làm game gần như là duy nhất , hầu như các game đều được làm từ engine , cũng có nhiều game " tự lập trình " bằng các ngôn ngữ nhưng toàn cùi cùi cả . bởi vậy việc dùng engine làm game là điều chả có gì là "xấu hổ " .
tuy nhiên mọi cái đều có cái khó của nó , engine có nhiều loại và độ khó khác nhau , đa số độ khó tỉ lệ thuận với độ mạnh của engine . việc sử dụng nhưng engine chuyên nghiệp cỡ unreal .. thì có lẽ là quá khó gòi , các engine nhẹ hơn như TGE , 3dgs..... thì cũng khó đối với những người bắt đầu .
song việc làm game ko chỉ là lập trình mà rất nhiều khâu , mắc xích lòng vòng lòe vèo , và tất nhiên ko phải ai cũng làm được . đa số các game bày bán lậu " công khai " ngoài kia đều do 1 công ty , 1 nhóm làm game chuyên nghiệp được đào tạo bài bản cũng mất hơn 1 năm là ít . so sánh với thực lực của ta , chậc chậc . nhất là đối với 1 nhóm nhỏ vài người lèo tèo , hay 1 người . hoặc với 1 người ko học CNTT và chả biết cái ngôn ngữ gì cả thì chỉ có nước cầu chúa
song điều đó cũng ko có nghĩa lớp người này ko làm được game , có cung thì sẽ có cầu , nhiều engine dễ dàng hơn ra đời để phục vụ cho lớp người này . trong số đó có thể như rpgxp , gm , fpscreator , fighter maker ....
song đã làm game thì phải sáng tạo , bởi vậy tiêu chí chọn engine của mình là cho dù yếu và dễ đến đâu đi chăng nữa thì cũng phải SÁNG TẠO được game .do đó GM là lựa chọn hàng đầu của mình . tuy nhiên nếu có engine nào mạnh hơn GM tí mà dễ như GM thì mình cũng sẵn sàng " có mới nới cũ '"liền . bởi làm game chứ ko phải ngồi ngắm cái engine mà nói " mình yêu cái này " ....chuối cả nải .
so sánh các engine làm game cỡ " mini " thì GM là lựa chọn hàng đầu theo mình .
rpgxp , ngay cả cái tên cũng đủ nói về engine này , song nó khó hay ko thể sáng tạo game bỏi lẽ 100 game thì giống nhau về gameplay cả trăm thì làm sao gọi là sáng tạo . những cái quan trọng như gameplay thì chuyền tay nhau script lấy được từ " ai đó " ở nơi xa xôi . rồi những cái lặt vặt như shop , menu cũng " chuyền tay " luôn thì em cũng pó tay , ko biết các bác này nghĩ gì .
rpgxp sáng tạo được ? tất nhiên là có thể , nhưng hãy nghĩ xem VN đã có ai sáng tạo , điều đó cho thấy quá khó để sáng tạo . rpgxp sủ dụng ruby thì phải , mà ngôn ngữ này chắc cũng ko dễ dàng gì , học được nó đã khso và ứng dụng vào làm game còn khó hơn . nếu quyết tâm và có sức học thì bất quá sang TGB ,TGE ,.. làm cho mạnh ..
fps, fighter cũng tương tự thế .song với GM thì khác , GM ko cho bạn gì ban đầu cả và cũng chẳng " bắt " bạn ko được sáng tạo theo kiểu " giam lỏng " như các engine yếu khác . điều đó đồng nghĩa với bạn có thể SÁNG TẠO game .
II. GIỚI THIỆU VỀ GAME MAKER ( GM )
hiện tại phiên bản mới nhất của GM 7 pro , song bản này cũng chả thấy hay ho hơn bản 6.1 là mấy , cho nên xài bản nào cũng được. bản 7 pro c*** hơi khùng khùng nên cũng ngại khi xài .
do mình ko chuyên về CNTT , cũng như các ngôn ngữ , engine ... nên cũng nói gì về mấy vấn đề " lý thuyết " đó , mà có biết thì cũng chả làm được gì vì GML ngôn ngữ của gm chỉ xài cho GM
1 NGÔN NGỮ CỦA GM
game maker sử dụng GML , 1 ngôn ngữ của riêng GM , nó hướng mạnh vào làm game , khác với C++ " sinh ra ko phải làm game " bởi vậy mà dùng GML bạn sẽ thấy dễ dàng đến bất ngờ + bật ngửa .
2. ĐỘ KHÓ
tuy nhiên mọi cái đều có cái khó của nó , với GM cũng vậy , song bạn hãy yên tâm vì GM ko khó lắm và học 1 mình thì cũng làm game được và tất cả mọi công đoạn làm game đều chỉ cần 1 mình là làm được . bởi vì ngôn ngữ nó dễ học ban đầu , và trong quá trình làm game thì nó cũng nhanh hơn cho nên bạn sẽ ko mất nhiều thời gian cho nó và làm những việc khác .bởi vậy GM có chăng là khó ban đầu
3 . TÍNH NĂNG
GM khá mạnh về 2D , đặc biệt có hệ thống effect ( part gì đó quên mất tiêu ) khá mạnh cho nên với 2D GM khá tuyệt .
về 3D , GM chập chững và yếu ớt , có thể làm được song chỉ nên làm tới 3D mini thôi vì GM hơi yếu . còn về online thì tốc độ GM khỏi phải ... làm . còn về LAN thì mình .. chưa test , song nó có các dll nên tốc độ cải thiện đáng kể .
túm lại thì với GM bạn develop đã tay được 2D + lan , 3D+online thì ko nên mơ tới . chính vì thế mà GM là engine yếu . tuy nhiên đừng vội méo mặt vì 2D cũng hay chứ đâu phải có 3D . thực tế cho thấy tuy 2D ko mạnh bằng 3D , song bản thân mình thì khoái 2D hơn ( diablo chẳng hạn ... )
4. Ý KIẾN , THĂC MẮC , BÀN TÁN , XÔN XAO VỀ GAME MAKER -
GM DUNG LƯỢNG HƠI BÉ , CỠ 10 MB CHẠY GẦN CHẾT .
vấn đề này thì hồi trước em cũng nghĩ thế cho nên định chia ttay GM , nhưng sau đó bác vo_dich lại nói lại nên em mới ngớ người ra , công nhận ngu thiệt . GM có thể làm game vài trăm MB là chiện thường .
- GM ĐỒ HỌA PIXEL+ RĂNG CƯA + XẤU .ơ ờ , trước đây thì cũng nghĩ thế , những khi nghe bác vo-dich phán cho vài phát thì lại bật ngửa ra . ngeh bác í nói GM có thể làm đồ họa đẹp , ko pixel , ko răng cưa , ko xấu . nhưng chưa thử nên ko dám chắc tuy nhiên pro mà phán thì sai cũng phải nghe ặc đùa thôi , chứ đồ họa chắc good , để nói rõ sau
- GM LÀ ENGINE DRAG & DROP
thực ra thì cũng đúng , tuy nhiên đó chỉ là giúp cho newbie dễ dàng đến với make game , và mấy cái D & R đó thì cũng chưa đến 1 % toàn bộ các action của GM . cho nên nói GM là D & R thì là cái nhìn bên ngoài .
sau một hồi lâu tập tành với GM , bạn sẽ nhận ra là dùng script hay hơn nhiều , vừa pro , vừa tiện , lại vừa mạnh ,đó mới là chủ chốt trong GM . nói Gm có D & R thì đúng nhưng nói GM chỉ là D& R thì sai nặng .
- GM LÀ ENGINE CHỈ CẦN COPY CÁC SCRIPT LÀ XONG
sai nốt , GM ko cho bạn gì ban đầu , cũng như ko cố định gì cả , các đoạn script của nó là 1 mớ hỗn độn và lằng nhằng mà người " trong cuộc "nhìn đôi khí còn ngu . việc copy hầu như ko thể , có chăng nó là những script nho nhỏ , thể hiện 1 cái gì đó nhỏ bé mà bất kì engine nào cũng phải có , 1 đoạn mã thể hiện tuyết rơi trong java để lập trình web chẳng hạn .
5 . CÔNG VIỆC MAKE GAME VỚI GM:
thông thường để làm game với GM bạn cần phối hợp : đồ họa + lập trình + ý tưởng . âm thanh cho ai có khả năng , tuy nhiên làm âm thanh rất tốn kém , VN mấy ai làm âm thanh cho game ngoài việc đi tìm ...
tất nhiên đó là khi bạn đã giỏi , còn với những người bắt đầu thì việc đầu tiên là cần nghiến ngấu ngôn ngữ của nó cũng các kĩ năng lập trình , sử dụng engine thành thạo đồng thời liên tục làm game để nâng cao kĩ năng .
mình mất khá nhiều thời gian cho việc học GM , tính ra đến nay là hơn 1,5 năm , có lẽ do mình chậm tiến nên nó chậm thế chứ mấy tên pro như vo_doch , bullno1 thì 3 tháng là lên pro . thời gian học lâu hay chậm là do độ thông mình+ siêng năng của người làm .
tham khảo về việc học make game của mình :
1. mò mâm engine , tìm hiểu các example dễ để hiểu , làm các game nho nhỏ để quen tay đàn , bàn luận ,học hỏi với những người đi trước , những người khá hơn .lúc này mình chưa quan tâm nhiều đến ý tưởng
2. khi coding đã vững thông qua nhiều lần làm game , bắt đầu nghĩ tới ý tưởng và thực hiện nó . nâng cao dần chất lên , luôn làm game ko ngừng để tự nâng cao .
3....
GM tút 2 : giao diện cơ bản GM
để download GM bạn vao` http://www.yoyogames.com/
c*** có thể lấy ở dưới mình mới up
I VỀ GIAO DIỆN :
1. SPRITE
khá đơn giản , bạn có thể tụ tìm hiểu khá nhanh .ở đây mình chỉ nói về trọng tâm là những thứ bạn cần lưu ý khi mới bất đầu . bạn có thể xem về giao diện qua các bài dịch sát của thien bình pót lại bên bolobala
http://www.bolobala.net/forum/showthread.php?t=119
về sprite bạn nên coi qua bài viết trên , mình viết bài này kết hopwj bài đó để tranh lập lại .
TÂM CỦA SPRITE : chính vì sprite se là các nhân vật.. xuất hiện trong game nên cần phải có tâm chính xác :
bạn nhấp vào 1 sprite và nhìn phần bên phải , đây là nơi xác định tâm của sprite , tọa độ origin là tâm sprite . nhấn center nếu bạn muốn sprite có tâm là chính giữa , tuy nhiên 1 số game tâm sẽ ở chỗ khác .
CROP SPRITE : để tiết kiệm đung lượng bạn cần crop các image lại để loại bỏ đi các chỗ thừa của sprite , để crop sprite : images-> crop
MÀU NÊN CỦA SPRITE : là màu mà sẽ trong suốt khi vào game , thông thường là màu trắng , tuy nhiên nhiều lúc cần phải đổi màu cho thích hợp . bạn vào tấm image trong sprite và chọn màu đó , rồi nhấp vào ô trái phái dưới của image . lúc đó màu nên sẽ đổi . chú ý rằng ngoại trừ màu nên ra thì tất cả các màu khác sẽ hiện thị .
muốn có màu nên thì nhấp vào transparent , nếu ko muốn có màu nên thì bỏ đi .
trọng tâm về sprite thì cần chú ý thế .
2. SOUND
sound thì ko cần quan tâm nhiều , mày mò tí là hiểu .
3. BACKGROUND
cũng tương tự như sprite , background ko có tâm , ko thể crop .background có thể hiểu khác với sprite , background là phần chết , còn sprite là phần sống .
4.paths .
nothing..
5.SCRIPTđây là nơi viết các script , tuy nhiên có thể viết ngay trong object sau này , tuy nhiên viết script ở đây , có nhiều tiện lợi ,như có thể dùng nhiều cho các object , khỏi phải copy giữa các object. ngoài ra còn sáng tạo các script cho GM
6. OBJECT
là các vật thể hoạt động trong game , nhân vật ... ngôi nhà , các nhiệm vụ , item đều được xây dựng ở đây
1 object bao gồm nhiều event ( sự kiện ) , khi có sự kiện thì có 1 hành động ( action ) nào đó xảy ra.
add 1 event thì quá dễ , bạn có thể tham khảo tút của thiên bình .
add 1 action thì mới vào khoái dùng drag& drop , nhưng nên theo hướng pro hóa thì xài code dần dần cho quen vì bạn chắc chắn sẽ chuyển sang code trong 1 ngày gần đây :
để thêm 1 đoạn code vào object , sau khi đã add event , ta chọn control-> code ->kéo execute code ra -> cho code vao` .cho gi` thi` sau hãy quan tâm
.
7. ROOM :là các level , các mảnh đất trong game mà bạn thấy
SETTING : để thay đổi các độ rộng của room , speed là tốc độ room , bạn nên chọn 60 , peisister là để room ko bị trở lại như ban đầu mà giữ trạng thái như lúc thoát ra vào room khác . ví dụ như bạn muốn đánh xong room này nhảy sang room khác , rồi quay lại thì vẫn thấy room như lúc bạn mới bỏ đi . tuy nhiên ko nên đánh dấu , ta sẽ đánh dấu trong các object sẽ nói sau
VIEW : đánh 2 cái dấu phía trên :
view in room : độ rộng của phần mình sẽ nhìn thấy trong room
post on screen : độ rộng hiển thị khi play
2 cái này nên set là 640-> 800 , 480-> 600 la` ổn .
object following... room sẽ luôn " quay " cái object được chọn này , như game diablo , màn hình luôn chạy theo nhân vật .
hbor , vbor : hơi khó giải thích , bạn cứ cho nó 400 , 300 nếu bạn có chọn object following ở trên ...
8. GLOBAL GAME SETTING :
tinh chỉnh cho game
start in full-screen : chạy full màn hình , ko có window
dislay the cursor : hiển thị con chuột , cứ cho nó hiện thị , thích thì sau này tắt ko muộn .
resolution : ko quan tâm
other : bỏ mấy cái F1... thì hay hơn . esc thì lúc đầu thì bạn cứ để nó vậy , sau khi làm game xong thì mới bỏ nó . vì sau đó ta sẽ thiết lập nút thoát .
loading : show your own : hiển thị cái hình load của bạn hay ko ?nếu có change image rồi chọn hình đó
no loding proge... : ko có thanh loading chạy chạy
default : chạy cái của GM
own : chạy cái của mình
change icon cho hoành trấng
còn lại khỏi quan tâm .
về giao diện cơ bản là thía .
GM tút 3 : biến và các hàm cơ bản
chú ý rằng trong đây mình dùng toàn code , cách thêm code xem tút 2
để game có thẩ chạy được cần có 1 cái room và các object + hình ảnh .
ban đầu bạn sẽ add hoặc vẽ các sprite vào , sau đó bắt đầu đi làm với object và đặt chúng vào room:
I. event : xem qua cái tút của thiên bình là có đủ . mình ko nói gì thêm nhiều
II. VỀ BIẾN :
biến là các số liệu trong game , máu của 1 nhân vật là số liệu , hình ảnh thể hiện cho 1 object cũng là số liệu , tiền cũng là số liệu ...
1. PHÂN LOẠI BIẾN :
biến có nhièu loại :
BIẾN RIÊNG : là biến dùng riêng cho object đó , ví dụ như mỗi con monter tuy cũng từ 1 object mà ra nhưng có số máu khác nhau . viết biến riêng thì đặt tên bình thường
BIẾN CHUNG : là biến xài chung cho các object , hay nói đúng hơn thì là ko của riêng object nào cả , nó có thể sử dụng cho bất kì ai tùy thích . ví dụ lượng vàng tròn RTS , có vàng đó thì mua quân nào mà chả được .
để viết biến này thì cần thêm 1 dòng global.tên biến
BIẾN CỐ ĐỊNH : là mấy biến ko cần tạo ra , sỉnh ra đã có và đa số là biến riêng cho từng object vd:
sprite_index : sprite chính của object
image_angle : góc độ của sprite
alpha : độ mờ của object
speed: tốc độ di chuyển của object
hspeed: tốc độ di chuyển sang ngang
vspeed: tốc độ di chuyển sang dọc
direction : hướng chuyển động của object
image_single: số hình của sprite cần hiển thị
alarm[0],1,2.....các " giờ " của object
list các biến cố định :local là của riêng 1 object , còn global là của chung như 2 loại biến kia . tuy nhiên ko cần viết global như biến trên .
Trích dẫn nội dung:
global: argument
global: argument0
global: argument1
global: argument10
global: argument11
global: argument12
global: argument13
global: argument14
global: argument15
global: argument2
global: argument3
global: argument4
global: argument5
global: argument6
global: argument7
global: argument8
global: argument9
global: argument_relative
global: background_alpha
global: background_blend
global: background_color
global: background_foreground
global: background_height
global: background_hspeed
global: background_htiled
global: background_index
global: background_showcolor
global: background_visible
global: background_vspeed
global: background_vtiled
global: background_width
global: background_x
global: background_xscale
global: background_y
global: background_yscale
global: caption_health
global: caption_lives
global: caption_score
global: current_day
global: current_hour
global: current_minute
global: current_month
global: current_second
global: current_time
global: current_weekday
global: current_year
global: cursor_sprite
global: error_last
global: error_occurred
global: event_action
global: event_number
global: event_object
global: event_type
global: fps
global: game_id
global: health
global: instance_count
global: instance_id
global: keyboard_key
global: keyboard_lastchar
global: keyboard_lastkey
global: keyboard_string
global: lives
global: mouse_button
global: mouse_lastbutton
global: mouse_x
global: mouse_y
global: program_directory
global: room
global: room_caption
global: room_first
global: room_height
global: room_last
global: room_persistent
global: room_speed
global: room_width
global: score
global: secure_mode
global: show_health
global: show_lives
global: show_score
global: temp_directory
global: transition_kind
global: transition_steps
global: view_angle
global: view_current
global: view_enabled
global: view_hborder
global: view_hport
global: view_hspeed
global: view_hview
global: view_object
global: view_vborder
global: view_visible
global: view_vspeed
global: view_wport
global: view_wview
global: view_xport
global: view_xview
global: view_yport
global: view_yview
global: working_directory
local: alarm
local: bbox_bottom
local: bbox_left
local: bbox_right
local: bbox_top
local: depth
local: direction
local: friction
local: gravity
local: gravity_direction
local: hspeed
local: id
local: image_alpha
local: image_angle
local: image_blend
local: image_index
local: image_number
local: image_single
local: image_speed
local: image_xscale
local: image_yscale
local: mask_index
local: object_index
local: path_endaction
local: path_index
local: path_orientation
local: path_position
local: path_positionprevious
local: path_scale
local: path_speed
local: persistent
local: solid
local: speed
local: sprite_height
local: sprite_index
local: sprite_width
local: sprite_xoffset
local: sprite_yoffset
local: timeline_index
local: timeline_position
local: timeline_speed
local: visible
local: vspeed
local: x
local: xprevious
local: xstart
local: y
local: yprevious
local: ystart
.....
điểm dễ phân biệt biến cố định với 2 biến kia là biến này khi viết đúng nó sẽ thành chữ xanh blue nhạt . còn 2 loại biến kia thì màu đen . ngoài ra , nên hiểu biến cố định sẽ tự hoạt động , chúng ta chỉ thay đổi nó thôi , còn 2 biến kia ta phải làm các hoạt động cho chúng cũng như thay đổi chúng . ví dụ như image_angle ban đàu là 0 , ta cho angle=90 thì nó sẽ cái hình của object nó sẽ xoay 1 góc vuông ngược chiều kim đồng hồ ...
2. TẠO 1 BIẾN :để tạo 1 biến mới , thông thường bạn gán nó 1 giá trị nào đó , và đặt nó vào 1 event , thông thường là create
ví dụ :
event create , code :
Trích dẫn nội dung:
mau=100
như vậy khởi đầu của object đó , bạn đã cho nó có máu =100 , về tên biến thì thích đặt sao cũng được , life=100 , live=100 cũng ko sao , miễn sao là bạn xài nó như thế nào .
hay 1 ví dụ khác :
event create, code :
Trích dẫn nội dung:
so_luong_dan=0
khởi đầu object này sẽ có 0 viên đạn ..
hay event create :
Trích dẫn nội dung:
sprite_index=sp_hero_stand
...
3. THAY ĐỔI BIẾN :
sau khi bị chém , trúng đòn chẳng hạn thì hero của bạn sẽ bị mất máu , như vậy bạn cần phải "trừ " máu của hero đi
trong event mà hero bị trúng đọn , tất nhiên chả có event nào tên thế cả mà do bạn lâp trình như thế nào đó thì mới có event đó , ví dụ như event consoli ( va chạm ) vơi viên đạn chẳng hạn . thì lúc này đây chính là event bị trúng đòn :
Trích dẫn nội dung:
mau-=10
đó là trừ đi , muốn cộng thêm , ví dụ lặt được bình máu rồi uống :
Trích dẫn nội dung:
mau+=10
hay cấp số nhân , chia :
Trích dẫn nội dung:
mau/=2
mau*=2
...
hay chỉ muốn thay đổi ko theo quy tắc :
Trích dẫn nội dung:
life=40
máu=56
sprite_index=sp_hero_war
...
4. HỎI XEM BIẾN CÓ ỨNG VỚI 1 GIÁ TRỊ NÀO ĐÓ :
giả sử như bạn muốn xem máu hero còn ko , có nghĩa là lớn hơn 0 hay ko để còn biết mà cho hero chết chứ , vì đâu phải life < 0 thì hero tự chết , ta phải lập trình ra thôi
Trích dẫn nội dung:
if life <= 0
...
hỏi xem life có bé hơn hay bằng 0 hay ko , sau đó tại ... ta sẽ viết hành động cụ thể cho nó , ví dụ
Trích dẫn nội dung:
if life <=0
instance_destroy()
nếu nó bé hơn hoặc bằng 0 thì cho nó destroy , phá hủy nó
hỏi lớn hơn
Trích dẫn nội dung:
if life > 0
NẾU KO ĐÚNG VỚI CÂU HỎI ?
giả sử tại thời điểm đó , bạn hỏi nó xem nó lớn 0 hay ko
Trích dẫn nội dung:
if life > 0
mà lúc này nó lại nhỏ hơn 0 , tức ko đúng với câu hỏi thì ko lẽ phải hỏi 1 lần nữa xem nó có bé hơn hay bằng 0 hay không ???
ta dùng else
cụ thể :
Trích dẫn nội dung:
if life > 0
exit
else
instance_destroy()
nếu life mà lớn hơn 0 thì exit event chả bàn đến nữa . nếu else , nếu như điều đó sai thì có nghĩa là nó ko lớn hơn 0 thì chắc chắn phải bé hơn hoặc bằng 0 gòi , thì lúc này ra cho nó die luôn .tất nhiên viết theo code này thì hơi ngu vì chỉ cần viết :
Trích dẫn nội dung:
if life<=0
instance_destroy()
là được . chẳng qua giới thiệu chơi chơi thôi .
về biến ban đầu cơ bản bạn cần nắm ít lý thuyết đó
III. CÁC CODE CƠ BẢN HAY XÀI :đây là 1 số lệnh cơ bản mà newbie cần nắm để xài trong bài thực hành đầu tiên sắp tới . mình cũng chỉ nói tóm tắt , thực hành sẽ hiểu sâu
1.THỂ HIỆN 1 HÌNH ẢNH VÀ BIẾN :
CHÚ Ý CÁC HÀM DRAW_... CHỈ HOẠT ĐỘNG TRONG EVENT DRAW
để hiện thị 1 hình ảnh trong room bạn cho code :
draw_sprite(sprite,subimg,x,y)
với
sprite là tên hình ảnh của bạn , tức là tên của sprite
subimg là lượng hình ảnh cần hiển thị : -1 có nghĩa là hiển thị tất cả hình động của nó . 0 là chỉ hiển thị hình thứ 1, 1 là hình thứ 2, 2 là hình thứ 3 ....của sprite đó
x,y là tọa độ tròng room cần hiển thị . chú ý là phía trên góc trấi là tọa độ x=0 , y=0
càng xuống dưới y tăng lên , càng về bên phải x tăng lên .
để thể hiện 1 biến : ví dụ bạn muốn thể hiện số tiền của bạn để mà còn biết :
dùng hàm :draw_text(x,y,string)
x,y là tọa độ string là tên hàm
ví dụ tại event create bạn cho :
Trích dẫn nội dung:
life=100
event draw :
Trích dẫn nội dung:
draw_text( 100 , 200 , life )
biến muốn draw cần được tạo trước đó , thông thường tạo ngay create
2. RANDOM
bạn muốn đổ 1 con xí ngầu để được 1 số , bạn cần cho code
Trích dẫn nội dung:
xi_ngau=round(1+random(5))
hàm round để lấy số nguyên . tại sao là 1+random ( 5)
khi xài random , con số sẽ là số thập phân sau con số 0 2 số :nghĩa là random(5) sẽ chọn 1 trong các con số :
0.00,0.01,0.02....4.99,5.00
cộng thêm 1 ta sẽ được dãy số chọn là :
1.00,1.01,1.02....5.99,6.00 , ta đã biết quy tắc làm tròn > 0.5 là tròn 1 , < 0.5 la` lam` tròn 0
thêm round nó sẽ chọn :
1,2,3,4,5,6
và ta có các số của con xí ngầu .
tuy nhiên ta có thể làm đơn giản hơn :
Trích dẫn nội dung:
xi_ngau=choose(1,2,3,4,5,6)
với hàm này sẽ chọn 1 trong 6 số đó .
việc dùng choose thì đơn giản hơn , tuy nhiên ko dùng trên quy mô rộng được . còn hàm random thì rộng như ví dụ muốn chọn 1,3,4 thì chịu phải dùng choose .
biến ko phải là số thì chắc chắn phải dùng choose
vd : Trích dẫn nội dung:
item_create=choose( kiem_rong , kiem_bang , kiem_lua )
tất nhiên mấy cái kiếm đó phải là object hoặc sprite , hoặc là 1 tên biến khác chứ làm gì sẵn có .
3. KIỂM TRA XEM CÓ 1 OBJECT TẠI 1 NƠI NÀO ĐÓ
giả sử ta hỏi xem có phải con chuột đang chỉ lên 1 object nào ko . để chúng ta làm nút ấn bị đè như các menu
ta cho code
if position_meeting(x,y,obj)
với x, y là tạo độ cần kiểm tra , obj là object cần kiểm tra
ví dụ nhwu ví dụ trên :
Trích dẫn nội dung:
if position_meeting(mouse_x,mouse_y,ob_buttons)
với mouse_x, mouse_y là 1 BIẾN CỐ ĐỊNH chỉ tọa độ của con chuột , nhưng biến này ko thay đổi được .
4. SHOW 1 THÔNG BÁO :
bạn muốn thông báo khi bạn thua và gameover ?cần 1 thông báo khi bi thua
dùng code ;
show_message(str)
với str là điều cần show , lưu ý là phải để trong "" nếu như nó là 1 câu nói " gameover , you lose ! " chẳng hạn . lúc đo bạn viết
show_message(" gameover, you lose ! ")
tuy nhiên nếu trước đó bạn đã để nó trong 1 biến . ví dụ
event create
Trích dẫn nội dung:
mesa=" gameover youlose ! "
đến lúc cần show , khi bị thua
show_message(mesa)
5. KẾT THÚC GAME
khi bạn muốn kết thúc game , như nhấn vào nút exit chẳng hạn . dùng code
game_end()
muốn chơi lại game , restart
game_restart()
muốn lưu game
game_save(string)
string là tên game có tròn dấu "" ví dụ
game_save("game.sav")
load game đã lưu
file_exists(fname)
game_load(string)
fname và string là tên game lưu trong dấu "" ví dụ
Trích dẫn nội dung:
file_exists("game.sav")
game_load("game.sav")
phải kiểm tra xem nó có tồn tại ko mà còn load , ko thì lỗi file_exist
6. VỀ IMAGE_SINGLE
là số hình trong sprite mà object sẽ thể hiện , -1 là tất cả , 0 là hình thứ 1 , 1 là hình thứ 2 ...
THỰC HÀNH :
I. SUY NGHĨ VỀ THỂ LOẠI GAME :
vì tút đầu này mình chỉ chủ yếu hướng đến biến và 1 và 1 vài hàm cơ bản cho nên chỉ làm 1 game nho nhỏ dùng khá nhiều biến để các bạn làm quen dần
game của chúng ta sẽ là 1 game dạng đánh bạc , người chơi có 1 khoản tiền , thông qua các trò chơi để kiếm nhiều tiền , lấy điểm số .
các trò chơi có thể bao gôm : buôn ngọc , đua ngựa , cào vàng ... lát tính sau
trong bài này , mình chủ yếu hướng tới việc xây dựng code , còn kĩ năng làm room hay mấy thứ linh tinh nhỏ nhặt thì các bạn tự luyện vì chả có gì khó cả . đem mấy cái đó vô chỉ làm nhức đầu , chậm bài viết , tốn tiền mình , mình nản
II. CHUẨN BỊ :'cần chuẩn bị trước sprite , ở đây mình đã chuẩn bị mới đây 20 phút , bạn down file chứa sprite phía dưới .
III.CODING....
sau khi down cái file chứ sprite về rồi , trong đó mình đã cố định tên các sprite , các bạn miễn đổi để nhầm với bài viết .
1. TẠO ROOM MENU:để bắt đầu game , ta cần làm 1 room menu , trong đó người chơi có thể chọn chơi mới , hay load lại từ file game đã saved , hay xem credit ( người lập trình ) , hoặc thoát .
do phần này khá cơ bản cho nên mình sẽ dành nó làm sau , mà chỉ làm 1 cái play để chúng ta vào room sau .
mục đích của chúng ta làm room này trước là để các biến ( var ) được tạo ra từ ngay khi mới vào game , để sau này khỏi mất công tạo . việc tạo trước có thuận lợi là tránh được lỗi , nhiều khi trong lúc đang chơi có thể do biến tạo quá nhiều ko kịp có thể gây lỗi .
tạo 1 object đặt tên ob_button_play , lấy sprite cho nó là sp_button_play .
chúng ta đã biết khi con chuột chúng ta đè lên 1 cái nút thì nó sẽ chuyển màu báo hiệu , việc chuyển màu các bạn xem sprite thì rõ , còn chúng ta cần lập trình ra nó . vì sẽ có nhiều button trong game , cho nên chúng ta chỉ việc tạo ra 1 script rồi xài cho nhiều button . để tạo nó bạn add script ( create a script ) đặt tên sc_mouse
bạn cho code :
Trích dẫn nội dung:
if position_meeting(mouse_x,mouse_y,self)
image_single=1
else
image_single=0
câu lệnh này có nghĩa : nếu như vị trí con chuột đè lên object self , self tức là chủ của script này tức là object mới load nó . việc ghi self mà ko ghi cố định 1 object nào để chúng ta có thể làm nhiều cho nhiều object.
thì sprite của nó sẽ chuyển về image số 1 ( tức thứ 2 )
nếu sai :
nó chuyển sang image số 0 ( tức thứ 1 )
sau đó bạn vào ob_button_play , add event step , code
Trích dẫn nội dung:
sc_mouse()
như vậy trong step , ob này sẽ load code này và ta có được cái ta muốn .
chúng ta cần load các biến cần thiết cho game .
trong trò chơi buôn ngọc , người chơi sẽ mua các viên ngọc và bán lại kiếm lời khi giá tăng . như vậy ban đầu nó cần có 1 giá xác định .vào event create của ob_button_play:
Trích dẫn nội dung:
global.ruby_red_cost=1000
global.ruby_green_cost=1500
global.ruby_blue_cost=1800
global.gem_pink_cost=3000
global.gem_orange_cost=3700
global.gem_yellow_cost=4000
chúng ta có 6 loại ngọc vơi giá tiền khác nhau , vậy làm sao chúng ta xác định xem chúng ta có bao nhiêu các loại ngọc trong trò chơi, chúng ta phải dùng biến global . sở dĩ dùng global vì global sẽ lưu lại trong suốt quá trình chơi , dù chúng ta có nhảy từ room này sang room khác đi chăng nữa , còn biến thường thì ko lưu lại do các room có nhiều object khác nhau
tiếp tục vào event create của ob_button_play , chúng ta thêm vào 1 đoạn code :
Trích dẫn nội dung:
global.ruby_red_have=0
global.ruby_green_have=0
global.ruby_blue_have=0
global.gem_pink_have=0
global.gem_orange_have=0
global.gem_yellow_have=0
nhwu vậy khởi đầu ta có 0 ruby và game .vậy làm sao ta mua được chúng , ta phải có tiền ban đầu . tiếp tục với event trên :
Trích dẫn nội dung:
global.my_gold=10000
khởi đầu ta có 10000 lập nghiệp .
xong gòi , bước khởi đầu là thế , giờ ta tạo room menu :
add room , đặt tên ro_menu , bạn đặt ob_button_play vào giữa room
quay lại với ob_button_play , nhiệm vụ chính của nó là làm nút để nhấn và chuyển qua room của trò chơi .
event mouse left pressed code :
Trích dẫn nội dung:
room_goto(ro_play)
tất nhiên room này chưa được tạo nhưng tạo sau cũng được .
II. TẠO ROOM PLAY
chúng ta sẽ có nhiều trò chơi , như vậy sau khi người chơi nhấn play thì chuyền vào 1 rôm play , mà tại đây ta có thể vào nhiều trò chơi , như vậy ta cần làm các nút để đến với các trò chơi và đặt tròng room này :
tạo ob_shop , sprite : sp_shop
event step , nó cũng là button nên cho tương tự như button play
Trích dẫn nội dung:
sc_mouse()
event mouse left pressed :
Trích dẫn nội dung:
room_goto(ro_shop)
tạo room mới , tên ro_play
đặt ob_shop vào 1 góc phía trên để đặt các object khác sau này , bạn có thể tham khảo file exe game mình gửi
ở room play này , ngoài đặt các button để với các trò chơi , ta cũng nên show tiền cũng như số lượng các loại ngọc .
trước hết tạo 1 cái font nào đó vừa vừa , với kích thứoc khoảng 13 , đặt tên là fo_gold
tạo ob_yourgold sprite : sp_yourgold
event draw
Trích dẫn nội dung:
draw_set_font(fo_gold)
draw_set_color(c_yellow)
draw_sprite(sprite_index,-1,x,y)
draw_text(x+10,y,global.my_gold)
đây là script để draw số gold của bạn .
-set font để draw
set color để draw với màu vàng , gold mà
draw đầu tiên là draw chính sprite của object này , vì sao , vì khi xài event draw , sprite của object này sẽ ko hiển thị , ta phải draw nó lên
draw thứ 2 là draw gold , x+10 là vị trí tính từ vị trí của object này , tương tự như y
III. TẠO ROOM SHOP GEM & RUBY
trong room này là cửa hàng gem và ruby để bạn có thể mua hay bán . bạn cần draw mêt nghỉ .
chúng ta cần 1 cái exit
tạo object tên ob_exit_shop sprite sp_exit
svent step tương tự 2 cái trên
event mouse left pressed :
Trích dẫn nội dung:
room_goto(ro_play)
ta cần draw 1 số thứ về giá cả của các viên ngọc
create object tên ob_shop_cost sprite sp_shop_cost
event draw
Trích dẫn nội dung:
draw_sprite(sprite_index,-1,x,y)
draw_text(250,80,global.gem_pink_cost)
draw_text(250,125,global.gem_orange_cost)
draw_text(250,165,global.gem_yellow_cost)
draw_text(250,210,global.ruby_green_cost)
draw_text(250,255,global.ruby_blue_cost)
draw_text(250,295,global.ruby_red_cost)
draw_text(350,80,global.gem_pink_have)
draw_text(350,125,global.gem_orange_have)
draw_text(350,165,global.gem_yellow_have)
draw_text(350,210,global.ruby_green_have)
draw_text(350,255,global.ruby_blue_have)
draw_text(350,295,global.ruby_red_have)
xong gòi đặt nó vào 1 vị trí thích hợp , nên test để chọn vị trí thích hợp .
kế tiếp ta đặt thêm ob_your_gold vào bên dưới , xem file exe
lúc này ta cần tạo các object buy ( mua )
create object ob_buy_gem_pink sprite sp_buy
event mouse left pressed
Trích dẫn nội dung:
if global.my_gold>=global.gem_pink_cost
{
global.my_gold-=global.gem_pink_cost
global.gem_pink_have+=1
}
nó sẽ kiểm tra xem số tièn có đủ lớn hơn giá ngọc pink hay ko để mua , nếu đủ thì số ngọc pink tăng lên 1 và số tiền bị trừ đi với giá đó
cac bạn làm tuơng tự cho 5 loại ngọc còn lại , chú ý chỗ nào có gem_pink thì đổi thành gem_orange,..ruby_green hết .
sau khi làm xong 6 object buy , ta sẽ làm các object sell
create object ob_sell_gem_pink sprite sp_sell
event mouse left pressed
Trích dẫn nội dung:
if global.gem_pink_have>0
{
global.my_gold+=global.gem_pink_have*global.gem_pi nk_cost
global.gem_pink_have=0
}
kiểm tra xem có còn ngọc để bán ko , sau đó tiền sẽ được cộng thêm bằng số ngọc nhân với số tiền . sau khi bán số ngọc sẽ hết .
làm tương tự cho các object còn lại chỉ thay gem_pink
bây giờ bạn vào room đặt các object này , chú ý các sprite giống nhau nên đặt 1 cái xong gòi chọn object khác để đặt tiếp .
bi chừ bạn 1 object để thoát ra khỏi ro_play
ob_exit_play sprite : sp_exit
event step :
Trích dẫn:
Trích dẫn nội dung:
sc_mouse()
event mouse left pressed :
Trích dẫn:
Trích dẫn nội dung:
room_goto(ro_menu)
rồi quảng vô ro_play
chúng ta tạo object ob_button_exit
sp_button_exit
event step
Trích dẫn:
Trích dẫn nội dung:
sc_mouse()
event mouse left pressed:
Trích dẫn
Trích dẫn:
Trích dẫn nội dung:
game_end()
đặt vào ro_menu
như vậy ta đã bán , mua được gòi , bây giờ ta sẽ làm cho các giá trị của các viên ngọc thay đổi lên xuống tùy hứng
quay trở lại ob_shop
event create
Trích dẫn
Trích dẫn:
Trích dẫn nội dung:
global.gem_pink_cost+=choose(-800,-500,-200,0,200,350,450,550)
global.gem_orange_cost+=choose(-850,-550,-350,0,300,450,700,800)
global.gem_yellow_cost+=choose(-900,-750,-350,0,250,450,600,700)
global.ruby_green_cost+=choose(-600,-450,-250,0,350,600,700,900)
global.ruby_blue_cost+=choose(-500,-450,-300,0,200,600,750)
global.ruby_red_cost+=choose(-800,-600,-300,0,200,400,600,700)
như vậy ta đã có sự thay đổi nguẫ nhiên , mỗi khi chúng ta thoát ra thì vào lại , số tiền sẽ thay đổi và ta có thể kiếm lời bằng việc bán các viên ngọc lên giá đồng thời mua thêm ngọc ...
bây giờ ta sẽ làm save game và load game
lưu như thế nào , do mới làm game đầu cho nên chưa cần cầu kì lưu lắm , khi người chơi thoát ra menu thì lưu lại thế thôi :
ob_exit_play
event mouse_left_pressed
ở trên lúc nãy là
Trích dẫn
Trích dẫn:
Trích dẫn nội dung:
room_goto(ro_menu)
ta đổi nó thành
Trích dẫn
Trích dẫn:
Trích dẫn nội dung:
game_save("game.sav")
room_goto(ro_menu)
ra room menu ta làm load , tạo object mới , tên ob_button_load , sprite : sp_button_load
event step :
Trích dẫn
Trích dẫn:
Trích dẫn nội dung:
sc_mouse()
event mouse left pressed :
Trích dẫn
Trích dẫn:
Trích dẫn nội dung:
if file_exists("game.sav")
game_load("game.sav")
rồi đặt tròng ro_menu
săc, mỏi cổ ,mỏi lưng , mỏi tay . thôi để sau viết tiếp , giờ đói gòi , cứ làm tạm đến đây đã .cũng chơi được sơ sơ gòi .
Link Download Trực Tiếp : (cần có tài khoản)
https://www.yoyogames.com/download/studio/free
Không có nhận xét nào:
Đăng nhận xét