“tự viết” là tự viết làm sao… Trước sau gì cũng phải đụng tới hàm của Windows cung cấp mà, vì vẽ vô màn hình console của Windows, sao mà né win api được ~.~ Có thể làm theo cách khi con rắn di chuyển thì chỉ cần xóa phần đuôi (bằng cách gotoxy tới phần đuôi rồi output khoảng trắng) rồi vẽ phần đầu mới (gotoxy tới phần đầu rồi vẽ), ko cần phải vẽ tất cả lại từ đầu. Nhưng làm vậy thì phức tạp hóa vấn đề lên khi con rắn ăn mồi, phải vẽ lại phần đuôi, vẽ mồi mới.
phần chậm ở đây là ở chỗ cout / putchar / v.v… mình xuất thẳng ra màn hình console. Hình dung nó như là mỗi lần viết bài lên bảng thì phải đi về chỗ ngồi coi công thức 1 cái, rồi lên bảng viết 1 cái, v.v… làm 100 lần như vậy thì rất chậm. Ý tưởng ở đây là tạo 1 mảng ví dụ char[25][80] (25 dòng 80 cột) tương ứng với từng ô trên màn hình console, rồi mình cout/putchar/textccolor v.v… gì vô mảng này hết, rồi xuất mảng này 1 lần ra màn hình. Như vậy tuy phải xuất hơn 1000 chữ nhưng mình chỉ ôm 1 cuốn tập lên bảng chép, ko phải chạy lên chạy xuống chỗ ngồi như trước nữa, lẹ hơn.
nhưng nếu cout ra cái mảng 2 chiều này thì cũng chậm như cũ chả khác gì. Windows có cung cấp hàm xuất từ 1 mảng CHAR_INFO ví dụ đặt tên là buf
ra màn hình console thẳng thay vì thông qua cout/v.v… là hàm WriteConsoleOutput. CHAR_INFO thì đơn giản chỉ có 2 phần tử là Char
là union của WCHAR (2-4 byte) và CHAR (1 byte) và Attributes
là 1 integer cho biết màu chữ/màu nền/kiểu nền của ký tự đó. Tùy vào mình kêu hàm nào mà console sẽ xuất ra UnicodeChar hay AsciiChar.
bây giờ thay vì xài cout/printf v.v… thì mình đành phải xuất vào cái mảng buf
. Tọa độ (x,y) khi gọi hàm gotoxy cũng phải update index id
mảng 1 chiều của mảng buf
này.
code ở main() vẫn giữ nguyên, chỉ sửa những chỗ xài cout/putchar lại thành hàm riêng của mình viết, ví dụ put_char_info(char c)
thì gọi
buf[id].Char.AsciiChar = c;
buf[id].Attributes = color;
trong đó color là ghép của backcolor
và textcolor
: color = (backColor<<4) + textColor;
em thích thư viện đồ họa mà ko có bóng dáng của Win API thì có SDL2 hoặc SFML đó. 2 thư viện này có đầy đủ từ vẽ hình tới vẽ chữ tới âm thanh tới network chứ ko chỉ gói gọi ở xuất chữ như màn hình console. Vọc Unity thì như lái xe đua chả ngắm cảnh gì được, xuống console thì như chặt tay chặt chân
Học SDL2 ~ đi bộ hoặc SFML ~ chạy, ngắm cảnh cho biết với người ta chứ ai đi chặt tay chặt chân bò lết 