<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 貪食蛇 > 原文: [http://zetcode.com/gui/vbqyoto/nibbles/](http://zetcode.com/gui/vbqyoto/nibbles/) 在 Visual Basic Qyoto 編程教程的這一部分中,我們將創建貪食蛇游戲克隆。 貪食蛇是較舊的經典視頻游戲。 它最初是在 70 年代后期創建的。 后來它被帶到 PC 上。 在這個游戲中,玩家控制蛇。 目的是盡可能多地吃蘋果。 蛇每次吃一個蘋果,它的身體就會長大。 蛇必須避開墻壁和自己的身體。 ## 開發 蛇的每個關節的大小為 10px。 蛇由光標鍵控制。 最初,蛇具有三個關節。 游戲立即開始。 游戲結束后,我們在窗口中心顯示`"Game Over"`消息。 `board.vb` ```vb Imports Qyoto NameSpace BoardSpace public class Board Inherits QFrame Const WIDTH As Integer = 300 Const HEIGHT As Integer = 300 Const DOT_SIZE As Integer = 10 Const ALL_DOTS As Integer = 900 Const RAND_POS As Integer = 30 Const DELAY As Integer = 140 Dim x(ALL_DOTS) As Integer Dim y(ALL_DOTS) As Integer Dim dots As Integer Dim apple_x As Integer Dim apple_y As Integer Dim left As Boolean = False Dim right As Boolean = True Dim up As Boolean = False Dim down As Boolean = False Dim inGame As Boolean = True Dim timer As QBasicTimer Dim ball As QImage Dim apple As QImage Dim head As QImage Public Sub New() Me.SetStyleSheet("QWidget { background-color: black }") Me.FocusPolicy = Qt.FocusPolicy.StrongFocus Try ball = New QImage("dot.png") apple = New QImage("apple.png") head = New QImage("head.png") Catch e As Exception Console.WriteLine("Cannot read images") Console.WriteLine(e.Message) Environment.Exit(1) End Try Me.InitGame() End Sub Private Sub InitGame() dots = 3 For z As Integer = 0 To dots-1 x(z) = 50 - z*10 y(z) = 50 Next Me.LocateApple() timer = New QBasicTimer() timer.Start(DELAY, Me) End Sub Protected Overrides Sub PaintEvent(ByVal e As QPaintEvent) Dim painter As New QPainter() painter.Begin(Me) If inGame Me.DrawObjects(painter) Else Me.GameOver(painter) End If painter.End() End Sub Private Sub DrawObjects(ByVal painter As QPainter) painter.DrawImage(apple_x, apple_y, apple) For z As Integer = 0 to dots - 1 If z = 0 painter.DrawImage(x(z), y(z), head) Else painter.DrawImage(x(z), y(z), ball) End If Next End Sub Private Sub GameOver(ByVal painter As QPainter) Dim msg As String = "Game Over" Dim small As New QFont("Helvetica", 12) small.SetBold(True) Dim metr As New QFontMetrics(small) Dim textWidth As Integer = metr.Width(msg) Dim h As Integer = Me.Height Dim w As Integer = Me.Width painter.SetPen(New QPen(New QBrush(Qt.GlobalColor.white), 1)) painter.SetFont(small) painter.Translate(New QPoint(w/2, h/2)) Dim text_x As Integer = -textWidth / 2 Dim text_y As Integer = 0 painter.DrawText(text_x, text_y, msg) End Sub Private Sub CheckApple() If x(0) = apple_x And y(0) = apple_y dots += 1 Me.LocateApple() End If End Sub Private Sub Move() For z As Integer = dots To 1 Step -1 x(z) = x(z - 1) y(z) = y(z - 1) Next If left x(0) -= DOT_SIZE End If If right x(0) += DOT_SIZE End If If up y(0) -= DOT_SIZE End If If down y(0) += DOT_SIZE End If End Sub Private Sub CheckCollision() For z As Integer = dots To 1 Step -1 If z > 4 And x(0) = x(z) And y(0) = y(z) inGame = False End If Next If y(0) > HEIGHT inGame = False End If If y(0) < 0 inGame = False End If If x(0) > WIDTH inGame = False End If If x(0) < 0 inGame = False End If End Sub Private Sub LocateApple() Dim rand As New Random() Dim r As Integer = rand.Next(RAND_POS) apple_x = r * DOT_SIZE r = rand.Next(RAND_POS) apple_y = r * DOT_SIZE End Sub Protected Overrides Sub TimerEvent(ByVal e As QTimerEvent) If inGame Me.CheckApple() Me.CheckCollision() Me.Move() Else timer.Stop() End If Me.Repaint() End Sub Protected Overrides Sub KeyPressEvent(ByVal e As QKeyEvent) Dim key As Integer = e.Key() If key = Qt.Key.Key_Left And Not right left = True up = False down = False End If If key = Qt.Key.Key_Right And Not left right = True up = False down = False End If If key = Qt.Key.Key_Up And Not down up = True right = False left = False End If If key = Qt.Key.Key_Down And Not up down = True right = False left = False End If End Sub End Class End Namespace ``` 首先,我們將定義一些在游戲中使用的全局變量。 `WIDTH`和`HEIGHT`常數確定電路板的大小。 `DOT_SIZE`是蘋果的大小和蛇的點。 `ALL_DOTS`常數定義了板上可能的最大點數。 `RAND_POS`常數用于計算蘋果的隨機位置。 `DELAY`常數確定游戲的速度。 ```vb Dim x(ALL_DOTS) As Integer Dim y(ALL_DOTS) As Integer ``` 這兩個數組存儲蛇的所有可能關節的 x,y 坐標。 `InitGame()`方法初始化變量,加載圖像并啟動超時功能。 ```vb If inGame Me.DrawObjects(painter) Else Me.GameOver(painter) End If ``` 在`PaintEvent()`方法內部,我們檢查`inGame`變量。 如果為真,則繪制對象。 蘋果和蛇的關節。 否則,我們顯示`"Game Over"`文本。 ```vb Private Sub DrawObjects(ByVal painter As QPainter) painter.DrawImage(apple_x, apple_y, apple) For z As Integer = 0 to dots - 1 If z = 0 painter.DrawImage(x(z), y(z), head) Else painter.DrawImage(x(z), y(z), ball) End If Next End Sub ``` `DrawObjects()`方法繪制蘋果和蛇的關節。 蛇的第一個關節是其頭部,用紅色圓圈表示。 ```vb Private Sub CheckApple() If x(0) = apple_x And y(0) = apple_y dots += 1 Me.LocateApple() End If End Sub ``` `CheckApple()`方法檢查蛇是否擊中了蘋果對象。 如果是這樣,我們添加另一個蛇形關節并調用`LocateApple()`方法,該方法將隨機放置一個新的`Apple`對象。 在`Move()`方法中,我們有游戲的關鍵算法。 要了解它,請看一下蛇是如何運動的。 您控制蛇的頭。 您可以使用光標鍵更改其方向。 其余關節在鏈上向上移動一個位置。 第二關節移動到第一個關節的位置,第三關節移動到第二個關節的位置,依此類推。 ```vb For z As Integer = dots To 1 Step -1 x(z) = x(z - 1) y(z) = y(z - 1) Next ``` 該代碼將關節向上移動。 ```vb If left x(0) -= DOT_SIZE End If ``` 將頭向左移動。 在`CheckCollision()`方法中,我們確定蛇是否擊中了自己或撞墻之一。 ```vb For z As Integer = dots To 1 Step -1 If z > 4 And x(0) = x(z) And y(0) = y(z) inGame = False End If Next ``` 如果蛇用頭撞到關節之一,我們就結束游戲。 ```vb If y(0) > HEIGHT inGame = False End If ``` 如果蛇擊中了棋盤的底部,我們就結束了游戲。 `LocateApple()`方法在板上隨機放置一個蘋果。 ```vb Dim rand As New Random() Dim r As Integer = rand.Next(RAND_POS) ``` 我們得到一個從 0 到`RAND_POS-1`的隨機數。 ```vb apple_x = r * DOT_SIZE ... apple_y = r * DOT_SIZE ``` 這些行設置了`apple`對象的 x,y 坐標。 ```vb If inGame Me.CheckApple() Me.CheckCollision() Me.Move() Else timer.Stop() End If ``` 每 140 毫秒,將調用`TimerEvent()`方法。 如果我們參與了游戲,我們將調用三種構建游戲邏輯的方法。 否則,我們將停止計時器。 在`Board`類的`KeyPressEvent()`方法中,我們確定按下的鍵。 ```vb If key = Qt.Key.Key_Left And Not right left = True up = False down = False End If ``` 如果單擊左光標鍵,則將`left`變量設置為`true`。 在`Move()`方法中使用此變量來更改蛇對象的坐標。 還要注意,當蛇向右行駛時,我們不能立即向左轉。 `nibbles.vb` ```vb ' ZetCode Mono Visual Basic Qt tutorial ' ' In this program, we create ' a Nibbles game clone ' ' author jan bodnar ' last modified May 2009 ' website www.zetcode.com Imports Qyoto Imports BoardSpace Public Class VBQApp Inherits QMainWindow Dim WIDTH As Integer = 250 Dim HEIGHT As Integer = 150 Public Sub New() Me.SetWindowTitle("Nibbles") Dim board As New BoardSpace.Board() Me.SetCentralWidget(board) Me.Resize(310, 310) Me.Move(300, 300) Me.Show() End Sub Public Shared Sub Main(ByVal args() As String) Dim qapp As New QApplication(args) Dim app As New VBQApp QApplication.Exec() End Sub End Class ``` 在這個類中,我們設置了貪食蛇游戲。 ![Nibbles](https://img.kancloud.cn/9f/ea/9fea697acadb191bb7b10ef50a653782_316x335.jpg) 圖:貪食蛇 這是用 Qyo??to 庫和 Visual Basic 編程語言編寫的貪食蛇電腦游戲。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看