用Excel編寫小遊戲 (轉)
遊戲要給予人的是歡娛快樂而非困擾鬧心,要滿足玩樂之心,有時一片樹葉已經足夠。對於我們這些遊戲開發愛好者來說,asm、c、c++、、opengl、flash等並非是我們必需的知識和工具,有時一些意想不到的實現更能體現遊戲簡單的真意。
辦公大家熟悉不過,其功能我不多說。但大家可有想過在Excel中也可實現個把小遊戲?這個不是指97版Excel中的復活節彩旦遊戲,而是實實在在的利用Excel資源編寫、在Excel下執行的小遊戲。經過幾代的升級,ms 下的vba( for application)語言的功能有了很大的提高,在Excel中實現個把平面遊戲理論上是可能的。當然這裡面也要因應Excel工作區的特點。在Excel中編寫應用一般都是透過vba編寫宏,這些小遊戲也是。至於如何開始編寫宏、如何插入窗體及一些選擇行列單元格、改變單元格顏色、清除單元格內容等的語句,這裡假設大家都知道了,不明白的參考幫助吧。老實說,我對visual basic for application也不大熟悉,做起來整個過程也要不停地看幫助。下面結合程式碼與大家介紹一下。
先說個簡單的。大家玩過那個外國華容道吧,就是有n*n個格,有一格是空的,其他格是次序混亂的拼圖或數字,遊戲的目的就是利用這唯一的這個空格移動各塊拼圖把混亂的拼圖(數字)恢復(順序)。這裡我們小遊戲的目的是要把1至15這15個次序混亂的數字恢復從1到15的順序排列,就像網站上那個(不知現在還在不在)。
開啟Excel後開啟程式碼編寫器(Alt + F11),將如下程式碼寫入其中一個工作表(Sheet)的通用程式碼部分中。首先是初始化。定義資料結構,選擇4*4的空格,調整表格大小,改變單元格顏色(標示出遊戲區域),然後是讓1到15非重複隨機分佈到前15格空格中:
Type pos
row As Integer
col As Integer
End Type
'blank為空格的位置,初值為最後一格
Public blank As pos
'init_pos為遊戲區域的左上角,控制遊戲區域的位置,這裡為(5,5)單元格
Public init_pAs pos
'border為遊戲區域邊界
Public border As pos
'N為遊戲區域的大小,控制遊戲的規模(N*N),這裡N=4
Public N As Integer
'running用於判斷遊戲是否進行中,如果要中途退出或玩家需要重玩用此變數控制
Public running As Boolean
'此下是本遊戲宏的總入口,由工作區中button啟動,如果願意也可以讓遊戲宏在開啟該表時自動執行
Sub Begin()
If running Then
Cells(border.row, border.col).ClearContents '將唯一的空格初始化在右下角
running = False
End If
initialize '全域性初始化
End Sub
'全域性初始化函式
Function initialize()
If Not running Then
Dim i As Integer
Dim ii As Integer
Dim temp As Integer
Dim a(14) As Integer
running = True
N = 4
init_pos.col = 5
init_pos.row = 5
border.row = init_pos.row + N - 1
border.col = init_pos.col + N - 1
blank.col = border.col
blank.row = border.row
'遊戲區域(顏色)初始化,省略了單元格大小的調整,大家可以應該加入相應語句讓遊戲外觀整齊
Range(Cells(init_pos.row, init_pos.col), Cells(border.row, border.col)).Interior.ColorIndex = 5
'隨機數陣列初始化,這裡是編號0到編號14共15個數
For i = 0 To (N*N-2)
a(i) = i + 1
Next i
'不重複隨機分佈各數
For i = N*N-2 To 0 Step -1
Ranize
ii = Int(Rnd * i)
temp = a(i)
a(i) = a(ii)
Cells(init_pos.row + i N, init_pos.col + (i Mod N)) = a(i)
a(ii) = temp
Next i
End If
End Function
很明顯,Excel的單元格是遊戲的主角。初始化後遊戲開始,邏輯很簡單:玩家每單擊一個單元格(產生Worksheet中的ionChange事件),遊戲就判斷這個格是否在遊戲區域中,若是就判斷上下左右4個方向是否有空格,如果有空格就把原單元格中的數傳到空格中,原單元格清空(空格與原單元格),然後判斷遊戲是否結束(1到15順序排序了?),若還沒有,什麼都不做,等下一次單擊事件發生。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If running Then
'所單擊單元格是否就是空格
If (Target.row <> blank.row Or Target.Column <> blank.col) Then
'所單擊單元格是否在遊戲區域
If ((Target.row >= init_pos.row And Target.row <= border.row) And (Target.Column >= init_pos.col And Target.Column <= border.col)) Then
'所單擊單元格上下左右是否有空格
If ((Abs(blank.col - Target.Column) <= 1 And blank.row = Target.row) Or (Abs(blank.row - Target.row) <= 1 And blank.col = Target.Column)) Then
'單元格與空格交換
Cells(blank.row, blank.col) = Cells(Target.row, Target.Column)
Cells(Target.row, Target.Column).ClearContents
blank.col = Target.Column
blank.row = Target.row
End If
End If
End If
'判斷遊戲是否結束?
Dim i As Integer
i = 0
Do While (i < N*N And Cells(init_pos.row + i N, init_pos.col + i Mod N) = i + 1)
i = i + 1
L
If i = N*N-1 Then
MsgBox ("你成功了!")
running = False
End If
End If
End Sub
最後在Excel工作區中放個button,用來呼叫遊戲宏啟動遊戲。雙擊button,輸入程式碼
Private Sub button_Click()
Call Begin
End Sub
儲存後單擊button,遊戲開始了!
這個遊戲還可以再加上記時、限時、計算移動步數等功能,並記錄在表中某個位置作為遊戲紀錄。遊戲沒有防作弊功能,人們能夠隨便修改單元格中的數值,而這可以透過Worksheet_Change事件加以限制(不過這樣的遊戲都要作弊我無話可說)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10794571/viewspace-974708/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用Visual Basic自編小遊戲 (轉)遊戲
- 用C語言編寫小遊戲——“井字棋”C語言遊戲
- 用Delphi編寫DelTree程式 (轉)
- 用Java編寫ASP元件 (轉)Java元件
- 如何用python編寫猜拳小遊戲?Python遊戲
- 用VC++編寫CGI程式 (轉)C++
- 用VB編寫抽獎程式 (轉)
- 編寫高效的MySQL應用(轉)MySql
- 用GDX寫個安卓小遊戲安卓遊戲
- 用XML編寫EXCEL檔案,XML的寫法注意事項,可以C#+xslt匯出ExcelXMLExcelC#
- excel大寫字母轉換Excel
- 用Delphi編寫安裝程式(1) (轉)
- 用VB編寫標準CGI程式 (轉)
- 用 C++Builder 編寫 Tray 程式 (轉)C++UI
- 用PHP編寫email群發器 (轉)PHPAI
- 用 JavaScript 寫一個卡片小遊戲JavaScript遊戲
- 用jQuery手寫一個小遊戲jQuery遊戲
- 用VBA程式碼編寫一鍵插入Excel斜線表頭Excel
- Excel金額小寫轉大寫公式Excel公式
- 微信飛機大戰小遊戲編寫分享(上)遊戲
- 用 Delphi 編寫 VxD 裝置驅動程式(轉) (轉)
- 用VC++6.0編寫撥號程式 (轉)C++
- 用PHP編寫PDF文件生成器 (轉)PHP
- 用ASP.Net編寫留言本 (轉)ASP.NET
- 用Junit Framework編寫單元測試 (轉)Framework
- 為Linux 應用程式編寫 DLL(轉)Linux
- 使用SceneKit編寫微信跳一跳小遊戲(一)遊戲
- 用VB編寫COM+應用時碰到問題? (轉)
- 【轉】測試用例編寫(功能測試框架)框架
- 編寫Linux實用程式的藝術(轉)Linux
- 用VB編寫網路尋呼機(1) (轉)
- 用VB編寫網路尋呼機(2) (轉)
- 用BCB編寫身份證號識別程式 (轉)
- 用Delphi編寫塗鴉桌面的小程式 (轉)
- 用 Node.js 寫微信小遊戲輔助Node.js遊戲
- 用C++語言寫遊戲——打怪小遊戲C++遊戲
- [實戰]用flutter編寫炸彈人小遊戲同時支援web和移動端Flutter遊戲Web
- 用VB編寫一個彈出選單類 (轉)