iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
自我挑戰組

不要太認真學 Python! 之 我又重新報名了系列 第 13

不要太認真學 Python! - Day 16

  • 分享至 

  • xImage
  •  

[前情提要]

昨天成功寫出了「花癡」程式,今天想要來做不一樣的主題。

本來想說要來做 LINE bot 機器人,但是好像有很多前置作業要準備,像是建帳號之類的,所以我決定等假日再來做這個。

今天就來做簡單的小遊戲,目標是要完成猜數字。
另外,希望今天能做出兩個遊戲,像是貪吃蛇之類的。

堅決不混分!!!)握拳


今天想說來弄個小遊戲,就來弄個猜數字遊戲吧!!!
雖然找了程式碼來參考,但是沒想到在開頭就卡關。
然後,就又要超時了...
喔不!!!)送送送都先送出去,剩下的候補 QAQQQ

https://ithelp.ithome.com.tw/upload/images/20190917/20120423JgGkodgjrw.jpg


其實今天在思考要找什麼遊戲來實作的時候,最一開始,我是去網路上參考別人製作的猜數字遊戲。

原本,想說最直接就是複製貼上然後研究別人的程式碼在寫什麼就好,不想多花心思去寫程式,應該是說,總有惰性大爆發的時候,但是又不甘心自己這麼菜,還想學人偷吃步,肯定被笑掉大牙。

貼張圖警惕自己,不能偷懶!!!
做學問就要紮實,即便是玩也不能作弊!!!

https://ithelp.ithome.com.tw/upload/images/20190918/20120423rEqjg8ciTC.png

所以,我研究了一下原作的程式碼以後,心裡想著以前玩手機或電腦遊戲,思考遊戲流程是怎麼跑的,希望能把極為簡單的小遊戲,變得更完整。


下方是原作的程式碼:

import random
rang1 = int(input("請設定本局遊戲的最小值:"))
rang2 = int(input("請設定本局遊戲的最大值:"))
num = random.randint(rang1,rang2)
guess = "guess"
print("數字猜謎遊戲!")
i = 0
while guess != num:
    i += 1
    guess = int(input("請輸入你猜的數字:"))

    if guess == num:
        print("恭喜,你猜對了!")
    elif guess < num:
        print("你猜的數小了...")
    else:
        print("你猜的數大了...")

print("你總共猜了%d" %i + "次",end = '')
print(",快和你朋友較量一下...")

看過以後,我改了一下原作的程式碼,如下方程式碼。

import random
print('歡迎進入猜數字遊戲,玩家們準備好了嗎?')
GuessGame = input('是否要進入遊戲?(YES/NO)')
while (GuessGame.lower() == "NO"):
 break

rang1 = int(input("請設定本局遊戲的最小值:"))
rang2 = int(input("請設定本局遊戲的最大值:"))
num = random.randint(rang1,rang2)
guess = "guess"
print("猜數字遊戲!")
i = 0
while guess != num:
   i += 1
   guess = int(input("你猜數字多少:"))
 
   if guess == num:
        
       print("恭喜,你猜對了!")
   elif guess < num:
       print("再大一點!!")
   else:
       print("再小一點!!")
 
print("你總共猜了%d" %i + "次"",快點再來一局!!!")

第一個修改點:新增歡迎語

原作的程式碼直接進入遊戲,但是我想要做一個可以互動比較多的遊戲。
因此,我希望系統本身活潑一點,讓身為遊戲玩家的我們能夠比較不枯燥。

所以我在遊戲一開頭先加上歡迎語。

print('歡迎進入猜數字遊戲,玩家們準備好了嗎?')

第二個修改點:新增「是否要參與比賽」的選項

一般來說,遊戲都在一開始會問玩家是否要開始比賽,或者是否要離開比賽之類的問題。
但是,這個程式是直接進入遊戲本身,這樣有點無趣。

所以,我想要加上這個「是否參與比賽」的調查選項。
就在我把程式碼整理好以後,丟去執行的時候...

天阿,完美誒!!

https://ithelp.ithome.com.tw/upload/images/20190918/20120423pS6np8H2m5.png

可以順利執行了!!!

但是,注意問題來了!!!

人就是不能想說那來試試看啊,就在我上面成功以後,我打算刷個「NO」來看看結果,結果不小心在答案欄點到了「2」送出...

https://ithelp.ithome.com.tw/upload/images/20190918/20120423fLlDiJwbIf.png

天阿... 為什麼還繼續執行呢?
我想要的不是這樣,我想要的是能夠在不是「YES」的選項中系統能停止動作。

我試了

print('歡迎進入猜數字遊戲,玩家們準備好了嗎?')
GuessGame = input('是否要進入遊戲?(YES/NO)')
if (GuessGame.lower() == "YES"):
 continue
 else:
 break

系統顯示「SyntaxError: 'continue' not properly in loop」也就是,「continue」在循環(loop)中不正確。

另外也試了好多種寫法,這邊就不貼太多失敗的程式語法)掩面

總之,我覺得肯定是我的迴圈寫法有問題,明天來認真研究「continue」要怎麼搞定,還有想要把這個小遊戲再擴大,讓它變得更有趣一點點。

另外,明天也要來研究「Pygame」,感覺裡面有很多資源可以利用。
希望能寫出一隻好玩又不會膩的小遊戲。

https://ithelp.ithome.com.tw/upload/images/20190918/20120423NsD6XbVjkK.jpg

https://ithelp.ithome.com.tw/upload/images/20190918/201204230bXxZiZn8O.jpg

哪裡跌倒就地躺好
收工


不要太認真學 Python! - Day 15


上一篇
不要太認真學 Python! - Day 15
下一篇
不要太認真學 Python! - Day 17
系列文
不要太認真學 Python! 之 我又重新報名了31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

1
yorkc99
iT邦新手 5 級 ‧ 2019-09-18 02:00:39

1. 該停止不停止
這點有問題是基本觀念不清楚所導致,
while loop 的意思是在特定條件下重複執行相同任務,
也就是如下:

while (條件):
    當滿足 or 不滿足條件時要重複做的事 // 請見底下的 script 1

按照你的遊戲邏輯其實第四行這邊並不需要用到 while loop,
這個 while loop 也完全沒有發揮到作用,
用個 if ... else 來判斷玩家輸入的結果就好,
如果輸入 yes 做什麼事,
如果輸入的不是 yes 我就跳出這個 script,
注意 不是跳出 while loop 是跳出 script,
跳出 loop 他依然會把剩下的程式碼執行完畢。

2. Continue
不知道是你貼上的問題還是你本來就這樣寫,
if ... else 應該是如下:

if (條件):
    執行某事
else:
    執行某事

可是你的 else 好像有縮排了。

迴圈控制參考以下
1分鐘搞懂 python 的迴圈控制
if ... else 不是迴圈,
你用 continue 當然沒效果。


寫了兩個簡單的 script 你可以拿去執行看看結果分別是如何,
希望能幫助你釐清一些問題。

Script 1

print('How does script work')
i = 0
while i < 5:
    i += 1
    print(i)
print('Script end')

Script 2

answer = input('Hi, I can count 1 to 10 for you, do you wanna try? (y/n) ')
if answer.lower() == 'y':
    name = input("So, what's your name? ")
    for i in range(1, 11):
        print(i)
    print('Done, bye~ {}'.format(name))
else:
    print("I'm too sad QAQ")
    exit()
print('if you choose yes and this line will print, can you tell me why?')

題外話,
如果英文還可以的話,
Python for Everybody
希望這網站能協助你釐清一些基礎觀念,
然後繼續奮鬥下去吧!

RGB iT邦新手 5 級 ‧ 2019-09-18 02:25:42 檢舉

天阿,感謝你的回應。
我明天再來好好研究一下!!)很愛睏囧

我有看「1分鐘搞懂 python 的迴圈控制」耶!!!
是我目前一直沒關閉的頁籤)哭笑不得

感謝推薦網站!!!
這個很可以!!!

1

哈哈哈 能夠稱為loop的就是可以「執行很多次」的語法,在python就是for 或是 while
至於breakcontinue是專為此而設的機制

不然要怎麼中途跳出在無限循環的程式碼中Orz

可以試試看以下程式碼~

for i in range(10):
    if i == 5:
        continue
    if i == 7:
        break
    print(i)

python是用「縮排」來看程式碼屬於哪個區塊的程式語言,所以你希望重複執行的程式要用縮排分開(習慣用tab按鍵當作一「格」,等於四個空白鍵)

while(True):
    # 程式碼在此
    # 程式碼在此
    # 程式碼在此
# 寫這邊的程式碼就不會被包在無窮迴圈裡面

當然你也可以在迴圈裡面包han多東西

while(True):
    for i in range(10):
        if i == 5:
            continue
        if i == 7:
            break # <- 只跳出 for, 只會跳出一層
        print(i)
    if input('keep going (y/n) ? ') == 'n':
        break # <- 跳出 while,因為包在 while 裡面
print('to be continue...')

我要留言

立即登入留言