首頁>技術>

遊戲介面

貪吃蛇小遊戲是一代人的夢,本期文章我們簡單製作一個貪吃蛇小遊戲
import cv2import numpy as npfrom random import randintfrom random import choice

程式碼截圖

首先匯入我們需要的第三方庫,然後定義一個貪吃蛇的類來定義貪吃蛇的運動,頭部等資訊

class SnakePart:  def __init__(self, front, x, y):    self.front = front    self.x = x    self.y = y  def move(self):    self.x = self.front.x    self.y = self.front.y

程式碼截圖

此類我們定義貪吃蛇的身體以及運動等

class Head:  def __init__(self, direction, x, y):    self.direction = direction    self.x = x    self.y = y  def move(self):    if self.direction == 0:    self.x += 1    elif self.direction == 1:    self.y += 1    elif self.direction == 2:    self.x -= 1    elif self.direction == 3:    self.y -= 1

程式碼截圖

然後我們定義貪吃蛇的頭部以及運動資訊,這裡我們控制鍵盤的W\S\A\D四個鍵來控制貪吃蛇頭部的運動方向

def display():  board = np.zeros([BOARD_SIZE, BOARD_SIZE, 3])  for part in snake:    board[part.y, part.x] = [0, 255, 0]  board[appley, applex] = [0, 0, 255]  cv2.imshow("Snake Game", np.uint8(board.repeat(CELL_SIZE, 0).repeat(CELL_SIZE, 1)))  key = cv2.waitKey(int(1000/SPEED))  return key

程式碼截圖

Display類來顯示貪吃蛇的顏色以及要吃的蘋果的顏色

def win_focus():  cv2.namedWindow("Snake Game", cv2.WINDOW_AUTOSIZE);  board = np.zeros([BOARD_SIZE * CELL_SIZE, BOARD_SIZE * CELL_SIZE, 3])  cv2.imshow("Snake Game", board);  cv2.setWindowProperty("Snake Game", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN);  cv2.waitKey(2000)  cv2.setWindowProperty("Snake Game", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_AUTOSIZE)

程式碼截圖

Win_focus 類函式來顯示遊戲畫面

1. cv2.VideoCapture(0) #構建影片抓捕器

引數說明:0表示需要啟動的攝像頭,這裡也可以寫影片的路徑

2. cv2.nameWindow(name, cv2.WINDOW_NORMAL) # 構建影片的視窗

引數說明: 表示視窗的名字, cv2.WINDOW_NORMAL表示視窗的大小,這裡視窗的大小是正常,

3.cv2.setWindowProperty(name, cv2.WND_PROP_FULLSCREEN, cv2.WND_PROP_FULLSCREEN)

引數說明: name表示需要更改畫素的視窗名字, cv2.WND_PROP_FULLSCREEN表示全屏

4. video_capture.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) 對視窗畫素進行設定

引數說明: cv2.CAP_PROP_FRAME_WIDTH 表示設定其寬的大小, 1920表示設定的畫素

以上引數類設定後,我們開始主函式的部分

if __name__ == '__main__' :  # 每個cell的大小  CELL_SIZE = 20  # cell的數量  BOARD_SIZE = 45  # 遊戲中貪吃蛇的執行速度  SPEED = 6  # 貪吃蛇成長的速度  GROWTH = 3  eaten = True  quit = False  grow = 0  snake = []  #遊戲中從螢幕中間開始執行  head = Head(0, int((BOARD_SIZE - 1)/2), int((BOARD_SIZE - 1)/2))  snake.append(head)  # 設定鍵盤  print('w = top, a = left, s = down, d = right')  win_focus()  while True:    if eaten:      s = list(range(0, BOARD_SIZE ** 2))      for part in snake:        s.remove(part.x * BOARD_SIZE + part.y)      a = choice(s)      applex = int(a/BOARD_SIZE)      appley = a % BOARD_SIZE      eaten = False

程式碼截圖

接下來,我們設定一下貪吃蛇的鍵盤移動設定,W/A/S/D,分別代表貪吃蛇的移動方向,這個跟普通遊戲設定的一樣,由於opencv不能設定箭頭,這裡只能設定為W/A/S/D

key = display()if key == 8 or key == 27:  breakelif key == ord("d") :  head.direction = 0elif key == ord("s") :  head.direction = 1elif key == ord("a") :  head.direction = 2elif key == ord("w") :  head.direction = 3

程式碼截圖

設定完成後,就可以進行貪吃蛇的移動控制,以及貪吃蛇的遊戲規則,當貪吃蛇吃過一個蘋果後,其身體要增加一個大小尺寸

# 移動貪吃蛇for part in snake[::-1]:  part.move()# 設定遊戲規則if head.x < 0 or head.x > BOARD_SIZE - 1 or head.y < 0 or head.y > BOARD_SIZE - 1:  breakfor part in snake[1:]:  if head.x == part.x and head.y == part.y:  quit = True  breakif quit:  break# 設定貪吃蛇if grow > 0:  snake.append(SnakePart(snake[-1], subx, suby))  grow -= 1# 當吃過一個蘋果後,增加貪吃蛇的長度if applex == head.x and appley == head.y:  subx = snake[-1].x  suby = snake[-1].y  eaten = True  grow += GROWTH

Ok,所有設定完成後,便可以進行遊戲了,當然這裡只是設定了基本的貪吃蛇規格,你也可以在程式碼裡面增加分數設定,看看你能跑多少分吧

遊戲截圖

11
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • Eclipse設定提示資訊,輸入.abcdefghijklm