TRƯỜNG ĐẠI HỌC ĐIỆN LỰC KHOA CÔNG NGHỆ THÔNG TIN BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN NGÔN NGỮ LẬP TRÌNH PYTHON ĐỀ TI: XÂY DỰNG GAME RẮN SĂN MỒI Hà Nội, tháng 1 năm 2023 Sinh viên thực hiện : Gi
Trang 1TRƯỜNG ĐẠI HỌC ĐIỆN LỰC
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO CHUYÊN ĐỀ HỌC PHẦN NGÔN NGỮ LẬP TRÌNH PYTHON
ĐỀ TI:
XÂY DỰNG GAME RẮN SĂN MỒI
Hà Nội, tháng 1 năm 2023
Sinh viên thực hiện :
Giảng viên hướng dẫn : LÊ MẠNH HÙNG
Trang 2PHIẾU CHẤM ĐIỂM
Sinh viên thực hiện:
Giảng viên chấm:
Giảng viên chấm 1:
Giảng viên chấm 2:
Trang 3MỤC LỤC
LỜI CẢM ƠN 5
LỜI NÓI ĐẦU 6
Chương 1 Tổng quan về đề tài 1
1.1 Đặt vấn đề 1
1.2 Mô tả đề tài 1
1.3 Phân tích yêu cầu 2
1.3.1 Yêu cầu chức năng 2
1.3.2 Yêu cầu phi chức năng 2
Chương 2 Giới thiệu ngôn ngữ lập trình Python 3
2.1 Giới thiệu ngôn ngữ Python 3
Chương 3 Xây dựng chương trình 5
3.1 Thuật toán xây dựng chương trình 5
Chương 4 Kết quả 9
4.1 Giao diện GamePlay 9
4.2 Giao diện GameOver 10
LỜI KẾT 11
Trang 4LỜI CẢM ƠN
Để hoàn thành báo cáo chuyên đề học phần này, trước tiên em xin gửi đến quý thầy, cô giáo trường Đại học Điện Lực lời cảm ơn chân thành Em xin cảm
ơn quý thầy, cô trong khoa CNTT đã tận tình giảng dạy trong suốt thời gian vừa qua Nhờ có sự chỉ dạy tận tình của thầy, cô đã giúp em hoàn thành báo cáo chuyên đề này
Đặc biệt, em xin gửi đến thầy Lê Mạnh Hùng lời cảm chân thành và sự tri
ân sâu sắc nhất khi đã tận tình hướng dẫn em hoàn thành tốt báo cáo chuyên đề học phần này
Trong quá trình thực hiện bài báo cáo, với phạm vi khả năng cho phép,
em đã cố gắng hoàn thành chuyên đề một cách tốt nhất Song với kiến thức bản thân cũng như kinh nghiệm thực tiễn còn hạn chế nên bài báo cáo không thể tránh khỏi những thiếu sót Em rất mong nhận được những ý kiến đóng góp của quý thầy, cô để học được thêm nhiều kinh nghiệm và hoàn thiện bản thân cũng như những bài bài cáo sắp tới
Em xin chân thành cảm ơn!
Trang 5LỜI NÓI ĐẦU
Hiện nay, ngành công nghệ thông tin đã trở thành một phần không thể thiếu trong cuộc sống, công nghệ thông tin đã và đang đóng vai trò quan trọng trong các ngành khoa học, kĩ thuật, kinh tế, xã hội tại các nước trên thế giới Nó mang lại giá trị về kinh tế, giáo dục và đặc biệt là mang tính giải trí cao
Sự ra đời của Internet, game online xuất hiện và nhanh chóng gây được sức hút to lớn Hiện nay game online cũng đang tiếp tục phát triển mạnh mẽ Nắm bắt được xu thế của người dùng, nhóm chúng em đã lên ý tưởng và xây dựng ứng dựng trò chơi giải trí “Rắn săn mồi cổ điển” đã đi vào huyền thoại
mà ai ai cũng biết dựa trên ngôn ngữ lập trình python
Trang 6Chương 1 Tổng quan về đề tài 1.1 Đặt vấn đề
Ngày nay CNTT đã trở thành một lĩnh vực mũi nhọn trong công cuộc phát triển kinh tế xã hội Cùng với công nghệ sinh học và năng lượng mới, CNTT vừa là công cụ, vừa là động lực thúc đẩy quá trình phát triển công nghiệp hóa hiện đại hóa đất nước
Có thể nói game đã và đang trở thành một nhu cầu giải trí thiết yếu trong cuộc sống của con người hiện nay Một trong những thể loại game kinh điển mà khi nhắc tới không còn xa lạ gì với chúng ta và đặc biệt là thế hệ 9x trở về sau,
đó chính là game “Rắn săn mồi cổ điển”.
Trong bối cảnh công nghệ ngày càng phát triển như hiện nay thì nhiều thể loại game được nhiều ra đời ngày càng nhiều và thu hút được nhiều bạn trẻ Tuy nhiên không vì vậy mà game rắn săn mồi bị lu mờ mà vẫn giữ được một vị trí trong lòng những người yêu thích thể loại game này Game đòi hỏi người chơi phải khéo léo và thể hiện khả năng điều khiển con rắn ăn càng nhiều mồi càng tốt để có cơ hội nhận được điểm cao Một ưu điểm của game rắn săn mồi là cấu hình không quá nặng, có thể chơi được trên máy tính cũng như các thiết bị di động
1.2 Mô tả đề tài
Rắn săn mồi là game cổ điển Trong trò chơi, người chơi phải điều khiển con rắn, mục tiêu là để ăn được nhiều mồi càng tốt Khi con rắn ăn một mồi, thân con rắn nó sẽ tăng lên Con rắn phải tránh những bức tường và cơ thể của chính mình
Kích thước của mỗi đốt thân con rắn là 10px Con rắn được điều khiển bằng phím mũi tên Ban đầu con rắn có 3 khớp Nếu trò chơi kết thúc, màn hình
sẽ hiể thị thông báo điểm của bạn ở giữa màn hình
Trang 7Recommandé pour toi
A Handbook OF Present-DAY English
Lingua Inglese 1 (Lingua E Fonologia)(A) 100% (9)
CH 2 - The Pronunciation of English - A Handbook of Present-Day English
A handbook of present-day english
Prokaryote vs Eukaryote Worksheeet
Suite du document ci-dessous
27
29
10
3
Trang 8- Mô tả:
+ Game cấu hình nhẹ, đơn giản, giải trí lành mạnh
+ Cách chơi:
Người chơi dùng các phím mỗi tên để điều khiến con rắn sao cho
ăn được mồi
Nếu con rắn đụng vào các bức tường hoặc đụng vào chính mình, trò chơi sẽ kết thúc
1.3 Phân tích yêu cầu
1.3.1 Yêu cầu chức năng
- Người chơi ấn vào button bắt đầu thì để tạo ra game mới
- Mỗi khi rắn ăn mồi, thì rắn phải dài ra thêm 1 đơn vị
- Khi game kết thúc phải hiển thị điểm của người chơi
1.3.2 Yêu cầu phi chức năng
- Cấu hình nhẹ, dễ cài đặt
- Giao diện thân thiện dễ sử dụng
- Giúp người chơi thư giãn sau những giờ làm việc căng thẳng
- Giúp người chơi tăng khả năng tập trung vào công việc
Trang 9Chương 2 Giới thiệu ngôn ngữ lập trình Python 2.1 Giới thiệu ngôn ngữ Python
Python là một ngôn ngữ lập trình thông dịch (interpreted), hướng đối tượng (object-oriented), và là một ngôn ngữ bậc cao (high-level) ngữ nghĩa động (dynamic semantics) Python hỗ trợ các module và gói (packages), khuyến khích chương trình module hóa và tái sử dụng mã Trình thông dịch Python và thư viện chuẩn mở rộng có sẵn dưới dạng mã nguồn hoặc dạng nhị phân miễn phí cho tất cả các nền tảng chính và có thể được phân phối tự do Python đã được hình thành vào cuối những năm 1980, và việc thực hiện nó vào tháng 12 năm
1989 bởi Guido van Rossum tại Centrum Wiskunde & Informatica (CWI) Hà ở
Lan như là một kế thừa cho ngôn ngữ ABC (tự lấy cảm hứng từ SETL) có khả năng xử lý ngoại lệ và giao tiếp với Hệ điều hành Amoeba Van Rossum là tác giả chính của Python, và vai trò trung tâm của ông trong việc quyết định hướng phát triển của Python
Các đặc điểm của Python:
Ngữ pháp đơn giản, dễ đọc
Vừa hướng thủ tục (procedural-oriented), vừa hướng đối tượng (object-oriented)
Hỗ trợ module và hỗ trợ gói (package)
Xử lý lỗi bằng ngoại lệ (Exception)
Kiểu dữ liệu động ở mức cao
Có các bộ thư viện chuẩn và các module ngoài, đáp ứng tất cả các nhu cầu lập trình
Có khả năng tương tác với các module khác viết trên C/C+ + (Hoặc Java cho Jython, hoặc Net cho IronPython)
Trang 10 Có thể nhúng vào ứng dụng như một giao tiếp kịch bản (scripting interface)
Hiện nay ngôn ngữ Python được xếp hạng thứ 3 trong Top 10 các ngôn ngữ lập trình phổ biến nhất đang được thế giới sử dụng (Bảng xếp hạng năm 2022):
Theo thống kê từ top 39 trường giảng dạy khoa học máy tính thì đa phần các trường sử dụng ngôn ngữ Python để giảng dạy:
Trang 11Chương 3 Xây dựng chương trình 3.1 Thuật toán xây dựng chương trình
import pygame
import time
import random
import sys
snake_speed = 10
window_x = 720
window_y = 480
black pygame.= Color( , , )0 0 0
white pygame.= Color(255 255 255, , )
red pygame.= Color(255 0 0, , )
green pygame.= Color( ,0 255 0, )
blue pygame.= Color( , ,0 0 255)
pygame.init()
pygame.display.set_caption("Snake Game by Quan AT"
window pygame.display.= set_mode((window_x,window_y)) fps pygame.time.= Clock()
Trang 12snake_position [= 100 50, ]
m 10
Imghead =
pygame.transform.scale(pygame.image.load('head.jpg'), (m,m))
Imgfruit=
pygame.transform.scale(pygame.image.load('fruit.jpg'), (m,m))
snake_body [[= 100 60, ],
[80 60, ],
[60 60, ]]
# fruit position
fruit_position [random.randrange(= 1,(window_x//10)) * 10, random.randrange(1,(window_y//10)) * 10]
# spawn: đ tr ngẻ ứ
fruit_spawn = True
# setting default snake position towards right: dat huong con ran mac dinh ve ben phai
direction = 'RIGHT'
change_to direction=
score = 0
def show_score(choice color font size, , , ):
score_font pygame.font.= SysFont(font size, )
score_surface score_font.= render( Score: " +
str(score),True,color)
score_rect score_surface.= get_rect()
window.blit(score_surface,score_rect)
def game_over():
my_font pygame.font.= SysFont( times new roman' 50) game_over_surface my_font.= render( Your score is: ' + str(score),True,red)
game_over_rect =
game_over_surface.get_rect(center=(window_x/ ,window_y/ ))
Trang 13window.blit(game_over_surface,game_over_rect)
pygame.display.flip()
time.sleep( )2
pygame.quit()
while True:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP:
change_to = 'UP'
if event.key == pygame.K_DOWN:
change_to = 'DOWN'
if event.key == pygame.K_LEFT:
change_to = 'LEFT'
if event.key == pygame.K_RIGHT:
change_to = 'RIGHT'
# neu nhan dong thoi 2 phim chung toi khong muon con ran di chuyen theo hai huong cung mot luc
if change_to == 'UP' and direction != 'DOWN':
direction = 'UP'
if change_to == 'DOWN' and direction != 'UP':
direction = 'DOWN'
if change_to == 'LEFT' and direction != 'RIGHT': direction = 'LEFT'
if change_to == 'RIGHT' and direction != 'LEFT': direction = 'RIGHT'
# moving the snake
if direction == 'UP':
snake_position[ ] 1 -= 10
if direction == 'DOWN':
snake_position[ ] 1 += 10
if direction == 'LEFT':
snake_position[ ] 0 -= 10
if direction == 'RIGHT':
snake_position[ ] 0 += 10
# co che phat trien ran: neu trai cay va ran va cham thi diem so se tang len 10
snake_body.insert( ,0 list(snake_position))
if snake_position[ ] 0 == fruit_position[ ] 0 and
snake_position[1] == fruit_position[1]:
Trang 14score += 10
fruit_spawn = False
else:
snake_body.pop()
if not fruit_spawn:
fruit_position [random.randrange(= 1
(window_x//10)) * 10,
random.randrange(1
(window_y//10)) * 10]
fruit_spawn = True
window.fill(black)
for pos in snake_body:
pygame.draw.rect(window,green,pygame.Rect(pos[ ],pos[ ],0 1 10 ,10))
window.blit(Imghead,pygame.Rect(snake_body[ ]0 [ ],snake_body[ ][0 0 1],m,m)) # head
pygame.draw.rect(window,white,pygame.Rect(fruit_position[0 ],fruit_position[ ],1 10 10, ))
window.blit(Imgfruit,pygame.Rect(fruit_position[ ],fruit_p0 osition[ ],m,m))1
# game over conditions
if snake_position[ ] 0 < 0 or snake_position[ ] 0 > window_x-10:
game_over()
if snake_position[ ] 1 < 0 or snake_position[ ] 1 > window_y-10:
game_over()
# khi ran tu va cham vao body cua no
for block in snake_body[1 ]:
if snake_position[ ] 0 == block[ ] 0 and
snake_position[1] == block[1]:
game_over()
show_score( ,white,1 'times new roman' 20)
pygame.display.update()
Trang 15fps.tick(snake_speed)
Trang 16Chương 4 Kết quả 4.1 Giao diện GamePlay
Trang 174.2 Giao diện GameOver
Trang 18LỜI KẾT
Bài tập Ngôn ngữ lập trình Python với đề tài về “Xây dựng game rắn săn mồi” đã hoàn thành Nhóm em xin gửi lời cảm ơn tới thầy Lê Mạnh Hùng đã tận tình giảng dạy, hướng dẫn cách thức tìm hiểu đề tài và truyền đạt những kinh nghiệm quý báu để nhóm có thể hoàn thành bài tập trong thời gian ngắn Trong thời suốt thời gian nghiên cứu đề tài, các thành viên trong nhóm đã hoạt động nhiệt tình và rất có trách nhiệm trong việc tìm kiếm tài liệu cũng như đóng góp ý kiến để nghiêm cứu đề tài một cách tốt nhất Mặc dù đã rất cố gắng, nhưng do thời gian để hoàn thành bài tập có hạn và khả năng của các thành viên còn hạn chế nên bản báo cáo này vẫn còn một số thiếu sót rất mong nhận được những ý kiến đóng góp quý báu của quý thầy cô
Em xin chân thành cảm ơn!