Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 32 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
32
Dung lượng
800,46 KB
Nội dung
Bộ Giáo dục Đào tạo Trường Đại học Kinh tế Quốc dân ==================== ĐỀ ÁN CÔNG NGHỆ THÔNG TIN Họ tên : Mã SV: Lớp : Hà Nội , 11/2021 Mục lục Giới thiệu chung Ngôn ngữ Python a Cài đặt Python b Tạo file viết mã Python PyCharm c Các khái niệm lập trình Python d Cấu trúc liệu , kiểu cấu trúc liệu Python e Cấu trúc điều khiển 10 f Hàm 12 Dự án lập trình 14 a Giới thiệu lập trình , mục tiêu 14 b Phân tích thiết kế hệ thống 19 c Lập trình demo 20 Kết luận 31 Giới thiệu chung Python ngôn ngữ lập trình bậc cao cho mục đích lập trình đa năng, Guido van Rossum tạo lần đầu mắt vào năm 1991 Python thiết kế với ưu điểm mạnh dễ đọc, dễ học dễ nhớ Python ngơn ngữ có hình thức sáng sủa, cấu trúc rõ ràng, thuận tiện cho người học lập trình ngơn ngữ lập trình dễ học; dùng rộng rãi phát triển trí tuệ nhân tạo Cấu trúc Python cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu Python hoàn toàn tạo kiểu động dùng chế cấp phát nhớ tự động; tương tự Perl, Ruby, Scheme, Smalltalk, Tcl Python phát triển dự án mã mở, tổ chức phi lợi nhuận Python Software Foundation quản lý Ban đầu, Python phát triển để chạy Unix Nhưng theo thời gian, Python dần mở rộng sang hệ điều hành từ MSDOS đến Mac OS, OS/2, Windows, Linux hệ điều hành khác thuộc họ Unix Mặc dù phát triển Python có đóng góp nhiều cá nhân, Guido van Rossum tác giả chủ yếu Python Ơng giữ vai trị chủ chốt việc định hướng phát triển Python Python ln xếp hạng vào ngơn ngữ lập trình phổ biến Python ngơn ngữ lập trình đa mẫu hình Lập trình hướng đối tượng lập trình cấu trúc hỗ trợ hồn tồn, nhiều tính hỗ trợ lập trình hàm lập trình hướng khía cạnh (bao gồm siêu lập trình siêu đối tượng (phương thức thần kì)) Các mẫu hình khác hỗ trợ thơng qua phần mở rộng, bao gồm thiết kế theo hợp đồng lập trình logic Python sử dụng kiểu động dạng kết hợp đếm tham chiếu dọn rác kiểm tra theo chu kì để quản lí nhớ Nó có tính phân giải tên động (liên kết muộn), cho phép liên kết tên biến phương thức trình thực thi chương trình Thiết kế Python cung cấp số tính cho lập trình hàm giống ngơn ngữ Lisp Python có hàm filter, map reduce; thơng hiểu danh sách (list comprehension), từ điển (dictionary), tập hợp (set), biểu thức sinh (generator) Thư viện chuẩn có hai mơ-đun (itertools functools) triển khai công cụ hàm vay mượn từ Haskell Standard ML Python ngôn ngữ dễ đọc, dễ hiểu Định dạng gọn gàng mặt trực quan, thường sử dụng từ khố tiếng Anh ngôn ngữ khác lại sử dụng dấu câu Khác với nhiều ngôn ngữ khác, khơng sử dụng dấu ngoặc nhọn để giới hạn khối lệnh, dấu chấm phẩy cuối câu lệnh sử dụng dù khơng bị cấm Nó có ngoại lệ cú pháp trường hợp đặc biệt C Pascal Bộ thư viện chuẩn rộng lớn Python, thường cho điểm mạnh lớn nó, cung cấp công cụ phù hợp cho nhiều công việc khác Với ứng dụng giao tiếp với Internet, nhiều giao thức định dạng chuẩn chẳng hạn MIME and HTTP hỗ trợ Nó có chứa mô-đun đành cho việc tạo lập giao diện người dùng đồ hoạ, kết nối với sở liệu quan hệ, sinh số giả ngẫu nhiên, tính tốn với số thập phân có độ xác tuỳ ý, thao tác với biểu thức quy kiểm thử đơn vị Ngôn ngữ Python a Cài đặt Python - Để viết mã nguồn Python, ta sử dụng trình soạn thảo nào, kể trình soạn thảo đơn giản NotePad Tuy nhiên, để phát triển ứng dụng cách hiệu hơn, ta nên sử dụng IDE (Môi trường phát triển tích hợp), để tiết kiệm thời gian công sức viết code Một IDE thơng dụng để lập trình ứng dụng Python, PyCharm IDE Để cài đặt , ta vào trang web thức Jetbrains : https://www.jetbrains.com/pycharm/download/ Sau , ta cài đặt theo hướng dẫn tùy chọn cài đặt - Cài đặt Python Ta truy cập vào trang chủ cảu python để tải phiên : https://www.python.org/downloads/ Sau download xong nhấn vào file exe , kích hoạt làm theo hướng dẫn Sau hoàn tất , giao diện PyCharm sau: b Tạo file viết mã Python PyCharm Sau tạo xong Project, ta click phải chuột lên Project, tạo Python File, để tạo file mã nguồn Python Và đặt tên cho file đó, file viết ngơn ngữ lập trình python có “py” Ví dụ : viết đoạn code in “ Hello world” python c Các khái niệm lập trình Python - Các kiểu liệu Kiểu liệu dùng để quy định xem giá trị thuộc lớp Python có kiểu liệu sau : o Kiểu int , long : kiểu số nguyên VD: 2021, -3,0 o Kiểu float: kiểu số thực có chứa dấu phẩy thập phân VD : 27.0 , -25,663 o Kiểu complex: kiểu số phức o Kiểu str : kiểu chuỗi , kèm với “ “ ‘ ‘ o Kiểu bool “ : lưu True False - Biến : nhớ dành để lưu trữ liệu Khi khai báo biến sử dụng phần nhớ Giá trị biến thay đổi Tùy vào kiểu liệu mà nhớ cấp phát khác Khi ta gán giá trị Python tự động hiểu kiểu liệu biến nên ta không cần khai báo kiểu liệu Như , biến có nhiều kiểu liệu Ta dùng hàm type( ) để biết kiểu biến VD: Kết in ra: Ta thay đổi kiểu liệu cảu biến “ ép kiểu” - Ghi : Comment: dùng để giải thích dòng code , giúp cho người đọc người viết hiểu source code sau Các đoạn comment không ảnh hưởng tới đoạn code Để đánh dấu comment , ta dùng “ #” cần comment nhiều dòng dùng ‘’’ “”” VD: - Toán tử: biểu tượng cụ thể mà thực số hoạt động giá trị cho ta kết Có kiểu tốn tử : o Toán tử số học : +, -, *, /, %, **, // o Toán tử quan hệ : ==, !=, >, =,>= o Toán tử gán :=, +=, -=, *=, /=, %=, //=, **= o Toán tử logic: and , or, not o Toán tử Biwter: &, |, ^, ~, -1: return False return True 25 Chọn ngẫu nhiên khối hình : def draw_next_shape(shape, surface): font = pygame.font.SysFont('comicsans', 20) label = font.render('Next Shape', True, (255,255,255)) sx = top_left_x + play_width + 30 sy = top_left_y + play_height/2 - 100 format = shape.shape[shape.rotation % len(shape.shape)] for i, line in enumerate(format): row = list(line) for j, column in enumerate(row): if column == '0': pygame.draw.rect(surface, shape.color, (sx + j*20, sy + i*20, 20, 20), 0) surface.blit(label, (sx + 10, sy- 30)) Kiểm tra xem vị trí người chơi đặt khối có phù hợp khơng : def valid_space(shape, grid): accepted_positions = [[(j, i) for j in range(10) if grid[i][j] == (0, 0, 0)] for i in range(20)] accepted_positions = [j for sub in accepted_positions for j in sub] formatted = convert_shape_format(shape) for pos in formatted: if pos not in accepted_positions: if pos[1] > -1: return False return True - Khi hàng lấp đầy ô , ta tiến hành xố dịng chèn dịng khác vào : def check_lost(positions): for pos in positions: x, y = pos if y < 1: return True return False def clear_rows(grid, locked): # need to see if row is clear the shift every other row above down one inc = for i in range(len(grid)-1,-1,-1): row = grid[i] if (0, 0, 0) not in row: inc += # add positions to remove from locked ind = i for j in range(len(row)): try: del locked[(j, i)] 26 except: continue if inc > 0: for key in sorted(list(locked), key=lambda x: x[1])[::-1]: x, y = key if y < ind: newKey = (x, y + inc) locked[newKey] = locked.pop(key) return inc Khi xoá hàng , ta tiến hành cộng điểm cho người chơi : def update_score(nscore): score = max_score() with open('scores.txt', 'w') as f: if int(score) > nscore: f.write(str(score)) else: f.write(str(nscore)) def max_score(): with open('scores.txt', 'r') as f: lines = f.readlines() score = lines[0].strip() return score Điểm lưu vào file text - Hàm main_menu để hiển thị hình giao diện trị chơi : def draw_text_middle(surface, text, size, color): font = pygame.font.SysFont("comicsans", size, bold=True) label = font.render(text, True, color) surface.blit(label, (top_left_x + play_width /2 (label.get_width()/2), top_left_y + play_height/2 label.get_height()/2)) def main_menu(win): # * run = True while run: win.fill((0,0,255)) draw_text_middle(win, 'Press Space to play quit', 20, (255,255,255)) pygame.display.update() for event in pygame.event.get(): if event.type == pygame.QUIT: run = False if event.type == pygame.KEYDOWN: if event.key==pygame.K_SPACE: main() if event.key==pygame.K_ESCAPE: pygame.quit() and Press Esc to 27 - Hàm main chạy trương chình : - def main(): global grid level_time = locked_positions = {} # (x,y):(255,0,0) grid = create_grid(locked_positions) change_piece = False run = True current_piece = get_shape() next_piece = get_shape() clock = pygame.time.Clock() fall_time = score = last_score = max_score() while run: fall_speed = 0.27 level_time += clock.get_rawtime() if level_time / 1000 > 5: level_time = if level_time > 0.12: level_time -= 0.005 grid = create_grid(locked_positions) fall_time += clock.get_rawtime() clock.tick() # PIECE FALLING CODE if fall_time / 1000 >= fall_speed: fall_time = current_piece.y += if not (valid_space(current_piece, grid)) and current_piece.y > 0: current_piece.y -= change_piece = True for event in pygame.event.get(): if event.type == pygame.QUIT: run = False pygame.display.quit() quit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: current_piece.x -= if not valid_space(current_piece, grid): current_piece.x += elif event.key == pygame.K_RIGHT: current_piece.x += if not valid_space(current_piece, grid): current_piece.x -= elif event.key == pygame.K_UP: # rotate shape current_piece.rotation = current_piece.rotation 28 + % len(current_piece.shape) if not valid_space(current_piece, grid): current_piece.rotation = current_piece.rotation - % len(current_piece.shape) if event.key == pygame.K_DOWN: # move shape down current_piece.y += if not valid_space(current_piece, grid): current_piece.y -= shape_pos = convert_shape_format(current_piece) # add color of piece to the grid for drawing for i in range(len(shape_pos)): x, y = shape_pos[i] if y > -1: # If we are not above the screen grid[y][x] = current_piece.color # IF PIECE HIT GROUND if change_piece: for pos in shape_pos: p = (pos[0], pos[1]) locked_positions[p] = current_piece.color current_piece = next_piece next_piece = get_shape() change_piece = False score += clear_rows(grid, locked_positions)*10 if check_lost(locked_positions): draw_text_middle(win, "YOU LOST!", 50, (255, 255, 255)) pygame.display.update() pygame.time.delay(1500) run = False update_score(score) draw_window(win,grid,score) draw_next_shape(next_piece, win) pygame.display.update() Trong hàm main , ta dùng level_time để tăng tốc độ khối hình sau khoảng thời gian định Nếu khối chạm vào đỉnh khu chơi trị chơi kết thúc 29 30 Kết luận Sau thời gian tham khảo tìm tịi bảo thầy hướng dẫn tập đồ án Tìm hiểu lập trình python xây dựng trị chơi Tetris khoảng thời gian định dành cho việc thực đề tài, nên số vấn đề chưa hoàn chỉnh Tuy nhiên, đồ án đạt số kết quả: Những kết đạt đồ án : - Tìm hiểu ngơn ngữ python - Tìm hiểu mơi trường lập trình PyCharm - Tìm hiểu cách thực trò chơi Tuy nhiên q trình làm cịn số điều cần bổ sung như: - Giao diện chưa có đẹp mắt - Chưa thao tác thành thục lập trình python - Trị chơi cịn thơ xơ - Trình bày thiếu logic, cách diễn đạt cịn Em cố gắng để ngày hoàn thiện, trau dồi kĩ lập trình lập trình trở nên tốt Em xin chân thành cảm ơn! 31 Tài liệu tham khảo - Sách lập trình python - https://vi.wikipedia.org/wiki/Python_(ng%C3%B4n_ng%E1%BB%AF_l %E1%BA%ADp_tr%C3%ACnh) - https://codelearn.io/sharing/lap-trinh-game-co-ban-voi-pygame - https://www.techwithtim.net/tutorials/game-development-withpython/tetris-pygame 32 ... *, /, %, **, // o Toán tử quan hệ : ==, !=, >, =,>= o Toán tử gán :=, +=, -=, *=, /=, %=, //=, **= o Toán tử logic: and , or, not o Toán tử Biwter: &, |, ^, ~,