用python pygame寫貪吃蛇小遊戲

2022-08-19 03:45:09 字數 2934 閱讀 3862

因為python語法簡單好上手,前兩天在想能不能用python寫個小遊戲出來,就上網搜了一下發現了pygame這個寫2d遊戲的庫。了解了兩天再參考了一些資料就開始寫貪吃蛇這個小遊戲。 畢竟最開始的練手專案好像都是這個emmmmpython推薦廖雪峰的python3教程,pygame推薦目光部落格的pygame教程,pygame是乙個開發2d遊戲的庫。python + pygame 簡單了解後就可以上手這個專案。

總體思路:

1、遊戲開始資訊顯示

2、地圖的初始化

3、蛇的初始化

4、食物的隨機出現

5、實現簡單的使用者輸入控制貪吃蛇的方向變化

6、判斷貪吃蛇是否吃到食物,如果吃到食物(頭部座標和食物座標相同),蛇自身長度+1,同時隨機出現新的食物。否則保持不變。

7、判斷蛇是是否碰到邊界,如果碰到邊界,彈出死亡資訊和分數。

(1) 遊戲的整體定義:

cell_size是貪吃蛇的大小,注意cell_size 要能被視窗大小被整除.

地圖的總體寬度:

map_width = int(windows_width / cell_size)

map_height = int(windows_height / cell_size)

整體顏色和方向定義:

white = (255, 255, 255)

black = (0, 0, 0)

gray = (230, 230, 230)

dark_gray = (40, 40, 40)

darkgreen = (0, 155, 0)

green = (0, 255, 0)

red = (255, 0, 0)

blue = (0, 0, 255)

dark_blue =(0,0, 139)

bg_color = black #遊戲背景顏色

# 定義方向

up = 1

down = 2

left = 3

right = 4

head = 0 #貪吃蛇頭部下標

主要函式:

1.貪吃蛇的初始化:

snake_coords = [,  #初始貪吃蛇,]

2.畫貪吃蛇:

def draw_snake(screen, snake_coords):

for coord in snake_coords:

x = coord['x'] * cell_size

y = coord['y'] * cell_size

wormsegmentrect = pygame.rect(x, y, cell_size, cell_size)

pygame.draw.rect(screen, dark_blue, wormsegmentrect)

worminnersegmentrect = pygame.rect( #蛇身子裡面的第二層亮綠色

x + 4, y + 4, cell_size - 8, cell_size - 8)

pygame.draw.rect(screen, blue, worminnersegmentrect)

3.移動貪吃蛇:

def move_snake(direction, snake_coords):

if direction == up:

newhead =

elif direction == down:

newhead =

elif direction == left:

newhead =

elif direction == right:

newhead =

snake_coords.insert(0, newhead)

4.判斷蛇是否死亡:

def snake_is_alive(snake_coords):

tag = true

if snake_coords[head]['x'] == -1 or snake_coords[head]['x'] == map_width or snake_coords[head]['y'] == -1 or \

snake_coords[head]['y'] == map_height:

tag = false # 蛇碰壁啦

for snake_body in snake_coords[1:]:

if snake_body['x'] == snake_coords[head]['x'] and snake_body['y'] == snake_coords[head]['y']:

tag = false # 蛇碰到自己身體啦

return tag

5.食物的初始化:

def get_random_location():

return

6.判斷蛇是否吃到食物:

def snake_is_eat_food(snake_coords, food):  #如果是列表或字典,那麼函式內修改引數內容,就會影響到函式體外的物件。

if snake_coords[head]['x'] == food['x'] and snake_coords[head]['y'] == food['y']:

food['x'] = random.randint(0, map_width - 1)

food['y'] = random.randint(0, map_height - 1) # 實物位置重新設定

else:

del snake_coords[-1] # 如果沒有吃到實物, 就向前移動, 那麼尾部一格刪掉

原文:

用yaml寫用例

第一步 安裝yaml,在執行裡輸入 pip install pyyaml 檢驗是否安裝成功,在pycharm裡輸入 import yaml 第二步 建立乙個file,字尾寫yaml或yml 在yml檔案裡寫入單個使用者名稱和密碼 開啟yml檔案並以字典的形式列印出來 執行結果 在yml檔案裡寫入多個...

用VC寫執行緒

handle hworkthread hworkthread createthread null,0,lpthread start routine startworkthread,執行緒入口函式 info,傳遞引數給執行緒入口函式 0,null 其中startworkthread為執行緒主函式,其必...

用gridview寫分頁

根據pagecount和pageindex實現分頁功能以及刪除提示 protected void gridview1 rowcreated object sender,gridviewroweventargs e if e.row.rowtype datacontrolrowtype.pager i...