Cơ bản về lập trình Game

Trong thời điểm hiện tại, có rất nhiều bạn trẻhướng sựquan tâm của mình vào thiết kếvà

lập trình game, phải công nhận một điều rằng chơi game đã là một sựhấp dẫn, nhưng chơi

game mình làm ra còn hấp dẫn hơn nhiều, cho dù đó là một trò chơi dở ẹc. Trên những diễn

đàn tin học trên Internet đầy rẫy những topic kiểu nhưlà “Lập trình game với.” hay là “Ai

chỉgiúp em lập trình game nhưthếnào”, tất cả đều là sựquan tâm đến mục đích “Làm thế

nào đểviết nên một game ?”. Những ý kiến xoay quanh vấn đềnày rất đa dạng, nói khó

cũng có mà nói dễcũng có. Với kinh nghiệm và trình độhiện tại, tôi công nhận một điều là

khó, nhưng không phải là quá khó nếu bạn biết đặt mục tiêu vừa tầm và tìm cách tiếp cận

nó. Nếu ai cũng hi vọng mình viết ra game tương đương với Quake hay là Warcraft – là sản

phẩm của cảmột tập thểchuyên nghiệp được xây dựng trong một thời gian dài - ngay lập

tức thì quá là viển vông, nhưng nếu bạn hạthấp mục tiêu xuống một chút nhưlà làm những

game đơn giản kiểu nhưbắn tăng hay Mario, IQ hoặc là những game cho trẻem trước thì

không quá khó nếu bạn biết lập trình. Cá nhân tôi dường như đã nhận thức được điều này

và đã có được một sốthành công nhỏtrong việc thiết kếvà lập trình game. Trong thời điểm

này tôi đang được nghỉôn thi và tôi quyết định dành một thời gian ngắn đểviết cuốn sách

này, trong cuốn sách này tôi trình bày một cách đầy đủquá trình tôi thiết kếvà viết mã cho

một game RTS đơn giản (được lược bỏkhá nhiều tính năng ví dụnhưchơi mạng) nhằm giúp

các bạn hiểu được phần nào quá trình “ziết game tại gia”. Hi vọng cuốn sách có thểgiúp các

bạn trong quá trình thiết kếvà viết game của chính mình. Chúc tất cảcác bạn thành công

trong dựán viết game của mình.

pdf64 trang | Chuyên mục: Visual C++ | Chia sẻ: dkS00TYs | Lượt xem: 2333 | Lượt tải: 1download
Tóm tắt nội dung Cơ bản về lập trình Game, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
 thể nâng cấp thành cho phép chọn loại quân có thể sinh. Bạn cần 
thêm một list các loại quân có thể sinh vào dữ liệu đặc tính của unit trong game, 
sau đó xây dựng hệ thống menu cho game để người chơi có thể lựa chọn những 
tính năng sinh quân này. Các tính năng như di chuyển, tấn công cũng cần được 
hiển thị rõ ràng hơn thông qua hệ thống menu. 
• Trong game chưa có khai thác tài nguyên, thêm công việc này sẽ khiến game có 
tính cạnh tranh hơn, mặc dù như vậy sẽ khó tính toán AI cho máy hơn và nhiều 
game hiện tại thường giảm nhẹ sự quan tâm đến vấn đề này (?). 
• Nâng cấp tính năng AI: Hiện tại game hoàn toàn chưa có AI, các đơn vị quân máy 
chỉ đơn giản là sinh quân ầm ầm rùi chạy toán loạn quanh bản đồ. Bạn nên xây 
dựng modun cho phép máy điều khiển quân tập trung lại rùi “lùng giết” quân của 
người chơi sẽ hiệu quả hơn. 
• Hoàn thiện tính năng âm thanh của game. Game cần xây dựng một modun quản lý 
âm thanh riêng, các thực thi âm thanh được gọi nên có các thông số đại loại như vị 
trí, kiểu âm thanh… nhằm xác định độ to nhỏ và loại bỏ bớt các âm thanh cùng loại 
được gọi liên tục, ví dụ như một đám tàu cùng bắn tên lửa chẳng hạn, modun này 
có thể chỉ phát 2/3 âm thanh bắn mà cũng đạt được hiệu quả tương đương. 
• ….Tiếp tục là tùy ý bạn….Hix, công việc vẫn còn rất nhìu ở phía trước hix hix… 
Dưới đây là screen shot từ một game RTS tôi đang phát triển: 
Simple ЯTS G∆me Dεsign & CΘding 
© CrazyBabe 2003. K-Outertainment™ 
Trang 60 
Reference 
AvenusHelper 
• Định nghĩa kiểu: 
o TBitDepth: Kiểu độ sâu màu của màn hình. 
ƒ BD16Bit: Độ sâu màu 16bit. 
ƒ BD32Bit: Độ sâu màu 32bit. 
o TImageFormat: Kiểu format của ảnh. 
ƒ FormatR3G3B2: Ảnh 8bit (Red 3bit, Green 3bit, Blue 2bit). 
ƒ FormatX4R4G4B4: Ảnh 16bit (Mask 4bit, Red 4bit, Green 4bit, Blue 4bit). 
ƒ FormatA4R4G4B4: Ảnh 16bit (Alpha 4bit, Red 4bit, Green 4bit, Blue 4bit). 
ƒ FormatA8R3G3B2: Ảnh 16bit (Alpha 8bit, Red 3bit, Green 3bit, Blue 2bit). 
ƒ FormatR5G6B5: Ảnh 16bit (Red 5bit, Green 6bit, Blue 5bit). 
ƒ FormatX1R5G5B5: Ảnh 16bit (Mask 1bit, Red 5bit, Green 5bit, Blue 5bit). 
ƒ FormatA1R5G5B5:Ảnh 16bit (Alpha 1bit, Red 5bit, Green 5bit, Blue 5bit). 
ƒ FormatX8R8G8B8: Ảnh 32bit (Mask 8bit, Red 8bit, Green 8bit, Blue 8bit). 
ƒ FormatA8R8G8B8:Ảnh 32bit (Alpha 8bit, Red 8bit, Green 8bit, Blue 8bit). 
• Định nghĩa hằng: 
o EffectNone: Vẽ không hiệu ứng. 
o EffectAdd: Vẽ kiểu cộng. 
o EffectSrcAlpha: Vẽ theo kênh alpha của ảnh, chỉ áp dụng với những ảnh có 
kênh alpha. 
o EffectSrcAlphaAdd: Vẽ kiểu cộng theo kênh alpha của ảnh, chỉ áp dụng với 
những ảnh có kênh alpha. 
o EffectMul: Vẽ theo kiểu nhân. 
o EffectSrcColor: Vẽ sử dụng màu source như là kênh alpha. 
o EffectSrcColorAdd: Vẽ kiểu cộng, sử dụng màu source như là kênh alpha. 
o EffectInvSrcColor: Vẽ với giá trị màu nguồn đảo ngược. 
o EffectInvSrcAlpha: Vẽ với giá trị kênh alpha đảo ngược. 
Simple ЯTS G∆me Dεsign & CΘding 
© CrazyBabe 2003. K-Outertainment™ 
Trang 61 
o EffectInvSrcMask: Vẽ với giá trị mask đảo ngược. 
o EffectBlend1, EffectBlend2, EffectBlend3, EffectBlend4: Các kiểu hiệu ứng 
blend ảnh đang thử nghiệm. 
o EffectShadow: Vẽ bóng. 
o EffectBlendColor: Vẽ blend với màu nguồn. 
o EffectBlendColorAlphaChannel: Vẽ blend sử dụng kênh alpha. 
o EffectAddDiffuse, EffectDiffuseAlpha: Vẽ khuếch tán với kênh alpha. 
o EffectMirror, EffectFlip: Vẽ lật hình, hiệu ứng này có thể kết hợp với các hiệu 
ứng ở trên. 
o Các hằng số Key_# là các hằng số định nghĩa số hiệu phím, bạn có thể dễ 
dàng đoán ra nó đại diện cho phím nào, tôi không chú thích ở đây do nó dài 
quá . 
• Các hàm, lệnh: 
o Hàm CreateWindow(Width,Height : Integer;Title : PChar) : Boolean 
ƒ Tạo một cửa sổ kích thước Width x Height có caption là Title. 
ƒ Hàm trả về true nếu tạo thành công, trả về false nếu không tạo 
được cửa sổ. 
o Hàm CreateFullScreen(Width,Height : Integer;ScreenDepth : TBitDepth;Title : 
PChar) : Boolean 
ƒ Khởi tạo chế độ màn hình Width x Height độ sâu màu là 
ScreenDepth có caption là Title. 
ƒ Hàm trả về true nếu khởi tạo thành công, trả về false nếu 
không khởi tạo được chế độ đó. 
o Lệnh DestroyScreen 
ƒ Huỷ cửa sổ/chế độ đã tạo trước đó, sau khi gọi lệnh này tất cả 
các hàm vẽ, lấy phím… đều sinh lỗi do chương trình đã huỷ 
handle quản lý tất cả các dịch vụ này. 
o Hàm EventMessage : Boolean 
ƒ Kiểm tra các events, trả về false nếu xuất hiện event Quit. 
o Lệnh LoadFont(FileName : String;SizeX,SizeY,Width,Height,TransColor : 
LongWord) 
ƒ Đọc font chữ từ file ảnh FileName 
o Lệnh TextOut(X,Y : Integer;Text : String;Color : LongWord) 
ƒ Viết xâu Text ra màn hình, ở toạ độ [X,Y], màu Color. 
o Lệnh TextOut(X,Y : Integer;Text : String;Color : LongWord;Effect : Integer) 
ƒ Viết xâu Text ra màn hình, ở toạ độ [X,Y], màu Color. Hiệu ứng 
Effect 
o Hàm CreateImage(SizeX,SizeY : Integer;Format : TImageFormat) : Integer 
ƒ Tạo một ảnh có kích thước SizeX x SizeY với format là Format. 
ƒ Số trả về là số hiệu của ảnh đã tạo. 
o Hàm LoadImage(FileName : String;Format : TImageFormat) : Integer 
ƒ Đọc ảnh từ FileName, ảnh đọc vào với format là Format. 
ƒ Hỗ trợ các định dạng ảnh JPEG, PNG, BMP. 
ƒ Số trả về là số hiệu của ảnh đã đọc. 
o Hàm SetAlphaMask(ImageNum,TransparentColor : Integer) : Integer 
ƒ Đặt kênh Alpha cho tất cả các điểm ảnh có màu Transparent. 
ƒ Chỉ hỗ trợ format ảnh FormatA1R5G5B5. 
o Hàm GetImageWidth(ImageNum : Integer) : Integer 
ƒ Lấy độ rộng của ảnh số hiệu ImageNum. 
o Hàm GetImageHeight(ImageNum : Integer) : Integer 
ƒ Lấy độ cao của ảnh số hiệu ImageNum. 
o Hàm ImageLock(ImageNum : Integer) : Integer 
Simple ЯTS G∆me Dεsign & CΘding 
© CrazyBabe 2003. K-Outertainment™ 
Trang 62 
ƒ Lock ảnh số hiệu ImageNum. 
o Hàm ImageUnLock(ImageNum : Integer) : Integer 
ƒ UnLock ảnh số hiệu ImageNum. 
o Lệnh ImageClear(ImageNum : Integer;Color : Cardinal) 
ƒ Xoá ảnh ImageNum bằng màu Color. 
o Lệnh ImagePutPixel(ImageNum,X,Y : Integer;Color : Cardinal) 
ƒ Vẽ điểm ảnh màu Color ở toạ độ [X,Y] trong ảnh ImageNum. 
o Hàm ImageGetPixel(ImageNum,X,Y : Integer) : Cardinal 
ƒ Lấy màu điểm ảnh Color ở toạ độ [X,Y] trong ảnh ImageNum. 
o Lệnh ImageLine(ImageNum,X1,Y1,X2,Y2 : Integer;Color : Cardinal) 
ƒ Vẽ đường thẳng màu Color từ [X1,Y1] đến [X2,Y2] trong ảnh 
ImageNum. 
o Lệnh ImageRect(ImageNum,X1,Y1,X2,Y2 : Integer;Color : Cardinal) 
ƒ Vẽ hình chữ nhật màu Color từ [X1,Y1] đến [X2,Y2] trong ảnh 
ImageNum. 
o Lệnh ImageFillRect(ImageNum,X1,Y1,X2,Y2 : Integer;Color : Cardinal) 
ƒ Tô hình chữ nhật màu Color từ [X1,Y1] đến [X2,Y2] trong ảnh 
ImageNum. 
o Lệnh BeginRender 
ƒ Bắt đầu vẽ scene mới (xoá buffer, xoá render buffer). 
o Lệnh EndRender 
ƒ Kết thúc vẽ scene. 
o Lệnh ClearScreen(Color : Cardinal) 
ƒ Xoá màn hình bằng màu Color. 
o Hàm RenderBuffer : Integer 
ƒ Dựng toàn bộ hình trong render buffer. 
o Lệnh SetClipRect(X1,Y1,X2,Y2 : Integer) 
ƒ Đặt clip rect. 
o Lệnh Rect(X1,Y1,X2,Y2 : Integer;Color : Cardinal;Effect : Integer) 
ƒ Vẽ hình chữ nhật. 
o Lệnh Bar(X1,Y1,X2,Y2 : Integer;Color : Cardinal;Effect : Integer) 
ƒ Tô hình chữ nhật. 
o Lệnh Line(X1,Y1,X2,Y2 : Integer;Color : Cardinal;Effect : Integer) 
ƒ Vẽ đường thẳng. 
o Lệnh SmoothLine(X1,Y1,X2,Y2 : Integer;Color : Cardinal) 
ƒ Vẽ đường thẳng smooth (mịn). 
o Hàm ImageRenderEffect(XPos,YPos,Pattern,Effect : Integer) : Boolean 
ƒ Dựng ảnh Pattern ở vị trí [XPos, YPos] với hiệu ứng Effect. 
o Hàm ImageRenderEffect(X1,Y1,X2,Y2,Pattern,Effect : Integer) : Boolean 
ƒ Dựng ảnh Pattern thành hình chữ nhật [X1,Y1,X2,Y2] với hiệu 
ứng Effect. 
o Hàm ImageRenderEffect(XPos,YPos,Scale,Pattern,Effect : Integer) : Boolean 
ƒ Dựng ảnh Pattern ở vị trí [XPos, YPos] với hiệu ứng Effect. Tỉ lệ 
zoom là Scale/256. 
o Hàm ImageRenderEffectColor(XPos,YPos : Integer;Color : 
Cardinal;Pattern,Effect : Integer) : Boolean 
ƒ Dựng ảnh Pattern ở vị trí [XPos, YPos] với hiệu ứng Effect. Màu 
áp là Color. 
o Hàm ImageRenderEffectColor(X1,Y1,X2,Y2 : Integer;Color : 
Cardinal;Pattern,Effect : Integer) : Boolean 
ƒ Dựng ảnh Pattern thành hình chữ nhật [X1,Y1,X2,Y2] với hiệu 
ứng Effect. Màu áp là Color. 
Simple ЯTS G∆me Dεsign & CΘding 
© CrazyBabe 2003. K-Outertainment™ 
Trang 63 
o Hàm ImageRenderEffectColor(XPos,YPos : Integer;C1,C2,C3,C4 : 
LongWord;Pattern,Effect : Integer) : Boolean 
ƒ Dựng ảnh Pattern ở vị trí [XPos, YPos] với hiệu ứng Effect. Màu 
áp ở bốn góc lần lượt là C1, C2, C3, C4. 
o Hàm ImageRenderEffectColor(XPos,YPos,Scale : Integer;Color : 
Cardinal;Pattern,Effect : Integer) : Boolean 
ƒ Dựng ảnh Pattern ở vị trí [XPos, YPos] với hiệu ứng Effect. Tỉ lệ 
zoom là Scale/256. Màu áp là Color. 
o Lệnh GetInputStatus 
ƒ Cập nhật input (Trạng thái mouse, keyboard…) 
o Hàm KeyDown(Key : Byte) : Boolean 
ƒ Kiểm tra phím Key có bị nhấn hay không ? 
o Hàm KeyPress(Key : Byte) : Boolean 
ƒ Kiểm tra phím Key có bị gõ hay không ? 
o Hàm MouseFirstClickL : Boolean 
ƒ Click chuột trái ? 
o Hàm MouseFirstClickR : Boolean 
ƒ Click chuột phải ? 
o Hàm MouseFirstClickM : Boolean 
ƒ Click chuột giữa ? 
o Hàm MouseReleasedL : Boolean 
ƒ Thả chuột trái ? 
o Hàm MouseReleasedR : Boolean 
ƒ Thả chuột phải ? 
o Hàm MouseReleasedM : Boolean 
ƒ Thả chuột giữa ? 
o Hàm MouseHoldL : Boolean 
ƒ Nhấn chuột trái ? 
o Hàm MouseHoldR : Boolean 
ƒ Nhấn chuột phải ? 
o Hàm MouseHoldM : Boolean 
ƒ Nhấn chuột giữa ? 
o Hàm MouseX : Integer 
ƒ Toạ độ X của chuột. 
o Hàm MouseY : Integer 
ƒ Toạ độ Y của chuột. 
o Hàm CreateSound(FileName : String;Loop : Boolean) : Integer 
ƒ Tạo handle cho sound FileName. 
ƒ Trả về handle quản lý sound này. 
o Lệnh SoundPlay(Slot : Integer) 
ƒ Chơi sound số hiệu slot. 
o Lệnh SoundPause(Slot : Integer) 
ƒ Tạm dừng sound số hiệu slot. 
o Lệnh SoundStop(Slot : Integer) 
ƒ Dừng sound số hiệu slot. 
o Lệnh SoundSetVolume(Slot : Integer;Value : Byte) 
ƒ Đặt cường độ âm thanh cho Slot. 
o Hàm SoundGetVolume(Slot : Integer) : Byte 
ƒ Lấy cường độ âm thanh của Slot. 

File đính kèm:

  • pdfCơ bản về lập trình Game.pdf