CHƯƠNG 1: CƠ SỞ LÝ THUYẾTI. Ngôn ngữ lập trình C1. Giới thiệuNgôn ngữ C là một ngôn ngữ được dẫn xuất từ C và C++, nhưng nó được tạo từ nềntảng phát triển hơn. Microsoft bắt đầu với công việc trong C và C++ và thêm vào nhữngđặc tính mới để làm cho ngôn ngữ này dễ sử dụng hơn. Nhiều trong số những đặc tính nàykhá giống với những đặc tính có trong ngôn ngữ Java. Không dừng lại ở đó, Microsoft đưara một số mục đich khi xây dựng ngôn ngữ này. Những mục đich này được được tóm tắtnhư sau:•C là ngôn ngữ đơn giản•C là ngôn ngữ hiện đại•C là ngôn ngữ hướng đối tượng•C là ngôn ngữ mạnh mẽ và mềm dẻo•C là ngôn ngữ có ít từ khóa•C là ngôn ngữ hướng module•C sẽ trở nên phổ biến2. Các kiểu dữ liệuTương tự như C++ hay Java, C chia thành hai tập hợp kiểu dữ liệu chính: Kiểu xâydựng sẵn (built in) mà ngôn ngữ cung cấp cho người lập trình và kiểu được người dùngđịnh nghĩa (userdefined) do người lập trình tạo raC phân tập hợp kiểu dữ liệu này thành hai loại: Kiểu dữ liệu giá trị (value) và kiểu dữliệu tham chiếu (reference). Việc phân chi này do sự khác nhau khi lưu kiểu dữ liệu giá trịvà kiểu dữ liệu tham chiếu trong bộ nhớ. Đối với một kiểu dữ liệu giá trị thì sẽ được lưugiữ kích thước thật trong bộ nhớ đã cấp phát là stack. Trong khi đó kiểu dữ liệu tham chiếunhư các đối tượng được cấp phát trên heap. Khi một đối tượng được cấp phát trên heap thìđịa chỉ của nó được trả về, và địa chỉ này được gắn đến một tham chiếu.Bảng 11 Kiểu dữ liệu xây dựng sẵnKiểu C Số byte Kiểu .NET Mô tảbyte 1 Byte Số nguyên dương không dấu từ 0255char 2 Char Kí tự Unicodebool 1 Boolean Giá trị logic true falsesbyte 1 Sbyte Số nguyên có dấu ( từ 128 đến 127)short 2 Int16 Số nguyên có dấu giá trị từ 32768 đến 32767ushort 2 Int16 Số nguyên không dấu 0 – 65.535int 4 Int32 Số nguyên có dấu –2.147.483.647 và2.147.483.647uint 4 Uint32 Số nguyên không dấu 0 – 4.294.967.295float 4 Single Kiểu dấu chấm động, giá trị xấp xỉ từ 3,4E38 đến 3,4E+38, với 7 chữ số có nghĩa..double 8 Double Kiểu dấu chấm động có độ chính xác gấpđôi, giá trị xấp xỉ từ 1,7E308 đến 1,7E+308,với 15,16 chữ số có nghĩadecimal 8 Decimal Có độ chinh xác đến 28 con số và giá trị thậpphân, được dùng trong tính toán tài chính,kiểu này đòi hỏi phải có hậu tố “m” hay “M”theo sau giá trị.Long 8 Int64 Kiểu số nguyên có dấu có giá trị trongkhoảng :9.223.370.036.854.775.808 đến9.223.372.036.854.775.807ulong 8 Uint64 Số nguyên không dấu từ 0 đến0xffffffffffffffffChọn một kiểu định sẵnTuỳ vào từng giá trị muốn lưu trữ mà ta chọn kiểu cho phù hợp. Nếu chọn kiểu quá lớnso với các giá trị cần lưu sẽ làm cho chương trình đòi hỏi nhiều bộ nhớ và chạy chậm.Trong khi nếu giá trị cần lưu lớn hơn kiểu thực lưu sẽ làm cho giá trị các biến bị sai vàchương trình cho kết quả sai.Kiểu char biểu diễn một ký tự Unicode. Ví dụ “u0041” là ký tự “A” trên bảng Unicode.Một số ký tự đặc biệt được biểu diễn bằng dấu “” trước một ký tự khácKiểu dữ liệu do người dùng định nghĩa Tất cả kiểu dữ liệu do người dung định nghĩa ngoài trừ kiểu cấu trúc điều là kiểu dữ liệutham chiếuMột sô kiểu dữ liệu do người dung định nghĩa gôm•object: đây là kiểu dữ liệu cơ sở chứa tất cả các kiểu dữ liệu khác trong C.•string: kiểu dữ liệu chuỗi ký tự.•class: kiểu dữ liệu class.•delegate: kiểu dữ liệu chuyển giao.•interface: kiểu dữ liệu giáo tiếp.•array: kiểu dữ liệu mảng.3. Các toán tửToán tử được kí hiệu bằng một biểu tượng dung để thực hiện một hành động. Các kiểudữ liệu cơ bản của C như kiểu nguyên hỗ trợ rất nhiều các toán tử như toán tử gán, toántử toán học, logic....Các phép toán +, , , là một ví dụ về toán tử. Áp dụng các toán tử này lên các biếnkiểu số ta có kết quả như việc thực hiện các phép toán thông thường.int a = 10;int b = 20;int c = a + b; c = 10 + 20 = 30C cung cấp cấp nhiều loại toán tử khác nhau để thao tác trên các kiểu biến dữ liệu, đượcliệt kê trong bảng sau theo từng nhóm ngữ nghĩa.Bảng 1.2 Các nhóm toán tử trong CNhóm toán tử Toán tử Ý nghĩaToán học + % Cộng, trừ, nhân, chia, chia lấyphần dưLogic | ~ true false Phép toàn logic và thao tác trên bitGhép chuỗi + Ghép nối hai chuỗiTăng, giảm ++, Tănggiảm toán hạng lênxuống 1.Đứng trước hoặc sau toán hạngDịch bit > Dịch trái, dịch phảiQuan hệ == = < > = Bằng, khác, nhỏ hơn, lớn hơn, nhỏhơn hoặc bằng, lớn hơn hoặc bằngGắn = += = = = %= = = ==Phép gắnChỉ số Cách truy xuất phần tử của mảngÉp kiểu ()Indirecti0on vàAddress > Dùng cho con trỏ3.1 Toán tử gán (=)Toán tử gán (=) Toán tử này cho phép thay đổi các giá trị của biến bên phải toán tửbằng giá trị bên trái toán tử.3.2 Nhóm toán tử toán họcC dùng các toàn tử số học với ý nghĩa theo đúng tên của chúng như: + (cộng), – (trừ) (nhân) và (chia). Tùy theo kiểu của hai toán hạng mà toán tử trả về kiểu tương ứng.Ngoài ra, còn có toán tử % (lấy phần dư) được sử dụng trong các kiểu số nguyên.3.3 Các toán tử tăng và giảmC cũng kế thừa từ C++ và Java các toán tử: +=,=, =, = , %= nhằm làm đơn giảnhoá. Nó còn kế thừa các toán tử tiền tố và hậu tố (như biến++, hay ++biến) để giảm bớt sựcông kềnh trong các toán tử cổ điển.3.4 Các toán tử quan hệCác toán tử quan hệ đ
Lời cảm ơn Lời em xin chân thành gửi lời cảm ơn đến trường Đại học Kinh tế Công Nghiệp Long An tạo điều kiện cho em có mơi trường học tập thật tốt, xin cảm ơn tất q thầy hết lòng quan tâm, dạy dỗ trang bị cho em kiến thức quý báu Em xin chân thành cảm ơn thầy Ngơ Thanh Hùng tận tình hướng dẫn, bảo giúp đỡ em trình triển khai thực đề tài Trong thời gian học tập với thầy, em không ngừng tiếp thu thêm nhiều kiến thức bổ ích mà học tập tinh thần làm việc , thái độ nghiên cứu nghiêm túc, hiệu quả, điều cần thiết cho em trình học tập làm việc sau Long An, ngày 15 tháng 11 năm 2017 Sinh viên Mai Thảo Minh [Type text] Page NHẬN XÉT CỦA GIÁO VIÊN ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… ……………………………………………………………………………………………… Long An ngày tháng năm 2017 Giáo Viên Ngô Thanh Hùng [Type text] Page MỤC LỤC CHƯƠNG 1: CƠ SỞ LÝ THUYẾT………………… I Ngơn ngữ lập trình C# Giới thiệu Các kiểu liệu Các toán tử Cấu trúc rẽ nhánh a Câu lệnh if b Câu lệnh case c Câu lệnh for d Câu lệnh while e Câu lệnh …while II Lập trình hướng đối tượng với C# .9 Lớp đối tượng Kế thừa lớp 11 Giao diện (Inter Face) 12 Không gian tên (Namespace) 14 CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ .15 I Phân tích đề tài 15 CHƯƠNG 3: TRIỂN KHAI LẬP TRÌNH 16 I Code chương trình 16 II Sơ đồ lớp .26 CHƯƠNG 4: MINH HỌA ỨNG DỤNG 27 I Form giao diện 27 II Form vào game 27 [Type text] Page CHƯƠNG 1: CƠ SỞ LÝ THUYẾT I Ngơn ngữ lập trình C# Giới thiệu Ngôn ngữ C# ngôn ngữ dẫn xuất từ C C++, tạo từ tảng phát triển Microsoft bắt đầu với công việc C C++ thêm vào đặc tính để làm cho ngơn ngữ dễ sử dụng Nhiều số đặc tính giống với đặc tính có ngơn ngữ Java Khơng dừng lại đó, Microsoft đưa số mục đich xây dựng ngôn ngữ Những mục đich được tóm tắt sau: • C# ngơn ngữ đơn giản • C# ngơn ngữ đại • C# ngơn ngữ hướng đối tượng • C# ngơn ngữ mạnh mẽ mềm dẻo • C# ngơn ngữ có từ khóa • C# ngơn ngữ hướng module • C# trở nên phổ biến Các kiểu liệu Tương tự C++ hay Java, C# chia thành hai tập hợp kiểu liệu chính: Kiểu xây dựng sẵn (built- in) mà ngôn ngữ cung cấp cho người lập trình kiểu người dùng định nghĩa (user-defined) người lập trình tạo C# phân tập hợp kiểu liệu thành hai loại: Kiểu liệu giá trị (value) kiểu liệu tham chiếu (reference) Việc phân chi khác lưu kiểu liệu giá trị kiểu liệu tham chiếu nhớ Đối với kiểu liệu giá trị lưu giữ kích thước thật nhớ cấp phát stack Trong kiểu liệu tham chiếu đối tượng cấp phát heap Khi đối tượng cấp phát heap địa trả về, địa gắn đến tham chiếu Bảng 1-1 Kiểu liệu xây dựng sẵn Kiểu C# byte char [Type text] Số byte Kiểu NET Mô tả Byte Số nguyên dương không dấu từ 0-255 Char Kí tự Unicode Page bool sbyte short ushort 1 2 Boolean Sbyte Int16 Int16 int Int32 uint Uint32 float Single double Double decimal Decimal Long Int64 ulong Uint64 Giá trị logic true/ false Số nguyên có dấu ( từ -128 đến 127) Số nguyên có dấu giá trị từ -32768 đến 32767 Số nguyên không dấu – 65.535 Số nguyên có dấu –2.147.483.647 2.147.483.647 Số nguyên không dấu – 4.294.967.295 Kiểu dấu chấm động, giá trị xấp xỉ từ 3,4E38 đến 3,4E+38, với chữ số có nghĩa Kiểu dấu chấm động có độ xác gấp đơi, giá trị xấp xỉ từ 1,7E-308 đến 1,7E+308, với 15,16 chữ số có nghĩa Có độ chinh xác đến 28 số giá trị thập phân, dùng tính tốn tài chính, kiểu đòi hỏi phải có hậu tố “m” hay “M” theo sau giá trị Kiểu số nguyên có dấu có giá trị khoảng : -9.223.370.036.854.775.808 đến 9.223.372.036.854.775.807 Số nguyên không dấu từ đến 0xffffffffffffffff Chọn kiểu định sẵn Tuỳ vào giá trị muốn lưu trữ mà ta chọn kiểu cho phù hợp Nếu chọn kiểu lớn so với giá trị cần lưu làm cho chương trình đòi hỏi nhiều nhớ chạy chậm Trong giá trị cần lưu lớn kiểu thực lưu làm cho giá trị biến bị sai chương trình cho kết sai Kiểu char biểu diễn ký tự Unicode Ví dụ “\u0041” ký tự “A” bảng Unicode Một số ký tự đặc biệt biểu diễn dấu “\” trước ký tự khác Kiểu liệu người dùng định nghĩa - Tất kiểu liệu người dung định nghĩa trừ kiểu cấu trúc điều kiểu liệu tham chiếu Một sô kiểu liệu người dung định nghĩa gơm • object: kiểu liệu sở chứa tất kiểu liệu khác C# • string: kiểu liệu chuỗi ký tự • class: kiểu liệu class • delegate: kiểu liệu chuyển giao • interface: kiểu liệu giáo tiếp • array: kiểu liệu mảng Các tốn tử Tốn tử kí hiệu biểu tượng dung để thực hành động Các kiểu [Type text] Page liệu C# kiểu nguyên hỗ trợ nhiều toán tử toán tử gán, toán tử toán học, logic Các phép tốn +, -, *, / ví dụ toán tử Áp dụng toán tử lên biến kiểu số ta có kết việc thực phép tốn thơng thường int a = 10; int b = 20; int c = a + b; // c = 10 + 20 = 30 C# cung cấp cấp nhiều loại toán tử khác để thao tác kiểu biến liệu, liệt kê bảng sau theo nhóm ngữ nghĩa Bảng 1.2 Các nhóm tốn tử C# Nhóm tốn tử Toán tử Ý nghĩa Cộng, trừ, nhân, chia, chia lấy Toán học +-*/% phần dư Logic & | ^ ! ~ && true false Phép toàn logic thao tác bit Ghép chuỗi + Ghép nối hai chuỗi Tăng/giảm toán hạng lên/xuống Tăng, giảm ++, -Đứng trước sau toán hạng Dịch bit > Dịch trái, dịch phải Bằng, khác, nhỏ hơn, lớn hơn, nhỏ Quan hệ == != < > = bằng, lớn Gắn Chỉ số Ép kiểu Indirecti0on Address = += -= *= /= %= &= != ^ = = [] () * -> [] & Phép gắn Cách truy xuất phần tử mảng Dùng cho trỏ 3.1 Toán tử gán (=) Toán tử gán (=) Toán tử cho phép thay đổi giá trị biến bên phải toán tử giá trị bên trái tốn tử 3.2 Nhóm tốn tử tốn học C# dùng toàn tử số học với ý nghĩa theo tên chúng như: + (cộng), – (trừ) * (nhân) / (chia) Tùy theo kiểu hai toán hạng mà toán tử trả kiểu tương ứng Ngồi ra, có tốn tử % (lấy phần dư) sử dụng kiểu số nguyên 3.3 Các toán tử tăng giảm C# kế thừa từ C++ Java toán tử: +=,-=, *=, /= , %= nhằm làm đơn giản hố Nó kế thừa toán tử tiền tố hậu tố (như biến++, hay ++biến) để giảm bớt công kềnh toán tử cổ điển [Type text] Page 3.4 Các toán tử quan hệ Các toán tử quan hệ dung để so sánh hai giá trị với kết trả có kiểu Boolean Tốn tử quan hệ gơm có: == (so sánh bằng), != (so sánh khác), > (so sánh lớn hơn), >= (lớn hay bằng), < (so sánh nhỏ hơn), == != & ^ | && || ?: = *= /= %= += -= &= ^= |= Nhân, chia, chia lấy phần dư công, trừ Dịch trái dịch phải Bằng, khác Và bit Xor bit Hoặc bit Và biểu thức điều kiện Hoặc biểu thức điều kiện Điều kiện tượng tự if 3.7 Toán tử tam phân Cú pháp: ? : ; Ý nghĩa: • Nếu biểu thức điều kiện thực biểu thức • Nếu sai thực biểu thức Cấu trúc rẽ nhánh a Câu lệnh if… else … Cú pháp: if ( biểu thức logic ) khối lệnh; [Type text] Page if ( biểu thức logic ) khối lệnh 1; else khối lệnh 2; Ghi chú: Khối lệnh tập câu lện cặp dấu “{…}” Bất kỳ nơi đâu có câu lệnh viết khối lệnh Biểu thức logic biểu thức cho giá trị dúng sai (true false) Nếu “biểu thức logic” cho giá trị “khối lệnh” hay “khối lệnh 1” thực thi, ngược lại “khối lệnh 2” thực thi Một điểm khác biệt với C++ biểu thức câu lệnh if phải biểu thức logic, biểu thức số b Câu lệnh switch case Cú pháp: switch ( biểu_thức_lựa_chọn ) { case biểu_thức_hằng : khối lệnh; lệnh nhảy; [ default : khối lệnh; lệnh nhảy; ] } Biểu thức lựa chọn biểu thức sinh trị nguyên hay chuỗi Switch so sánh biểu_thức_lựa_chọn với biểu_thức_hằng để biết phải thực với khối lệnh Lệnh nhảy break, goto…để thoát khỏi câu switch bắt buộc phải có int nQuyen = 0; switch ( sQuyenTruyCap ) { case “Administrator”: nQuyen = 1; break; case “Admin”: goto case “Administrator”; default: nQuyen = 2; break; } c Câu lệnh for Cú pháp: for ( [khởi_tạo_biến_đếm]; [biểu_thức]; [gia_tăng_biến_đếm] ) khối lệnh; Ví dụ 3-4 Tính tổng số nguyên từ a đến b int a = 10; int b = 100; int nTong = 0; d Câu lệnh while Cú pháp: [Type text] Page while ( biểu_thức_logic ) khối_lệnh; Khối_lệnh thực biểu thức Nếu từ đầu biểu thức sai, khối lệnh không thực thi e Câu lệnh …while Cú pháp: khối_lệnh while ( biếu_thức_logic ) Khác với while khối lệnh thực trước, sau biệu thức kiểm tra Nếu biểu thức khối lệnh lại thực II Lập trình hướng đối tượng với C# Lớp đối tượng 1.1 Đối tượng Trong lập trinh hướng đối tượng, tất thực thể hệ thống coi đối tượng cụ thể Đối tượng thực thể hoạt động chạy chượng trình Một đối tượng thực thể tôn hệ thống xác định ba yếu tố: • Định danh đối tượng: xác định cho đối tượng hệ thống, nhằm phân biết đối tượng với • Trạng thái đối tượng: tổ hợp giá trị thuộc tinh mà đối tượng có • Hoạt động đối tượng: hành động mà đối tượng có khả thực Trạng thái đối tượng quy định tính chất đặc trưng đối tượng Ví dụ, đối tượng xe có trạng thái là: • Nhãn hiệu xe Ford • Màu xe màu trắng • Giá bán xe 5000$ Mỗi đối tượng có số hành động gọi phương thức Ví dụ xe có phương thức : • Khởi động • Dừng lại • Chạy 1.2 Class (lớp) Định nghĩa lớp: Trong lập trình hướng đối tượng, đối tượng thực thể cụ thể, tôn [Type text] Page hệ thống Trong đó, lớp khái niệm trừu tượng, dung để tập hợp đối tượng loại Ví dụ: Trong tốn quản li xe hàng kinh doanh xe, xe có mặt hàng coi đối tượng Khi ta có niệm lớp “Xe hơi” tất loại xe có Khai báo lớp Định nghĩa lớp với cú pháp sau: [attribute][bổ từ truy xuất] class định danh [:lớp sở] { thân lớp } Ví dụ Khai báo lớp public class XeHoi { private string tenxe; private string nhanhieu; private string mauxe; public string TenXe { get { retrurn tenxe;} set { tenxe= value;} } public string NhanHieu { get { retrurn nhanhieu;} set { nhanhieu = value;} } public string MauXe { get { retrurn mauxe;} set { mauxe = value;} } } Lớp đối tượng Lớp đối tượng có mối tượng quan, chất lại khác nhau: • Lớp trừu tượng hóa đối tượng Trong đó, đối tượng thể cụ thể lớp • Đối tượng thực thể cụ thể, có thực, tơn hệ thống Trong lớp khai niệm trừu tượng, tơn dạng khái niệm để mô tả đặc tính chung nhóm đối tượng [Type text] Page 10 CHƯƠNG 2: PHÂN TÍCH THIẾT KẾ I PHÂN TÍCH ĐỀ TÀI Bạn fan hâm mộ thể loại trò chơi Bắn gà – bắn ong ? Bạn thích tham gia vào trận chiến không gian? Đây game thú vị giành cho bạn Một ngày đẹp trời, thiên hạ xinh đẹp bị công kẻ thù không gian ác Bạn người anh hùng cuối thiên hà Nhiệm vụ bạn điều khiển chiến vượt chướng ngại vật , tiêu diệt kẻ thù không gian bảo vệ thiên hà Hướng dẫn: Sử dụng phím để điều khiển chiến hạm: W: lên S: xuống A: qua trái D: qua phải Space: bắn đạn Mơ tả: Game cấu hình nhẹ, đơn giản, giải trí lành mạnh [Type text] Page 15 CHƯƠNG 3: TRIỂN KHAI LẬP TRÌNH I Code chương trình Boss.cs using using using using System; System.Collections.Generic; System.Windows.Media; TeamWork.Field; namespace TeamWork.Objects { public class Boss : Entity { 10 public enum BossType 11 { 12 WierdGuy, 13 } 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [Type text] public bool Movealbe = true; // Tag for making the boss imovable public int BossLife; // Boss lifepoints private BossType bossType; // Type(only one atm) /// /// Create a boss object from a given type /// /// Type public Boss(int type) { bossType = (BossType) type; this.Point = new Point2D(58,14); switch (bossType) { case BossType.WierdGuy: BossLife = 40; Page 16 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 [Type text] break; } } /// /// Draw boss player /// private void BossPrint() { Printing.DrawAt(this.Point.X+13, this.Point.Y - 12, @","); Printing.DrawAt(this.Point.X+12, this.Point.Y - 11, @"/("); Printing.DrawAt(this.Point.X+12, this.Point.Y - 10, @"\ \ _ /"); Printing.DrawAt(this.Point.X+12, this.Point.Y - 9, @"/- _ `-/"); Printing.DrawAt(this.Point.X+11, this.Point.Y - 8, @"(/\/ \ \"); Printing.DrawAt(this.Point.X+11, this.Point.Y - 7, @"/ / | `"); Printing.DrawAt(this.Point.X+11, this.Point.Y - 6, @"O O ) /"); Printing.DrawAt(this.Point.X+11, this.Point.Y - 5, @"`-^ '`