Trang

24/12/12


Nhân vật RPG có thể đàm thọai :

- Hôm nay mình Up lên đọan clip mô tả tính chất trên.
. Hình mình họa chính là cái hộp thọai định cấu hình game trước khi chạy của mình. Chắc là vào game thì sửa nó lại sau, bây giờ tạm thế đã.
- Bây giờ nhân vật của mình có thể đàm thọai thỏai mái rồi, nhân vật có thể nói các câu chào, câu hỏi và câu trả lới, sau đó có thể họat động theo các kịch bản tiếp theo.
- Tuy nhiên mình đang bị vướng với cái kịch bản đi theo Map định sẳn, mình vẫn chưa tìm ra lổi gì mà nó không kết hợp được với cái này, nên đọan demo này nhân vật sau khi đàm thọai xong thì chuyển sang chế độ đi tự do
- Thôi tối nay về nghiên cứu tiếp
- Kế họach tiếp theo trong việc lập trình của mình là : lập class quản lý các sự kiện. Khi tạo được class này thì mình có thể định trước các sự kiện trong quá trình biên sọan Level Editor, sau đó lưu hẳn vào trong Level luôn chứ không cần lập trình thêm.
* Vậy là sau khi xong cái class đó thì mình sẽ đưa Demo lên luôn, nhưng mình chỉ đưa các free model thôi, chủ yếu là kiểm tra game play, còn các mô hình của mình thì đến khi có bản release Alpha hay Beta mới có thể đưa lên được (Mình chưa sơn phết gì cho nó cả )
- Sau đây là đọan clip demo cho việc nhân vật có thể đàm thọai :
 
MỘT SỐ GAME MÌNH THÍCH :

- Từ hồi mới bắt đầu chơi game, với những game 2D truyền thống, mình thích nhất là mấy cái trò trên máy điện tử. Hồi đó tốn cũng khác tiền để chơi game.

- Sau đó, lúc đi học đại học, mình mê chơi game trên PC hơn, do game trên PC hình đẹp và cốt truyện hay với lại mình cũng mê lập trình được các game như vậy.

- Ra đi làm, mình vẫn thích chơi game, lúc này trên PC đã có nhiều thể lọai game lắm rồi , và lại là game 3D nên mình rất mê. Có hôm chơi quên cả ăn, chơi game liên tục hết cả ngày. Cũng mai là lúc đó chưa có game online chứ nếu co chắc mình lâm nạn luôn rồi.

- Bây giờ bắt đầu vào tự làm game mình chơi, mình cũng bị ảnh hưởng rất nhiều với một số game tâm đắc.

+ Kẽ triệu hồi : the summoner của THQ, mình sẽ cố gắng làm game Vua Heo theo phong cách này.

+ Rune Rune của GigaByte, Blood Rayne, hay các game Harry Potter của EAGame, game Soul Reaver của EIDOS, mình sẽ cố làm game "Sáu vùng đất" theo phong cách này.

- Sau đây mình đưa ra một số hình giới thiệu của chúng :

*Game Rune Rune


Free Image Hosting

*Game Blood Rayne


Free Image Hosting

* Game Harry Potter


Free Image Hosting
Demo phần giới thiệu game : truyền thuyết vua Heo

- Tuần rồi, do bận đi công tác hết 01 tuần nên mình không có thời gian lên mạng. Xin lổi đã không thông báo và cũng không kịp up đọan demo này lên nữa. Bây giờ về rồi mình mới có thời gian up nó lên đây.

- Mình đã làm xong phần demo hiện lên trong phần giới thiệu ban đầu cho game của mình. Hiện giờ mình còn cần nhiều cái để hòan thành lắm, như tạo class Item nhằm quản lý các đồ vật trong game, cải tiến class nhân vật để dùng cho hệ thống animation mới phù hợp Irrlicht-1.4.1 .

- Class Item mình đã cơ bản làm xong, còn phải thiết lập các tham số phụ thuộc như việc chuyển đổi thành tiền tệ ( mình dùng là đồng vàng

.




- Dưới đây là đọan clip mình vừa up lên YouTube. Nhờ các bạn đóng góp ý kiến nhé

:

 
Demo 3D sound và demo các hiệu ứng phép thuật + tự nhiên
:


- Hôm nay mình Up lên cái demo 3D sound dùng audiere và một đọan video clip thể hiện các hiệu ứng phép thuật và một số hiệu ứng tự nhiên.


- Địa chỉ download demo 3D sound :


Và sau đây là đọan video clip mô tả mộ số hiệu ứng trong game của mình :
Họat cảnh Rồng & Phượng :

- Hôm trước bị hư mất con phượng hòang khi làm họat ảnh. Hôm nay mình làm lại xong rồi.

- Tiện thể mình cũng làm một clip các bạn xem qua.

- Hiện giờ mình đã làm xong Class nhận sự kiện. Đang chuẩn bị làm tiếp class Intro cho game.

- Hẹn gặp lại các bạn !!!!

- Dưới đây là đọan clip :

Mấy bài thơ của Ba
Nhớ thầy cô

Hè về cung sầu ve trổi nhạc

Cánh phượng hồng lác đác tung bay

Nhớ xưa áo trắng những ngày

Sân trường tụ họp như mây trên trời

Còn in đậm bao lời giảng dạy

Giọng ôn tồn đậm mãi hồn tôi

Đò ngang thầy đã đưa nhiều

Tôi cùng bao bạn ra đời mưa sinh

Phút chốc như bình minh chói lọi

Hình ảnh cô đang gợi trong tôi

Nụ cười luôn hiện trên môi

Ánh mắt chứa đựng một trời tình thương

Đôi vai nhỏ tóc huyền buông xõa

Gót chân son thon thã nhẹ nhàng

Mi cong cong vút đôi hàng

Mày cong mủi thẳng da càng trắng xinh

Bao tháng năm bon chen vất vã

Chưa một lần trở lại trường xưa

Nhớ thầy những buổi chiều mưa

Thương cô vất vã nắng mưa nhọc nhằn

Công giảng day bao giờ đền đáp

Chỉ cầu mong thầy mạnh cô an

Nhớ thầy cô có ít hàng

Thương sao bụi phấn thời gian trắng nhiều.



Trống không

“Trông khống” vô phòng thấy trống không

“Chứa chan” sầu lệ chán chưa chồng

“Dầu chong” lai láng dầu chong đợi

“Bóng nhạn” lưng chừng bạn nhóng trông

“Ngó đã” cùng đường nơi ngả đó

“Mơ màng” bên cạnh gói mềm bông

“Đêm thâu” khuya khoắc đâu thêm mãi

“Xông lướt” đi tìm phải xước lông.


Bể sầu

Rượu biến tâm tư vạn nẻo sầu

Đường đời muôn nèo biết về đâu

Sầu dâng dâng mãi đâu là bến

Để mặc thuyền sầu trước bể dâu.
Kịch bản game - truyền thuyết vua Heo
Chương I : Vương triều bị mất, hòang tử lưu lạc nhân gian

Mở đầu là cảnh một quốc gia rất phồn thịnh, người dân sống rất thanh bình. Nhưng đó chỉ là bề ngòai, bên trong đang có một âm mưu rất lớn, âm mưu lật đổ nhà vua của Tam Vương Gia tàn ác đã có kế họach từ lâu, Ông ta đã mua chuộc các quan lại, lập lên một bè cánh rất mạnh trong triều đình, và bây giờ Ông ta quyết định mình sẽ lên làm vua.(Tại sao ngôi báu lại truyền cho người anh mà không truyền cho ông ta?)

Bên một ngõ tối của cung đình, một tốp các tên sát thủ bị mặt thầm lặng tiến vào. Đây chính là nơi gần phòng ngủ của nhà vua và hòang hậu.

Bên trong phòng : vua và hòang hậu đang chơi đùa cùng hòang tử.Có lẻ 02 người rất hạnh phúc khi hòang Hậu hạ sinh được 01 hòang tử kháu khỉnh, xinh đẹp. Hòang tử đã tròn 01 tuổi. Bên ngòai cửa là vị quan hộ vệ thân tín của nhà Vua tên ông ta là Nhất Hùng một người rất giỏi võ nghệ.

Bỗng một tiếng động lớn vang lên, hòang tử giật mình khóc thét lên, vua và hòang hậu nhìn ra ngòai thì ra là một cảnh đánh nhau khủng khiếp, quan hộ vệ la to lên "Hộ giá" nhưng quân canh phòng xung quanh đã bị giết chết hết. Khói bốc lên màu xanh ghê sợ...Một mình quan hộ vệ tả xung hữu đột nhưng bọn sát thủ rất đông và được trang bị cung tên nên ông đã bị trúng tên vào vai với lại khói kia chính là khói độc làm ông mất sức nhanh chóng.Tuy nhiên ông vẫn liều mình xông vào nhà để bảo vệ vua và hòang hậu.

Trong phòng nhà vua đang chiến đấu dũng cảm, nhưng do tuổi già sức yếu và bọn thích khách rất đông nên ông đã bị thương, lúc đó quan hộ vệ Nhất Hùng xông vào kịp cạnh bên vua, ngài bèn trao hòang tử cho Ông và nói hãy đưa hòan tử rời khỏi kinh thành lập tức, nhà vua đã nhận ra đây là âm mưa của Tam Vương Gia muốn chiếm ngôi, hòang hậu cũng đã bị trúng tên nằm bất động, bà đã chết. Bọn sát thủ xông vào vua và Nhất Hùng hợp sức chống lại, Nhất Hùng một tay ôm hòang tử, một tay cầm kiếm chiến đấu rất mãnh liệt.

Bổng một pháp sư với gương mặt bên đen bên trắng xuất hiện, lập tức ông ta niệm thần chú một luồng lữa xanh xuất hiện bay thẳng đến chổ vua và Nhất Hùng. Nhà vua nhìn thấy liền lấy thân mình che ngay luồng lữa ấy, ông ráng lấy hết sức bình sinh đẩy Nhất Hùng cùng hòang tữ vào trong một cái góc tủ lớn, thì ra đó là một mật thất.Nhờ đó mà Nhất Hùng và hòang tử thóat chết trong gan tất, nhưng nhà vua thì gục ngay xúông, tắt thở.

Lại nói về quan hộ vệ Nhất Hùng tay ôm hòang tử lần theo con đường bí mật, ông đóng lại cánh cửa phía sau, nhưng bọn sát thủ đã theo đến, chúng đập phá cánh cửa một cách dữ dội. Ông chạy nhanh men theo con đường và thóat ra ngòai trường thành, thì ra con đường này dẫn ra ngòai hòang cung. Lấy một con ngựa ông phi nhanh đi nhưng phía sau bọn sát thủ với sự giúp sức của pháp sư mặt đen trắng đã phá được cánh cửa và cũng lên ngựa đuổi theo.

Đến tối, quan hộ vệ Nhất Hùng đến một ngôi làng nọ. hòang tử đói bụng khóc rất nhiều, ghé vào nhà một gia đình nông dân hiền lành.,nhờ xin một ít cháo cho hòang tử ăn, nhưng lúc đó thì bọn sát thủ đã tiến theo rất gần. Trao hòang tử cho 02 vợ chồng nông dân sau khí đã nói một điều gì đó, quan hộ vệ Nhất Hùng lấy một cái gối quấn cái khăn chòang của hòang tử xung quanh, ông lên ngựa phóng đi nhằm đánh lạt hướng bọn sát thủ. Nhưng chạy đến một mỏm núi thì hết đường, bên dưới là vực sâu mà đằng kia là bọn sát thủ phi ngựa theo. Quá mệt vì vết thương công với sự tấn công bất ngờ từ tên pháp sư đánh trúng ông rơi xuống vực cùng với chiếc gói được chòang tấm khăn của hòang tử. Bọn sát thủ cùng tên pháp sư xuống ngựa đến xem xét, vực quá sâu, chúng cười rồi bỏ đi.

02 năm sau khi Tam Vương Gia lên ngôi vua, ông cai trị thần dân một cách rất hà khắc, tăng xu thuế, tăng cường đàn áp các cuộc nội lọan diễn ra liên miên do không ai chịu khuất phục trước một ông vua tàn ác, lại ăn chơi xa đọa....Thiên tại, bệnh dịch hòanh hành, người dân sống trong cảnh cùng cực lầm than.Khu làng mà hòang tử sống bị một trận dịch kinh hòang, tất cả mọi người đều bỏ đi, người ở lại thì bị chết rất nhiều. Gia đình 02 vọ chồng nông dân nhận nuôi hòang tử cũng không ngọai lệ, họ mắc phải bệnh và qua đời.Tuy nhiên hòang tử lại không mắc bệnh dịch có lẻ do thần phật giúp đở.

Hòang tử bây giờ chỉ là một cậu bé 03 tuổi, do quá đói lang thang ra ngòai đường lớn tìm thức ăn, nhưng vẫn không có gì, một quan cảnh điêu tàn hiện ra trước mắt. Hòang tử khóc rất nhiều và men theo con đường chính...Bổng có một đòan người, ngựa đi qua, họ là đòan gia đình của một ông quan lớn, đi dầu là một ông quản gia tốt bụng, họ đang trên đường về kinh. Trong thấy một cậu bé mồ côi vừa đi vừa khóc do đói bên đường, thấy tội nghiệp cậu bé, viên quản gia bảo gia đình một gia đinh đã đứng tuổi, chưa có con nhận cậu bé về nụôi sẳn sau này khi lớn lên làm người sai vặt cho nhà quan luôn thể. Hòang tử như vậy lại được cứu sống, nhưng phải sống như là tôi tớ trong gia đình vị quan nọ.

Từ đó không còn ai biết đến lai lịch của hòang tử, chỉ trừ một người, một người rơi xuống vực nhưng không chết do chiếc khăn chòang mang theo đã quấn vào một cành cây khi rơi xuống đó chính là quan hộ vệ Nhất Hùng, đầu ông bị đập mạnh vào đá, ông bị mất trí tạm thời. Được một người tiều phu cứu chữa, ông đã ở nhà người đó phụ giúp công việc như một người bình thường do ông không còn nhớ những gì trước đây. Ông vẫn thường ra lại vách đá nơi mà mình rơi xuống để cố nhớ xem mình là ai???. Thời gian thấm thóat trôi qua đã gần 3 năm, một hôm ông nhìn thấy một bầy sói đang đuổi theo một con chó bị lạc chạy về phía mình, ông chợt nhớ đến cảnh ông bị truy đuổi, lóang thóang nhớ ra diều gì, ông bổng thấy một mảnh vải từ dưới vực bị gió thổi lên, đó chính là mảnh khăn bị rách ngày trước đã cứu ông. Cầm lấy mảnh vải, ông nhớ lại tất cả. Ông quay lại cứu lấy con chó bị truy đuổi, từ đó nó là con vật luôn đi theo ông như một cận vệ trung thành.

Về nhà, ông giã từ người tiều phu, lên đường quay lại tìm hòang tử. Nhưng ngôi làng bây giờ đã không còn một ai, mọi người đã chết, một cảnh hoang tàn hiện ra....Ông thất vọng đi lên vùng đất phía Bắc lập một sơn trại khởi nghĩa chống lại nhà vua tàn ác.....

Game bắt đầu với cuộc sống của cậu bé mồ côi sống như một người sai việc trong gia đình vị quan nọ.....

(còn tiếp)
Demo sưu tầm từ Irrlicht forum bởi doqkhanh nhóm fosproject:

- Mình tìm hòai trên forum Irrlicht mà chưa thấy có ai mô tả cụ thể về New Animation system. Mai thay hôm rồi gặp bạn doqkhanh nhóm fosproject có cung cấp source mô tả cụ thể. Rất cám ơn bạn.

- Mình tải về và làm nó cụ thể thành một cái demo nho nhỏ nhằm giúp cho các bạn có nhu cầu dễ dàng dùng nó.

- Mình thêm vào một số các câu lệnh dùng cho camera và sửa lại cái source của bạn doqkhanh cho nhân vật có thể có chuyển động trong trạng thái idle.

- Các bạn có thể tải bản domo này tại :

http://www.4shared.com/file/49373783/32b6053b/NewAnimationWin.html

* Rất mong sự ủng hộ của các bạn. Rất cám ơn bạn doqkhanh đã cung cấp source nó sẽ giúp cho cái project của mình rất nhiều....
Thiết kế mô hình và trang phục mới cho nhân vật game :

- Tuần rồi đánh vật với mấy cái mô hình trang phục nhân vật, bây giờ cơ bản mình cũng đã hoàn thành. Mình đã làm được 6 mô hình nhân vật nam và 5 mô hình nhân vật nữ với đầu đủ trang phục kèm theo.

- Trang phục thêm cho nhân vật thì mình mới thiết kế xong phần tóc cho các nhân vật nữ và trang phục đội đầu cho nhân vật nam.

- Bây giờ nhân vật của mình có cái đầu nằm rời và sẽ được thêm váo trong lúc game thực thi, tóc của nhân vật cũng vậy. Như vậy với 5 cái đầu, 5 thâm mình ( đã có trang phục) mình sẽ được 5x4x3x2 = 120 nhân vật có thể là xem khác nhau ( chưa kể là trang phục đôi đầu nữa đó....kinh khủng quá...)

- Các mô hình nhà cửa mình cũng phải làm thêm một số mô hình LOD ( có ít mặt đa giác) dùng cho mô hình nhìn xa hay là các mô hình không thể đi vào trong....

- Cây cối thì mình không sợ thiếu rồi...mà lại có addin tự tạo cây nữa chứ.

- Bà xã mình hỏi sao chưa thấy thiết kế con trùm nào hết vậy. Mình nói là thôi để nhân vật đánh nhau với hổ, báo, cá sấu, trăn khổng lồ... là quá mệt rồi . Nói vậy chứ mình cũng phải thiết kế thêm một số con vật đặc trưng hơn cho phương Đông như rồng, kỳ lân, phượng, thuồng luồng...để cho nhân vật mình trổ tài chứ ( nhưng đến level thật cao mới đủ sức)....

* Hy vọng mình sẽ sớm đưa thêm các screenshot vào các entry sau, Mình sẽ cố gắng đưa ra bản DEMO nhờ các bạn đánh giá dùm nhé....xin cám ơn!!!!!
Nhập file bvh (Poser) vào 3dsMax :

Hiện giờ chương trình chuyển đổi file bvh của Poser vào 3dsMax của mình đả có rất nhiều tiến bộ rồi, Theo entry lần trước mình giới thiệu đoạn video clip được render từ 3dsMax một khung xương (biped) đang nhào lộn. Hôm nay mình sẽ trình bày cách làm sao để được như vậy:

- Trước hết tạo project mới trong 3dsMax

- Trong phần create - system - biped : tạo một khung xương biped trong khung nhìn front.

- Trong phần Motion: chọn bộ khung biped hiện tại, đến mục Motion capture chọn Open - chọn file bvh cần nhập vào.

- Sau khi nhập vào thì hình dạng của bộ khung biped sẽ bị biến đổi như hình trên tiêu đề.

- Chọn Separate mode - > nhấn chọn Arm ( do chỉ có bàn tay bị biến đổi), Chọn 2 bàn tay trên bộ khung biped, Nhấn nút parent mode , sau đó nhấn Clear current track.

- Nhấn Auto key, chỉnh lại bàn tay cho thích hợp, chỉnh lại độ dài trình diễn...Để được kết quả như hình dưới :

- Lưu lại bộ khung biped hiện thời.
- Tạo project mới, tạo bộ khung biped mới, sau đó phần motion capture nhập vào bộ khung biped vừa lưu ( không nhập file bvh).
- Như vậy bạn đã có được một khung biped không bị biến dạng nữa. Sẳng sàng cho việc lắp ráp vào nhân vật.
- Đây là video clip của nó sau khi render bằng 3dsMax :




* Chúc các bạn thành công.
Mới Upload lại một số file (+Update):

1) Trò chơi ô số Sudoku :

- Đây là trò chơi giải ô đó sudoku mình lập trình. Có thể nói đây là bản hoàn chỉnh.

- Có thể tạo và giải các ô số có các vùng không chuẩn 3x3 thông thường.

- Giao diện hoàn toàn 3D

- Địa chỉ download : http://www.4shared.com/file/46366985/2dbd246f/Sudoku3D.html

2) Ví dụ + Class (AIrrpathfinding) tìm đường dùng thuật toán A*:

- Đây là chương trình ví dụ về cách tạo các map chỉ đường trước, lưu lại, sau đó dùng để nạp vào các chương trình khác ( có thê là game)

- Map này dùng cho chương trình RGPCharacter.

- Địa chỉ download : http://www.4shared.com/file/45965433/ad345dd7/PathFinding.html

3) Chương trình RGPCharacter :

- Chương trình này mô tã cách dùng AIrrpathfinding. Nhân vật tự di chuyển theo map vẽ trước.

- Ngoài ra nhân vật trong chương trình còn có rất nhiều chức năng phụ như :

+ Di chuyển tự do không theo đường nào cả.

+ Nhân vật được điều khiển bằng mouse.

+ Nhân vật có thể thực hiện hành động như : tấn công, trò chuyện, đứng yên (idle)...

- Địa chỉ download : http://www.4shared.com/file/45965785/a5e59f70/RPGCharacter.html

* Ngoài ra còn một số file nữa mình đã up lên 4shared.com ....
Quyết định thay đổi thiết kế :

Sau khi đi thành phố học về mình quyết định thay đổi lại cách thiết kế cho game của mình. Bây giờ với sự ra đời của Irrlicht 1.4 hổ trợ rất tốt cho các khung xương và điều khiển bones


Mình quyết định tách nhân vật mình thiết kế ra làm nhiều phần riêng biệt. Sau đó kết hợp nó lại trong game. Với cách thiết kế như thế này có thể thêm cảnh bạo lực vào game nhưng đây không phải là game VUA HEO mà là một game hành động nhập vai khác dành cho ngưòi lớn mình tạm lấy tựa là SÁU VÙNG ĐẤT (cho nên mình mới có thể thêm yếu tố bạo lực vào).


Với cách thiết kế nhân vật như thế thì trong game các bạn có thể thấy cảnh nhân vật bị chém lìa đầu, tay, chân... có cá cảnh máu phun ra vv...nghe ghê quá
! Nhưng nó cũng có thề phù hợp với phong cách game hiện đại.


Như vậy. Công việc hiện giờ mình là tập trung vào thiết kế nhân vật game mới, thiết kế lại khung cảnh nhà, cửa, cung điện... cho game (có thể dùng cho 2 game của mình) , sau đó là thiết kế level cho từng game...


Bên cạnh đó là việc lập trình để kết hợp các phần nhân vật trong game...

Hy vọng mình sẽ sớm hoàn tất các bước cơ bản tạo các class để bắt tay vào làm chính thức...hẹn gặp lại các bạn ở các bản cập nhật của mình.
Nhân vật chuyển động theo đường vẽ trước :

- Đến hôm nay mình xin trân trọng thông báo với các bạn là mình đã hoàn thành lớp nhân vật có thể chuyển động theo đường vẽ trước. Do dùng lớp network trong ( Dùng Airrpathfind.h, và Airrpathfind.cpp để tạo đường đi) cho nên nhân vật chuyển động hoàn toàn theo thuật toán A*, rất nhanh.

- Bây giờ thì mình chỉ cần kết hợp tất cả các hàm lại thành một lớp nhân vật chuẩn duy nhất. Nhưng đây lại là vấn đề khác.

- Với lại nhân vật chuyển động theo kịch bản thì mình đang còn một số vướng mắc, và mình muốn có một số cải tiến (chủ yếu cho có vẽ thật hơn) . Ví dụ : một nhân vật NPC giao nhiệm vụ cho người chơi, nhưng sau đó người chơi tấn công anh ta. Trong các game khác thì điều này không thể thực hiện, nhưng mình muốn là nếu mình tấn công bất kỳ nhân vật nào thì sẽ bị tấn công lại.

- Do đó việc xây dựng kịch bản hiện giờ cần thời gian suy nghĩ thêm.

- Mình đang có ý tưởng về nó như sau : một nhân vật NPC có các hành động ngầm định ban đầu, nếu có tác động từ người chơi thì nhân vật sẽ thay đổi kịch bản tùy tình huống như nói chuyện, tấn công hay đi theo...Người chơi chính có thể tấn công nhân vật giao nhiệm vụ hay các nhân vật vô hại, như thế là tự gậy thù cho mình. Nhưng mình hạn chế để nhân vật không thể tấn công nhân vật cùng loại ( nếu có thì mất máu chứ không thành thù : lỡ tay mà hi hi).

- Hy vọng mình sẽ có nhanh bản demo. Các bạn chờ xem và ủng hộ mình nhé.


- Mình cũng đang sưu tầm được 01 project rất hay dùng cho game FPS đây : sau đây là screenshot
Cải tiến trò sudoku đây : (new Sudoku3D)

- Mình vừa hoàn thành bản đầu tay về trò sodoku hoàn toàn 3D và có thể tạo bản sudoku với các vùng không chuẩn.


- Cám ơn bà xã đã giăng mùng cho mình ngồi cùng với cái máy tính. Mấy hôm rồi muổi quá trời luôn.


- Mình chỉ mới lập nên bản này. Up lên cho bà con đóng góp ý kiến. Hiện giờ nó chưa có chức năng tự tạo vùng cho ô số. Mình đang bó tay về vấn đề này, tối nay nghiên cứu tiếp xem.


- Mà thuật toán cho việc tạo vùng tự do thì mình đã nghĩ ra, chắc là phải dùng thuật giải "vết dầu loang" quá.


- Các bạn có thể tải về chơi thử xem . Mong các bạn góp ý kiến :


Sudoku trở lại :

Mấy hôm rày, lập trình lớp nhân vật RPG hơi bị khó. Mệt quá giải trí chuyển sang đọc báo tuổi trẻ cười : đến cuối trang lại gặp ngay ô số sudoku. Hic nhưng cái này nó lại khác cái bản sudoku chuẩn.

Bà xã bảo mình lập trình giải thử xem, đang thử nhưng chưa thành công, chỉ giải được các bài trên báo cười thôi nhưng chưa tạop ra bảng sudoku ban đầu từ bảng trống với ô số kiểu này.

Cố lên anh yêu!
, nghe bà xã dụ, thế là mình lại lao vào , quên cả công việc chính là lập trình RPG nhưng bây giờ thì lớp nhân vật RPG thì mình đã xong còn cái này thì hic, hic . Chắc hôm nay về phải cải thiện thêm mới được.


Chắc là vài hôm nữa mình sẽ diệt nó chết ngay thôi.


Hẹn gặp lại các bạn với bản sudoku mới này.


* Trời ơi !, làm xong rồi mà chép vào flash lại hà tiện, chỉ chép tệp main.cpp cho nên bây giờ chỉ nhìn mà không làm gì được. Thôi ngày mai Up lên vậy.


* Các cao thủ ơi. Xin giúp mình thuật toán tạo các vùng ngẫu nhiên mà đẹp cho ô số sudoku không (các vùng tạo ra dạng mềm và đẹp)
Lớp hỗ trợ cho việc tìm đường:

- Xin chào!
, chắc các bạn còn thắc mắc là làm sao mà mình có thể tìm đường đi trong một khung cảnh phải không.


- Đáp án của mình là mình dùng thư viện hổ trợ cho việc xây dựng đường đi và tìm đường (Airpathfind.h + Airpathfind.cpp) mà mình đã sưu tầm được he he


// Copyright (C) 2005 Cestmir "CZestmyr" Houska
// This file is using some classes from "Irrlicht Engine".
// For conditions of distribution and use, see copyright notice in Irrlicht.h



- Như vậy. Với một cảnh nhập trước, mình sẽ tự xây dựng đường đi cho nó ( đây là các đường đi trước qua tất cả các phần của khung cảnh , sau đó lưu lại bản đồ đường đi này và dùng sau này.

- Xem hình, các bạn thấy các đường màu vàng đó chính là các đường đi mà ta xây dựng, các chấm lớn đó là các đỉnh của nút tìm kiếm.

- Mình cũng mới vừa nghiên cứu cái lớp này xong, nó hổ trợ tìm kiếm A* nên rất tiện, việc tìm đường đi giữa 02 đỉnh rất nhanh, phù hợp với game hành động thời gian thực.

* Nếu bạn nào cần source của cái thư viện này hãy liên hệ với mình
. Xin chào !


hay các bạn có thể tải về ngay tại :



- Mình cũng vừa cập nhật thêm 02 hàm là lưu mêcung và nạp mêcung. Mình sẽ up nó lên sau.
Xây dựng lớp nhân vật hoạt động theo kịch bản game : - Xin chào các bạn! Mình đã trở lại sau nhiều ngày cài và nghiên cứu thêm
. Mình quyết định xây dựng lại toàn bộ lớp nhân vật cho game của mình.
- Trong khi chơi các game RPG mình thấy người ta làm game nhập vai thì nhân vật hoạt động theo kịch bản định trước. Do đó mình quyết định xây dựng nhân vật theo hướng này:
+ Nhân vật có các kịch bản cơ bản trước như : đứng yên, đi, chạy, đánh nhau,...Từ đó mới xây dựng nên các kịch bản phức tạp khác
+ Một số kịch bản nâng cao: như nhân vật lính canh chẳn hạn, nhân vật đứng đó cho đến khi bạn đi vào vùng quan sát thì sẽ bị tấn công, hay như nhân vật giao nhiệm vụ NPC: nhân vật có thể đi hay dứng, nếu bạn tác động vào nhân vật thì nhân vật sẽ giao nhiệm vụ cho bạn...
- Mình đã cơ bản hoàn thành các kịch bản đơn giản, bây giờ phải tập trung hoàn thành thủ tục để nhân vật di chuyển theo đường định trước ( lúc biên tập màn chơi có các đường này). Mình sẽ dùng lớp AirPathFind để xây dựng bản đồ các đường đi.
- Công nhận là thủ tục này rất khó nhưng mình đã có hướng để hoàn thành.
* Hy vọng mình sẽ sớm đưa lên Demo này sau khi hoàn tất. Chào !
Nâng cấp lớp mêcung có thêm phần AI dùng trong tìm đường :

Mình đã cơ bản hoàn thiện lớp AI dùng cho 2 lớp mêcung : mêcung dùng khối và mêcung dùng cạnh bao.

- Demo cho Maze4Class thì camera chạy theo một hình cầu. Trong Demo có tất cả 4 hình cầu và 01 hình khối vuông đại diện cho đích đến.Các hình cầu này tự tìm đến nhau.Thuật toán dùng cho mêcung này rất nhanh.

- Demo cho MazeClass thì bạn có thể dùng Camera di chuyển trên mêcung, nếu đến các ô không có tường thì hình khối cầu sẽ tự động tìm đến vị trí camera theo thuật toán tìm đường.Thuật toán này thì hơi chậm.

http://www.4shared.com/file/29965337/aed9ecb8/MazeClass.html
http://www.4shared.com/file/31485423/490bec23/Maze4Class.html

Các bạn giải nén các file Zip này vào thư mục \irrlicht-1.4\bin\Win32-VisualStudio và chạy nó để xem kết quả. Chúc các bạn vui.
Thêm một lớp mêcung mới
:


Hôm nay mình Up lên một Demo về chương trình tạo mêcung tường mỏng, Với mêcung này thì việc tìm đường trong mêcung (thậm chí là mêcung 10x10) rất khó khăn.


Đối với mêcung này mình có thêm một số cải tiến là làm cho tường bao và các bức tường chia phía trong khác nhau, giúp cho người trong mêcung có thể phân biệt đã đến biên hay chưa?

Mình còn phải bổ sung thêm 01 hàm AI là tìm đường đi giữa 02 điểm trong mêcung, nhưng trước hết các bạn hãy góp ý thêm cho mình.

Demo : http://www.4shared.com/file/31485423/490bec23/Maze4Class.html

Các bạn tải về , giải nén vào thư mục \irrlicht-1.4\bin\Win32-VisualStudio và chạy tệp Maze4Class.exe . Chúc các bạn vui.
Một ý tưởng mới và cách tạo hang động bởi (BlindSide)

Mình vừa có một ý tưởng mới về việc tạo mêcung. Các bạn còn nhớ ngày xưa trong tệp tin ScreenSaver của window 98 có một chương trình hiển thị mêcung 3D. Mình đang làm mêcung theo kiểu này. Với mêcung lọai này thì mổi ô có 4 bức tường xung quanh, các bức tường đều mỏng và xoay quanh vị trí hiện tại.

Mình đã làm xong mêcung này,hôm nào sẽ gời demo lên mạng.Mình còn phải thực hiện các bước tìm đường Ai cho mêcung lọai này.Cũng như vẽ bản đồ xem trước.

Bây giờ mình mới lên IrrWiki có một ý tưởng mới mình thấy rất hay nên tiện thể Post lên cho các bạn tham khảo. Đó là ý tưởng tạo các hang động trong Irrlicht của BlindSide . Các bạn có thể đọc hay tải trực tiếp ví dụ về xem.

địa chỉ :


Chúc các bạn vui với công việc lập trình.
Tạo lớp mê cung dùng mô phổng tìm đường bằng thuật tóan A*

- Lúc trước khi tạo cái demo BattleMaze, mình đã tạo ra lớp này nhưng thực chất lúc đó mình chỉ dùng các CubeSceneNode để tạo các hộp tường,dùng Terrain tạo nền cho nên khi tạo mê cung 20x20 thì tốc độ khung hình chỉ còn từ <14 font="font" fps.="fps.">

- Cho nên bây giờ mình quyết định tự tạo cách Mesh riêng của mình. Điều này cải thiện đáng kễ tốc độ thực thi của chương trình.

- Mình cũng đã hòan thiện tất cả các hướng lát ảnh cho phù hợp và giống nhau cã 4 hướng lát. Mê cung bây giờ thực sự là mê cung mỗi cạnh đều chuẩn.

* Mình sẽ Up lên bản demo bây giờ . Các bạn chép tệp tin .exe vào thư mục \bin\Win32-VisualStudio\ của Irrlicht và chạy nó nhé.

Địa chỉ : http://www.4shared.com/file/29965337/aed9ecb8/MazeClass.html

Các bạn chạy thử nhé.
Trò chơi xếp gạch :

Đây là sản phẩm lập trình 2D ngày xưa của mình khi còn lập trình bằng winAPI.

Chương trình có thể chơi được cho 2 người.

Có thể gán phím điều khiển cho từng người

Có thể cho máy thực hiện chơi demo khi không nhấn phím đềiu khiển.

Hộp thọai cấu hình ban đầu cho game + một số class GUI sưu tầm:

Xin chào các bạn dùng Irrlicht. Nếu đã dạo qua một lượt các demo của Irrlicht thì bạn cũng có thể thấy ở cái demo lớn nhất một hộp thọai xuất hiện trước tiên khi bắt đầu demo.

Trong hộp thọai này bạn có thể quyết định có tiếp tục chạy demo hay không, bạn có thể chọn chương trình demo chạy bằng DirectX hay OpenGl..., có thể dùng đổ bóng thời gian thực, hay dùng thêm các hiệu ứng âm thanh...

Bây giờ mình cũng vừa làm xong một cái Class nhỏ bao gồm các class như sau :

1) InitConfigDialog : hộp thọai tương tự như của cái demo lớn nhất của Irrlicht, mình dùng tiếng việt và chưa trang bị thêm hiệu ứng gì, khi nào cho vào game thì mình sẽ hiệu chỉnh lại sau.

2) SlashScreen : xuất hiện tòan màn hình Demo trong một thời gian định trước. Bạn có thể dùng một hình chọn trứơc để giới thiệu về game của mình.

* Địa chỉ download ( mình gời chưa kèm theo tệp Irrlicht.dll, và các bạn phải chỉnh lại các đường dẫn cho phù hợp với mình)


Ngòai ra còn có một số class mà mình đã sưu tầm được trên diễn dàn Irrlicht dùng cho GUI

Textbox có thanh cuộn :http://www.4shared.com/file/29270606/94416447/CGUITextBox.html

Cửa sổ chat : http://www.4shared.com/file/29270757/9ff3caa3/GUIexChatWindow.html

Cửa sổ có thanh cuộn : http://www.4shared.com/file/29270774/34ccf99b/GUIexScrollWindow.html

Mở rộng TextBox có thể hiển thị hình trong nó, giống ngôn ngữ HTLM : http://www.4shared.com/file/29270708/723b2377/ExtendedText.html
Bắt đầu viết code cho các giao diện

Bây giờ thì mình đang bắt tay vào viết một số class cho giao diện game. Một số class cần được tạo bao gồm :

1) Màn hình SlashScreen : là màn hình giới thiệu nhanh về game mà mình thực hiện. Đây là một hình được xuất hiện trong một thời gian định trước. Sau đó chuyển qua màn hình load game

2) Thanh Loading bar : là thanh trượt cho biết đã nạp được bao nhiêu phần trăm game. Kết thúc sẽ chuyển sang màn hình Menu game ( lúc bắt đầu chơi) hay là tiếp tục một level khác khi bạn vượt qua một level

3) Cửa sổ hộp thọai Menu game : bao gồm các nút hay các lựa chọn trong game như : New game, config, save game, exit...

4) Cửa sổ tự cuộn dùng phần giới thiệu về game (Credit) : là một cửa sổ tự cuộn các nội dung của game bao các giới thiệu về : người lập trình game, người viết kịch bản, đạo diễn, người vẽ đồ họa, người tạo âm thanh... trong game.

5) Cửa sổ chat trong game : đây là phần quan trọng trong game RPG - là cửa sổ hiện ra các đọan đối thọai của nhân vật chính và các nhân vật khác. Ở đó nhân vật chính sẽ nhận các nhiệm vụ.

6) Khung chứa các đồ vật + các trang bị trong game : là khung chứa các đồ dùng trong game, hay các vật dụng mua bán trao đổi trong game, các khung chứa các thuộc tính của nhân vật.

7) Bản đồ trong game : đây là khung chứa tòan bộ bản đồ trong game, có thể đánh dấu vị trí đã đi qua.
Gán khung xương và tạo họat cảnh cho nhân vật trong game :

Hiện tại có rất nhiều cách để thực hiện điều này

1) Nếu dùng 3dsMax thì ta có thể dùng hệ thống bipped của 3dsMax để tạo khung xương, áp phép hiệu chỉnh Physic sau đó làm họat ảnh cho nhân vật, hay của khung bipped sau đó gán lại cho các nhân vật khác. Nhưng thực tế để làm họat cảnh cho nhân vật theo kiểu này thì rất mất thời gian ( ít nhất là 01 tháng cho các nhân vật)

2) Chỉ dùng 3dsMax (hay bất cứ chương trình 3D nào khác) để thiết kế mô hình, tạo ảnh map hòan thiện cho tòan bộ nhân vật sau đó xuất sang định dạng khác như Obj, hay 3ds để nhập vào chương trình gán khung xương cửa hãng thứ 3. Dùng bộ khung xương có họat ảnh theo định dạng BVH của Poser để gán cho nhân vật.

- Mình đang thực hiện theo cách thứ 2, nói thật nếu dùng Poser để tạo chuyển động của nhân vật thì thật tuyệt, trong ngày mình có thể hòan chỉnh các họat ảnh đơn giản như đi, chạy, nhảy, đàm thọai, các đòn tấn công bằng vũ khí 01 tay,...Sau đó mình xuất sang định dạng BVH của Poser như là khung xương chủ lực.

- Sau đó mình dùng MilkShape3D để import các phần này vào : phần khung xương từ các tệp .BVH và phần khung lưới từ các tệp .OBJ hay .3ds sau đó gán các đỉnh mesh cho các khung xương cách này cũng tương đối nhanh và dễ thực hiện. (Nhưng đòi hỏi phải có nhiều nhần mềm như Poser, MiklShape3D, 3sMax.( hay 01 chươgn trình 3D). Ngày mai mình sẽ thực hiện thực hiện các động tác tấn công bằng vũ khí 02 tay, các động tác bị thương, chết... thế là hòan tất phần khung xương.

- Trong tương lai mình sẽ thực hiện bằng 3dsMax vì nó chính quy hơn, mình làm chậm do mình không có sẳn thư hiện các tư thế như Poser mà thôi.

- Khi nào làm xong họat cảnh cho nhân vật mình sẽ Post các Video lên thử. Các bạn chờ xem nhé. Sau đó mình sẽ xây dựng từ từ các Class dùng trong game của mình và post lên sau.
Một số nhân vật 3D - và trang phục :

- Mình vừa thực hiện xong việc map ảnh cho một số nhân vật trong game của mình, nói chung đây là một công việc khá lâu với lại mình cũng chưa hài lòng lắm với ảnh map của mình, có thể mình cũng sẽ sửa lại một số cho phù hợp với trang phục như một số game khác.
- Việc map ảnh cho nhân vật theo cách nào còn tùy thuộc vào từng người, và thói quen của từng người và chương trình 3D mà bạn dùng.
- Mình cũng vừa hòan thành một số trang phục phục thêm cho các nhân vật, trong game mình có thể add thêm một số đồ phụ kiện này cũng như việc thay đổi ảnh map cho nhân vật mà ta có thể thay đổi nhân vật này thành nhân vật khác. Do đó với một số ít nhân vật, và việc tạo nhiều ảnh map cho nhân vật, thêm vào một số trang phục phụ trợ thì ta có tạo ra một lọat các nhân vật khác nhau trong game.
- Việc làm chính và quan trọng nhất bây giờ của mình là tạo rigging và animation cho 1 nhân vật nam và 1 nhân vật nữ. Sau đó nhân các animation này ra cho tòan bộ các nhân vật khác. Điều này giúp việc thực hiện nhanh hơn nhưng nó làm cho các nhân vật có có họat động hòan tòan giống nhau. Do đó nhân vật sẽ đòi hỏi nhiều họat cảnh (animation) để cá nhân hóa cho nhân vật, với cái này thì đòi hỏi thời gian rất dài, Hy vọng mình sẽ thực hiện xong sớm.
Thiết kế nhân vật 3D lowpolygon họat động trong game :

- Mấy hôm rày bận đi công tác nên mình chỉ có thể thiết kế nhân vật cho game của mình mà thôi. Đây là một số nhân vật chỉ mới map ảnh sơ lược.

- Vì game của mình là game nhập vai + hành động (nhưng theo phong cách click and play) cho nên nhân vật mình thiết kế đòi hỏi độ chi tiết không cao. Nhưng phải có nhiềi nhóm nhân vật, chia làm nhiều chủng tộc khác nhau.

- Mình chưa có thời gian để map ảnh hòan chỉnh cho từng nhóm nhân vật cụ thể, hình trên là các nhân vật được map ảnh cơ bản cho dễ phân biệt. Mình dùng PaintShop Pro để thực hiện.

- Đây là phần bắt đầu của phần khó khăn nhất trong thiết kế nhân vật. Đến phần tạo chuyển động cho nhân vật mới là phần cực khó và hao tài tốn thời gian nhất. Hy vọng là mình cũng có thể làm tốt.

- Hiện tại : về phần các nhân vật là con thú thì mình đã làm cơ bản xong. (game mình dùng hòan tòan là các con vật thực như : hổ, báo, chó, mèo, cá voi, cá sấu, rắn, ngựa..., nhưng có một con không thực là rồng). Cây thì đã có rất nhiều lọai cây lowpoly và rất nhiều dạng cây để dùng billboard.

- Mình cũng vừa thực hiện xong các lọai trang phục cho các nhân vật áo ngắn, nhưng còn các nhân vật áo dài thì hơi bị khó gặm đấy, vì đó là các trang phục cao cấp dành cho tần lớp quý tộc ngày xưa mà mình thì cũng không rành về nó, chắc là chỉ có thể làm mô phổng theo các truyện tranh Việt Nam thôi. Đã làm xong trang phục của phú thương, còn các trang phục cho quan và vua thì... chờ xem nhé.

- Mình đã tạo xong ảnh map cho tất cả các nhân vật, và hiện đang làm xong một số con thú để họat động trong game. Các bạn chờ hôm khác mình sẽ pos các hình nhân vật sau khi map lên ( cho đẹp hơn ý mà).
* Ý tưởng về lý thuyết lớp nhân vật (CharacterClass)

1) Các yêu cầu cơ bản về các biến lớp nhân vật :
- Thông thường khi xây dựng game thì lớp quan trọng nhất trong game chính là lớp nhân vật. Đây là lớp dùng để tạo ra nhân vật trong game, các nhân vật này có thể có những dạng khác nhau, có thể dùng lớp nhân vật để tạo nên các nhân vật có các họat ảnh (animation) khác nhau, hay có thể dùng để điều khiển các con thú (cũng là một dạng nhân vật nhưng có ít họat ảnh hơn), hay là những con trùm (boss) to lớn và hung dữ.
- Do đó theo tôi thì một nhân vật cơ bản trong game dùng cho Irrlicht có thể được cấu tạo như sau :
+ Nhân vật phải có 01 IAnimatedMeshSceneNode* dùng để lưu giữ các cấu tạo cơ bản của nhân vật (vị trí, độ thu phóng, lọai họat ảnh...)
+ Nhân vật có 01 camera quan sát. Nếu cần thì khi chạy game có thể chuyển sang chế độ quan sát của nhân vật này. ( hay chúng ta dùng camera như biến tòan cục duy nhất 01 camera).Ta dùng ở đây là RPG Camera ( tất cả các biến của RPG Camera)
+ Do nhân vật phải tương tác với môi trường nên chúng ta phải dùng một biến tòan cục dạng IMetaTriangleSelector* để nhằm kiểm tra va chạm của nhân vật với mội trường xung quanh.
+ Nhân vật có bao nhiêu họat cảnh và được xếp theo nhóm như thế nào (ví dụ : chạy, đi, nhảy, rơi, tấn công, phòng thủ, chết, bị thương...). Ta sẽ quản lý các biến này bằng mãng array của Irrlicht.
+ Các biến phụ khác như : sức khỏe (health), ma thuật (magic), đẳng cấp (level) để kiểm soát nhân vật.
+ Các biến điều khiển nhân vật như : đi,chạy, nhảy, tấn công, phòng thủ, chết, ...đây là các biến gắng trực tiếp với nhân vật. Các biến này phải được gán cho một lọat các phím ảo cố định tạo thành 02 mãng quản lý chuyển động của nhân vật.Ví dụ khi nhân vật đang nhảy thì ta hiện động tác nhảy. Không thể kết hợp vừa nhảy vừa tấn công, hay chết). Tuy nhiên với hệ thống new Aniamtion mới Irrlicht 1.4 hình như hỗ trợ được cách này. và như thế thì nếu game ta dùng 02 người chơi cùng lúc thì ta có thể gán 02 bộ phím khác nhau cho 2 nhân vật. Điều này thật tiện lợi.
+ Nhân vật hiện tại do máy điều khiển hay do người điều khiển.
+ Nhân vật phải tự phát hiện được va chạm với môi trường xung quanh tìm được các điểm va chạm với môi trường. Từ đó quyết định di chuyển theo hướng khác, đây là phần tự điều khiển của nhân vật do máy tính quản lý. Phần nâng cao của sự di chuyển này là cho nhân vật di chuyển theo bản đồ định trước (theo thuật tóan A*), bản đồ được nhập vào thông qua chương trình biên sọan Level (như IrrEdit).

Trên đây là một số ý niệm của mình về các biến để tạo lớp nhân vật. Mình đã dùng nó để tạo demo BattleMaze. Phần sau mình sẽ trình bài về các hàm cần có trong lớp CharacterClass.

* Mình thấy hình như là cái Class này nói thì hơi khó hiểu, thôi để mình Up lên từng cái : đó là tòan bộ Source của Demo BattleMaze, nếu các bạn thấy có gì khó hiểu xin liên hệ với mình.

* Các bạn hãy tạo project mới (Win32) chép các tệp tin Irrlicht.dll, IrrKlang.dll, ikpMP3.dll. Chép các tệp tin tải về từ địa chỉ bên dưới add các tệp tin .cpp,.h vào project của mình, sau đó biên dịch. chúc các bạn thành công.( Mình dùng VC++6.0)

Địa chỉ download :


CharacterClass.h
http://www.4shared.com/file/26234357/14502301/CharacterClass.html


CKeyBoard.h
http://www.4shared.com/file/26234359/f3e80e06/cKeyBoard.html

cMazeClass.cpp
http://www.4shared.com/file/26234376/51617115/CMazeClass.html

cMazeClass.h
http://www.4shared.com/file/26234364/a6742178/CMazeClass.html


Hướng dẫn dùng CameraRPG

1) Class quản lý bàn phím + mouse ảo

Hôm nay mình Up lên tệp tin cKeyBoard.h dùng để quản lý bàn phím ảo.
Cách dùng của nó sẽ được cụ thể trong tệp tin main.cpp phần dùng CameraRPG

////////////////

#include
using namespace irr;
extern bool keys[KEY_KEY_CODES_COUNT ];
class TKeyClass : public IEventReceiver
{
public:
TKeyClass()
{
for (int i=0;ikeys[i]=0;
}
~TKeyClass(){};
virtual bool OnEvent(SEvent event)
{
if(event.EventType == irr::EET_KEY_INPUT_EVENT)
{
keys[event.KeyInput.Key] = event.KeyInput.PressedDown;
return false;
}
if (event.EventType==irr::EET_MOUSE_INPUT_EVENT)
{
keys[irr::KEY_LBUTTON]= (event.MouseInput.Event==EMIE_LMOUSE_PRESSED_DOWN) ;
keys[irr::KEY_RBUTTON]= (event.MouseInput.Event==EMIE_RMOUSE_PRESSED_DOWN) ;
//keys[irr::KEY_XBUTTON1]=(event.MouseInput.Event==EMIE_MOUSE_MOVED);
//keys[irr::KEY_MBUTTON]= (event.MouseInput.Event==EMIE_MOUSE_WHEEL);
return false;
}
return false;
}
};

2)Tệp tin main.cpp dùng để thực thi hướng dẫn tạo CameraRPG

/////////////////////////

/*
This tutorial will briefly show how to use the terrain renderer of Irrlicht. It will also
show the terrain renderer triangle selector to be able to do collision detection with
terrain.


Note that the Terrain Renderer in Irrlicht is based on Spintz' GeoMipMapSceneNode, lots
of thanks go to him.
DeusXL provided a new elegant simple solution for building larger area on small heightmaps
-> terrain smoothing.
In the beginning there is nothing special. We include the needed header files and create
an event listener to listen if the user presses the 'W' key so we can switch to wireframe
mode and if he presses 'D' we toggle to material between solid and detail mapped.
*/
#include
#include "cKeyBoard.h"
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

#pragma comment(lib, "Irrlicht.lib")
bool keys[KEY_KEY_CODES_COUNT ];
int cZoom = 80;
int cOffset = 180,cNewOffset=180;
float cUpdir = -10;
int cRotation = 0;
int oldScore =0;
bool isActive = false;
ICameraSceneNode* camera;
IAnimatedMeshSceneNode* character;
/*
The start of the main function starts like in most other example. We ask the user
for the desired renderer and start it up.
*/
int main()
{
// let user select driver type
video::E_DRIVER_TYPE driverType = video::EDT_DIRECT3D9;
IrrlichtDevice* device = createDevice(driverType, core::dimension2d(640, 480));
if (device == 0)
return 1; // could not create selected driver.
/*
First, we add standard stuff to the scene: A nice irrlicht engine
logo, a small help text, a user controlled camera, and we disable
the mouse cursor.
*/
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
gui::IGUIEnvironment* env = device->getGUIEnvironment();

driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);

// add irrlicht logo
env->addImage(driver->getTexture("../../irrlicht-1.3.1/media/irrlichtlogo2.png"),
core::position2d(10,10));

//set other font
env->getSkin()->setFont(env->getFont("../../irrlicht-1.3.1/media/fontlucida.png"));


// add some help text
gui::IGUIStaticText* text = env->addStaticText(
L"Press 'W' to change wireframe mode\nPress 'D' to toggle detail map\nPress (Up,Left,Right) arrow to cotrol character",
core::rect(10,420,300,475), true, true, 0, -1, true);

// add camera
camera = smgr->addCameraSceneNode();


camera->setPosition(core::vector3df(1900*2,255*2,3700*2));
camera->setTarget(core::vector3df(2397*2,343*2,2700*2));
camera->setFarValue(12000.0f);
//add main character
character = smgr->addAnimatedMeshSceneNode(
smgr->getMesh("../../irrlicht-1.3.1/media/faerie.md2"),0,-1,
vector3df(2397*2,343*5,2700*2),vector3df(0, 0, 0),vector3df(1.0f, 1.0f, 1.0f),false);
character->setMaterialTexture(0,driver->getTexture("../../irrlicht-1.3.1/media/Faerie5.bmp"));
character->setMaterialFlag(video::EMF_LIGHTING, false);
character->setMD2Animation(EMAT_STAND);
// disable mouse cursor
//device->getCursorControl()->setVisible(false);

/*
Here comes the terrain renderer scene node: We add it just like any
other scene node to the scene using ISceneManager::addTerrainSceneNode().
The only parameter we use is a file name to the heightmap we use. A heightmap
is simply a gray scale texture. The terrain renderer loads it and creates
the 3D terrain from it.
To make the terrain look more big, we change the scale factor of it to (40, 4.4, 40).
Because we don't have any dynamic lights in the scene, we switch off the lighting,
and we set the file terrain-texture.jpg as texture for the terrain and
detailmap3.jpg as second texture, called detail map. At last, we set
the scale values for the texture: The first texture will be repeated only one time over
the whole terrain, and the second one (detail map) 20 times.
*/

// add terrain scene node
scene::ITerrainSceneNode* terrain = smgr->addTerrainSceneNode(
"../../irrlicht-1.3.1/media/terrain-heightmap.bmp",
0, // parent node
-1, // node id
core::vector3df(0.f, 0.f, 0.f), // position
core::vector3df(0.f, 0.f, 0.f), // rotation
core::vector3df(40.f, 4.4f, 40.f), // scale
video::SColor ( 255, 255, 255, 255 ), // vertexColor,
5, // maxLOD
scene::ETPS_17, // patchSize
4 // smoothFactor
);

terrain->setMaterialFlag(video::EMF_LIGHTING, false);

terrain->setMaterialTexture(1, driver->getTexture("../../irrlicht-1.3.1/media/terrain-texture.jpg"));
terrain->setMaterialTexture(0, driver->getTexture("../../irrlicht-1.3.1/media/detailmap3.jpg"));

terrain->setMaterialType(video::EMT_DETAIL_MAP);


terrain->scaleTexture(10.0f, 1.0f);
//terrain->setDebugDataVisible ( true );


/*
To be able to do collision with the terrain, we create a triangle selector.
If you want to know what triangle selectors do, just take a look into the
collision tutorial. The terrain triangle selector works together with the
terrain. To demonstrate this, we create a collision response animator
and attach it to the camera, so that the camera will not be able to fly
through the terrain.
*/

// create triangle selector for the terrain
scene::ITriangleSelector* selector
= smgr->createTerrainTriangleSelector(terrain, 0);
terrain->setTriangleSelector(selector);
selector->drop();


// create collision response animator and attach it to the main character
aabbox3df box = character->getBoundingBox();
vector3df radius = box.MaxEdge;
radius.X *=10; radius.Y *=4; radius.Z *=10;
scene::ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
selector, character,radius,
core::vector3df(0,-1.0f,0),
radius);
character->addAnimator(anim);
anim->drop();
/*
To make the user be able to switch between normal and wireframe mode, we create
an instance of the event reciever from above and let Irrlicht know about it. In
addition, we add the skybox which we already used in lots of Irrlicht examples.
*/
// create event receiver
TKeyClass receiver;
device->setEventReceiver(&receiver);
// create skybox
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false);
smgr->addSkyBoxSceneNode(
driver->getTexture("../../irrlicht-1.3.1/media/irrlicht2_up.jpg"),
driver->getTexture("../../irrlicht-1.3.1/media/irrlicht2_dn.jpg"),
driver->getTexture("../../irrlicht-1.3.1/media/irrlicht2_lf.jpg"),
driver->getTexture("../../irrlicht-1.3.1/media/irrlicht2_rt.jpg"),
driver->getTexture("../../irrlicht-1.3.1/media/irrlicht2_ft.jpg"),
driver->getTexture("../../irrlicht-1.3.1/media/irrlicht2_bk.jpg"));
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, true);
/*
That's it, draw everything. Now you know how to use terrain in Irrlicht.
*/
///////////- khëi t¹o biÕn Camera /////////////
cZoom =80;
cOffset = 0;
cUpdir =0;
///////////////////////
int lastFPS = -1;
while(device->run())
if (device->isWindowActive())
{
driver->beginScene(true, true, 0 );
smgr->drawAll();
env->drawAll();
driver->endScene();
//////////// - RPG camera
vector3df p =character->getPosition();//box.getCenter();
vector3df r = character->getRotation();
if (smgr->getActiveCamera()==camera)
{
camera->setTarget(core::vector3df(p.X,p.Y+cUpdir,p.Z));
camera->setPosition(core::vector3df(( -1 * cZoom * cosf( -1 * ( r.Y + cRotation +cOffset ) *core::DEGTORAD ) ) + p.X,
p.Y+50,( -1 * cZoom * sinf( -1 * ( r.Y+cRotation + cOffset ) * core::DEGTORAD ) ) + p.Z));
}
///////////
if (keys[KEY_KEY_W])
{
terrain->setMaterialFlag(video::EMF_WIREFRAME, !terrain->getMaterial(0).Wireframe);
terrain->setMaterialFlag(video::EMF_POINTCLOUD, false);
keys[KEY_KEY_W] = false;
}
if (keys[KEY_KEY_P])
{
terrain->setMaterialFlag(video::EMF_POINTCLOUD, !terrain->getMaterial(0).PointCloud);
terrain->setMaterialFlag(video::EMF_WIREFRAME, false);
keys[KEY_KEY_P] = false;
}
if (keys[KEY_KEY_D])
{
terrain->setMaterialType(terrain->getMaterial(0).MaterialType == video::EMT_SOLID ?
video::EMT_DETAIL_MAP : video::EMT_SOLID);
keys[KEY_KEY_D] = false;
}
if (keys[KEY_ESCAPE]) device->closeDevice();
//////////////// - Control the Character - //////////////
if (keys[KEY_UP]) // di chuyen toi
{
p.X = p.X + ( cos((r.Y+cRotation) * core::DEGTORAD )*10.0f );
p.Z = p.Z - ( sin((r.Y+cRotation) * core::DEGTORAD )*10.0f );
character->setPosition(p);
if (!isActive)
{
character->setMD2Animation(EMAT_RUN );//di toi
isActive = true; //cho biet nhan vat dang hoat dong
}
}
if (keys[KEY_LEFT]) // queo trai
{
int goc = 1;
if (r.Y>goc) r.Y -= goc;
else r.Y =360;
character->setRotation(r);
}
if (keys[KEY_RIGHT]) // queo phai
{
int goc = 1;
if (r.Y<360-goc br="br" goc="goc" r.y="r.y">else r.Y =0;
character->setRotation(r);
}
//kiem tra phim bam
bool keypressed = false;
for (int i=0;iif ((!keypressed)&&(isActive)) //neu khong co phim bam
{
character->setMD2Animation(EMAT_STAND);
isActive = false;
}
//keys[KEY_UP] = false;
///////////////////////////////////////////////////////////////////////
// display frames per second in window title
int fps = driver->getFPS();
if (lastFPS != fps)
{
core::stringw str = L"Terrain Renderer - Irrlicht Engine [";
str += driver->getName();
str += "] FPS:";
str += fps;
// Also print terrain height of current camera position
// We can use camera position because terrain is located at coordinate origin
str += " Height: ";
str += terrain->getHeight(camera->getAbsolutePosition().X, camera->getAbsolutePosition().Z);
device->setWindowCaption(str.c_str());
lastFPS = fps;
}
}
device->drop();
return 0;
}

3) Các bạn tự tạo project và chỉnh lại các đường dẫn cho phù hợp nhé. Chúc các bạn thành công!
Dùng mouse trong Irrlicht tác động vật thể
- Bây giờ mình đưa lên blog một hướng dẫn dùng mouse để tác động lên các vật trong chương trình Irrlicht.
- Các bạn dùng Irrlicht hãy tự tạo project cho mình và sau đây là tệp tin main.cpp (như các ví dụ của Irrlicht). Các bạn khi dùng nhớ đổi lại đường dẫn các tệp tin hình ảnh cho phù hợp nhé ( trong thư mục media của Irrlicht đó) . Có gì liên hệ với mình.
////////////////////////////////
#include
using namespace irr;
#pragma comment(lib, "Irrlicht.lib")
bool mouseArr[2];
class TMouseClass : public IEventReceiver
{
public:
TMouseClass()
{
for (int i=0;i<2 br="br" i="i" mousearr="mousearr">}
~TMouseClass(){};
virtual bool OnEvent(SEvent event)
{
if (event.EventType==irr::EET_MOUSE_INPUT_EVENT)
{
mouseArr[0]= (event.MouseInput.Event==EMIE_LMOUSE_PRESSED_DOWN) ;
mouseArr[1]= (event.MouseInput.Event==EMIE_RMOUSE_PRESSED_DOWN) ;
return false;
}
return false;
}
};
int main()
{
video::E_DRIVER_TYPE driverType = video::EDT_DIRECT3D9;
TMouseClass receiver;
IrrlichtDevice* device = createDevice(driverType, core::dimension2d(640, 480),32,false,false,false,&receiver);
if (device == 0)
return 1; // could not create selected driver.
/*
First, we add standard stuff to the scene: A nice irrlicht engine
logo, a small help text, a user controlled camera, and we disable
the mouse cursor.
*/
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* smgr = device->getSceneManager();
gui::IGUIEnvironment* env = device->getGUIEnvironment();
driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
// add camera
scene::ICameraSceneNode* camera =
smgr->addCameraSceneNodeMaya();
camera->setPosition(core::vector3df(1900*2,255*2,3700*2));
camera->setTarget(core::vector3df(2397*2,343*2,2700*2));
camera->setFarValue(12000.0f);
// add terrain scene node
scene::ITerrainSceneNode* terrain = smgr->addTerrainSceneNode(
"terrain-heightmap.bmp",
0, // parent node
-1, // node id
core::vector3df(0.f, 0.f, 0.f), // position
core::vector3df(0.f, 0.f, 0.f), // rotation
core::vector3df(40.f, 4.4f, 40.f), // scale
video::SColor ( 255, 255, 255, 255 ), // vertexColor,
5, // maxLOD
scene::ETPS_17, // patchSize
4 // smoothFactor
);

terrain->setMaterialFlag(video::EMF_LIGHTING, false);
terrain->setMaterialTexture(1, driver->getTexture("terrain-texture.jpg"));
terrain->setMaterialTexture(0, driver->getTexture("detailmap3.jpg"));
terrain->setMaterialType(video::EMT_DETAIL_MAP);
terrain->scaleTexture(10.0f, 1.0f);
terrain->setID(1000); //®Æt ID cho terrain
scene::IMetaTriangleSelector* meta = smgr->createMetaTriangleSelector();
// create triangle selector for the terrain
scene::ITriangleSelector* selector
= smgr->createTerrainTriangleSelector(terrain, 0);
terrain->setTriangleSelector(selector);
meta->addTriangleSelector(selector);
selector->drop();
//
// add billboard
scene::IBillboardSceneNode * bill = smgr->addBillboardSceneNode();
bill->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR );
bill->setMaterialTexture(0, driver->getTexture("particlewhite.bmp"));
bill->setMaterialFlag(video::EMF_LIGHTING, false);
bill->setMaterialFlag(video::EMF_ZBUFFER, false);
bill->setSize(core::dimension2d(100.0f, 100.0f));
bill->setID(2000);
/*
To make the user be able to switch between normal and wireframe mode, we create
an instance of the event reciever from above and let Irrlicht know about it. In
addition, we add the skybox which we already used in lots of Irrlicht examples.
*/
// create skybox
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, false);
smgr->addSkyBoxSceneNode(
driver->getTexture("irrlicht2_up.jpg"),
driver->getTexture("irrlicht2_dn.jpg"),
driver->getTexture("irrlicht2_lf.jpg"),
driver->getTexture("irrlicht2_rt.jpg"),
driver->getTexture("irrlicht2_ft.jpg"),
driver->getTexture("irrlicht2_bk.jpg"));
driver->setTextureCreationFlag(video::ETCF_CREATE_MIP_MAPS, true);
/*
That's it, draw everything. Now you know how to use terrain in Irrlicht.
*/
//thªm mé sè h×nh trßn
scene::ISceneNode* node[10];
for (int i=0;i<10 br="br" i="i">{
node[i] = smgr->addSphereSceneNode(100);
node[i]->setPosition(core::vector3df(2397*2-1000+200*i,343*10,2700*2-500+200*i));
node[i]->setMaterialTexture(0,driver->getTexture("water.jpg"));
node[i]->setMaterialFlag(video::EMF_LIGHTING, false);
selector = smgr->createTriangleSelectorFromBoundingBox(node[i]);
meta->addTriangleSelector(selector);
}
selector->drop();
// create collision response animator and attach it to the camera
//lµm cho qu¶ cÇu r¬i
scene::ISceneNodeAnimator* anim;
for (i=0;i<10 br="br" i="i">{
core::aabbox3df box = node[i]->getBoundingBox();
core::vector3df radius = box.MaxEdge;
anim = smgr->createCollisionResponseAnimator(
meta, node[i], radius,
core::vector3df(0,-1.0f,0),
core::vector3df(0,1,0));
node[i]->addAnimator(anim);
//anim->drop();
}
anim = smgr->createCollisionResponseAnimator(
meta, camera, core::vector3df(60,100,60),
core::vector3df(0,-1,0),
core::vector3df(0,50,0));
camera->addAnimator(anim);
anim->drop();
//
scene::ISceneNode* n;
//
int lastFPS = -1;

while(device->run())
if (device->isWindowActive())
{
driver->beginScene(true, true, 0 );
smgr->drawAll();
env->drawAll();
driver->endScene();
core::position2dpos = device->getCursorControl()->getPosition(); //lÊy täa ®é mouse
core::line3df ray = smgr->getSceneCollisionManager()-> //lÊy tia dß tõ camera theo vÞ trÝ mouse
getRayFromScreenCoordinates(pos,camera);
n = smgr->getSceneCollisionManager()->getSceneNodeFromRayBB(ray);
if (n)
{
if ((n->getID()!=1000)&&(n->getID()!=2000))
{
n->setMaterialFlag(video::EMF_LIGHTING, false);
core::vector3df p = n->getPosition();
core::vector3df r = n->getRotation();
r.Y+=50;
n->setRotation(r);
bill->setPosition(p);
if (mouseArr[0])
{
p.Y +=1000;
n->removeAnimators();
n->setPosition(p);
core::aabbox3df box = n->getBoundingBox();
core::vector3df radius = box.MaxEdge;
anim = smgr->createCollisionResponseAnimator(
meta, n, radius,core::vector3df(0,-1.0f,0), core::vector3df(0,50,0));
n->addAnimator(anim);
anim->drop();
mouseArr[0] = false;
}
}
}
// display frames per second in window title
int fps = driver->getFPS();
if (lastFPS != fps)
{
core::stringw str = L"Pick Item - Irrlicht Engine [";
str += driver->getName();
str += "] FPS:";
str += fps;
// Also print terrain height of current camera position
// We can use camera position because terrain is located at coordinate origin
str += " Height: ";
str += terrain->getHeight(camera->getAbsolutePosition().X, camera->getAbsolutePosition().Z);
device->setWindowCaption(str.c_str());
lastFPS = fps;
}
}
device->drop();
return 0;
}
/////////////////////////////////////////////
Những bài thơ con cóc

Tình đơn phương


Muốn gặp em như đêm dài đợi nắng

Như đất khô cằn khao khát cơn mưa

Khi gặp em muôn lời nói dư thừa

Đành câm nín cho thời gian lắng đọng

Đôi tay anh cảm thấy thừa lóng cóng

Mắt thẩn thờ theo từng bước chân em

Đôi chân anh mềm nhũng dính trên thềm

Tim loạn nhịp khi nghe lời em nói

Em trong sáng như bình minh chói lọi

Anh giọt sương phút chốc sẽ tan đi

Vì anh đây sự nghiệp chẳng ra gì

Đành ôm kín mối tình đơn tuyệt vọng





Nhớ tuổi học trò

Bao mùa phượng đỏ đã ra đi

Ve gọi hè sang biết bao kỳ

Tóc xanhnay đã pha màu muối

Nhưng lòng vẫn nhớ mãi mùa thi






Đất nước vào xuân

Em đã qua rồi tuổi ba mươi

Sao em đẹp quá hởi xuân ơi

Đât nước cho em muôn nhựa sống

Người tạo nên em dáng trang đài

Đường xá điện giang xuyên rừng núi

Phố thị lầu cao ngất ngưỡng trời

Em đi những bước dài mở rộng

Tung cánh Lạc Long bốn phương trời





Tình lở

Lòng sao tránh khỏi buâng khuâng

Nhìn hoa sáng nở “phù dung“ tối tàn

Vô hồn những bước lang thang

Cảm thương duyên phận lở làng đắng cay

Vu qui ngày ấy vui say

Để anh đau đớn đọa đày hồn đơn

Còn đâu những sáng dổi hờn

Còn đâu những tối chung đường sóng vai

Nổi niềm sang sẽ cùng ai

Riêng em êm ấm vòng tay người chồng

Hết xuân rồi lại thu đông

Hè sang bao lượt lửa lòng nào nguôi

Tóc xanh nay đã bạc rồi

Dầu chân chim đã sâu hằn lối đi

Ở đời không hợp thì ly

Nhớ về kỷ niệm phút giây chạnh lòng






Cô đơn

Hôm nay đã bao ngày xa vắng ?

Anh không về cay đắng riêng em

Mùa thu lá rụng em đềm

Hiu hiu gió lạnh bên thềm nhớ anh

Em đâu biết yêu nhau là khổ

Để đêm về khó dổ giấc nồng

Một mình một bóng đèn chông

Anh nơi nào ? Có thấu lòng em không.





Cầu Mỹ Thuận

Em ngữa người tay nối bờ nam bắc

Ngực căng ph62ng đôi bồng đảo dâng cao

Dưới chân em phù sa đỏ cuộn trào

Dáng em đứng tầm cao thế kỷ

Đẹp lòng người như tênem là “Mỹ”

“Thuận” lòng trời nối hai bến bờ vui





Tình yêu nơi vô cực

Tôi em là hai đường thẳng song song

Sẽ gặp được nhau ở nơi vô cực

Ở nơi đó những trái tim đỏ rực

Những tâm hồn rừng rực lửa yêu đương

Sẽ không còn khắc khỏai những canh trường

Không thơ thẩn những chiều sương xuống lạnh

ở nơi đó anh không còn cô quạnh

đi bên em như đường thẳng song song.

Bài đăng phổ biến