国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

學(xué)生學(xué)python編程---實(shí)現(xiàn)貪吃蛇小游戲+源碼

這篇具有很好參考價(jià)值的文章主要介紹了學(xué)生學(xué)python編程---實(shí)現(xiàn)貪吃蛇小游戲+源碼。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言

這幾年人工智能技術(shù)大發(fā)展,Python因此幾乎成了第一位的語言。實(shí)際上,多年來,它不僅在軟件工程師中得到廣泛使用,也是各行業(yè)通用的專家語言,就是說,不管孩子以后做什么,都可能用得著。準(zhǔn)備針對(duì)我自己上小學(xué)的孩子,每周抽出些時(shí)間,通過學(xué)習(xí)他們感興趣的小游戲,逐步把python知識(shí)點(diǎn)帶進(jìn)游戲的制作過程中,用到哪些知識(shí)簡(jiǎn)單的解紹一下哪些,以學(xué),以用為主。
本次我們將編寫一個(gè)貪吃蛇的游戲。通過鍵盤上、下、左、右控制小蛇上、下、左、右移動(dòng),吃到食物后長(zhǎng)度加1;蛇頭碰到自身或窗口邊緣,游戲失敗。我們首先構(gòu)造小蛇,實(shí)現(xiàn)小蛇向4個(gè)方向移動(dòng);然后實(shí)現(xiàn)游戲失敗的判斷、吃食物增加長(zhǎng)度、得分功能;每段游戲,增加一個(gè)功能,另存一下,容易讓孩子理解學(xué)習(xí),同時(shí)也可以讓其在每個(gè)階段增加他想增加的功能,一舉多得。最后學(xué)習(xí)函數(shù)的定義與使用,并通過進(jìn)行時(shí)間控制變更游戲難度。

主要設(shè)計(jì)

1、蛇的表示

游戲開發(fā)本身就會(huì)用到很多面向?qū)ο蟮母拍?,而蛇的身體又是一個(gè)天然的“鏈表”結(jié)構(gòu),太適合用來練習(xí)數(shù)據(jù)結(jié)構(gòu)了。
蛇怎么表示?我們可以將整個(gè)游戲區(qū)域劃分成一個(gè)個(gè)的小格子,由一組連在一起的小格子組成“蛇”,蛇頭用個(gè)蛇頭(圓帶兩個(gè)眼睛)表示,蛇身用個(gè)圓表示。我們可以用坐標(biāo)來表示每一個(gè)小方格,X 軸和 Y 軸的范圍都是可以設(shè)定好的。用一個(gè)列表來存放“蛇身”的坐標(biāo),那么一條“蛇”就出來了。

2、蛇怎么移動(dòng)?

第一反應(yīng)就是像蚯蚓蠕動(dòng)一樣,每一個(gè)小方塊向前移動(dòng)一格,但這樣實(shí)現(xiàn)起來很麻煩。想象一下我們玩過的貪吃蛇,每次“蛇”的移動(dòng)感覺上是整體往前移動(dòng)了一格,排除掉腦子中“蛇”的“動(dòng)作”,細(xì)想移動(dòng)前和移動(dòng)后“蛇”的位置變化,其實(shí)除了頭尾,其他部分根本就沒有變。那就簡(jiǎn)單了,將下一格的坐標(biāo)添加到列表開頭,并移除列表的最后一個(gè)元素,就相當(dāng)于蛇向前移動(dòng)了一格。(由于蛇頭與蛇身是不同的圖片,還需要把第二張也即原先的蛇并沒有照片換成蛇身照片,要不跑幾步就成一串蛇頭了,你可以試試,把蛇身換蛇頭的那行代碼注釋掉就可看到了。)

3、玩家控制小蛇移動(dòng)功能的實(shí)現(xiàn)

玩家控制小蛇移動(dòng)功能的實(shí)現(xiàn)
玩家控制小蛇移動(dòng),在update()函數(shù)中實(shí)現(xiàn)用戶按上、下、左、右方向鍵,設(shè)定direction變量取不同的值,即可實(shí)現(xiàn)玩家鍵盤控制小蛇向4個(gè)方向移動(dòng)。即通過一個(gè)公共變量direction來實(shí)現(xiàn),當(dāng)鍵盤按不同的上下左右鍵時(shí)修改公共變量direction就達(dá)到了玩家控制小蛇方向的問題。

4、如何判定游戲結(jié)束?

“蛇”移動(dòng)超出了游戲區(qū)的范圍或者碰到了自己就算輸了,軸坐標(biāo)的范圍是事先定好的,超出范圍很容易判斷。那么如何判斷碰到自己呢?
如果腦子里想的是“蛇”動(dòng)的畫面,那真的比較難了,但是放到代碼中,我們的“蛇”是一個(gè)列表,那么只要判斷下一格的坐標(biāo)是否已經(jīng)包含在“蛇”的列表中豈不就可以了?
理清了這些問題,我們就可以開始編碼了。

應(yīng)用知識(shí)點(diǎn)

1、python知識(shí)點(diǎn)

1.1 列表

游戲開發(fā)本身就會(huì)用到很多面向?qū)ο蟮母拍?,而蛇的身體又是一個(gè)天然的“鏈表”結(jié)構(gòu),太適合用來練習(xí)數(shù)據(jù)結(jié)構(gòu)了。
列表,數(shù)據(jù)類型list,list是python內(nèi)置的一種高級(jí)數(shù)據(jù)類型。list是一種有序的集合,基于鏈表實(shí)現(xiàn) 在python中應(yīng)用很廣泛,可以隨時(shí)添加和刪除其中的元素。在此游戲中用于表是蛇身,由蛇頭,蛇身組成,吃個(gè)食物,蛇身增加一段,即應(yīng)用列表添加一個(gè)蛇身圖片。蛇身的移動(dòng),用到了列表的添加與刪除功能。len()可以獲得列表長(zhǎng)度。用索引來訪問list中每一個(gè)位置的元素,記得索引是從0開始的,也可以用負(fù)數(shù),表示從-1表示列表最后一個(gè)。

append()在列表未尾增加一個(gè)元素

如:Snake.append(snakebody) # 把蛇身加入列表中

del 刪除最后一個(gè)元素

del Snake[len(Snake)-1] # 刪除舊蛇尾
也可用 del Snake[-1]

在指定位置增加元素用insert()

如:Snake.insert(0, newSnakeHead) # 把新蛇頭加到列表的最前面

1.2 time 時(shí)間模塊

屬于Python的時(shí)間模塊。基本上,這會(huì)增加執(zhí)行延遲,并且只會(huì)暫停當(dāng)前線程,而不會(huì)暫停整個(gè)程序。
Python的time模塊中提供了Python time.sleep()函數(shù)。在使用此Python函數(shù)之前,您需要使用以下命令導(dǎo)入此模塊:import time
導(dǎo)入此模塊后,即可使用time.sleep()函數(shù)。語法如下:
句法:睡眠(秒),如您所見,它需要一個(gè)參數(shù),即秒。在執(zhí)行過程中,這基本上會(huì)引起這么多秒的延遲,此游戲中應(yīng)用到sleep(0.2),讓游戲更新時(shí)暫緩0.2秒,通過此參數(shù)可以調(diào)試蛇的移動(dòng)速度。

1.3 random模塊

random() 方法返回隨機(jī)生成的一個(gè)實(shí)數(shù),它在[0,1)范圍內(nèi)
import random
random.random()
#randint函數(shù),返回指定范圍的一個(gè)隨機(jī)整數(shù),包含上下限
random.randint(0,99)#返回0~99之間的整數(shù)

2、pygamezero知識(shí)點(diǎn)

Pygame Zero這個(gè)神器,它對(duì)PyGame做了很多封裝,避免寫很多枯燥的框架代碼,讓初學(xué)者可以更專注于游戲核心邏輯,容易上手。

2.1 游戲角色Acto

游戲角色Actor pgzero中所有以圖片顯示的元素都是Actor類來定義,如snakebody = Actor(‘snake2’) # 導(dǎo)入蛇身方塊圖片。也可以理解為Actor是用來代表一個(gè)你繪制到屏幕的圖形。
通過把字符串 ‘snake2’ 作為參數(shù)傳遞給 Actor 類,Pygame Zero自動(dòng)加載了外星人精靈,并且圖片具有位置和大小屬性。snake2是指images文件夾下snake2.png圖片。也可以apple = Actor(‘a(chǎn)pple’,(200,300)) # 設(shè)置圖片apple的位置。連圖片帶位置一起指定。
一個(gè)免費(fèi)的png圖片下載網(wǎng)站:https://kenney.nl/assets/page:3?q=2d

2.2 輸出中文字體

顯示中文 準(zhǔn)備:在.py同級(jí)目錄下新建fonts文件夾,并放入支持中文的字體文件simhei.ttf
if isclose: # 顯示游戲失敗信息
screen.draw.text(“游戲失??!”, (120, HEIGHT/2-100),
fontsize=100, fontname=‘simhei’, color=‘yellow’)

2.3鍵盤控制

from pgzero.keyboard import keys, Keyboard
可以查詢下原碼,通過keys.w,keyboard.left等進(jìn)行控制

功能截圖

學(xué)生學(xué)python編程---實(shí)現(xiàn)貪吃蛇小游戲+源碼

學(xué)生學(xué)python編程---實(shí)現(xiàn)貪吃蛇小游戲+源碼

代碼實(shí)現(xiàn)

1、蛇的表示

學(xué)生學(xué)python編程---實(shí)現(xiàn)貪吃蛇小游戲+源碼

import pgzrun # 導(dǎo)入游戲庫
TILE_SIZE = 30 # 小蛇方塊的大小,20×20
WIDTH = 20*TILE_SIZE # 設(shè)置窗口的寬度為800
HEIGHT = 20*TILE_SIZE # 設(shè)置窗口的高度為600

snkaeHead = Actor('snake1') # 導(dǎo)入蛇頭方塊圖片
snkaeHead.x = WIDTH/2 # 蛇頭方塊圖片的x坐標(biāo)
snkaeHead.y = HEIGHT/2 # 蛇頭方塊圖片的y坐標(biāo)

Snake = [] # 存儲(chǔ)蛇的列表
Snake.append(snkaeHead) # 把蛇頭加入列表中
for i in range(4): # 再為蛇添加4段蛇身
    print(i)
    snakebody = Actor('snake2') # 導(dǎo)入蛇身方塊圖片
    snakebody.x = Snake[i].x - TILE_SIZE # 蛇身方塊圖片的x坐標(biāo)
    snakebody.y = Snake[i].y # 蛇身方塊圖片的y坐標(biāo)
    Snake.append(snakebody) # 把蛇身加入列表中

def draw(): # 繪制模塊,每幀重復(fù)執(zhí)行
    screen.clear() # 每幀清除屏幕,便于重新繪制
    for snkaebody in Snake: # 繪制蛇
        snkaebody.draw()

pgzrun.go() # 開始執(zhí)行游戲

2、蛇的前進(jìn)移動(dòng)

蛇一直向右移動(dòng),直至完全走出屏幕

direction = 'right'
def update(): # 更新模塊,每幀重復(fù)操作
    newSnakeHead = Actor('snake1') # 創(chuàng)建新蛇頭的圖片    
    # 根據(jù)direction變量設(shè)定新蛇頭的坐標(biāo)    # 如小蛇向下移動(dòng),就在舊蛇頭的下邊
    if direction == 'right': # 小蛇向右移動(dòng)
        newSnakeHead.x = Snake[0].x + TILE_SIZE
        newSnakeHead.y = Snake[0].y
    if direction == 'left': # 小蛇向左移動(dòng)
        newSnakeHead.x = Snake[0].x - TILE_SIZE
        newSnakeHead.y = Snake[0].y
    if direction == 'up': # 小蛇向上移動(dòng)
        newSnakeHead.x = Snake[0].x
        newSnakeHead.y = Snake[0].y - TILE_SIZE
    if direction == 'down': # 小蛇向下移動(dòng)
        newSnakeHead.x = Snake[0].x
        newSnakeHead.y = Snake[0].y + TILE_SIZE

    Snake.insert(0, newSnakeHead) # 把新蛇頭加到列表的最前面
    Snake[1].image='snake2'
    del Snake[len(Snake)-1] # 刪除舊蛇尾

3、控制移動(dòng)方向

學(xué)生學(xué)python編程---實(shí)現(xiàn)貪吃蛇小游戲+源碼

def update(): # 更新模塊,每幀重復(fù)操作
    global direction,isclose
    if keyboard.left: # 如果按下鍵盤向左方向鍵
        direction = 'left' # 小蛇要向左移
    if keyboard.right: # 如果按下鍵盤向右方向鍵
        direction = 'right' # 小蛇要向右移
    if keyboard.up: # 如果按下鍵盤向上方向鍵
        direction = 'up' # 小蛇要向上移
    if keyboard.down: # 如果按下鍵盤向下方向鍵
        direction = 'down' # 小蛇要向下移

4、游戲失敗

學(xué)生學(xué)python編程---實(shí)現(xiàn)貪吃蛇小游戲+源碼

    # 當(dāng)小蛇(新蛇頭)超出邊框時(shí),游戲失敗
    if newSnakeHead.y < 0 or newSnakeHead.y > HEIGHT  or newSnakeHead.x < 0 or newSnakeHead.x > WIDTH:
        isclose = True
    def draw(): # 繪制模塊,每幀重復(fù)執(zhí)行
    screen.clear() # 每幀清除屏幕,便于重新繪制
    for snkaebody in Snake: # 繪制蛇
        snkaebody.draw()
    # 顯示中文    準(zhǔn)備:在.py同級(jí)目錄下新建fonts文件夾,并放入支持中文的字體文件simhei.ttf
    if isclose: # 顯示游戲失敗信息
        screen.draw.text("游戲失?。?, (120, HEIGHT/2-100),
                         fontsize=100, fontname='simhei', color='yellow')     

5、食物的隨機(jī)出現(xiàn)

當(dāng)小蛇頭碰到食物時(shí),不處理,也就是長(zhǎng)度+1;青蛙重新在隨機(jī)位置出現(xiàn);

 if newSnakeHead.x == food.x and newSnakeHead.y == food.y:
        food.x = random.randint(5, 20) * TILE_SIZE
        food.y = random.randint(5, 20) * TILE_SIZE
        score = score + 1  # 得分加1

6、游戲得分

設(shè)置公共變量score,當(dāng)小蛇吃到食物時(shí),score值加1,更新時(shí)屏幕顯示出得分,用如下語句。

    screen.draw.text("得分:"+str(score), (100, 20), fontsize=50,
                    fontname='simhei', color='white')

總結(jié)

這次我們主要制作了貪吃蛇游戲,了解了time模塊的sleep函數(shù)、clock模塊的schedule等功能,學(xué)習(xí)了列表的插入函數(shù)、break與continue語句、函數(shù)的定義與調(diào)用等知識(shí)點(diǎn)。讀者可以嘗試在本章代碼的基礎(chǔ)上繼續(xù)改進(jìn):1.實(shí)現(xiàn)得分越來越高,游戲速度越來越快的效果;2.實(shí)現(xiàn)蛇頭、蛇身不同顏色的顯示效果;

源碼獲取

關(guān)注博主后,私聊博主免費(fèi)獲取
需要技術(shù)指導(dǎo),育娃新思考,企業(yè)軟件合作等更多服務(wù)請(qǐng)聯(lián)系博主

今天是以此模板持續(xù)更新此育兒專欄的第 29 /50個(gè)。
可以關(guān)注我,點(diǎn)贊我、評(píng)論我、收藏我啦。文章來源地址http://www.zghlxwxcb.cn/news/detail-406126.html

到了這里,關(guān)于學(xué)生學(xué)python編程---實(shí)現(xiàn)貪吃蛇小游戲+源碼的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 前端技術(shù)搭建貪吃蛇小游戲(內(nèi)含源碼)

    上周我們實(shí)通過前端基礎(chǔ)實(shí)現(xiàn)了井字游戲,今天還是繼續(xù)按照我們?cè)ǖ墓?jié)奏來帶領(lǐng)大家完成一個(gè)貪吃蛇游戲,功能也比較簡(jiǎn)單簡(jiǎn)單,也是想借助這樣一個(gè)簡(jiǎn)單的功能,然后來幫助大家了解我們JavaScript在前端中的作用, 在前面的文章當(dāng)中我們也提及到我們?cè)诒鞠盗械膶谑?/p>

    2024年02月06日
    瀏覽(20)
  • 用java寫一個(gè)貪吃蛇小游戲(源碼在最后)

    用java寫一個(gè)貪吃蛇小游戲(源碼在最后)

    涉及技能: 循環(huán)、分支 方法的抽取 數(shù)組的使用 面向?qū)ο?繼承,子類方法的重寫 接口,接口的實(shí)現(xiàn) GUI(圖像化界面編程) GUI中的組件: 7.1 窗口 7.2 彈窗 7.3 面板 7.4 文本框 7.5 列表框 7.6 按鈕 7.7 圖片 7.8 交互的事件:監(jiān)聽事件(鼠標(biāo)事件,鍵盤事件) GUI技術(shù),不流行了?。?/p>

    2024年02月03日
    瀏覽(25)
  • Python貪吃蛇小游戲

    Python貪吃蛇小游戲 若程序錯(cuò)誤,請(qǐng)去終端下載random, turtle, freegames pip install random pip install turtle pip install freegames from random import randrange from turtle import * from freegames import square, vector food = vector(0, 0) snake = [vector(10, 0)] aim = vector(0, -10) def change(x, y): ??? \\\"\\\"\\\"Change snake direction.\\\"\\\"\\\" ???

    2024年02月03日
    瀏覽(25)
  • python貪吃蛇最簡(jiǎn)單代碼,python代碼貪吃蛇小游戲

    python貪吃蛇最簡(jiǎn)單代碼,python代碼貪吃蛇小游戲

    大家好,小編來為大家解答以下問題,python貪吃蛇游戲代碼詳解外加中文,python貪吃蛇最簡(jiǎn)單代碼,現(xiàn)在讓我們一起來看看吧! Source code download: 本文相關(guān)源碼 import pygame import sys import random SCREEN_X=600 SCREEN_Y=600 class Snake(object): def __init__(self): self.direction=pygame.K_RIGHT self.body = []

    2024年02月21日
    瀏覽(19)
  • 【用python做一個(gè)貪吃蛇小游戲】

    引言: 貪吃蛇是一款經(jīng)典的小游戲,它既簡(jiǎn)單又有趣。在本文中,我們將使用Python編寫一個(gè)貪吃蛇小游戲,通過這個(gè)項(xiàng)目來學(xué)習(xí)如何利用Python的基礎(chǔ)知識(shí)和圖形界面庫來創(chuàng)建一個(gè)簡(jiǎn)單的游戲。 介紹: 貪吃蛇游戲的目標(biāo)是控制一條蛇在屏幕上移動(dòng)并吃掉食物,每吃掉一塊食物

    2024年02月08日
    瀏覽(26)
  • TypeScript實(shí)現(xiàn)一個(gè)貪吃蛇小游戲

    TypeScript實(shí)現(xiàn)一個(gè)貪吃蛇小游戲

    游戲效果 文件目錄 準(zhǔn)備1 :新建index.html,編寫游戲靜態(tài)頁面 準(zhǔn)備2 :使用less,修改樣式,編寫CSS 準(zhǔn)備3: 創(chuàng)建4個(gè)類:食物類-Food、記分牌等級(jí)類-ScorePanel、蛇類-Snake、操控類-GameControl 準(zhǔn)備4 :創(chuàng)建index.ts文件,執(zhí)行游戲

    2024年01月19日
    瀏覽(25)
  • C語言-------實(shí)現(xiàn)貪吃蛇小游戲

    C語言-------實(shí)現(xiàn)貪吃蛇小游戲

    Windows 這個(gè)多作業(yè)系統(tǒng)除了協(xié)調(diào)應(yīng)用程序的執(zhí)行、分配內(nèi)存、管理資源之外, 它同時(shí)也是一個(gè)很大的服務(wù)中心,調(diào)用這個(gè)服務(wù)中心的各種服務(wù)(每一種服務(wù)就是一個(gè)函數(shù)),可以幫應(yīng)用程序達(dá)到開啟視窗、描繪圖形、使用周邊設(shè)備等目的,由于這些函數(shù)服務(wù)的對(duì)象是應(yīng)用程序

    2024年04月29日
    瀏覽(26)
  • 挑戰(zhàn)!貪吃蛇小游戲的實(shí)現(xiàn)(2)

    挑戰(zhàn)!貪吃蛇小游戲的實(shí)現(xiàn)(2)

    在貪吃蛇小游戲的實(shí)現(xiàn)(1)中,我們學(xué)習(xí)了win32 相關(guān)的一些知識(shí),本篇文章,博主將帶領(lǐng)大家從0開始實(shí)現(xiàn)貪吃蛇小游戲! locale.h實(shí)現(xiàn)本地化 ,該頭文件提供的函數(shù)用于控制C標(biāo)準(zhǔn)庫中對(duì)于不同的地區(qū)會(huì)產(chǎn)生不一樣行為的部分,如:數(shù)字量的格式,貨幣量的格式,字符集以及日

    2024年02月21日
    瀏覽(25)
  • Python小游戲:貪吃蛇——turtle的使用

    Python小游戲:貪吃蛇——turtle的使用

    ?? 突然想把去年寫的小游戲練習(xí)整合一下,寫一個(gè)簡(jiǎn)單的教學(xué)文章吧。 該篇主要講解利用python中turtle包制作小游戲,不涉及pygame的使用,僅用pycharm就可實(shí)現(xiàn) 0.理清游戲思路 ? 要實(shí)現(xiàn)的效果如下圖所示: 黑色是蛇,紅色利用隨機(jī)函數(shù)生成的蘋果,蛇沒吃到一個(gè)蘋果,就會(huì)增

    2024年02月01日
    瀏覽(18)
  • 簡(jiǎn)單的貪吃蛇小游戲的 Python 代碼

    簡(jiǎn)單的貪吃蛇小游戲的 Python 代碼:

    2024年02月08日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包