91久久九色_99精品在线免费_91精品欧美一区二区三区_成人一级毛片_国产精品久久久久免费视频_99精彩视频在线观看

【游戲開發(fā)】貪吃蛇展示+源代碼

2021-04-06
5375
0

還記得時代的貪吃蛇游戲吧,兩只可愛的小蛇為了吃豆豆的冒險經(jīng)歷,貪吃蛇(也叫做貪食蛇)游戲是一款休閑益智類游戲,有PC和手機等多平臺版本。既簡單又耐玩。該游戲通過控制蛇頭方向吃蛋,從而使得蛇變得越來越長。

 

今天小編整理了貪吃蛇的源碼,大家可以試著去做一下,看看能不能做出來。

 

 

【Python/PySide2】貪吃蛇展示:

 

 

【Python/PySide2】貪吃蛇源代碼:

 

import random

from enum import Enum

from sys import argv

from PySide2.QtCore import *

from PySide2.QtGui import *

from PySide2.QtWidgets import *

class DIRECTION(Enum) :

  """

    方向

    """

  UP = 0

  DOWN = 1

  LEFT = 2

  RIGHT = 3

#常量

SCREEN_WIDTH = 600 #屏幕寬度

SCREEN_HEIGHT = 600 #屏幕高度

UNIT_SIZE = 50 #格子邊長

GAME_UNITS = int((SCREEN_WIDTH * SCREEN_HEIGHT) / UNIT_SIZE) #格子數(shù)量

DELAY = 150 #延遲

class GameThread(QThread) :

  """

    游戲線程

    """

  def __init__(self) - >None:

    super(GameThread, self).__init__(None)

  def run(self) - >None:

    """

        游戲運行

        """

    
while w.running:

      w.Move() #蛇移動

      w.checkApple() #檢查蛇頭是否吃到蘋果

      w.checkCollisions() #檢查蛇頭是否撞到墻 / 蛇身

      w.repaint() #重繪

      app.processEvents() #處理事件

      self.msleep(DELAY) #等待

class GameFrame(QWidget) :

  """

    游戲窗口

    """

  running = False #游戲是否正在運行

  bodyParts = 6 #身體長度

  applesEaten = 0 #已吃蘋果數(shù)量

  appleX = 0 #蘋果X坐標

  appleY = 0 #蘋果Y坐標

  direction = DIRECTION.RIGHT #蛇運動方向 (默認為右)

  x = [0
for i in range(GAME_UNITS)] #蛇身x坐標

  y = [0
for i in range(GAME_UNITS)] #蛇身y坐標

  def __init__(self) - >None:

    super(GameFrame, self).__init__()

    self.gameThread = GameThread() #創(chuàng)建游戲線程

    self.setWindowTitle(''''''''Snake'''''''') #設(shè)置窗口標題

    self.setFixedSize(SCREEN_WIDTH, SCREEN_HEIGHT) #設(shè)置窗口固定大小

    self.startGame() #開始游戲

  def startGame(self) - >None:

    """

        開始游戲

        """

    self.running = True

    self.newApple() #新建蘋果

    self.gameThread.start() #開始線程

  def paintEvent(self, event: QPaintEvent) - >None:

    """

        窗口繪制

        """

    p = QPainter(self)

    #背景繪制

    p.fillRect(0, 0, self.width(), self.height(), Qt.GlobalColor.black)

    #游戲結(jié)束

    
if not self.running:

      p.setPen(Qt.GlobalColor.red) #設(shè)置為紅色

      p.setFont(QFont(''''''''微軟雅黑'''''''', 20)) #設(shè)置字體

      p.drawText(0, 0, self.width(), self.height(), Qt.AlignCenter, ''''''''Game Over! (Score: %d)'''''''' % self.applesEaten)

      
return

    #游戲網(wǎng)格線

    
for i in range(int(SCREEN_HEIGHT / UNIT_SIZE)) :

      p.setPen(Qt.GlobalColor.white) #設(shè)置為白色

      p.drawLine(i * UNIT_SIZE, 0, i * UNIT_SIZE, SCREEN_HEIGHT) #豎線

      p.drawLine(0, i * UNIT_SIZE, SCREEN_WIDTH, i * UNIT_SIZE) #橫線

    #蘋果

    brush = QBrush()

    brush.setStyle(Qt.SolidPattern)

    brush.setColor(Qt.GlobalColor.red)

    p.setBrush(brush)

    p.drawEllipse(self.appleX, self.appleY, UNIT_SIZE, UNIT_SIZE)

    #蛇

    brush.setColor(Qt.GlobalColor.green)

    p.setBrush(brush)

    
for i in range(0, self.bodyParts) :

      p.drawRect(self.x[i], self.y[i], UNIT_SIZE, UNIT_SIZE)

      brush.setColor(QColor(45, 180, 0))

      p.setBrush(brush)

    #分數(shù)繪制

    p.setPen(Qt.GlobalColor.red)

    p.setFont(QFont(''''''''微軟雅黑'''''''', 20))

    p.drawText(0, 0, self.width(), self.height(), Qt.AlignHCenter, ''''''''Score: %d'''''''' % self.applesEaten)

  def newApple(self) - >None:

    """

        新建蘋果

        """

    self.appleX = random.randint(0, int(SCREEN_WIDTH / UNIT_SIZE) - 1) * UNIT_SIZE #隨機產(chǎn)生坐標X

    self.appleY = random.randint(0, int(SCREEN_HEIGHT / UNIT_SIZE) - 1) * UNIT_SIZE #隨機產(chǎn)生坐標Y

  def Move(self) - >None:

    """

        蛇移動

        """

    
for i in range(self.bodyParts, 0, -1) :

      self.x[i] = self.x[i - 1]

      self.y[i] = self.y[i - 1]

    
if self.direction == DIRECTION.UP:

      self.y[0] -= UNIT_SIZE

    elif self.direction == DIRECTION.DOWN:

      self.y[0] = UNIT_SIZE

    elif self.direction == DIRECTION.LEFT:

      self.x[0] -= UNIT_SIZE

    elif self.direction == DIRECTION.RIGHT:

      self.x[0] = UNIT_SIZE

  def checkApple(self) - >None:

    """

        檢查蛇頭是否吃到蘋果

        """

    
if self.x[0] == self.appleX and self.y[0] == self.appleY:

      self.bodyParts = 1

      self.applesEaten = 1

      self.newApple()

  def checkCollisions(self) - >None:

    """

        檢查蛇頭是否撞到墻/蛇身

        """

    
for i in range(self.bodyParts, 0, -1) :

      
if self.x[0] == self.x[i] and self.y[0] == self.y[i] :

        self.running = False

        
return

    
if self.x[0] < 0 or self.x[0] > SCREEN_WIDTH or self.y[0] < 0 or self.y[0] > SCREEN_HEIGHT:

      self.running = False

  def keyPressEvent(self, event: QKeyEvent) - >None:

    """

        捕獲鍵盤輸入

        """

    
if event.key() == Qt.Key_Up:

      
if self.direction != DIRECTION.DOWN:

        self.direction = DIRECTION.UP

    elif event.key() == Qt.Key_Down:

      
if self.direction != DIRECTION.UP:

        self.direction = DIRECTION.DOWN

    elif event.key() == Qt.Key_Left:

      
if self.direction != DIRECTION.RIGHT:

        self.direction = DIRECTION.LEFT

    elif event.key() == Qt.Key_Right:

      
if self.direction != DIRECTION.LEFT:

        self.direction = DIRECTION.RIGHT

  def closeEvent(self, event: QCloseEvent) - >None:

    """

        關(guān)閉線程

        """

    self.gameThread.terminate()

if __name__ == ''''''''__main__'''''''':

  app = QApplication(argv)

  w = GameFrame()

  w.show()

  exit(app.exec_())

 

 

轉(zhuǎn)載聲明:本文來源于網(wǎng)絡(luò),不作任何商業(yè)用途

免責聲明:本文內(nèi)部分內(nèi)容來自網(wǎng)絡(luò),所涉繪畫作品及文字版權(quán)與著作權(quán)歸原作者,若有侵權(quán)或異議請聯(lián)系我們處理。
收藏

全部評論

您還沒登錄

暫無留言,趕緊搶占沙發(fā)
繪學(xué)霸是國內(nèi)專業(yè)的CG數(shù)字藝術(shù)設(shè)計線上線下學(xué)習平臺,在繪學(xué)霸有2D繪畫、3D模型、影視后期、動畫、特效等數(shù)字藝術(shù)培訓(xùn)課程,也有學(xué)習資源下載,還有行業(yè)社區(qū)交流。學(xué)習、交流,來繪學(xué)霸就對了。
繪學(xué)霸iOS端二維碼

IOS下載

繪學(xué)霸安卓端二維碼

安卓下載

繪學(xué)霸微信小程序二維碼

小程序

版權(quán)聲明
本網(wǎng)站所有產(chǎn)品設(shè)計、功能及展示形式,均已受版權(quán)或產(chǎn)權(quán)保護,任何公司及個人不得以任何方式復(fù)制部分或全部,違者將依法追究責任,特此聲明。
熱線電話
18026259035
咨詢時間:9:00~21:00
在線客服
聯(lián)系網(wǎng)站客服
客服微信:18026259035
公司地址
中國·廣州
廣州市海珠區(qū)曉港中馬路130號之19
繪學(xué)霸客戶端(權(quán)限暫無,用于CG資源與教程交流分享)
開發(fā)者:廣州王氏軟件科技有限公司 | 應(yīng)用版本:Android:6.0,IOS:5.1 | App隱私政策> | 應(yīng)用權(quán)限 | 更新時間:2020.1.6
主站蜘蛛池模板: 日韩一区二区三区免费视频 | 午夜激情在线播放 | 性色av一区二区三区 | 欧美在线综合视频 | 日韩精品中文字幕在线 | 国产一级片av | 午夜激情视频 | 日本午夜视频 | 国产一区久久久 | 国产欧美一区二区精品久导航 | 久久免费视频网站 | 精品久久久国产 | 一区二区三区日韩欧美 | 国产午夜视频在线观看 | 日韩欧美二区 | 亚洲精品资源 | 国产精品久久久久久福利一牛影视 | 国内av网站| 91久久精品国产 | 中文激情网 | 大陆一级毛片免费视频观看 | 国产亚洲精品久久久久久牛牛 | 午夜网 | 91av视频在线免费观看 | 在线观看麻豆视频 | 日韩99 | 欧美精品一区二区三区在线播放 | 国产探花一区二区 | 国产精品久久久久久久久久东京 | 欧美日韩电影一区二区 | 91精品国产综合久久久久久久久久 | 高清国产一区二区 | 国产欧美日韩综合精品一区二区 | 美女又爽又黄免费视频 | 国产精品国产精品国产专区不卡 | 在线激情视频 | 国产午夜电影 | 成人二区| 99久久精品久久久久久 | 一级片大全| 欧美精选一区二区 |