Nick Chung gửi vào
- 15906 lượt xem
OK, hôm nay mình sẽ giới thiệu Game “3D Racing Car” – Đua xe 3D. Một trong những Game khá phức tạp mà mình từng viết trên Arduino với lcd ST7565.
RACING CAR 3D
Rất đơn giản để chơi game này: sử dụng nút LEFT/RIGHT để điều khiển xe rẽ trái-rẽ phải. Nhấn nút select (nút thứ 6) để tạm dừng hoặc chơi tiếp.
Luật chơi
- Vượt qua một xe: cộng 4 điểm
- Bị đâm vào xe khác: trừ dần điểm khi vẫn còn va chạm.
- Công tơ mét phía bên trái hiển thị quãng đường đi được.
- Cứ đi 100 mét thì gặp một biển báo ở lề đường. Đỉnh điểm sẽ có 5 xe khác cùng xuất hiện trên làn đường.
Chuẩn bị phần cứng
Tải về thư viện đồ họa
Bạn hãy tải về thư viện tại bài viết
ST7565 | Hướng dẫn sử dụng glcd ST7565 homephone và chia sẻ thư viện
Chuẩn bị phần cứng
- Arduino chip atm328 trở lên, mình sử dụng arduino uno r3
- Lcd st7565 128x64 homephone spi
- Nút bấm: 6 nút
Nối mạch
Bạn hãy tham khảo cách nối mạch và nút bấm tại bài viết giới thiệu lcd nhé:
Lập trình.
Vì đây là Project Game nặng kí viết trên C++ nên để hiểu ý đồ thuật toán, phương pháp vẽ/xóa ảnh, quản lí đối tượng, va chạm trong game, phương trình quỹ đạo và giải phương trình…v.v thì bạn đọc cần theo dõi các bài viết hướng dẫn về Game C++ của mình :
- Phần 1: Hiệu ứng đồ họa Game trên lcd
- Phần 2: Chuyển động và lập trình cơ bản
- Phần 3: Quản lí các đối tượng Game
- Phần 4: Xử lí va chạm của của các đối tượng Game
Chương trình được lập trình theo phong cách hướng đối tượng.
Bên cạnh đó bạn cũng cần đọc thêm các tài liệu ,xem thêm Video về lập trình C++ ở mọi trang web nhằm nâng cao khả năng tiếp cận C++ nhanh nhất.
TEST 3
Link: FILE TEST
TEST 4.
Link: FILE TEST
TEST 5.
Link: FILE TEST
TEST 6.
Link: FILE TEST
TEST 7.
Link: FILE TEST
TEST 8.
Link: FILE TEST
TEST 9 - FINAL-HOÀN THIỆN.
Link: FILE TEST
Ok , có đồ chơi rồi, chiến thôi.!
Hehe, các bạn thấy hay thì nhấn like hoặc rate node nhé để mình có động lực viết vài Game 3d nữa cho ae chơi.
Có thể nhiều bạn nghĩ rằng làm Game chỉ để cho vui !! Còn với mình ...
Mình đến với arduino như một lựa chọn bắt buộc!
Arduino sử dụng vi điều khiển của AVR (atmega), nó là thế hệ vi điều khiển mới nhất, kế thừa toàn bộ ưu điểm của các dòng vi điều khiển trước đó, thậm chí có thể xem nó như một máy tính nhúng giá rẻ. Từ cấu trúc lưu trữ và truy cập dữ liệu, đến hỗ trợ ngôn ngữ bậc cao C/C++ (C++ là vua tốc độ của các ngôn ngữ thế hệ sau nó), đến kích thước, giá thành hợp lí, lập trình đơn giản, cộng đồng lớn mạnh là ưu điểm để học lập trình.
C++ - ngôn ngữ lập trình hướng đối tượng
Ngôn ngữ lập trình C/C++ là một trong những ngôn ngữ lập trình hướng đối tượng mạnh và phổ biến hiện nay do tính mềm dẻo và đa năng của nó. Không chỉ các ứng dụng được viết trên C/C++ mà cả những chương trình hệ thống lớn đều được viết hầu hết trên C/C++.
Làm quen với arduino một thời gian dài, có lẽ bạn đã quen với ngôn ngữ lập trình C trên arduino, nhắc tới C++ có lẽ bạn sẽ có suy nghĩ: “Ồ, C++ cũng là lập trình C, nhưng sẽ khó hơn !”. Nhưng thực tế thì ngược lại! C++ sẽ giúp bạn quản lí các biến chặt chẽ hơn rất nhiều, bạn (tự bản thân) sẽ loại bỏ nhiều tật xấu trong lập trình C, chương trình sẽ được viết với một dung lượng cực kì nhỏ nhưng vẫn đảm bảo thuật toán của C, sẽ không có hiện tượng khai báo thừa/thiếu biến,… Bạn thậm chí còn có thể học C++ trước cả C.
C++ - Vua tốc độ
C++ là ngôn ngữ lập trình hướng đối tượng được phát triển trên nền tảng của C, không những khắc phục một số nhược điểm của ngôn ngữ C mà quan trọng hơn, C++ cung cấp cho người sử dụng một phương tiện lập trình theo kỹ thuật mới: lập trình hướng đối tượng. Đây là kỹ thuật lập trình được sử dụng hầu hết trong các ngôn ngữ mạnh hiện nay, đặc biệt là các ngôn ngữ hoạt động trong môi truờng Windows như Microsoft Access, Visual Basic, Visual Foxpro …
Người ta gọi C/C++ là ngôn ngữ lập trình dùng để viết lên các ngôn ngữ lập trình khác. Ở đâu cần tốc độ tối đa, ở đó phải dùng C/C++. Node.js được viết bằng C/C++. Các games 3D đỉnh cao phải viết bằng C/C++ (Unreal 3D, Cocos2D-X). Unity3D tuy cho lập trình viết mã bằng C# nhưng bản thân nó lại được viết bằng C++. Trình duyệt Chrome, Safari, FireFox, các phần mềm mã nguồn mở nổi tiếng như MySQL, Postgresql, Torrent, Unikey, VLCPlayer phải viết bằng C/C++ để cross platform và tối ưu tốc độ thực thi. So sánh tốc độ thực thi giữa Java với C++ hay C# với C++ đều cho thấy C/C++ luôn là vua tốc độ. Theo chỉ số Tiobet Index tháng 3/2015, C đứng vị trí số 1 còn C++ đứng vị trí số 4 về nhu cầu sử dụng trên thế giới.
Trên thế giới, tại nhiều nước ngôn ngữ lập trình C/C++ cũng được đưa vào giảng dạy trong hầu hết các trường Đại học, Cao đẳng để thay thế một số ngôn ngữ lập trình đã cũ như Fortran, Pascal…Ở Việt Nam, tại các trung tâm đào tạo lập trình viên như Stanford – dạy kinh nghiệm lập trình, ngôn ngữ C/C++ được chọn để dạy lập trình như là bước đệm để học tiếp các ngôn ngữ khác: C# hoặc Java.
<trích nguồn : http://stanford.com.vn/kien-thuc-lap-trinh/tin-chi-tiet/cagId/27/id/4380/hoc-kinh-nghiem-lap-trinh-cc-tai-stanford >
Samsung hãng sản xuất điện thoại thông minh hàng đầu thế giới , đã cung cấp nền tảng có nhân có thể cấu hình vào tháng 11 năm 2009 có tên "bada".
Mức trên của hệ lõi có Device, Service, và Framework Layers respectively. Device Layer cung cấp các chức năng cơ bản như đồ họa, giao thức, gọi điện, bảo mật.... Service Layer cung cấp các chức năng đặc trưng như SNS, bản đồ, mua ứng dụng. Để cung cấp các chức năng này, Samsung cung cấp các bộ điều hành bada Server. Lớp trên cùng, Framework Layer, cung cấp các API viết bằng C++ cho các nhà phát triển.
bada cung cấp rất nhiều cách điều khiển giao diện người dùng cho nhà phát triển: gồm các UI cơ bản như Listbox, Color Picker, Tab, vv. Cả WebKit và Flash có thể nhúng vào bên trong các ứng dụng.
bada hỗ trợ khá nhiều các chức năng dựa trên phần cứng khác như: đa cảm biến, như cảm biến chậm, điều khiển rung,nhận diện khuôn mặt, cảm biến gia tốc, cảm biến từ trường,độ nghiêng, và GPS, có thể kết hợp với các ứng dụng, và đa cảm biến.
(trích nguồn Wiki : https://vi.wikipedia.org/wiki/Bada_(h%E1%BB%87_%C4%91i%E1%BB%81u_h%C3%A0nh) )
Bạn biết Game này chứ ? Asphalt8 - một sản phẩm của GameLoft - và nó viết bằng C++!
Và điều tuyệt vời nhất của dòng chip AVR là nó hỗ trợ loại ngôn ngữ này
ARDUINO+GAME + C/C++
- Cuộc cách mạng công nghiệp lần thứ 4 sẽ gắn liền với sự phát triển mạnh mẽ của tự động hóa, thiết bị thông minh. Arduino cũng sẽ góp mặt trong sự phát triển đó. Nó là bộ não trong mọi dự án từ nhỏ đến lớn, bộ não đó mạnh mẽ cỡ nào còn phụ thuộc vào những gì chúng ta dạy cho nó thông qua những dòng Code. Vậy học Arduino chính xác là ta đang học lập trình! Trong arduino, sau C, tầm cao nữa mà chúng ta phải với tới đó là ngôn ngữ C++. Và lập trình Game là một lựa chọn tuyệt vời để thực hiện hóa các ý tưởng với C++ . Lập trình Game giúp ta hào hứng từ đầu đến cuối, nó thực sự đơn giản và không đòi hỏi thêm chi phí phần cứng, mọi thứ chúng ta cần phải làm là viết Game với mức độ phức tạp thuật toán tăng dần trong C++ - hay đúng hơn là nâng cao tư duy lập trình C++ với sự hỗ trợ của ARDUINO.
- Trong quá trình học C++ bạn sẽ được biết nhiều điều về Cấp phát động,con trỏ, vùng nhớ, Class/Struct, đọc hiểu các thư viện arduino, tự viết thư viện cho riêng mình, đọc mã nguồn của các dự án lớn với C++,..
- Khởi đầu là arduino: arduino có cấu hình “thấp bé nhẹ cân”, như arduino uno r3 chỉ có 32kb để lưu trữ Code, 2kb RAM, tốc độ xung nhịp 16mhz… , Tiết kiệm khai báo biến, tiết kiệm dung lượng code là vấn đề yêu cầu ta phải có những thuật toán sử lý thật sự tối ưu. Tối ưu rồi lại tối ưu hơn nữa là quá trình giúp bạn học được rất sâu hai chữ "tiết kiệm".
- Va vấp và tìm cách khắc phục sự thiếu hụt về phần cứng là một trong những yêu cầu của các nhà tuyển dụng khi tuyển các Coder hoặc Developer.
- Sử dụng ARDUINO so với các máy tính nhúng đời cao giống như ta sinh ra từ nghèo khó, nó sẽ giúp ta sớm trưởng thành trong việc quản lí tài nguyên hạn hẹp của ARDUINO. Điều mà các Coder trên Smartphone, PC hoặc Raspberry PI ít khi vấp phải (Cấu hình mạnh mẽ của thiết bị họ đang sử dụng khiến họ sống trong môi trường có nhiều hỗ trợ, họ ít khi phải bận tâm đến việc quay lại sửa Code sao cho thật tối ưu, lại càng hiếm khi gặp phải vấn đề về dung lượng, chỉ cho đến khi họ nhận ra điều đó thì mọi thứ mới tốt hơn được ), Đây cũng là lí do mình chọn arduino cho dù ít hay nhiều. Có lẽ chúng ta sẽ bắt đầu với Arduino, rồi sau đó mới lấn sân sang các dòng Smartphone / Raspberry PI...
- Làm Game: Đỉnh cao của lập trình có lẽ là viết Game. Với arduino, việc lập trình nhấp nháy LED (Blink), làm quay Servo chỉ cần đòi hỏi một chút kiến thức về C, nhưng trong Game mọi kiến thức về lập trình sẽ có thể được dùng đến. Có nghĩa việc lựa chọn lập trình Game sẽ giúp bạn chạm đến mọi ngóc ngách của ARDUINO nói riêng và của máy tính nói chung.
- Làm Game chỉ là cách chúng ta học lập trình, những kĩ năng mà nó đem lại sẽ rất có ích cho các bạn khi quay trở lại lập trình ARDUINO với các dự án ROBOT thông minh – những dự án đòi hỏi bàn tay và khối óc thông minh của bạn.
Sự hỗ trợ
Arduino dễ mang vác đi mọi nơi, đi kèm với nó sẽ là một màn hình LCD nho nhỏ để thực hiện hóa các ý tưởng về GAME.
Lcd đen trắng: Nokia 5110 và Homephone ST7565 là hai dòng lcd dễ tìm mua với giá rất rẻ, sẽ là lựa chọn phổ thông cho các bạn.
Vì là lcd đen trắng nên bạn sẽ có cơ hội tìm hiểu về tập tin ảnh MONO BITMAP (dạng tập tin lưu trữ ảnh đơn giản nhất trên thế giới).
Thư viện đi kèm để lập trình đồ họa là :
- Nokia 5110: http://http://arduino.vn/tutorial/1345-nokia5110-huong-dan-su-dung-va-chia-se-thu-vien-hoang-sa
- ST7565 Homephone:http://http://arduino.vn/tutorial/1319-st7565-huong-dan-su-dung-glcd-st7565-homephone-va-chia-se-thu-vien
Hai thư viện này đều do mình và người em phát triển, nó đầy đủ chức năng và mạnh mẽ trong mọi yêu cầu lập trình đồ họa Game. (Mọi Game mình đều sử dụng thư viện này, các bạn có thể xem danh sách game ở cuối bài viết).
Tất cả chỉ để phục vụ một nhu cầu sang trảnh: Làm Game và đồ họa với C++.
Có lẽ sau những dòng chia sẻ trên, bạn đọc mới hiểu được toàn bộ quá trình hoạt động trên arduino.vn của mình đang dần rõ ràng: đầu tiên là upload 2 thư viện LCD => upload các bài hướng dẫn về game với C++ => Upload các Game mình đã làm => Quay lại chia sẻ tâm tư khi đã đủ bài để các bạn có cơ hội bắt tay ngay vào nghiên cứu C++.
Bật mí: ‘Mình đã học lập trình rất nhanh chính là nhờ niềm đam mê lập trình Game với Arduino’.
KẾT
Vì arduino.vn không phải trang lập trình GAME, cũng chưa phải là trang dạy C++. Nên mình đã cố gắng dồn trọng tâm sang ARDUINO nhiều nhất có thể. Từ lcd cho đến Game phải thật gần gũi, nho nhỏ, xinh xinh giống như chiếc arduino của chúng ta vậy.
Lập trình gì cũng được, không nhất thiết phải là GAME, miễn sao ta nâng cao trình độ là ngon rồi.
Nhưng mình cũng hi vọng ý tưởng của mình sẽ được bạn đọc ủng hộ !
Với những ai muốn xin thêm một vé về tuổi thơ giống mình thì hãy cùng khám phá các bài viết này nhé :
- Nokia 5110: Thư viện lcd NOKIA5110
- ST7565 Homephone:Thư viện lcd ST7565 Homephone
Program.
- Phần 1: Hiệu ứng đồ họa Game trên lcd
- Phần 2: Chuyển động và lập trình cơ bản
- Phần 3: Quản lí các đối tượng Game
- Phần 4: Xử lí va chạm của của các đối tượng Game
Projects.
Các dự án Game trên arduino.vn của mình.
- http://arduino.vn/tutorial/1335-st7565-lam-game-hung-trung
- http://arduino.vn/tutorial/1454-game-st7565-lam-game-pong-voi-arduino
- http://arduino.vn/tutorial/1457-game-st7565-game-hung-trung-phien-ban-nang-cap
- http://arduino.vn/tutorial/1455-game-st7565-lam-game-flappy-bird-voi-arduino
- http://arduino.vn/tutorial/1458-game-st7565-lam-game-xe-tang-voi-arduino
Các dự án về lập trình C++ của các thành viên:
http://arduino.vn/bai-viet/346-lam-game-flappy-bird
và cả thế giới game với arduino trên khắp thế giới
Mình đã đọc ở đâu đó một câu nói và đã ấn tượng đến tận bây giờ :" Khi hoàn thiện một Game, bạn hãy ăn mừng và tự thưởng cho bản thân, nhưng điều tiếp theo phải làm chưa phải là chuyển sang một Game khác, mà hãy quay trở lại với Game kia và làm cho nó hay hơn nữa. Tối ưu hóa từng đoạn code sẽ là công việc tiếp theo." " Đừng bao giờ chấp nhận con người ngày hôm nay của bạn. Thay thế sự cũ kĩ bằng những điều mới mẻ,tốt đẹp hơn mới là cách đưa ta đến ngày mai"
Tác giả
< Thái Sơn>