/
make-a-simple-game-in-python
156 lines (123 loc) · 9.29 KB
/
make-a-simple-game-in-python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
<!DOCTYPE html>
<html>
<!--head-->
<head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-MC9CSTSNW6"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-MC9CSTSNW6');
</script>
<title>JAS0N HUANG</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="google-site-verification" content="DoQOqkvX376V4rp4mmeGYFGrLOB-wrUCMMKlqgrqmuQ" />
<link rel="stylesheet" href="/css/style.css">
<script type="text/javascript">
let apiUrl = 'https://www.googleapis.com/youtube/v3/channels?part=snippet&id=UC9ckyA_A3MfXUa0ttxMoIZw&key=AIzaSyBiuF1WCpG7TaCY8xtd4cb73Sn-5NTPrb0'
let xhr = new XMLHttpRequest()
xhr.open('get', apiUrl, true)
xhr.send()
xhr.onreadystatechange = function(){
if(this.readyState ===4 && this.status === 200){
let data = JSON.parse(this.responseText)
console.log(data)
}
}
</script>
<meta name="generator" content="Hexo 6.3.0"><link rel="alternate" href="/atom.xml" title="JAS0N HUANG" type="application/atom+xml">
</head>
<body>
<div class="container">
<div class="blog_header">
<a href="/">
<h1 class="blog_title">
<img src="/images/Jas0nhuang.svg" alt="jas0nhuang">
<!-- %= config.title %-->
</h1>
</a>
<div class="container">
<nav class="blog_nav">
<a class="menu_item" href="/archives">文章</a>
<a class="menu_item" href="/tags">標籤</a>
<a class="menu_item" href="/about">關於</a>
<a class="menu_item" href="/atom.xml">RSS</a>
</nav>
</div>
</div>
</div>
<div class="body">
<div class="main">
<div class="full">
<h1 class="page_title">用 Python做個小遊戲</h1>
<p>聊到門外漢學寫程式,朋友說 Python很好用,想學程式可以從 Python入門,又知道我愛打電動,所以就傳了個<a target="_blank" rel="noopener" href="https://www.youtube.com/watch?v=-8n91btt5d8">如何用 Python寫一款遊戲</a>的影片給我,其實我是愛打電動,想戒戒不掉,對做遊戲倒不是非常有興趣,可是學寫程式倒是很有興趣,那就把這影片當成學 Python的基礎教學吧!</p>
<h2 id="環境設定"><a href="#環境設定" class="headerlink" title="環境設定"></a>環境設定</h2><p>懶得在 Windows系統上裝 Python,用 Virtual Box開個虛擬機,安裝 Linux系統就可以開工了,編輯器是用非IT阿宅的最愛Vim,開兩個終端,一個寫程式另一個測試。小遊戲用 Python加上 Pygame就可以完成。</p>
<h2 id="學寫程式"><a href="#學寫程式" class="headerlink" title="學寫程式"></a>學寫程式</h2><p>程式的寫法<a target="_blank" rel="noopener" href="https://www.instagram.com/keithgalli/">嘎理</a>先生已經講解得很清楚, 真的不會寫股溝一下就知道了,下面記錄一些看影片跟著實作的心得。</p>
<ul>
<li><p>股溝是寫程式的好朋友<br>作者在開頭要初始化 Pygame的地方就提到,當他不知道某個功能要怎麼寫的時候,股溝會幫你寫。<br>這部影片主要使用 Pygame完成,所以 Pygame網站也是重要參考工具。</p>
</li>
<li><p>設定好的函數就可以直接執行?<br>這是一個我沒搞懂的問題。<br>首先,關於函數我從高中第一次聽到一直到現在都還沒搞清楚是甚麼,大概看了微雞百科惡補一下,如果理解沒錯的話,用電腦語言來說其實就是一個程式,用死老百姓語言來說就是一個處理機,「丟一些東西給它,它就會幫你處理好並且產出另一些東西」。<br>回到 Python上的問題,嘎哩先生初始化 Pygame之後就寫了一行程式要 Python在螢幕上打開一個視窗,運行程式就可以看到一個視窗跳出來了,這沒頭沒尾啊!那個 screen到底是變數還是函數?是函數的話直接設定好就可以執行?到底是甚麼妖術?沒有仔細搞清楚程式運作的一些基本方法可能也是我一直沒能學會寫程式的原因。所以到底這是甚麼妖術?<br>所以我自已另外測試了一下,把前面的<code>screen =</code>刪除,程式也可以執行,也會在螢幕上顯示出一個視窗,再微雞一下,其實這句就是一個可以獨立執行的語句/陳述句(statement)與表達句(expression)相對。</p>
</li>
<li><p>設定變數,方便重複使用<br>耶絲,這個簡單。</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">XXX = AAA</span><br><span class="line">YYY = BBB</span><br></pre></td></tr></table></figure>
</li>
<li><p>程式邏輯<br>while not、 for、 in、 if、 elif……其實看到一半就有點花了。</p>
</li>
<li><p>記憶力直接影響生產力<br>模組(module)如何使用<br>關掉視窗要使用<code>pygame.QUIT</code>以及<code>sys.exit()</code><br>顯示視窗裡加入的物件需要<code>pygame.display.update()</code>更新視窗畫面<br><code>screen.fill()</code>重新填滿視窗(清除殘影),而且填入RGB值也要加括號……<br>程式「語言」嘛,就像學語言一樣,基本句法大概都不難學,但是要背單字、要動詞變化、要會修辭……跟人家講話總不能抱著字典一直翻,其實現在的科技真的讓語言的隔閡越來越小,Google翻譯就可以完成很多工作了,如果加上對語言有基本認識,要溝通其實真的不會很難,說記憶力可能太狹礙,應該說提高熟悉度直接影響生產力;寫程式的門檻也一樣越來越低,也是熟悉度分出高下,所以開始有所謂的<a target="_blank" rel="noopener" href="https://www.ptt.cc/bbs/Soft_Job/M.1548302683.A.D12.html">前端難民</a>一說?</p>
</li>
</ul>
<h2 id="看懂別人寫的程式"><a href="#看懂別人寫的程式" class="headerlink" title="看懂別人寫的程式"></a>看懂別人寫的程式</h2><p>試著把<a target="_blank" rel="noopener" href="https://github.com/KeithGalli/Basic-Python-Game/blob/master/game.py">原始檔</a>拆成幾個段落來看:</p>
<ul>
<li><p>import<br> 載入模組</p>
</li>
<li><p>pygamegame.init()<br> pygame初始化</p>
</li>
<li><p>variables<br> 定義變數</p>
</li>
<li><p>functions<br> 函數,定義方式為:<br> `def 函數名稱(傳入變數):</p>
<ol>
<li>set_level(score, SPEED) #設定等級<br> if…elif…elif…else…<br> return SPEED</li>
<li>drop_enemies(enemy_list) #落下方塊<br> random.random()<br> len(XXX)<br> random.randint(X, y) #random number between x and y<br> list.append([x, y])</li>
<li>draw_enemies #顯示敵人<br> for 列表裡之元素 in 列表</li>
<li>update_enemy_position</li>
</ol>
</li>
</ul>
<h2 id="教你如何學-Python"><a href="#教你如何學-Python" class="headerlink" title="教你如何學 Python"></a>教你如何學 Python</h2><p>看嘎哩同學的影片時瞄到旁邊油管的影片推薦,有個<a target="_blank" rel="noopener" href="https://www.youtube.com/channel/UC4xKdmAXFh4ACyhpiQ_3qBw">前股溝首席程式設計師</a>,其中一支影片就是<a target="_blank" rel="noopener" href="https://www.youtube.com/watch?v=5mJ_Qftw2_0">教你如何學 Python</a>,記一下他建議的學習途徑:</p>
<ol>
<li>先上 Python官網把<a target="_blank" rel="noopener" href="https://docs.python.org/zh-tw/3/tutorial/index.html"> Python教學</a>讀完(繁體中文版還沒翻譯完全)。</li>
<li>用 Python架一個網站。</li>
<li>在網站裡用 Python連結資料庫。<br>就這麼簡單!!</li>
</ol>
<hr>
<ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/Programming/" rel="tag">Programming</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Pygame/" rel="tag">Pygame</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/Python/" rel="tag">Python</a></li></ul>
</div>
</div>
</div>
<section id="comments">
<div id="disqus_thread"></div>
<script type="text/javascript">
/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
var disqus_shortname = 'JAS0NHUANG';
/* * * DON'T EDIT BELOW THIS LINE * * */
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
<noscript>Please enable JavaScript to view the <a target="_blank" rel="noopener" href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
</section>
<!--footer-->
<footer class="blog_footer">
<p>
JAS0N HUANG
<a href="https://creativecommons.org/licenses/by-nc-sa/4.0/" target="_blank">
<img src="/images/cc.svg" alt="CC" height="16"></a>
2019
</p>
</footer>
</body>
</html>