遊戲製作-猜數字遊戲

[程式完成圖]

   

[動機]

無意間上網看到有人在討論以前開始學習程式時的一些題目,忽然想起國中時和同學打發時間最愛玩的遊戲之一就是這個猜數字遊戲了,當然許多的上課的老師們也很喜歡拿這一個小遊戲來當成作業,不過可惜的是當時我們流行的是樂透呀...(= ="),因此就抱著懷舊(?!)的心態完成了這個小遊戲。

[說明]

Q1:大約需要製作多久的時間?

A: 包括程式開始設計、著手進行程式輸入直到美工編排大約需花費三~五小時左右,算是一個好玩的小品遊戲。

Q2:遊戲的基本玩法是什麼?

A:這個遊戲算是大多數的人都了解的一個經典小遊戲,基本的遊戲規則就是

1、四個0~9組成的不同數字組成答案

2、玩家猜測時會依照答案給予不同的提示,如果猜到數字但位置不對,則算是B,如果數字位置都對了,算是A

EX:

若答案為9510

玩家猜測1234時,因猜到1這個數字,但位置不對,所以電腦會回應 0A1B

玩家猜測9581時,因9、5都對了,1位置不對,所以電腦會回應 2A1B

以此類推...直到玩家猜對全部的數字及位置!

[系統要求]

Windows XP sp2

Visual Basic 6.0 專業版

[實作]

一、讓VB隨機產生0~9不同4個數字?

(1) 在VB中,隨機產生數字的語法是Rnd(),而Rnd()產生的亂數為0.xxx的亂數,因此如果要產生0~10的亂數可以將他乘10倍

VB產生0~10的數字

Dim number1 As Integer

number1 = Rnd() * 10

宣告一個整數型態的變成 number1 ,將 Rnd() * 10 給這個變數,則就可以看到小數點前的位數了。

(2)接下來同樣法方法給四個整數的變數就可以得到四個亂數了,並且將Rnd() * 10有可能得到10這個數字的狀態排除掉。

VB產生四個0~9的數字

Dim number1 As Integer
Dim number2 As Integer
Dim number3 As Integer
Dim number4 As Integer

number1 = Rnd() * 10
number2 = Rnd() * 10
number3 = Rnd() * 10
number4 = Rnd() * 10

If number1 = 10 Then
number1 = number1 - Rnd() * 10
End If
If number2 = 10 Then
number2 = number2 - Rnd() * 10
End If
If number3 = 10 Then
number3 = number3 - Rnd() * 10
End If
If number4 = 10 Then
number4 = number4 - Rnd() * 10
End If

(2)這裡會發現一件事情,幾乎是每個程式設計軟體都會遇到的狀態,也就是會發現每次重開程式,看似是亂數的數字每次取出來的四個數字都是一樣的,這是因為取亂數的演算法都是一樣的呀!所以還必須加上一個語法Randomize,在MSDN中稱為初始化亂數產生器,詳情請看這裡:MSDN-Randomize

VB真正產生四個0~9的數字

Dim number1 As Integer
Dim number2 As Integer
Dim number3 As Integer
Dim number4 As Integer

Randomize

number1 = Rnd() * 10
number2 = Rnd() * 10
number3 = Rnd() * 10
number4 = Rnd() * 10

If number1 = 10 Then
number1 = number1 - Rnd() * 10
End If
If number2 = 10 Then
number2 = number2 - Rnd() * 10
End If
If number3 = 10 Then
number3 = number3 - Rnd() * 10
End If
If number4 = 10 Then
number4 = number4 - Rnd() * 10
End If

(3)最後要避免四個數字重覆,可利用do while-loop來決解:

VB真正產生四個0~9的不同的數字

Dim x
'---產生亂數----
x = 0
Do While (x = 0)
Randomize '不會每次重開變數都相同
number1 = Rnd() * 10
number2 = Rnd() * 10
number3 = Rnd() * 10
number4 = Rnd() * 10
If number1 = 10 Then
number1 = number1 - Rnd() * 10
End If
If number2 = 10 Then
number2 = number2 - Rnd() * 10
End If
If number3 = 10 Then
number3 = number3 - Rnd() * 10
End If
If number4 = 10 Then
number4 = number4 - Rnd() * 10
End If
If (number1 <> number2) And (number1 <> number3) And (number1 <> number4) And (number2 <> number3) And (number2 <> number4) And (number3 <> number4) Then
x = 1
End If
Loop

二、判斷輸入字串與答案的關係

(1) VB中取得字串文字的方法大約可分成Left()、Mid()、Right(),因此就將三個都用力的用下去吧!在這裡,輸入的TEXT BOX名稱為Text1.Text

分別取得四個輸入數字

'第一個數字=> Left(Text1.Text, 1)
'第二個數字=> Mid(Text1.Text, 2, 1)
'第三個數字=> Mid(Text1.Text, 3, 1)
'第四個數字=> Right(Text1.Text, 1)

(2)利用IF語法判斷四個數字是否有重覆,或著不足四個數字,並且再判斷一共為幾A幾B,如此就可以完成一個簡單的猜數字遊戲了。當然為了增加一點樂趣,所以可以KUSO的加入一些現在許多節目常用的求救方法,像我就加了一字提示等等功能。

三、完成作品

(1) 最後再加點美工,在此我是用PhotoImpact 12來製作圖示背景等等,即可完成猜數字遊戲。

後記:其實這個程式再做一些變化會更有趣,比如讓猜的數字增加,或著更改基本規則變成數字可以重覆都可以讓遊戲多更多的選擇。

主程式及測試檔無私下載點:連結已失效

(注意!如要轉戴請註明出處 。)

文章標籤
全站熱搜
創作者介紹
創作者 Leo 的頭像
Leo

Leo生活筆記

Leo 發表在 痞客邦 留言(3) 人氣(7,256)