**
pygame 貪喫蛇(簡易版)
**
趁着寒假的時間自學了Python,就在b站上找了個視頻做了一個貪喫蛇的小遊戲,用到了pygame,IDE用的是pycharm。
沒怎麼根據視頻做太大的改進,第一次接觸pygame,很多東西還不是很瞭解,就當是一個練手的小遊戲,以後再改進吧。
class Point():
row = 0
col = 0
def __init__(self, row, col):
self.row = row
self.col = col
def copy(self):
return Point(self.row,self.col)
import pygame
import random
# 初始化
pygame.init()
W = 800 # 屏幕的寬
H = 600 # 屏幕的高
ROW = 30 # 幾行
COL = 40 # 幾列 每個格有多大
size = (W, H)
window = pygame.display.set_mode(size)
pygame.display.set_caption('貪喫蛇')
bg_color = (255, 255, 255) # 背景顏色
snake_color = (150, 150, 150) # 蛇身顏色
head = Point(int(ROW/2), int(COL/2)) # 蛇頭
head_color = (0, 128, 128)
snakes = [
Point(head.row, head.col + 1),
Point(head.row, head.col + 2)
]
# 生成食物
def get_food():
while True:
pos = Point(random.randint(0, ROW - 1), random.randint(0, COL - 1))
# 是否跟蛇碰上
is_col = False
if head.row == pos.row and head.col == pos.col:
is_col = True
for snake in snakes:
if snake.row == pos.row and snake.col == pos.col:
is_col = True
break
if not is_col:
break
return pos
# 定義座標
food = get_food()
food_color = (255, 255, 0)
direct = 'left' # 蛇移動方向 left, right, up, down
def rect(point, color):
cell_width = W / COL # 格子的寬度
cell_height = H / ROW # 格子的高度
left = point.col * cell_width
top = point.row * cell_height
pygame.draw.rect(window,color,(left,top,cell_width,cell_height))
# 遊戲循環
quit = True
clock = pygame.time.Clock()
# 設置幀頻,根據遊戲的進程逐漸變快
frequency = 3
while quit:
# 處理事件
events = pygame.event.get()
for event in events:
if event.type == pygame.QUIT:
quit = False
elif event.type == pygame.KEYDOWN: # 按鍵 上下左右 對應鍵值可以通過print(event)打出來
if event.key == 273 or event.key == 119:
if direct == 'left' or direct == 'right':
direct = 'up'
elif event.key == 274 or event.key == 115:
if direct == 'left' or direct == 'right':
direct = 'down'
elif event.key == 276 or event.key == 97:
if direct == 'up' or direct == 'down':
direct = 'left'
elif event.key == 275 or event.key == 100:
if direct == 'up' or direct == 'down':
direct = 'right'
# 做自己的事
# 喫東西
eat = head.row == food.row and head.col == food.col
if eat:
food = get_food()
frequency += 1
# 處理身子
# 1、把原來的頭插入到snakes的頭上
snakes.insert(0,head.copy())
# 2、把snakes的最後一個格子刪掉
if not eat:
snakes.pop()
# 移動
if direct == 'left':
head.col -= 1
elif direct == 'right':
head.col += 1
elif direct == 'up':
head.row -= 1
else:
head.row += 1
# 檢測
dead = False
# 1、撞牆
if head.col < 0 or head.row <0 or head.col >= COL or head.row >= ROW:
dead = True
# 2、撞自己
for snake in snakes:
if head.col == snake.col and head.row == snake.row:
dead = True
break
if dead:
print("遊戲結束")
quit = False
# 渲染--畫出來
# 屏幕背景顏色繪製
pygame.draw.rect(window,bg_color,(0,0,W,H))
# 畫蛇頭
for snake in snakes:
rect(snake,snake_color)
rect(head, head_color)
# 畫食物
rect(food, food_color)
pygame.display.flip() # 更新整個待顯示的Surface 對象到屏幕上
# 設置幀頻
clock.tick(frequency) # sleep(1000/60)