Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 37 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
37
Dung lượng
0,92 MB
Nội dung
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐÀO TẠO CHẤT LƯỢNG CAO NGÀNH: CÔNG NGHỆ THÔNG TIN o0o BÁO CÁO KẾT THÚC MÔN HỌC Đề tài: Lập trình game FlappyBird Nhóm sinh viên thực - Bành Viết Hùng - Nguyễn Thị Xuân Mai - Bùi Hoàng Hưng - Nguyễn Trần Huỳnh Lê - Trần Vĩnh Hùng 21110193 Giảng viên hướng dẫn - ThS Nguyễn Đăng Quang TP Hồ Chí Minh, tháng năm 2022 NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN Giáo viên hướng dẫn Nguyễn Đăng Quang NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Giáo viên phản biện LỜI NĨI ĐẦU Khơng có thành công mà không gắn liền với nỗ lực, cố gắng, hỗ trợ, giúp đỡ dù hay nhiều, dù trực tiếp hay gián tiếp Là q trình phấn đấu khơng ngừng nghỉ bên cạnh hướng dẫn, bảo tận tình, gắn bó tình cảm sâu sắc Để hồn thành tốt đề tài báo cáo này, chúng em xin gửi lời cảm ơn chân thành đến giảng viên, thầy Nguyễn Đăng Quang, người trực tiếp hỗ trợ chúng em suốt trình làm đề tài Chúng em cảm ơn thầy đưa lời khuyên từ kinh nghiệm thực tiễn để định hướng cho chúng em với yêu cầu đề tài chọn, ln giải đáp thắc mắc đưa góp ý, chỉnh sửa kịp thời giúp chúng em khắc phục nhược điểm hoàn thành tốt thời hạn đề Chúng em xin gửi lời cảm ơn chân thành quý thầy cô khoa Đào tạo Chất Lượng Cao nói chung ngành Cơng Nghệ Thơng Tin nói riêng tận tình truyền đạt kiến thức cần thiết giúp chúng em có tảng để làm nên đề tài này, tạo điều kiện để chúng em tìm hiểu thực tốt đề tài Đề tài báo cáo chúng em thực với hạn chế mặt kiến thức, kĩ thuật kinh nghiệm thực tế Do đó, q trình làm nên đề tài có thiếu sót điều khơng thể tránh khỏi nên chúng em mong nhận ý kiến đóng góp quý báu thầy để kiến thức chúng em hoàn thiện chúng em làm tốt lần sau Chúng em xin chân thành cảm ơn Cuối lời, nhóm em kính chúc thầy dồi sức khỏe thành công nghiệp trồng người Tp Hồ Chí Minh, tháng năm 2022 Nhóm sinh viên thực MỤC LỤC MỤC LỤC HÌNH ẢNH I PHẦN MỞ ĐẦU .1 Lý chọn đề tài Đối tượng nghiên cứu Phạm vi nghiên cứu .1 Mục tiêu nghiên cứu PHẦN NỘI DUNG CHƯƠNG I LÝ THUYẾT Pygame gì? 1.1 Khái niệm Pygame 1.2 Mục đích đời Pygame 2 Ưu điểm Pygame 3 Làm game với Python & Pygame 3.1 Cài đặt bắt đầu Python 3.2 Cài thư viện Pygame 3.3 Các lệnh đơn giản với Pygame 3.3.1 Chương trình “Hello word” 3.3.2 Các lệnh thường dùng Pygame .7 CHƯƠNG II ỨNG DỤNG Lên ý tưởng .17 Phát triển ý tưởng 20 Cấu hình kiểm thử 24 3.1 Chèn Background sàn game 11 3.2 Tạo chim Flappy Bird hệ thống ống 11 3.3 Xử lý va chạm game 11 3.4 Tạo chuyển động cho chim Flappy Bird 11 3.5 Tạo hệ thống tính điểm cho game 11 3.6 Tạo cửa sổ kết thúc 11 3.7 Xử lý âm game 11 Hướng dẫn sử dụng 24 PHẦN KẾT LUẬN .41 Kết đạt .41 Thuận lợi 41 Khó khăn 41 Nhận xét đánh giá tổng quan 41 Đánh giá mức độ hoàn thành thành viên .41 TÀI LIỆU THAM KHẢO .42 MỤC LỤC HÌNH ẢNH CHƯƠNG I: LÝ THUYẾT Hình 1.1 VXLAN packet format Hình 1.2 Mơ hình layer truyền thống Hình 1.3 Mơ hình layer mở rộng Hình 1.4 Mơ hình Spine-Leaf Hình 1.5 VxLAN flood and learning .10 Hình 1.6 VxLAN Ingress Replication 11 Hình 1.7 VxLAN flow .12 Hình 1.8 Multi DC 13 CHƯƠNG II: ỨNG DỤNG Hình 2.1 Topo MultiDC Docker .17 Hình 2.2 Đường truyền Mullti-DC 18 Hình 2.3 Gói tin đóng gói truyền thơng qua VXLAN 18 Hình 2.4 Topo nghiên cứu Cách truyền lưu lượng BUM VXLAN 19 Hình 2.5 Truyền lưu lượng BUM 21 Hình 2.6 Topo VXLAN xử lý lưu lượng BUM 24 Hình 2.7 Kiểm tra đường truyền PC 40 I DANH MỤC TỪ VIẾT TẮT II PHẦN MỞ ĐẦU Lý chọn đề tài FlappyBird tựa game giải trí khơng cịn xa lạ với tất người, đặt biệt bạn trẻ Lúc nhỏ, tân sinh viên k21 chúng em khơng phải có điều kiện để tiếp cận với trị chơi điện tử, có bạn thành phố, xem có điều kiện, tiếp xúc với đồ cơng nghệ, điện thoại, laptop, pc, nơng thơn trái lại, chơi game điện thoại điều vô xa xỉ Ngày nay, smartphone thông dụng, ta không khó bắt gặp hình ảnh đứa trẻ cầm điện thoại chơi game FlappyBird lại game dễ thương, chơi nhiều hại mắt, tốn thời gian, chơi vào mục đích giải trí vơ " thư giản " với game Game có nội dung phù hợp với nhiều lứa tuổi, nhân viên văn phòng, học sinh, sinh viên, giảng viên thầy chơi thấy thích Bọn em chọn đề tài game mong thể thân, cũ chắn có sáng tạo lạ, không giống Flappy " Chicken " tràn lan Đối tượng nghiên cứu Ngơn ngữ lập trình python Game FlappyBird nói riêng loại game lập trình python nói chung Phạm vi nghiên cứu Ngơn ngữ lập trình python nói chung pygame nói riêng Mục tiêu nghiên cứu Hiểu rõ python, trau dồi kĩ làm game với thư viện pygame PHẦN NỘI DUNG CHƯƠNG I LÝ THUYẾT Pygame gì? 1.1 Khái niệm Pygame PyGame thư viện ngơn ngữ Python Nó sử dụng để phát triển trò chơi 2-D tảng nơi bạn sử dụng tập hợp các mơ-đun Python để phát triển trò chơi Đây tảng dễ hiểu thân thiện với người bắt đầu giúp bạn phát triển trị chơi cách nhanh chóng 1.2 Mục đích đời Pygame Nhằm tạo mơi trường lập trình game, thõa sức sáng tạo, kích thích tư Người học lập trình pygame nâng cao khả tư duy, tạo công ăn việc làm, thõa sức với đam mê sáng tạo Ưu điểm Pygame - Dễ hiểu, dễ học Đơn giản, tốn thời gian Ít lỗi phát sinh Khả ứng dụng rộng rãi Làm game với python pygame 3.1 Cài đặt bắt đầu python Cài đặt window Có hai phiên python 3.7 (mới nhất) 2.7 Hãy truy cập trang tải xuống phiên mà bạn muốn Bạn tải xuống phiên Tuy nhiên, hầu hết ứng dụng python gần có python hỗ trợ python kết thúc Vì lý đó, tải xuống python Khi bạn nhấp vào liên kết bạn chuyển hướng đến trang bên tải xuống tệp thực thi tùy thuộc vào máy bạn from pygame import mixer mixer.init() screen = pygame.display.set_mode((500, 500)) done = False x=60 y=60 image=pygame.image.load(r'C:\Users\Tanishq\Downloads\wallpaper.jpg') screen.blit(image, (0, 0)) pygame.mixer.music.load(r'C:\Users\Tanishq\Desktop\song.mp3') pygame.mixer.music.play(-1) while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True pygame.draw.rect(screen, (255,0,0), pygame.Rect(x, y, 90, 90)) pygame.display.flip() r: - Trong đoạn mã trên, trước đưa đoạn mã, viết 'r' vì cơng cụ sửa đổi chuỗi r ' ' khiến chuỗi ' ' hiểu theo nghĩa đen Điều có nghĩa là, r'My \ Path \ Without \ Escaping 'sẽ đánh giá thành' My \ Path \ Without \ Escaping '- mà không gây dấu gạch chéo ngược làm thoát ký tự Trước tương đương với 15 chuỗi 'My \\ Path \\ Without \\ Escaping', khơng có cơng cụ sửa đổi thô. screen.blit (image, (0,0)): - Thao tác hiển thị hình ảnh window game. pygame.mixer.music.play (-1): - Số tần số nhạc Điều phát nhạc vô tận viết số nào, chơi nhiều lần có nghĩa chơi lần. pygame.mixer.music.queue ('next_song.mp3'): - Điều xếp hàng đợi hát phát tiếp theo. pygame.mixer.music.stop (): - Thao tác dừng nhạc Thay đổi màu hộp Mỗi màu đểu có mã khác Để nhận mã màu RGB, truy cập trang web này: https://www.rapidtables.com/web/color/RGB_Color.html Đoạn code mẫu để làm cho hộp chuyển từ màu đỏ sang màu nâu phím cách (Space) is_red = True #in infinite while loop:if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: is_red = not is_red if is_red: color = (255, 0, 0) else: color = (102, 0, 0) 16 Di chuyển hình chữ nhật Làm game khơng thể thiếu chuyển động, người điểu khiển bàn phím định hướng di chuyển game Dưới đoạn code mẫu pressed = pygame.key.get_pressed() if pressed[pygame.K_UP]: y -= if pressed[pygame.K_DOWN]: y += if pressed[pygame.K_LEFT]: x -= if pressed[pygame.K_RIGHT]: x += if is_red: color = (255, 0, 0) else: color = (102, 0, 0) pygame.draw.rect(screen, color, pygame.Rect(x, y, 90, 90)) Khi chơi game để biết độ mượt trị chơi cần phải nhìn số tốc độ khung hình /giây (hay cịn gọi fps) Chúng ta có lớp pygame.time gọi Đồng hồ thực điều cho Nó có phương pháp gọi đánh dấu để đạt tốc độ fps mong muốn #Add this before loop clock = pygame.time.Clock() #Add this in loop clock.tick(60) 17 Như Nhưng hình ảnh game bị che hết có thêm mã, mã có chức đặt lại hình trước vẽ hình chữ nhật #screen.blit(image, (0, 0)) Nhưng lần nữa, phải đối mặt với vấn đề hộp bị khỏi khung tọa độ vượt kích thước cửa sổ Thêm điều kiện sau sau lệnh di chuyển trước screen.blit () 18 if x=400: x=400 if y>=400: y=400 elif y400: y_pos=400 21 ball(x_pos,y_pos) CHƯƠNG III ỨNG DỤNG Cấu hình kiểm thử 3.1 Chèn background sàn game Chèn background hiển thị background lên hình: + pygame.image.load() dùng để lấy ảnh từ thư mục assets + pygame.transform.scale2x() dùng để phóng to ảnh gấp đôi + screen.blit() để hiển thị ảnh Window game bg = pygame.image.load('assets/background-night.png').convert() bg = pygame.transform.scale2x(bg) screen.blit(bg,(0,0)) Chèn sàn tạo khởi tạo giá trị cho biến floor_x_pos lưu vị trí sàn: floor = pygame.image.load('assets/floor.png').convert() floor = pygame.transform.scale2x(floor) 22 floor_x_pos = Định nghĩa hàm draw_floor(): def draw_floor(): screen.blit(floor,(floor_x_pos,650)) screen.blit(floor,(floor_x_pos+432,650)) Xử lí di chuyển sàn gọi hàm draw_floor() để hiển thị sàn hình: floor_x_pos -= draw_floor() if floor_x_pos = 650 ống dưới) +Các ống bên cần phải đảo ngược lại ta dùng lệnh flip_pipe = pygame.transform.flip(pipe_surface,False,True) +Sau đó, xuất ống lên hình def draw_pipe(pipes): for pipe in pipes: 24 if pipe.bottom >= 650: screen.blit(pipe_surface, pipe) else: flip_pipe = pygame.transform.flip(pipe_surface,False,True) screen.blit(flip_pipe, pipe) True hàm gọi để thực thi game_active==True vòng lặp while 3.3 Xử lý va chạm game + bird_rect.colliderect() dùng để kiểm tra va chạm chim ống + bird_rect.top ngang khung trò chơi + bird_rect.bottom ngang khung trò chơi def check_collision(pipes): for pipe in pipes: if bird_rect.colliderect(pipe): return False if bird_rect.top = 650: return False return True 3.4 Tạo chuyển động cho chim Flappy Bird + pygame.transform.rotozoom tạo hiệu ứng xoay cho chim Hàm tạo hiệu ứng lên xuống chim def rotate_bird(bird1): new_bird = pygame.transform.rotozoom(bird1,-bird_movement*3,1) return new_bird Hàm tạo hiệu ứng đập cánh def bird_animation(): 25 new_bird = bird_list[bird_index] new_bird_rect = new_bird.get_rect(center = (100,bird_rect.centery)) return new_bird, new_bird_rect + pygame.time.set.timer dùng để chỉnh thời gian đổi trạng thái chim đập cánh Tạo timer cho chim birdflap = pygame.USEREVENT + pygame.time.set_timer(birdflap, 200) 3.5 Tạo hệ thống tính điểm + game_font.render() để xuất chữ lên hình trị chơi Hàm hiển thị điểm trị chơi def score_display(game_state): if game_state == 'main game': score_surface = game_font.render(f'Score: {int(score)}',True,(255,255,255)) score_rect = score_surface.get_rect(center = (216,100)) screen.blit(score_surface, score_rect) if game_state == 'game over': score_surface = game_font.render(f'Score: {int(score)}',True,(255,255,255)) score_rect = score_surface.get_rect(center = (216,100)) screen.blit(score_surface, score_rect) high_score_surface = game_font.render(f'High Score: {int(high_score)}',True, (255,255,255)) high_score_rect = score_surface.get_rect(center = (170,630)) screen.blit(high_score_surface, high_score_rect) Hàm cập nhật điểm cao trò chơi def update_score(score,high_score): if score > high_score: high_score = score return high_score 26 Tải phông chữ vào trò chơi game_font = pygame.font.Font('04B_19.ttf', 40) 3.6 Tạo hình kết thúc game_over_surface = pygame.transform.scale2x(pygame.image.load('assets/m essage.png').convert_alpha()) game_over_rect = game_over_surface.get_rect(center=(216,384)) 3.7 Xử lí âm flap_sound = pygame.mixer.Sound('sound/sfx_wing.wav') hit_sound = pygame.mixer.Sound('sound/sfx_hit.wav') score_sound = pygame.mixer.Sound('sound/sfx_point.wav') score_sound_countdown =100 Hướng dẫn sử dụng Tải giải nén file Project_FlappyBird: https://drive.google.com/drive/folders/1QkNboItXSryHU4t49j3Eb9JnYAYN20W0 Khởi chạy file: FlappyBird.exe để trải nghiệm PHẦN KẾT LUẬN Kết đạt Tiếp cận với python thư viện pygame Cả nhóm làm sản phẩm 27 Thuận lợi Đã thầy cho làm quen trước với python, từ đó phần kiến thực Dễ dàng kiếm tài liệu tham khảo youtobe google Khó khan Vì lần đầu làm project nhóm nên gặp số khó khăn khơng đáng kể Khó khăn lớn đa số thành viên tập làm quen với python thư viện pygame nên cần nhiều thời gian để tiếp cận, phải xem nhiều video, tài liệu tham khảo nối phần nhiệm vụ thành viên thành dự án hoàn chỉnh gặp nhiều trắc trở Nhận xét đánh giá tổng quan Nhìn chung chúng em hoàn thành mục tiêu đặt ban đầu Phần lý thuyết hoàn thành đầy đủ, phần Ứng dụng chúng em tìm hướng phát triển thêm thay Đánh giá mức độ hoàn thành thành viên Mỗi thành viên hồn thành phần phân cơng,tham gia đóng góp ý kiến xây dựng nội dung nhiên có tuần bị trễ hạn 28 TÀI LIỆU THAM KHẢO 29