大家好,小編為大家解答python簡(jiǎn)單小游戲代碼200行的問(wèn)題。很多人還不知道python簡(jiǎn)單的小游戲代碼,現(xiàn)在讓我們一起來(lái)看看吧!
貪吃蛇游戲是有史以來(lái)最受歡迎的街機(jī)游戲之一。在這個(gè)游戲中,玩家的主要目標(biāo)是在不撞墻或不撞墻的情況下抓住最大數(shù)量的水果python基礎(chǔ)知識(shí)點(diǎn)總結(jié)。在學(xué)習(xí) Python 或 Pygame 時(shí),可以將創(chuàng)建蛇游戲視為一項(xiàng)挑戰(zhàn)。這是每個(gè)新手程序員都應(yīng)該接受的最好的初學(xué)者友好項(xiàng)目之一。學(xué)習(xí)構(gòu)建視頻游戲是一種有趣而有趣的學(xué)習(xí)。
我們將使用Pygame來(lái)創(chuàng)建這個(gè)蛇游戲。Pygame是一個(gè)開(kāi)源庫(kù),專(zhuān)為制作視頻游戲而設(shè)計(jì)。它具有內(nèi)置的圖形和聲音庫(kù)。它也是初學(xué)者友好的和跨平臺(tái)的。
簡(jiǎn)單,最基本的游戲元素只需要蛇和食物兩個(gè)就可以進(jìn)行了。(打飛機(jī)還需要三個(gè)元素呢,想想分別是什么?)方向的話只要上下左右4個(gè)固定方向就可以了。
有基本的數(shù)據(jù)結(jié)構(gòu)和面向?qū)ο蟮乃枷朐谄渲?。游戲開(kāi)發(fā)本身就會(huì)用到很多面向?qū)ο蟮母拍睿叩纳眢w又是一個(gè)天然的“鏈表”結(jié)構(gòu),太適合用來(lái)練習(xí)數(shù)據(jù)結(jié)構(gòu)了。另外比較有趣的一點(diǎn)是,Python 這個(gè)單詞在英語(yǔ)里就是蟒蛇的意思,貪吃蛇可以算是“同名游戲”了。很多學(xué)校里程序開(kāi)發(fā)課程的作業(yè)都會(huì)有貪吃蛇的選題,也經(jīng)常會(huì)有同學(xué)問(wèn)到我們相關(guān)的代碼。(諾基亞手機(jī)對(duì)這款游戲也是情有獨(dú)鐘。)之前我做過(guò)一個(gè)《貪吃蛇大作戰(zhàn)》的 Python 版本,基于 cocos2d-python 開(kāi)發(fā)。但那個(gè)對(duì)于初學(xué)者來(lái)說(shuō)有些復(fù)雜了。
這里我們做個(gè)簡(jiǎn)要介紹:
此代碼基于 pygame 開(kāi)發(fā),所以運(yùn)行前請(qǐng)確保你的 Python 里已成功安裝 pygame。然后直接運(yùn)行代碼中的 game2.py 即可開(kāi)始游戲。除了最終的代碼外,我們還特意分解了幾個(gè)過(guò)程中的 py 文件,供想要自己開(kāi)發(fā)的同學(xué)參考。
我們先來(lái)分析一下,要寫(xiě)出這個(gè)游戲來(lái)需要注意哪些點(diǎn)。
1、蛇怎么表示?
我們可以將整個(gè)游戲區(qū)域劃分成一個(gè)個(gè)的小格子,由一組連在一起的小格子組成“蛇”,我們可以用不同的顏色來(lái)表示,如上圖中,我以深色表示背景,淺色表示“蛇”。
我們可以用坐標(biāo)來(lái)表示每一個(gè)小方格,X 軸和 Y 軸的范圍都是可以設(shè)定好的。用一個(gè)列表來(lái)存放“蛇身”的坐標(biāo),那么一條“蛇”就出來(lái)了,最后只要顯示的時(shí)候以不同的顏色表示即可。
2、蛇怎么移動(dòng)?
第一反應(yīng)就是像蚯蚓蠕動(dòng)一樣,每一個(gè)小方塊向前移動(dòng)一格,但這樣實(shí)現(xiàn)起來(lái)很麻煩。一開(kāi)始就是被這里卡住了。
想象一下我們玩過(guò)的貪吃蛇,每次“蛇”的移動(dòng)感覺(jué)上是整體往前移動(dòng)了一格,排除掉腦子中“蛇”的“動(dòng)作”,細(xì)想移動(dòng)前和移動(dòng)后“蛇”的位置變化,其實(shí)除了頭尾,其他部分根本就沒(méi)有變。那就簡(jiǎn)單了,將下一格的坐標(biāo)添加到列表開(kāi)頭,并移除列表的最后一個(gè)元素,就相當(dāng)于蛇向前移動(dòng)了一格。
3、如何判定游戲結(jié)束?
“蛇”移動(dòng)超出了游戲區(qū)的范圍或者碰到了自己就算輸了,軸坐標(biāo)的范圍是事先定好的,超出范圍很容易判斷。那么如何判斷碰到自己呢?
如果腦子里想的是“蛇”動(dòng)的畫(huà)面,那真的比較難了,但是放到代碼中,我們的“蛇”是一個(gè)列表,那么只要判斷下一格的坐標(biāo)是否已經(jīng)包含在“蛇”的列表中豈不就可以了?
理清了這些問(wèn)題,我們就可以開(kāi)始編碼了。
?
公眾號(hào):每日推薦系列,獲取更多相關(guān)資源!
在pygame有幾個(gè)對(duì)象比較重要,分別是
pygame.display—設(shè)置場(chǎng)景顯示,包括頁(yè)面大小,頁(yè)面標(biāo)題,頁(yè)面更新(刷新)等;
pygame.time–設(shè)置一切與時(shí)間相關(guān)的設(shè)置,游戲的幀頻,游戲的持續(xù)時(shí)間等;
pygame.event–設(shè)置與事件相關(guān)的處理,比如鼠標(biāo)點(diǎn)擊事件,鍵盤(pán)按下事件等;
pygame.draw–繪制圖形到界面上。
步驟分別是:
1.搭建初始框架,以及繪制場(chǎng)景
要做貪吃蛇游戲,首先第一步就是搭建一個(gè)初始界面,具體包括設(shè)置界面的size,設(shè)置關(guān)閉界面事件,設(shè)置幀頻以及頁(yè)面背景渲染和更新頁(yè)面等,具體代碼如下所示:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-786200.html
# 游戲初始化
pygame.init()
# 游戲窗口大小
window_width = 800
window_height = 600
# 顏色定義
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
# 設(shè)置游戲窗口
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('貪吃蛇')
2.繪制蛇頭,食物以及蛇身的位置
簡(jiǎn)單來(lái)說(shuō)就是把蛇頭以及食物的位置確定出來(lái),代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-786200.html
# 蛇頭坐標(biāo)
snake_x = window_width / 2
snake_y = window_height / 2
# 蛇身列表
snake_body = [[snake_x, snake_y]]
# 食物坐標(biāo)
food_x = round(random.randrange(0, window_width - 20) / 20) * 20
food_y = round(random.randrange(0, window_height - 20) / 20) * 20
3.創(chuàng)建一個(gè)函數(shù)來(lái)顯示玩家的得分。
- 在這個(gè)函數(shù)中,首先我們要?jiǎng)?chuàng)建一個(gè)字體對(duì)象,即字體顏色會(huì)出現(xiàn)在這里。
- 然后我們使用渲染來(lái)創(chuàng)建一個(gè)背景表面,每當(dāng)我們的分?jǐn)?shù)更新時(shí),我們就會(huì)改變它。
- 為文本表面對(duì)象創(chuàng)建一個(gè)矩形對(duì)象(文本將在此處刷新)
score = 0
# 游戲結(jié)束標(biāo)志
game_over = False
# 游戲時(shí)鐘
clock = pygame.time.Clock()
# 游戲循環(huán)
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:
direction = 'LEFT'
elif event.key == pygame.K_RIGHT:
direction = 'RIGHT'
elif event.key == pygame.K_UP:
direction = 'UP'
elif event.key == pygame.K_DOWN:
direction = 'DOWN'
if direction == 'LEFT':
snake_x -= snake_speed
elif direction == 'RIGHT':
snake_x += snake_speed
elif direction == 'UP':
snake_y -= snake_speed
elif direction == 'DOWN':
snake_y += snake_speed
4.此外就是游戲進(jìn)入循環(huán),不斷地更新蛇身,以及分?jǐn)?shù)
# 繪制背景
window.fill(black)
# 繪制蛇身
for segment in snake_body:
pygame.draw.rect(window, green, [segment[0], segment[1], 20, 20])
# 繪制食物
pygame.draw.rect(window, red, [food_x, food_y, 20, 20])
# 更新蛇身
snake_head = [snake_x, snake_y]
snake_body.append(snake_head)
if len(snake_body) > score + 1:
del snake_body[0]
# 檢測(cè)蛇與食物的碰撞
if snake_x == food_x and snake_y == food_y:
score += 1
food_x = round(random.randrange(0, window_width - 20) / 20) * 20
food_y = round(random.randrange(0, window_height - 20) / 20) * 20
# 檢測(cè)蛇頭與蛇身的碰撞
for segment in snake_body[:-1]:
if segment == snake_head:
game_over = True
# 檢測(cè)蛇是否超出邊界
if snake_x >= window_width or snake_x < 0 or snake_y >= window_height or snake_y < 0:
game_over = True
# 刷新游戲窗口
pygame.display.update()
5.我也不多說(shuō)了,主要代碼如下:
公眾號(hào):每日推薦系列,回復(fù)【貪吃蛇】即可免費(fèi)獲取
# 游戲循環(huán)
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:
direction = 'LEFT'
elif event.key == pygame.K_RIGHT:
direction = 'RIGHT'
elif event.key == pygame.K_UP:
direction = 'UP'
elif event.key == pygame.K_DOWN:
direction = 'DOWN'
if direction == 'LEFT':
snake_x -= snake_speed
elif direction == 'RIGHT':
snake_x += snake_speed
elif direction == 'UP':
snake_y -= snake_speed
elif direction == 'DOWN':
snake_y += snake_speed
# 繪制背景
window.fill(black)
# 繪制蛇身
for segment in snake_body:
pygame.draw.rect(window, green, [segment[0], segment[1], 20, 20])
# 繪制食物
pygame.draw.rect(window, red, [food_x, food_y, 20, 20])
# 更新蛇身
snake_head = [snake_x, snake_y]
snake_body.append(snake_head)
if len(snake_body) > score + 1:
del snake_body[0]
# 檢測(cè)蛇與食物的碰撞
if snake_x == food_x and snake_y == food_y:
score += 1
food_x = round(random.randrange(0, window_width - 20) / 20) * 20
food_y = round(random.randrange(0, window_height - 20) / 20) * 20
# 檢測(cè)蛇頭與蛇身的碰撞
for segment in snake_body[:-1]:
if segment == snake_head:
game_over = True
# 檢測(cè)蛇是否超出邊界
if snake_x >= window_width or snake_x < 0 or snake_y >= window_height or snake_y < 0:
game_over = True
# 刷新游戲窗口
pygame.display.update()
# 控制游戲幀率
clock.tick(10)
貪吃蛇游戲是有史以來(lái)最受歡迎的街機(jī)游戲之一。在這個(gè)游戲中,玩家的主要目標(biāo)是在不撞墻或不撞墻的情況下抓住最大數(shù)量的水果python基礎(chǔ)知識(shí)點(diǎn)總結(jié)。在學(xué)習(xí) Python 或 Pygame 時(shí),可以將創(chuàng)建蛇游戲視為一項(xiàng)挑戰(zhàn)。這是每個(gè)新手程序員都應(yīng)該接受的最好的初學(xué)者友好項(xiàng)目之一。學(xué)習(xí)構(gòu)建視頻游戲是一種有趣而有趣的學(xué)習(xí)。
我們將使用Pygame來(lái)創(chuàng)建這個(gè)蛇游戲。Pygame是一個(gè)開(kāi)源庫(kù),專(zhuān)為制作視頻游戲而設(shè)計(jì)。它具有內(nèi)置的圖形和聲音庫(kù)。它也是初學(xué)者友好的和跨平臺(tái)的。
簡(jiǎn)單,最基本的游戲元素只需要蛇和食物兩個(gè)就可以進(jìn)行了。(打飛機(jī)還需要三個(gè)元素呢,想想分別是什么?)方向的話只要上下左右4個(gè)固定方向就可以了。
有基本的數(shù)據(jù)結(jié)構(gòu)和面向?qū)ο蟮乃枷朐谄渲?。游戲開(kāi)發(fā)本身就會(huì)用到很多面向?qū)ο蟮母拍?,而蛇的身體又是一個(gè)天然的“鏈表”結(jié)構(gòu),太適合用來(lái)練習(xí)數(shù)據(jù)結(jié)構(gòu)了。另外比較有趣的一點(diǎn)是,Python 這個(gè)單詞在英語(yǔ)里就是蟒蛇的意思,貪吃蛇可以算是“同名游戲”了。很多學(xué)校里程序開(kāi)發(fā)課程的作業(yè)都會(huì)有貪吃蛇的選題,也經(jīng)常會(huì)有同學(xué)問(wèn)到我們相關(guān)的代碼。(諾基亞手機(jī)對(duì)這款游戲也是情有獨(dú)鐘。)之前我做過(guò)一個(gè)《貪吃蛇大作戰(zhàn)》的 Python 版本,基于 cocos2d-python 開(kāi)發(fā)。但那個(gè)對(duì)于初學(xué)者來(lái)說(shuō)有些復(fù)雜了。
這里我們做個(gè)簡(jiǎn)要介紹:
此代碼基于 pygame 開(kāi)發(fā),所以運(yùn)行前請(qǐng)確保你的 Python 里已成功安裝 pygame。然后直接運(yùn)行代碼中的 game2.py 即可開(kāi)始游戲。除了最終的代碼外,我們還特意分解了幾個(gè)過(guò)程中的 py 文件,供想要自己開(kāi)發(fā)的同學(xué)參考。
我們先來(lái)分析一下,要寫(xiě)出這個(gè)游戲來(lái)需要注意哪些點(diǎn)。
1、蛇怎么表示?
我們可以將整個(gè)游戲區(qū)域劃分成一個(gè)個(gè)的小格子,由一組連在一起的小格子組成“蛇”,我們可以用不同的顏色來(lái)表示,如上圖中,我以深色表示背景,淺色表示“蛇”。
我們可以用坐標(biāo)來(lái)表示每一個(gè)小方格,X 軸和 Y 軸的范圍都是可以設(shè)定好的。用一個(gè)列表來(lái)存放“蛇身”的坐標(biāo),那么一條“蛇”就出來(lái)了,最后只要顯示的時(shí)候以不同的顏色表示即可。
2、蛇怎么移動(dòng)?
第一反應(yīng)就是像蚯蚓蠕動(dòng)一樣,每一個(gè)小方塊向前移動(dòng)一格,但這樣實(shí)現(xiàn)起來(lái)很麻煩。一開(kāi)始就是被這里卡住了。
想象一下我們玩過(guò)的貪吃蛇,每次“蛇”的移動(dòng)感覺(jué)上是整體往前移動(dòng)了一格,排除掉腦子中“蛇”的“動(dòng)作”,細(xì)想移動(dòng)前和移動(dòng)后“蛇”的位置變化,其實(shí)除了頭尾,其他部分根本就沒(méi)有變。那就簡(jiǎn)單了,將下一格的坐標(biāo)添加到列表開(kāi)頭,并移除列表的最后一個(gè)元素,就相當(dāng)于蛇向前移動(dòng)了一格。
3、如何判定游戲結(jié)束?
“蛇”移動(dòng)超出了游戲區(qū)的范圍或者碰到了自己就算輸了,軸坐標(biāo)的范圍是事先定好的,超出范圍很容易判斷。那么如何判斷碰到自己呢?
如果腦子里想的是“蛇”動(dòng)的畫(huà)面,那真的比較難了,但是放到代碼中,我們的“蛇”是一個(gè)列表,那么只要判斷下一格的坐標(biāo)是否已經(jīng)包含在“蛇”的列表中豈不就可以了?
理清了這些問(wèn)題,我們就可以開(kāi)始編碼了。
?
公眾號(hào):每日推薦系列,獲取更多相關(guān)資源!
在pygame有幾個(gè)對(duì)象比較重要,分別是
pygame.display—設(shè)置場(chǎng)景顯示,包括頁(yè)面大小,頁(yè)面標(biāo)題,頁(yè)面更新(刷新)等;
pygame.time–設(shè)置一切與時(shí)間相關(guān)的設(shè)置,游戲的幀頻,游戲的持續(xù)時(shí)間等;
pygame.event–設(shè)置與事件相關(guān)的處理,比如鼠標(biāo)點(diǎn)擊事件,鍵盤(pán)按下事件等;
pygame.draw–繪制圖形到界面上。
步驟分別是:
1.搭建初始框架,以及繪制場(chǎng)景
要做貪吃蛇游戲,首先第一步就是搭建一個(gè)初始界面,具體包括設(shè)置界面的size,設(shè)置關(guān)閉界面事件,設(shè)置幀頻以及頁(yè)面背景渲染和更新頁(yè)面等,具體代碼如下所示:
# 游戲初始化
pygame.init()
# 游戲窗口大小
window_width = 800
window_height = 600
# 顏色定義
white = (255, 255, 255)
black = (0, 0, 0)
red = (255, 0, 0)
green = (0, 255, 0)
# 設(shè)置游戲窗口
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption('貪吃蛇')
2.繪制蛇頭,食物以及蛇身的位置
簡(jiǎn)單來(lái)說(shuō)就是把蛇頭以及食物的位置確定出來(lái),代碼如下:
# 蛇頭坐標(biāo)
snake_x = window_width / 2
snake_y = window_height / 2
# 蛇身列表
snake_body = [[snake_x, snake_y]]
# 食物坐標(biāo)
food_x = round(random.randrange(0, window_width - 20) / 20) * 20
food_y = round(random.randrange(0, window_height - 20) / 20) * 20
3.創(chuàng)建一個(gè)函數(shù)來(lái)顯示玩家的得分。
- 在這個(gè)函數(shù)中,首先我們要?jiǎng)?chuàng)建一個(gè)字體對(duì)象,即字體顏色會(huì)出現(xiàn)在這里。
- 然后我們使用渲染來(lái)創(chuàng)建一個(gè)背景表面,每當(dāng)我們的分?jǐn)?shù)更新時(shí),我們就會(huì)改變它。
- 為文本表面對(duì)象創(chuàng)建一個(gè)矩形對(duì)象(文本將在此處刷新)
score = 0
# 游戲結(jié)束標(biāo)志
game_over = False
# 游戲時(shí)鐘
clock = pygame.time.Clock()
# 游戲循環(huán)
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:
direction = 'LEFT'
elif event.key == pygame.K_RIGHT:
direction = 'RIGHT'
elif event.key == pygame.K_UP:
direction = 'UP'
elif event.key == pygame.K_DOWN:
direction = 'DOWN'
if direction == 'LEFT':
snake_x -= snake_speed
elif direction == 'RIGHT':
snake_x += snake_speed
elif direction == 'UP':
snake_y -= snake_speed
elif direction == 'DOWN':
snake_y += snake_speed
4.此外就是游戲進(jìn)入循環(huán),不斷地更新蛇身,以及分?jǐn)?shù)
# 繪制背景
window.fill(black)
# 繪制蛇身
for segment in snake_body:
pygame.draw.rect(window, green, [segment[0], segment[1], 20, 20])
# 繪制食物
pygame.draw.rect(window, red, [food_x, food_y, 20, 20])
# 更新蛇身
snake_head = [snake_x, snake_y]
snake_body.append(snake_head)
if len(snake_body) > score + 1:
del snake_body[0]
# 檢測(cè)蛇與食物的碰撞
if snake_x == food_x and snake_y == food_y:
score += 1
food_x = round(random.randrange(0, window_width - 20) / 20) * 20
food_y = round(random.randrange(0, window_height - 20) / 20) * 20
# 檢測(cè)蛇頭與蛇身的碰撞
for segment in snake_body[:-1]:
if segment == snake_head:
game_over = True
# 檢測(cè)蛇是否超出邊界
if snake_x >= window_width or snake_x < 0 or snake_y >= window_height or snake_y < 0:
game_over = True
# 刷新游戲窗口
pygame.display.update()
5.我也不多說(shuō)了,主要代碼如下:
公眾號(hào):每日推薦系列,回復(fù)【貪吃蛇】即可免費(fèi)獲取
# 游戲循環(huán)
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:
direction = 'LEFT'
elif event.key == pygame.K_RIGHT:
direction = 'RIGHT'
elif event.key == pygame.K_UP:
direction = 'UP'
elif event.key == pygame.K_DOWN:
direction = 'DOWN'
if direction == 'LEFT':
snake_x -= snake_speed
elif direction == 'RIGHT':
snake_x += snake_speed
elif direction == 'UP':
snake_y -= snake_speed
elif direction == 'DOWN':
snake_y += snake_speed
# 繪制背景
window.fill(black)
# 繪制蛇身
for segment in snake_body:
pygame.draw.rect(window, green, [segment[0], segment[1], 20, 20])
# 繪制食物
pygame.draw.rect(window, red, [food_x, food_y, 20, 20])
# 更新蛇身
snake_head = [snake_x, snake_y]
snake_body.append(snake_head)
if len(snake_body) > score + 1:
del snake_body[0]
# 檢測(cè)蛇與食物的碰撞
if snake_x == food_x and snake_y == food_y:
score += 1
food_x = round(random.randrange(0, window_width - 20) / 20) * 20
food_y = round(random.randrange(0, window_height - 20) / 20) * 20
# 檢測(cè)蛇頭與蛇身的碰撞
for segment in snake_body[:-1]:
if segment == snake_head:
game_over = True
# 檢測(cè)蛇是否超出邊界
if snake_x >= window_width or snake_x < 0 or snake_y >= window_height or snake_y < 0:
game_over = True
# 刷新游戲窗口
pygame.display.update()
# 控制游戲幀率
clock.tick(10)
到了這里,關(guān)于python簡(jiǎn)單小游戲代碼200行,python簡(jiǎn)單的小游戲代碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!