<!DOCTYPE html>
    <html lang="vi" xmlns="http://www.w3.org/1999/xhtml" prefix="og: http://ogp.me/ns#">
    <head>
<title>Hướng dẫn code game &quot;Rắn săn mồi&quot; bằng Python</title>
<meta name="description" content="Hướng dẫn code game &quot;Rắn săn mồi&quot; bằng Python - Savefile - Tin Tức -...">
<meta name="author" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :.">
<meta name="copyright" content=".: Nguoicodonvn2008.info - Cõi lòng người cô đơn :. [admin@nguoicodonvn2008.info]">
<meta name="robots" content="index, archive, follow, noodp">
<meta name="googlebot" content="index,archive,follow,noodp">
<meta name="msnbot" content="all,index,follow">
<meta name="generator" content="NukeViet v4.5">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="og:title" content="Hướng dẫn code game &quot;Rắn săn mồi&quot; bằng Python">
<meta property="og:type" content="website">
<meta property="og:description" content="Savefile - Tin Tức - https&#x3A;&#x002F;&#x002F;www.nguoicodonvn2008.info&#x002F;vi&#x002F;news&#x002F;savefile&#x002F;kien-thuc-may-tinh&#x002F;huong-dan-code-game-ran-san-moi-bang-python-11694.html">
<meta property="og:site_name" content=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.">
<meta property="og:url" content="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/huong-dan-code-game-ran-san-moi-bang-python-11694.html">
<link rel="shortcut icon" href="https://www.nguoicodonvn2008.info/favicon.ico">
<link rel="canonical" href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/huong-dan-code-game-ran-san-moi-bang-python-11694.html">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/" title="Tin Tức" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/karaoke-dual/" title="Tin Tức - Karaoke Dual" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/nhac-tre/" title="Tin Tức - Nhạc trẻ" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tru-tinh/" title="Tin Tức - Trữ tình" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/nuoc-ngoai/" title="Tin Tức - Nước ngoài" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/remix/" title="Tin Tức - Remix" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tam-su-tinh-yeu/" title="Tin Tức - Tâm sự tình yêu" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tho-suu-tam/" title="Tin Tức - Thơ sưu tầm" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/cuoc-song/" title="Tin Tức - Cuộc sống" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/phan-mem/" title="Tin Tức - Phần mềm" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/kien-thuc-may-tinh/" title="Tin Tức - Kiến thức máy tính" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/hoc-tap/" title="Tin Tức - Học tập" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/tai-lieu/" title="Tin Tức - Tài liệu" type="application/rss+xml">
<link rel="alternate" href="https://www.nguoicodonvn2008.info/vi/news/rss/de-thi/" title="Tin Tức - Đề thi" type="application/rss+xml">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/assets/css/font-awesome.min.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/style.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/style.non-responsive.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/news.css" type="text/css">
<link rel="preload" as="style" href="https://www.nguoicodonvn2008.info/themes/default/css/custom.css" type="text/css">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/jquery/jquery.min.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/language/vi.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/global.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/assets/js/site.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/news.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/main.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/custom.js" type="text/javascript">
<link rel="preload" as="script" href="https://www.nguoicodonvn2008.info/themes/default/js/bootstrap.min.js" type="text/javascript">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/assets/css/font-awesome.min.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/bootstrap.non-responsive.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/style.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/style.non-responsive.css">
<link rel="StyleSheet" href="https://www.nguoicodonvn2008.info/themes/default/css/news.css">
<link rel="stylesheet" href="https://www.nguoicodonvn2008.info/themes/default/css/custom.css">
<style type="text/css">
	body{background: #fff;}
</style>
    </head>
    <body>
<div id="print">
	<div id="hd_print">
		<h2 class="pull-left">.&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.</h2>
		<p class="pull-right"><a title=".&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;." href="https://www.nguoicodonvn2008.info/">https://www.nguoicodonvn2008.info</a></p>
	</div>
	<div class="clear"></div>
	<hr />
	<div id="content">
		<h1>Hướng dẫn code game &quot;Rắn săn mồi&quot; bằng Python</h1>
		<ul class="list-inline">
			<li>Chủ nhật - 23/11/2025 20:25</li>
			<li class="hidden-print txtrequired"><em class="fa fa-print">&nbsp;</em><a title="In ra" href="javascript:;" onclick="window.print()">In ra</a></li>
			<li class="hidden-print txtrequired"><em class="fa fa-power-off">&nbsp;</em><a title="Đóng cửa sổ này" href="javascript:;" onclick="window.close()">Đóng cửa sổ này</a></li>
		</ul>
		<div class="clear"></div>
		<div id="hometext">
		</div>
				<div class="imghome">
			<img alt="Hướng dẫn code game &quot;Rắn săn mồi&quot; bằng Python" src="https://st.quantrimang.com/photos/image/2020/08/08/sn7.gif" width="460" class="img-thumbnail" />
		</div>
		<div class="clear"></div>
		<div id="bodytext" class="clearfix">
			<p style="text-align: justify;">Trong bài viết&nbsp;Hướng dẫn code game &quot;Thỏ chiến binh&quot; bằng Python&nbsp;lần trước, chúng ta đã làm quen với việc code game trên&nbsp;Python. Lần này, mời các bạn tiếp tục tìm hiểu thêm nhiều điều hay ho hơn nữa qua hướng dẫn code game &quot;Rắn săn mồi&quot;.</p>

<div style="text-align: justify;">&nbsp;</div>

<h2 style="text-align: justify;"><strong>Bước 1: Cài đặt Pygame</strong></h2>

<p style="text-align: justify;">Điều đầu tiên bạn cần làm đó là cài đặt thư viện Pygame lên máy tính của mình. Bạn có thể truy cập&nbsp;<strong>pygame.org/download.shtml</strong>&nbsp;để tải về và cài đặt phiên bản Pygame phù hợp với phiên bản Python trên máy của mình.</p>

<h2 style="text-align: justify;">Bước 2: Tạo màn hình game</h2>

<p style="text-align: justify;">Để tạo màn hình cho game &quot;Rắn săn mồi&quot; bằng thư viện Pygame, bạn cần sử dụng hàm&nbsp;<strong>display.set_mode()</strong>. Ngoài ra, bạn cũng sẽ phải sử dụng hàm&nbsp;<strong>init()</strong>&nbsp;và&nbsp;<strong>quit()</strong>&nbsp;để khởi tạo và hủy khởi tạo mọi thứ ở đầu và cuối chương trình. Hàm&nbsp;<strong>update()</strong>&nbsp;được sử dụng để cập nhật bất kỳ thay đổi nào được thực hiện trên màn hình.</p>

<p style="text-align: justify;"><strong>flip()</strong>&nbsp;là một hàm khác có cách hoạt động tương tự hàm&nbsp;<strong>update()</strong>. Khác biệt nằm ở chỗ hàm&nbsp;<strong>update()</strong>&nbsp;chỉ cập nhật những thay đổi được thực hiện trong khi đó hàm&nbsp;<strong>flip()</strong>&nbsp;sẽ làm lại toàn bộ màn hình.</p>

<p style="text-align: justify;">Dưới đây là đoạn code mẫu:</p>

<pre id="pre0" style="text-align: justify;">
import pygame
pygame.init()
dis=pygame.display.set_mode((400,300))
pygame.display.update()
pygame.quit()
quit()</pre>

<p style="text-align: justify;">Chạy đoạn code bạn sẽ có kết quả sau:</p>

<figure>
<div style="text-align: justify;"><img alt="Màn hình ban đầu của game Rắn săn mồi" data-i="0" data-src="https://st.quantrimang.com/photos/image/2020/08/08/sn1.jpg" data-was-processed="true" height="329" src="https://st.quantrimang.com/photos/image/2020/08/08/sn1.jpg" width="399" /></div>

<figcaption>
<div style="text-align: justify;">Màn hình ban đầu của game Rắn săn mồi</div>
</figcaption>
</figure>

<p style="text-align: justify;">Tuy nhiên, màn hình này sẽ đóng lại ngay lập tức. Để khắc phục vấn đề này, bạn cần tạo ra vòng lặp cho game bằng cách dùng&nbsp;<strong>while</strong>&nbsp;trước khi thực sự thoát game.</p>

<p style="text-align: justify;">Code mẫu:</p>

<pre id="pre1" style="text-align: justify;">
import pygame
pygame.init()
dis=pygame.display.set_mode((400,300))
pygame.display.update()
pygame.display.set_caption(&#039;Snake game by Edureka&#039;)
game_over=False
while not game_over:
    for event in pygame.event.get():
        print(event)   #in ra tất cả các hành động xuất hiện trên màn hình
pygame.quit()
quit()</pre>

<p style="text-align: justify;">Khi bạn chạy đoạn code này, bạn sẽ thấy màn hình giống như ở trên nhưng nó không đóng lại. Với việc có thêm hàm&nbsp;<strong>event.get()</strong>, màn hình sẽ trả về tất cả các hành động xuất hiện trên nó. Bạn còn có thể đặt tiêu đề cho màn hình bằng cách sử dụng hàm&nbsp;<strong>display.set_caption()</strong>.</p>

<p style="text-align: justify;">Kết quả sau khi chạy chương trình:</p>

<figure>
<div style="text-align: justify;"><img alt="Màn hình game hiện đã có tiêu đề" data-i="1" data-src="https://st.quantrimang.com/photos/image/2020/08/08/sn2.jpg" data-was-processed="true" height="328" src="https://st.quantrimang.com/photos/image/2020/08/08/sn2.jpg" width="399" /></div>

<figcaption>
<div style="text-align: justify;">Màn hình game hiện đã có tiêu đề</div>
</figcaption>
</figure>

<p style="text-align: justify;">Bây giờ, bạn đã có màn hình cho game &quot;Rắn săn mồi&quot; của mình nhưng khi nhấp vào nút đóng (dấu X), màn hình không đóng lại. Lý do là vì bạn chưa thiết lập màn hình phải đóng khi bạn nhấn nút đóng. Để làm điều này, Pygame cung cấp cho bạn một lệnh có tên&nbsp;<strong>QUIT</strong>&nbsp;và bạn có thể sử dụng nó như sau:</p>

<pre id="pre2" style="text-align: justify;">
import pygame
pygame.init()
dis=pygame.display.set_mode((400,300))
pygame.display.update()
pygame.display.set_caption(&#039;Snake game by Edureka&#039;)
game_over=False
while not game_over:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            game_over=True
pygame.quit()
quit()</pre>

<p style="text-align: justify;">Bây giờ màn hình đã được thiết lập xong. Phần tiếp theo là tạo ra con rắn.</p>

<h2 style="text-align: justify;">Bước 3: Tạo ra con rắn</h2>

<p style="text-align: justify;">Để tạo con rắn, trước tiên bạn cần xác định một vài biến màu cho rắn, con mồi, màn hình... Bảng màu được sử dụng trong Pygame là RGB (Red Green Blue). Trong trường hợp này, nếu thiết lập là 0 hết cho RGB thì bạn sẽ nhận được màu đen, còn đặt 255 cho tất cả thì bạn nhận được màu trắng.</p>

<p style="text-align: justify;">Thực tế, con rắn của chúng ta là một hình chữ nhật. Để vẽ hình chữ nhật trong Pygame, bạn cần sử dụng hàm&nbsp;<strong>draw.rect()</strong>&nbsp;và nhập và kích thước, màu sắc.</p>

<p style="text-align: justify;">Code mẫu:</p>

<pre id="pre3" style="text-align: justify;">
import pygame
pygame.init()
dis=pygame.display.set_mode((400,300))
pygame.display.set_caption(&#039;Snake game by Edureka&#039;)
blue=(0,0,255)
red=(255,0,0)
game_over=False
while not game_over:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            game_over=True
    pygame.draw.rect(dis,blue,&#91;200,150,10,10&#93;)
    pygame.display.update()
pygame.quit()
quit()</pre>

<p style="text-align: justify;">Kết quả khi chạy code mẫu:</p>

<figure>
<div style="text-align: justify;"><img alt="Con rắn đã được thiết lập xong" data-i="2" data-src="https://st.quantrimang.com/photos/image/2020/08/08/sn3.jpg" data-was-processed="true" height="326" src="https://st.quantrimang.com/photos/image/2020/08/08/sn3.jpg" width="396" /></div>

<figcaption>
<div style="text-align: justify;">Con rắn đã được thiết lập xong</div>
</figcaption>
</figure>

<p style="text-align: justify;">Như bạn thấy, con rắn màu xanh da trời đã xuất hiện trên màn hình. Bước tiếp theo là tạo ra chuyển động cho con rắn.</p>

<h2 style="text-align: justify;">Bước 4: Tạo chuyển động cho con rắn</h2>

<p style="text-align: justify;">Để di chuyển con rắn, bạn cần tạo ra các sự kiện trong class KEYDOWN của Pygame. Các sự kiện được sử dụng ở đây là K_UP, K_DOWN, K_LEFT và K_RIGHT, tương ứng với di chuyển lên, xuống, trái và phải của con rắn. Từ bước này, màn hình game cũng sẽ được thay đổi từ màu đen mặc định sang màu trắng bằng cách sử dụng hàm&nbsp;<strong>fill()</strong>. Từ bước này, con rắn cũng được chuyển sang màu đen và màn hình game cũng lớn gấp đôi.</p>

<p style="text-align: justify;">Bạn cũng cần tạo ra hai biến mới là&nbsp;<strong>x1_change</strong>&nbsp;và&nbsp;<strong>y1_change</strong>&nbsp;để chứa các giá trị được cập nhật của tọa độ x và y. Code mẫu cho tới phần này như sau:</p>

<pre id="pre4" style="text-align: justify;">
import pygame
pygame.init()
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
dis = pygame.display.set_mode((800, 600))
pygame.display.set_caption(&#039;Snake Game by Edureka&#039;)
game_over = False
x1 = 300
y1 = 300
x1_change = 0       
y1_change = 0
clock = pygame.time.Clock()
while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x1_change = -10
                y1_change = 0
            elif event.key == pygame.K_RIGHT:
                x1_change = 10
                y1_change = 0
            elif event.key == pygame.K_UP:
                y1_change = -10
                x1_change = 0
            elif event.key == pygame.K_DOWN:
                y1_change = 10
                x1_change = 0
    x1 += x1_change
    y1 += y1_change
    dis.fill(white)
    pygame.draw.rect(dis, black, &#91;x1, y1, 10, 10&#93;)
    pygame.display.update()
    clock.tick(30)
pygame.quit()
quit()</pre>

<p style="text-align: justify;">Kết quả khi chạy chương trình:</p>

<figure>
<div style="text-align: justify;"><img alt="Đây là con rắn sau khi được gán chuyển động theo điều khiển bàn phím" data-adbro-processed="true" data-i="3" data-src="https://st.quantrimang.com/photos/image/2020/08/08/sn4.gif" data-was-processed="true" height="657" src="https://st.quantrimang.com/photos/image/2020/08/08/sn4.gif" width="600" /></div>

<figcaption>
<div style="text-align: justify;">Đây là con rắn sau khi được gán chuyển động theo điều khiển bàn phím</div>
</figcaption>
</figure>

<h2 style="text-align: justify;">Bước 5: Tạo giới cơ chế Game Over khi con rắn đâm vào rìa màn hình</h2>

<p style="text-align: justify;">Trong game rắn săn mồi, người chơi sẽ thua nếu điều khiển rắn đâm vào rìa màn hình. Để làm được điều đó, bạn thêm một lệnh if để xác định giới hạn cho tọa độ x và y sao cho nó nhỏ hơn hoặc bằng với màn hình. Bạn cũng không nên sử dụng các hardcode mà thay bằng các biến để có thể dễ dàng sửa đổi sau này nếu cần.</p>

<p style="text-align: justify;">Code mẫu như sau:</p>

<pre id="pre5" style="text-align: justify;">
import pygame
import time
pygame.init()
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
dis_width = 800
dis_height  = 600
dis = pygame.display.set_mode((dis_width, dis_width))
pygame.display.set_caption(&#039;Snake Game by Edureka&#039;)
game_over = False
x1 = dis_width/2
y1 = dis_height/2
snake_block=10
x1_change = 0
y1_change = 0
clock = pygame.time.Clock()
snake_speed=30
font_style = pygame.font.SysFont(None, 50)
def message(msg,color):
    mesg = font_style.render(msg, True, color)
    dis.blit(mesg, &#91;dis_width/2, dis_height/2&#93;)
while not game_over:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            game_over = True
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                x1_change = -snake_block
                y1_change = 0
            elif event.key == pygame.K_RIGHT:
                x1_change = snake_block
                y1_change = 0
            elif event.key == pygame.K_UP:
                y1_change = -snake_block
                x1_change = 0
            elif event.key == pygame.K_DOWN:
                y1_change = snake_block
                x1_change = 0
    if x1 &gt;= dis_width or x1 &lt; 0 or y1 &gt;= dis_height or y1 &lt; 0:
        game_over = True
    x1 += x1_change
    y1 += y1_change
    dis.fill(white)
    pygame.draw.rect(dis, black, &#91;x1, y1, snake_block, snake_block&#93;)
    pygame.display.update()
    clock.tick(snake_speed)
message(&quot;You lost&quot;,red)
pygame.display.update()
time.sleep(2)
pygame.quit()
quit()</pre>

<p style="text-align: justify;">Còn đây là kết quả khi chạy chương trình và cho rắn đâm đầu vào rìa màn hình:</p>

<figure>
<div style="text-align: justify;"><img alt="Bạn sẽ thua nếu điều khiển rắn đâm đầu vào màn hình" data-i="4" data-src="https://st.quantrimang.com/photos/image/2020/08/08/sn5.jpg" data-was-processed="true" height="431" src="https://st.quantrimang.com/photos/image/2020/08/08/sn5.jpg" width="650" /></div>

<figcaption>
<div style="text-align: justify;">Bạn sẽ thua nếu điều khiển rắn đâm đầu vào màn hình</div>
</figcaption>
</figure>

<h2 style="text-align: justify;">Bước 6: Thêm con mồi</h2>

<p style="text-align: justify;">Tại bước này, bạn thêm con mồi cho con rắn và khi con rắn đi qua mồi, một thông báo &quot;Yummy!!&quot; sẽ hiện ra. Game cũng được điều chỉnh một chút ở code mẫu để thêm tùy chọn cho phép thoát hoặc chơi lại sau khi bị thua. Ban đầu, con mồi được thiết lập là màu xanh da trời.</p>

<p style="text-align: justify;">Code mẫu:</p>

<pre id="pre6" style="text-align: justify;">
import pygame
import time
import random
pygame.init()
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
blue = (0, 0, 255)
dis_width = 800
dis_height = 600
dis = pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption(&#039;Snake Game by Edureka&#039;)
clock = pygame.time.Clock()
snake_block = 10
snake_speed = 30
font_style = pygame.font.SysFont(None, 30)
def message(msg, color):
    mesg = font_style.render(msg, True, color)
    dis.blit(mesg, &#91;dis_width/3, dis_height/3&#93;)
def gameLoop():  # creating a function
    game_over = False
    game_close = False
    x1 = dis_width / 2
    y1 = dis_height / 2
    x1_change = 0
    y1_change = 0
    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
    foody = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
    while not game_over:
        while game_close == True:
            dis.fill(white)
            message(&quot;You Lost! Press Q-Quit or C-Play Again&quot;, red)
            pygame.display.update()
            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        game_over = True
                        game_close = False
                    if event.key == pygame.K_c:
                        gameLoop()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x1_change = -snake_block
                    y1_change = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = snake_block
                    y1_change = 0
                elif event.key == pygame.K_UP:
                    y1_change = -snake_block
                    x1_change = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = snake_block
                    x1_change = 0
        if x1 &gt;= dis_width or x1 &lt; 0 or y1 &gt;= dis_height or y1 &lt; 0:
            game_close = True
        x1 += x1_change
        y1 += y1_change
        dis.fill(white)
        pygame.draw.rect(dis, blue, &#91;foodx, foody, snake_block, snake_block&#93;)
        pygame.draw.rect(dis, black, &#91;x1, y1, snake_block, snake_block&#93;)
        pygame.display.update()
        if x1 == foodx and y1 == foody:
            print(&quot;Yummy!!&quot;)
        clock.tick(snake_speed)
    pygame.quit()
    quit()
gameLoop()</pre>

<p style="text-align: justify;">Đây là kết quả của bước này:</p>

<figure>
<div style="text-align: justify;"><img alt="Con mồi màu xanh da trời đã được thêm vào" data-i="5" data-src="https://st.quantrimang.com/photos/image/2020/08/08/sn6.jpg" data-was-processed="true" height="334" src="https://st.quantrimang.com/photos/image/2020/08/08/sn6.jpg" width="404" /></div>

<figcaption>
<div style="text-align: justify;">Con mồi màu xanh da trời đã được thêm vào</div>
</figcaption>
</figure>

<h2 style="text-align: justify;">Bước 7: Tăng độ dài của con rắn</h2>

<p style="text-align: justify;">Ở bước này, chúng ta sẽ thêm vào đoạn code giúp tăng độ dài của con rắn sau khi nó ăn mồi. Ngoài ra, một đoạn code nữa được thêm vào để khi con rắn va chạm với thân của nó, một thông báo sẽ hiện ra cho biết người chơi đã thua, nhấn Q để thoát hoặc nhấn C để chơi lại. Độ dài của con rắn về cơ bản được chứa trong một liset và kích thước ban đầu là một khối được chỉ định trong đoạn mã sau:</p>

<pre id="pre7" style="text-align: justify;">
import pygame
import time
import random
pygame.init()
white = (255, 255, 255)
yellow = (255, 255, 102)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)
dis_width = 600
dis_height = 400
dis = pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption(&#039;Snake Game by Edureka&#039;)
clock = pygame.time.Clock()
snake_block = 10
snake_speed = 15
font_style = pygame.font.SysFont(&quot;bahnschrift&quot;, 25)
score_font = pygame.font.SysFont(&quot;comicsansms&quot;, 35)
def our_snake(snake_block, snake_list):
    for x in snake_list:
        pygame.draw.rect(dis, black, &#91;x&#91;0&#93;, x&#91;1&#93;, snake_block, snake_block&#93;)
def message(msg, color):
    mesg = font_style.render(msg, True, color)
    dis.blit(mesg, &#91;dis_width / 6, dis_height / 3&#93;)
def gameLoop():
    game_over = False
    game_close = False
    x1 = dis_width / 2
    y1 = dis_height / 2
    x1_change = 0
    y1_change = 0
    snake_List = &#91;&#93;
    Length_of_snake = 1
    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
    foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
    while not game_over:
        while game_close == True:
            dis.fill(blue)
            message(&quot;You Lost! Press C-Play Again or Q-Quit&quot;, red)
            pygame.display.update()
            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        game_over = True
                        game_close = False
                    if event.key == pygame.K_c:
                        gameLoop()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x1_change = -snake_block
                    y1_change = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = snake_block
                    y1_change = 0
                elif event.key == pygame.K_UP:
                    y1_change = -snake_block
                    x1_change = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = snake_block
                    x1_change = 0
        if x1 &gt;= dis_width or x1 &lt; 0 or y1 &gt;= dis_height or y1 &lt; 0:
            game_close = True
        x1 += x1_change
        y1 += y1_change
        dis.fill(blue)
        pygame.draw.rect(dis, green, &#91;foodx, foody, snake_block, snake_block&#93;)
        snake_Head = &#91;&#93;
        snake_Head.append(x1)
        snake_Head.append(y1)
        snake_List.append(snake_Head)
        if len(snake_List) &gt; Length_of_snake:
            del snake_List&#91;0&#93;
        for x in snake_List&#91;:-1&#93;:
            if x == snake_Head:
                game_close = True
        our_snake(snake_block, snake_List)
        pygame.display.update()
        if x1 == foodx and y1 == foody:
            foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
            foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
            Length_of_snake += 1
        clock.tick(snake_speed)
    pygame.quit()
    quit()
gameLoop()</pre>

<p style="text-align: justify;">Kết quả của bước này:</p>

<figure>
<div style="text-align: justify;"><img alt="Game gần như đã hoàn thiện" data-i="6" data-src="https://st.quantrimang.com/photos/image/2020/08/08/sn7.gif" data-was-processed="true" height="657" src="https://st.quantrimang.com/photos/image/2020/08/08/sn7.gif" width="600" /></div>

<figcaption>
<div style="text-align: justify;">Game gần như đã hoàn thiện</div>
</figcaption>
</figure>

<p style="text-align: justify;">Bạn có thể thấy, để đồ họa của game trở nên hấp dẫn, ở bước này nền màn hình đã được chuyển sang màu xanh da trời, con mồi chuyển sang màu xanh lá và con rắn vẫn giữ nguyên màu đen nhưng kích thước đã được điều chỉnh.</p>

<h2 style="text-align: justify;">Bước 8: Hiển thị số điểm</h2>

<p style="text-align: justify;">Cuối cùng nhưng cũng không kém phần quan trọng, bạn cần hiển thị số điểm của người chơi lên màn hình. Để làm điều này, bạn tạo ra một hàm mới có tên&nbsp;<strong>Your_score</strong>. Hàm này sẽ hiển thị độ dài của con rắn trừ đi độ dài ban đầu là 1.</p>

<p style="text-align: justify;">Code mẫu hoàn chỉnh của game như sau:</p>

<pre id="pre8" style="text-align: justify;">
import pygame
import time
import random
pygame.init()
white = (255, 255, 255)
yellow = (255, 255, 102)
black = (0, 0, 0)
red = (213, 50, 80)
green = (0, 255, 0)
blue = (50, 153, 213)
dis_width = 600
dis_height = 400
dis = pygame.display.set_mode((dis_width, dis_height))
pygame.display.set_caption(&#039;Snake Game by Edureka&#039;)
clock = pygame.time.Clock()
snake_block = 10
snake_speed = 15
font_style = pygame.font.SysFont(&quot;bahnschrift&quot;, 25)
score_font = pygame.font.SysFont(&quot;comicsansms&quot;, 35)
def Your_score(score):
    value = score_font.render(&quot;Your Score: &quot; + str(score), True, yellow)
    dis.blit(value, &#91;0, 0&#93;)
def our_snake(snake_block, snake_list):
    for x in snake_list:
        pygame.draw.rect(dis, black, &#91;x&#91;0&#93;, x&#91;1&#93;, snake_block, snake_block&#93;)
def message(msg, color):
    mesg = font_style.render(msg, True, color)
    dis.blit(mesg, &#91;dis_width / 6, dis_height / 3&#93;)
def gameLoop():
    game_over = False
    game_close = False
    x1 = dis_width / 2
    y1 = dis_height / 2
    x1_change = 0
    y1_change = 0
    snake_List = &#91;&#93;
    Length_of_snake = 1
    foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
    foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
    while not game_over:
        while game_close == True:
            dis.fill(blue)
            message(&quot;You Lost! Press C-Play Again or Q-Quit&quot;, red)
            Your_score(Length_of_snake - 1)
            pygame.display.update()
            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_q:
                        game_over = True
                        game_close = False
                    if event.key == pygame.K_c:
                        gameLoop()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                game_over = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x1_change = -snake_block
                    y1_change = 0
                elif event.key == pygame.K_RIGHT:
                    x1_change = snake_block
                    y1_change = 0
                elif event.key == pygame.K_UP:
                    y1_change = -snake_block
                    x1_change = 0
                elif event.key == pygame.K_DOWN:
                    y1_change = snake_block
                    x1_change = 0
        if x1 &gt;= dis_width or x1 &lt; 0 or y1 &gt;= dis_height or y1 &lt; 0:
            game_close = True
        x1 += x1_change
        y1 += y1_change
        dis.fill(blue)
        pygame.draw.rect(dis, green, &#91;foodx, foody, snake_block, snake_block&#93;)
        snake_Head = &#91;&#93;
        snake_Head.append(x1)
        snake_Head.append(y1)
        snake_List.append(snake_Head)
        if len(snake_List) &gt; Length_of_snake:
            del snake_List&#91;0&#93;
        for x in snake_List&#91;:-1&#93;:
            if x == snake_Head:
                game_close = True
        our_snake(snake_block, snake_List)
        Your_score(Length_of_snake - 1)
        pygame.display.update()
        if x1 == foodx and y1 == foody:
            foodx = round(random.randrange(0, dis_width - snake_block) / 10.0) * 10.0
            foody = round(random.randrange(0, dis_height - snake_block) / 10.0) * 10.0
            Length_of_snake += 1
        clock.tick(snake_speed)
    pygame.quit()
    quit()
gameLoop()</pre>

<p style="text-align: justify;">Kết quả cuối cùng khi chạy chương trình:</p>

<figure>
<div style="text-align: justify;"><img alt="Kết quả cuối cùng" data-i="7" data-src="https://st.quantrimang.com/photos/image/2020/08/08/sn8.jpg" data-was-processed="true" height="431" src="https://st.quantrimang.com/photos/image/2020/08/08/sn8.jpg" width="599" /></div>

<figcaption>
<div style="text-align: justify;">Kết quả cuối cùng</div>
</figcaption>
</figure>

<p style="text-align: justify;">Như vậy là chúng tôi vừa hướng dẫn các bạn cách code game &quot;Rắn săn mồi&quot; bằng Python cùng với code mẫu. Hy vọng rằng bài viết sẽ mang tới cho các bạn thêm những kiến thức bổ ích về ngôn ngữ lập trình Python.</p>

<p style="text-align: justify;">Để tham khảo thêm về Python, bạn có thể truy cập:&nbsp;Python là gì? Tại sao nên chọn Python?&nbsp;và để tìm hiểu các hàm của Python mời các bạn vào:&nbsp;Hàm trong Python là gì? Các hàm trong Python.</p>

<div style="text-align: justify;">&nbsp;</div>
		</div>
				<div id="author">
						<p>
				<strong>Nguồn tin:</strong>
				Quantrimang.com:
			</p>
		</div>
	</div>
	<div id="footer" class="clearfix">
		<div id="url">
			<strong>URL của bản tin này: </strong><a href="https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/huong-dan-code-game-ran-san-moi-bang-python-11694.html" title="Hướng dẫn code game &quot;Rắn săn mồi&quot; bằng Python">https://www.nguoicodonvn2008.info/vi/news/savefile/kien-thuc-may-tinh/huong-dan-code-game-ran-san-moi-bang-python-11694.html</a>

		</div>
		<div class="clear"></div>
		<div class="copyright">
			&copy; .&#x3A; Nguoicodonvn2008.info - Cõi lòng người cô đơn &#x3A;.
		</div>
		<div id="contact">
			<a href="mailto:admin@nguoicodonvn2008.info">admin@nguoicodonvn2008.info</a>
		</div>
	</div>
</div>
        <div id="timeoutsess" class="chromeframe">
            Bạn đã không sử dụng Site, <a onclick="timeoutsesscancel();" href="https://www.nguoicodonvn2008.info/#">Bấm vào đây để duy trì trạng thái đăng nhập</a>. Thời gian chờ: <span id="secField"> 60 </span> giây
        </div>
        <div id="openidResult" class="nv-alert" style="display:none"></div>
        <div id="openidBt" data-result="" data-redirect=""></div>
		</script>
		<div class="car-top">
  <span><img src="https://www.nguoicodonvn2008.info/themes/default/images/car.png" alt=""></span>
</div>
<script src="https://www.nguoicodonvn2008.info/assets/js/jquery/jquery.min.js"></script>
<script>var nv_base_siteurl="/",nv_lang_data="vi",nv_lang_interface="vi",nv_name_variable="nv",nv_fc_variable="op",nv_lang_variable="language",nv_module_name="news",nv_func_name="savefile",nv_is_user=0, nv_my_ofs=-4,nv_my_abbr="EDT",nv_cookie_prefix="nv4c_e856T",nv_check_pass_mstime=1738000,nv_area_admin=0,nv_safemode=0,theme_responsive=0,nv_recaptcha_ver=2,nv_recaptcha_sitekey="",nv_recaptcha_type="image",XSSsanitize=1;</script>
<script src="https://www.nguoicodonvn2008.info/assets/js/language/vi.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/DOMPurify/purify3.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/global.js"></script>
<script src="https://www.nguoicodonvn2008.info/assets/js/site.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/news.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/main.js"></script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/custom.js"></script>
<script type="application/ld+json">
        {
            "@context": "https://schema.org",
            "@type": "Organization",
            "url": "https://www.nguoicodonvn2008.info",
            "logo": "https://www.nguoicodonvn2008.info/uploads/angel.gif"
        }
        </script>
<script src="https://www.nguoicodonvn2008.info/themes/default/js/bootstrap.min.js"></script>
<script type="text/javascript">
var $scrolltop = $('.car-top');
$scrolltop.on('click', function () {
    $('html,body').animate({
        scrollTop: 0
    }, 800);
    $(this).addClass("car-run");
    setTimeout(function(){ $scrolltop.removeClass('car-run');}, 1000);
    return false;
});
$(window).on('scroll', function ()
{ 
    if($(window).scrollTop() >= 200)
    {
        $scrolltop.addClass("show");
        $scrolltop.addClass("car-down");
    }
    else
    {
       $scrolltop.removeClass("show");
       setTimeout(function(){ $scrolltop.removeClass('car-down');}, 300);
    }
});
</script>
</body>
</html>