用 Python 实现植物大战僵尸代码!
<h2 class="md-end-block md-heading"><span class="md-plain md-expand">前言</span></h2><p class="md-end-block md-p"><span class="md-plain">本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。</span></p>
<p class="md-end-block md-p"><span class="md-plain">作者: marble_xu</span></p>
<p class="md-end-block md-p"><span class="md-plain">GitHub地址:https://github.com/marblexu/PythonPlantsVsZombies</span></p>
<p class="md-end-block md-p"><span class="md-plain">PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取</span></p>
<p class="md-end-block md-p"><span class="md-link">http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef</span></p>
<p class="md-end-block md-p"><span><strong>功能介绍</strong></span></p>
<p class="md-end-block md-p"><span class="md-plain">最近一直在给这个植物大战僵尸游戏添加新的植物和僵尸, 因为网上的图片资源有限,能加的植物和僵尸比较少, 目前进展如下。</span></p>
<p class="md-end-block md-p"><span><strong>功能实现如下:</strong></span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">支持的植物类型:太阳花,豌豆射手,寒冰射手,坚果,樱桃炸弹。新增加植物:双重豌豆射手,三重豌豆射手,食人花 ,小喷菇,土豆地雷,倭瓜。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">支持的僵尸类型:普通僵尸,棋子僵尸,路障僵尸,铁桶僵尸。新增加读报僵尸。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">使用json文件保存关卡信息,设置僵尸出现的时间和位置。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">增加每关开始时选择上场植物。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">增加除草机。</span></p>
</li>
</ul>
<p class="md-end-block md-p"><span><strong>下面是游戏的截图:</strong></span></p>
<p class="md-end-block md-p"><span><span class="md-softbreak"> <span class="md-image md-img-loaded" data-src="https://img-blog.csdnimg.cn/20191207151213536.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70"><img src="https://img-blog.csdnimg.cn/20191207151213536.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70"><span class="md-softbreak"> <span class="md-image md-img-loaded" data-src="https://img-blog.csdnimg.cn/20191207151221799.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70"><img src="https://img-blog.csdnimg.cn/20191207151221799.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70"><span class="md-softbreak"> <span class="md-image md-img-loaded" data-src="https://img-blog.csdnimg.cn/20191207151226839.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70"><img src="https://img-blog.csdnimg.cn/20191207151226839.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaTM0Nzc5NTc5MA==,size_16,color_FFFFFF,t_70"></span></span></span></span></span></span></span></p>
<h2 class="md-end-block md-heading"><span class="md-plain">植物卡片选择和种植</span></h2>
<p class="md-end-block md-p"><span class="md-plain">如图所示,游戏中可以种植物的方格一共有45个(有5行,每行9列)。</span></p>
<p class="md-end-block md-p"><span class="md-plain">这篇文章要介绍的是:</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">上方植物卡片栏的实现。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">点击植物卡片,鼠标切换为植物图片。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。</span></p>
</li>
</ul>
<h2 class="md-end-block md-heading"><span class="md-plain">代码实现</span></h2>
<p class="md-end-block md-p"><span class="md-plain">所有的植物卡片的名称和属性都保存在单独的list中,每个list index都对应一种植物。</span></p>
<p class="md-end-block md-p"><span class="md-plain">比如list index 0 就是太阳花:</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">card_name_list 是太阳花卡片的名字,用来获取太阳花卡片的图片。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">plant_name_list 是太阳花的名字,用来获取太阳花卡片的图片。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">plant_sun_list 是种植太阳花需要花费的太阳点数。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">plant_frozen_time_list 是太阳花的冷却时间。</span></p>
</li>
</ul>
<h2 class="md-end-block md-heading"><span class="md-plain">植物卡片类</span></h2>
<p class="md-end-block md-p"><span class="md-plain">每个植物卡片是一个单独的Card类,用来显示这个植物。</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">checkMouseClick函数:判断鼠标是否点击到这个卡片;</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">canClick:判断这个卡片是否能种植(有没有足够的点数,是否还在冷却时间内);</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">update 函数:通过设置图片的透明度来表示这个卡片是否能选择。</span></p>
</li>
</ul>
<h2 class="md-end-block md-heading"><span class="md-plain">卡片栏类</span></h2>
<p class="md-end-block md-p"><span class="md-plain">MenuBar类显示图3中的植物卡片栏:</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">self.sun_value:当前采集的太阳点数;</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">self.card_list: 植物卡片的list;</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">setupCards函数:遍历初始化<span><strong>init</strong><span class="md-plain">函数中传入这个关卡选好的植物卡片list,依次创建Card类,设置每个卡片的显示位置;</span></span></span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">checkCardClick函数:检查鼠标是否点击了卡片栏上的某个植物卡片,如果选择了一个可种植的卡片,返回结果。</span></p>
</li>
</ul>
<p class="md-end-block md-p"><span><strong>代码:</strong></span></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> pygame as pg
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 0, 255, 1)">from</span> .. <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> tool
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 255, 1)">from</span> .. <span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> constants as c
</span><span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">5</span> PANEL_Y_START = 87
<span style="color: rgba(0, 128, 128, 1)">6</span> PANEL_X_START = 22
<span style="color: rgba(0, 128, 128, 1)">7</span> PANEL_Y_INTERNAL = 74
<span style="color: rgba(0, 128, 128, 1)">8</span> PANEL_X_INTERNAL = 53
<span style="color: rgba(0, 128, 128, 1)">9</span> CARD_LIST_NUM = 8
<span style="color: rgba(0, 128, 128, 1)"> 10</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 11</span> card_name_list =<span style="color: rgba(0, 0, 0, 1)"> [c.CARD_SUNFLOWER, c.CARD_PEASHOOTER, c.CARD_SNOWPEASHOOTER, c.CARD_WALLNUT,
</span><span style="color: rgba(0, 128, 128, 1)"> 12</span> <span style="color: rgba(0, 0, 0, 1)"> c.CARD_CHERRYBOMB, c.CARD_THREEPEASHOOTER, c.CARD_REPEATERPEA, c.CARD_CHOMPER,
</span><span style="color: rgba(0, 128, 128, 1)"> 13</span> <span style="color: rgba(0, 0, 0, 1)"> c.CARD_PUFFSHROOM, c.CARD_POTATOMINE, c.CARD_SQUASH, c.CARD_SPIKEWEED,
</span><span style="color: rgba(0, 128, 128, 1)"> 14</span> <span style="color: rgba(0, 0, 0, 1)"> c.CARD_JALAPENO, c.CARD_SCAREDYSHROOM, c.CARD_SUNSHROOM, c.CARD_ICESHROOM]
</span><span style="color: rgba(0, 128, 128, 1)"> 15</span> plant_name_list =<span style="color: rgba(0, 0, 0, 1)"> [c.SUNFLOWER, c.PEASHOOTER, c.SNOWPEASHOOTER, c.WALLNUT,
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span> <span style="color: rgba(0, 0, 0, 1)"> c.CHERRYBOMB, c.THREEPEASHOOTER, c.REPEATERPEA, c.CHOMPER,
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span> <span style="color: rgba(0, 0, 0, 1)"> c.PUFFSHROOM, c.POTATOMINE, c.SQUASH, c.SPIKEWEED,
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span> <span style="color: rgba(0, 0, 0, 1)"> c.JALAPENO, c.SCAREDYSHROOM, c.SUNSHROOM, c.ICESHROOM]
</span><span style="color: rgba(0, 128, 128, 1)"> 19</span> plant_sun_list =
</span><span style="color: rgba(0, 128, 128, 1)"> 20</span> plant_frozen_time_list = [7500, 7500, 7500, 30000, 50000, 7500, 7500, 7500, 7500, 30000<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 21</span> 30000, 7500, 50000, 7500, 7500, 50000<span style="color: rgba(0, 0, 0, 1)">]
</span><span style="color: rgba(0, 128, 128, 1)"> 22</span> all_card_list =
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 24</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> getSunValueImage(sun_value):
</span><span style="color: rgba(0, 128, 128, 1)"> 25</span> font = pg.font.SysFont(None, 22<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 26</span> width = 32
<span style="color: rgba(0, 128, 128, 1)"> 27</span> msg_image =<span style="color: rgba(0, 0, 0, 1)"> font.render(str(sun_value), True, c.NAVYBLUE, c.LIGHTYELLOW)
</span><span style="color: rgba(0, 128, 128, 1)"> 28</span> msg_rect =<span style="color: rgba(0, 0, 0, 1)"> msg_image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span> msg_w =<span style="color: rgba(0, 0, 0, 1)"> msg_rect.width
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span> image = pg.Surface()
</span><span style="color: rgba(0, 128, 128, 1)"> 32</span> x = width -<span style="color: rgba(0, 0, 0, 1)"> msg_w
</span><span style="color: rgba(0, 128, 128, 1)"> 33</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span> <span style="color: rgba(0, 0, 0, 1)"> image.fill(c.LIGHTYELLOW)
</span><span style="color: rgba(0, 128, 128, 1)"> 35</span> <span style="color: rgba(0, 0, 0, 1)"> image.blit(msg_image, (x, 0), (0, 0, msg_rect.w, msg_rect.h))
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span> <span style="color: rgba(0, 0, 0, 1)"> image.set_colorkey(c.BLACK)
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> image
</span><span style="color: rgba(0, 128, 128, 1)"> 38</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Card():
</span><span style="color: rgba(0, 128, 128, 1)"> 40</span> <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span>(self, x, y, name_index, scale=0.78<span style="color: rgba(0, 0, 0, 1)">):
</span><span style="color: rgba(0, 128, 128, 1)"> 41</span> <span style="color: rgba(0, 0, 0, 1)"> self.loadFrame(card_name_list, scale)
</span><span style="color: rgba(0, 128, 128, 1)"> 42</span> self.rect =<span style="color: rgba(0, 0, 0, 1)"> self.orig_image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)"> 43</span> self.rect.x =<span style="color: rgba(0, 0, 0, 1)"> x
</span><span style="color: rgba(0, 128, 128, 1)"> 44</span> self.rect.y =<span style="color: rgba(0, 0, 0, 1)"> y
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span>
<span style="color: rgba(0, 128, 128, 1)"> 46</span> self.name_index =<span style="color: rgba(0, 0, 0, 1)"> name_index
</span><span style="color: rgba(0, 128, 128, 1)"> 47</span> self.sun_cost =<span style="color: rgba(0, 0, 0, 1)"> plant_sun_list
</span><span style="color: rgba(0, 128, 128, 1)"> 48</span> self.frozen_time =<span style="color: rgba(0, 0, 0, 1)"> plant_frozen_time_list
</span><span style="color: rgba(0, 128, 128, 1)"> 49</span> self.frozen_timer = -<span style="color: rgba(0, 0, 0, 1)">self.frozen_time
</span><span style="color: rgba(0, 128, 128, 1)"> 50</span> self.refresh_timer =<span style="color: rgba(0, 0, 0, 1)"> 0
</span><span style="color: rgba(0, 128, 128, 1)"> 51</span> self.select =<span style="color: rgba(0, 0, 0, 1)"> True
</span><span style="color: rgba(0, 128, 128, 1)"> 52</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 53</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> loadFrame(self, name, scale):
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span> frame =<span style="color: rgba(0, 0, 0, 1)"> tool.GFX
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span> rect =<span style="color: rgba(0, 0, 0, 1)"> frame.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)"> 56</span> width, height =<span style="color: rgba(0, 0, 0, 1)"> rect.w, rect.h
</span><span style="color: rgba(0, 128, 128, 1)"> 57</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 58</span> self.orig_image =<span style="color: rgba(0, 0, 0, 1)"> tool.get_image(frame, 0, 0, width, height, c.BLACK, scale)
</span><span style="color: rgba(0, 128, 128, 1)"> 59</span> self.image =<span style="color: rgba(0, 0, 0, 1)"> self.orig_image
</span><span style="color: rgba(0, 128, 128, 1)"> 60</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> checkMouseClick(self, mouse_pos):
</span><span style="color: rgba(0, 128, 128, 1)"> 62</span> x, y =<span style="color: rgba(0, 0, 0, 1)"> mouse_pos
</span><span style="color: rgba(0, 128, 128, 1)"> 63</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(x >= self.rect.x <span style="color: rgba(0, 0, 255, 1)">and</span> x <= self.rect.right <span style="color: rgba(0, 0, 255, 1)">and</span>
<span style="color: rgba(0, 128, 128, 1)"> 64</span> y >= self.rect.y <span style="color: rgba(0, 0, 255, 1)">and</span> y <=<span style="color: rgba(0, 0, 0, 1)"> self.rect.bottom):
</span><span style="color: rgba(0, 128, 128, 1)"> 65</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> True
</span><span style="color: rgba(0, 128, 128, 1)"> 66</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 68</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> canClick(self, sun_value, current_time):
</span><span style="color: rgba(0, 128, 128, 1)"> 69</span> <span style="color: rgba(0, 0, 255, 1)">if</span> self.sun_cost <= sun_value <span style="color: rgba(0, 0, 255, 1)">and</span> (current_time - self.frozen_timer) ><span style="color: rgba(0, 0, 0, 1)"> self.frozen_time:
</span><span style="color: rgba(0, 128, 128, 1)"> 70</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> True
</span><span style="color: rgba(0, 128, 128, 1)"> 71</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 128, 128, 1)"> 72</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 73</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> canSelect(self):
</span><span style="color: rgba(0, 128, 128, 1)"> 74</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> self.select
</span><span style="color: rgba(0, 128, 128, 1)"> 75</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 76</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setSelect(self, can_select):
</span><span style="color: rgba(0, 128, 128, 1)"> 77</span> self.select =<span style="color: rgba(0, 0, 0, 1)"> can_select
</span><span style="color: rgba(0, 128, 128, 1)"> 78</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> can_select:
</span><span style="color: rgba(0, 128, 128, 1)"> 79</span> self.image.set_alpha(255<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 80</span> <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)"> 81</span> self.image.set_alpha(128<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 82</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 83</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setFrozenTime(self, current_time):
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span> self.frozen_timer =<span style="color: rgba(0, 0, 0, 1)"> current_time
</span><span style="color: rgba(0, 128, 128, 1)"> 85</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 86</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> createShowImage(self, sun_value, current_time):
</span><span style="color: rgba(0, 128, 128, 1)"> 87</span> <span style="color: rgba(128, 0, 0, 1)">'''</span><span style="color: rgba(128, 0, 0, 1)">create a card image to show cool down status
</span><span style="color: rgba(0, 128, 128, 1)"> 88</span> <span style="color: rgba(128, 0, 0, 1)"> or disable status when have not enough sun value</span><span style="color: rgba(128, 0, 0, 1)">'''</span>
<span style="color: rgba(0, 128, 128, 1)"> 89</span> time = current_time -<span style="color: rgba(0, 0, 0, 1)"> self.frozen_timer
</span><span style="color: rgba(0, 128, 128, 1)"> 90</span> <span style="color: rgba(0, 0, 255, 1)">if</span> time < self.frozen_time: <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">cool down status</span>
<span style="color: rgba(0, 128, 128, 1)"> 91</span> image =<span style="color: rgba(0, 0, 0, 1)"> pg.Surface()
</span><span style="color: rgba(0, 128, 128, 1)"> 92</span> frozen_image =<span style="color: rgba(0, 0, 0, 1)"> self.orig_image.copy()
</span><span style="color: rgba(0, 128, 128, 1)"> 93</span> frozen_image.set_alpha(128<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 94</span> frozen_height = (self.frozen_time - time)/self.frozen_time *<span style="color: rgba(0, 0, 0, 1)"> self.rect.h
</span><span style="color: rgba(0, 128, 128, 1)"> 95</span>
<span style="color: rgba(0, 128, 128, 1)"> 96</span> <span style="color: rgba(0, 0, 0, 1)"> image.blit(frozen_image, (0,0), (0, 0, self.rect.w, frozen_height))
</span><span style="color: rgba(0, 128, 128, 1)"> 97</span> <span style="color: rgba(0, 0, 0, 1)"> image.blit(self.orig_image, (0,frozen_height),
</span><span style="color: rgba(0, 128, 128, 1)"> 98</span> (0, frozen_height, self.rect.w, self.rect.h -<span style="color: rgba(0, 0, 0, 1)"> frozen_height))
</span><span style="color: rgba(0, 128, 128, 1)"> 99</span> <span style="color: rgba(0, 0, 255, 1)">elif</span> self.sun_cost > sun_value: <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">disable status</span>
<span style="color: rgba(0, 128, 128, 1)">100</span> image =<span style="color: rgba(0, 0, 0, 1)"> self.orig_image.copy()
</span><span style="color: rgba(0, 128, 128, 1)">101</span> image.set_alpha(192<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">102</span> <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">103</span> image =<span style="color: rgba(0, 0, 0, 1)"> self.orig_image
</span><span style="color: rgba(0, 128, 128, 1)">104</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> image
</span><span style="color: rgba(0, 128, 128, 1)">105</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">106</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> update(self, sun_value, current_time):
</span><span style="color: rgba(0, 128, 128, 1)">107</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (current_time - self.refresh_timer) >= 250<span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">108</span> self.image =<span style="color: rgba(0, 0, 0, 1)"> self.createShowImage(sun_value, current_time)
</span><span style="color: rgba(0, 128, 128, 1)">109</span> self.refresh_timer =<span style="color: rgba(0, 0, 0, 1)"> current_time
</span><span style="color: rgba(0, 128, 128, 1)">110</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">111</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> draw(self, surface):
</span><span style="color: rgba(0, 128, 128, 1)">112</span> <span style="color: rgba(0, 0, 0, 1)"> surface.blit(self.image, self.rect)
</span><span style="color: rgba(0, 128, 128, 1)">113</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">114</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MenuBar():
</span><span style="color: rgba(0, 128, 128, 1)">115</span> <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self, card_list, sun_value):
</span><span style="color: rgba(0, 128, 128, 1)">116</span> <span style="color: rgba(0, 0, 0, 1)"> self.loadFrame(c.MENUBAR_BACKGROUND)
</span><span style="color: rgba(0, 128, 128, 1)">117</span> self.rect =<span style="color: rgba(0, 0, 0, 1)"> self.image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">118</span> self.rect.x = 10
<span style="color: rgba(0, 128, 128, 1)">119</span> self.rect.y =<span style="color: rgba(0, 0, 0, 1)"> 0
</span><span style="color: rgba(0, 128, 128, 1)">120</span>
<span style="color: rgba(0, 128, 128, 1)">121</span> self.sun_value =<span style="color: rgba(0, 0, 0, 1)"> sun_value
</span><span style="color: rgba(0, 128, 128, 1)">122</span> self.card_offset_x = 32
<span style="color: rgba(0, 128, 128, 1)">123</span> <span style="color: rgba(0, 0, 0, 1)"> self.setupCards(card_list)
</span><span style="color: rgba(0, 128, 128, 1)">124</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">125</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> loadFrame(self, name):
</span><span style="color: rgba(0, 128, 128, 1)">126</span> frame =<span style="color: rgba(0, 0, 0, 1)"> tool.GFX
</span><span style="color: rgba(0, 128, 128, 1)">127</span> rect =<span style="color: rgba(0, 0, 0, 1)"> frame.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">128</span> frame_rect =<span style="color: rgba(0, 0, 0, 1)"> (rect.x, rect.y, rect.w, rect.h)
</span><span style="color: rgba(0, 128, 128, 1)">129</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">130</span> self.image = tool.get_image(tool.GFX, *frame_rect, c.WHITE, 1<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">131</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">132</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> update(self, current_time):
</span><span style="color: rgba(0, 128, 128, 1)">133</span> self.current_time =<span style="color: rgba(0, 0, 0, 1)"> current_time
</span><span style="color: rgba(0, 128, 128, 1)">134</span> <span style="color: rgba(0, 0, 255, 1)">for</span> card <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> self.card_list:
</span><span style="color: rgba(0, 128, 128, 1)">135</span> <span style="color: rgba(0, 0, 0, 1)"> card.update(self.sun_value, self.current_time)
</span><span style="color: rgba(0, 128, 128, 1)">136</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">137</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> createImage(self, x, y, num):
</span><span style="color: rgba(0, 128, 128, 1)">138</span> <span style="color: rgba(0, 0, 255, 1)">if</span> num == 1<span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">139</span> <span style="color: rgba(0, 0, 255, 1)">return</span>
<span style="color: rgba(0, 128, 128, 1)">140</span> img =<span style="color: rgba(0, 0, 0, 1)"> self.image
</span><span style="color: rgba(0, 128, 128, 1)">141</span> rect =<span style="color: rgba(0, 0, 0, 1)"> self.image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">142</span> width =<span style="color: rgba(0, 0, 0, 1)"> rect.w
</span><span style="color: rgba(0, 128, 128, 1)">143</span> height =<span style="color: rgba(0, 0, 0, 1)"> rect.h
</span><span style="color: rgba(0, 128, 128, 1)">144</span> self.image = pg.Surface((width *<span style="color: rgba(0, 0, 0, 1)"> num, height)).convert()
</span><span style="color: rgba(0, 128, 128, 1)">145</span> self.rect =<span style="color: rgba(0, 0, 0, 1)"> self.image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">146</span> self.rect.x =<span style="color: rgba(0, 0, 0, 1)"> x
</span><span style="color: rgba(0, 128, 128, 1)">147</span> self.rect.y =<span style="color: rgba(0, 0, 0, 1)"> y
</span><span style="color: rgba(0, 128, 128, 1)">148</span> <span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> range(num):
</span><span style="color: rgba(0, 128, 128, 1)">149</span> x = i *<span style="color: rgba(0, 0, 0, 1)"> width
</span><span style="color: rgba(0, 128, 128, 1)">150</span> <span style="color: rgba(0, 0, 0, 1)"> self.image.blit(img, (x,0))
</span><span style="color: rgba(0, 128, 128, 1)">151</span> <span style="color: rgba(0, 0, 0, 1)"> self.image.set_colorkey(c.BLACK)
</span><span style="color: rgba(0, 128, 128, 1)">152</span>
<span style="color: rgba(0, 128, 128, 1)">153</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setupCards(self, card_list):
</span><span style="color: rgba(0, 128, 128, 1)">154</span> self.card_list =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">155</span> x =<span style="color: rgba(0, 0, 0, 1)"> self.card_offset_x
</span><span style="color: rgba(0, 128, 128, 1)">156</span> y = 8
<span style="color: rgba(0, 128, 128, 1)">157</span> <span style="color: rgba(0, 0, 255, 1)">for</span> index <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> card_list:
</span><span style="color: rgba(0, 128, 128, 1)">158</span> x += 55
<span style="color: rgba(0, 128, 128, 1)">159</span> <span style="color: rgba(0, 0, 0, 1)"> self.card_list.append(Card(x, y, index))
</span><span style="color: rgba(0, 128, 128, 1)">160</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">161</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> checkCardClick(self, mouse_pos):
</span><span style="color: rgba(0, 128, 128, 1)">162</span> result =<span style="color: rgba(0, 0, 0, 1)"> None
</span><span style="color: rgba(0, 128, 128, 1)">163</span> <span style="color: rgba(0, 0, 255, 1)">for</span> card <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> self.card_list:
</span><span style="color: rgba(0, 128, 128, 1)">164</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> card.checkMouseClick(mouse_pos):
</span><span style="color: rgba(0, 128, 128, 1)">165</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> card.canClick(self.sun_value, self.current_time):
</span><span style="color: rgba(0, 128, 128, 1)">166</span> result =<span style="color: rgba(0, 0, 0, 1)"> (plant_name_list, card.sun_cost)
</span><span style="color: rgba(0, 128, 128, 1)">167</span> <span style="color: rgba(0, 0, 255, 1)">break</span>
<span style="color: rgba(0, 128, 128, 1)">168</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> result
</span><span style="color: rgba(0, 128, 128, 1)">169</span>
<span style="color: rgba(0, 128, 128, 1)">170</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> checkMenuBarClick(self, mouse_pos):
</span><span style="color: rgba(0, 128, 128, 1)">171</span> x, y =<span style="color: rgba(0, 0, 0, 1)"> mouse_pos
</span><span style="color: rgba(0, 128, 128, 1)">172</span> <span style="color: rgba(0, 0, 255, 1)">if</span>(x >= self.rect.x <span style="color: rgba(0, 0, 255, 1)">and</span> x <= self.rect.right <span style="color: rgba(0, 0, 255, 1)">and</span>
<span style="color: rgba(0, 128, 128, 1)">173</span> y >= self.rect.y <span style="color: rgba(0, 0, 255, 1)">and</span> y <=<span style="color: rgba(0, 0, 0, 1)"> self.rect.bottom):
</span><span style="color: rgba(0, 128, 128, 1)">174</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> True
</span><span style="color: rgba(0, 128, 128, 1)">175</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 128, 128, 1)">176</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">177</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> decreaseSunValue(self, value):
</span><span style="color: rgba(0, 128, 128, 1)">178</span> self.sun_value -=<span style="color: rgba(0, 0, 0, 1)"> value
</span><span style="color: rgba(0, 128, 128, 1)">179</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">180</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> increaseSunValue(self, value):
</span><span style="color: rgba(0, 128, 128, 1)">181</span> self.sun_value +=<span style="color: rgba(0, 0, 0, 1)"> value
</span><span style="color: rgba(0, 128, 128, 1)">182</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">183</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setCardFrozenTime(self, plant_name):
</span><span style="color: rgba(0, 128, 128, 1)">184</span> <span style="color: rgba(0, 0, 255, 1)">for</span> card <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> self.card_list:
</span><span style="color: rgba(0, 128, 128, 1)">185</span> <span style="color: rgba(0, 0, 255, 1)">if</span> plant_name_list ==<span style="color: rgba(0, 0, 0, 1)"> plant_name:
</span><span style="color: rgba(0, 128, 128, 1)">186</span> <span style="color: rgba(0, 0, 0, 1)"> card.setFrozenTime(self.current_time)
</span><span style="color: rgba(0, 128, 128, 1)">187</span> <span style="color: rgba(0, 0, 255, 1)">break</span>
<span style="color: rgba(0, 128, 128, 1)">188</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">189</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> drawSunValue(self):
</span><span style="color: rgba(0, 128, 128, 1)">190</span> self.value_image =<span style="color: rgba(0, 0, 0, 1)"> getSunValueImage(self.sun_value)
</span><span style="color: rgba(0, 128, 128, 1)">191</span> self.value_rect =<span style="color: rgba(0, 0, 0, 1)"> self.value_image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">192</span> self.value_rect.x = 21
<span style="color: rgba(0, 128, 128, 1)">193</span> self.value_rect.y = self.rect.bottom - 21
<span style="color: rgba(0, 128, 128, 1)">194</span>
<span style="color: rgba(0, 128, 128, 1)">195</span> <span style="color: rgba(0, 0, 0, 1)"> self.image.blit(self.value_image, self.value_rect)
</span><span style="color: rgba(0, 128, 128, 1)">196</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">197</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> draw(self, surface):
</span><span style="color: rgba(0, 128, 128, 1)">198</span> <span style="color: rgba(0, 0, 0, 1)"> self.drawSunValue()
</span><span style="color: rgba(0, 128, 128, 1)">199</span> <span style="color: rgba(0, 0, 0, 1)"> surface.blit(self.image, self.rect)
</span><span style="color: rgba(0, 128, 128, 1)">200</span> <span style="color: rgba(0, 0, 255, 1)">for</span> card <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> self.card_list:
</span><span style="color: rgba(0, 128, 128, 1)">201</span> <span style="color: rgba(0, 0, 0, 1)"> card.draw(surface)
</span><span style="color: rgba(0, 128, 128, 1)">202</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">203</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Panel():
</span><span style="color: rgba(0, 128, 128, 1)">204</span> <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self, card_list, sun_value):
</span><span style="color: rgba(0, 128, 128, 1)">205</span> <span style="color: rgba(0, 0, 0, 1)"> self.loadImages(sun_value)
</span><span style="color: rgba(0, 128, 128, 1)">206</span> self.selected_cards =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">207</span> self.selected_num =<span style="color: rgba(0, 0, 0, 1)"> 0
</span><span style="color: rgba(0, 128, 128, 1)">208</span> <span style="color: rgba(0, 0, 0, 1)"> self.setupCards(card_list)
</span><span style="color: rgba(0, 128, 128, 1)">209</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">210</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> loadFrame(self, name):
</span><span style="color: rgba(0, 128, 128, 1)">211</span> frame =<span style="color: rgba(0, 0, 0, 1)"> tool.GFX
</span><span style="color: rgba(0, 128, 128, 1)">212</span> rect =<span style="color: rgba(0, 0, 0, 1)"> frame.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">213</span> frame_rect =<span style="color: rgba(0, 0, 0, 1)"> (rect.x, rect.y, rect.w, rect.h)
</span><span style="color: rgba(0, 128, 128, 1)">214</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">215</span> <span style="color: rgba(0, 0, 255, 1)">return</span> tool.get_image(tool.GFX, *frame_rect, c.WHITE, 1<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">216</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">217</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> loadImages(self, sun_value):
</span><span style="color: rgba(0, 128, 128, 1)">218</span> self.menu_image =<span style="color: rgba(0, 0, 0, 1)"> self.loadFrame(c.MENUBAR_BACKGROUND)
</span><span style="color: rgba(0, 128, 128, 1)">219</span> self.menu_rect =<span style="color: rgba(0, 0, 0, 1)"> self.menu_image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">220</span> self.menu_rect.x =<span style="color: rgba(0, 0, 0, 1)"> 0
</span><span style="color: rgba(0, 128, 128, 1)">221</span> self.menu_rect.y =<span style="color: rgba(0, 0, 0, 1)"> 0
</span><span style="color: rgba(0, 128, 128, 1)">222</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">223</span> self.panel_image =<span style="color: rgba(0, 0, 0, 1)"> self.loadFrame(c.PANEL_BACKGROUND)
</span><span style="color: rgba(0, 128, 128, 1)">224</span> self.panel_rect =<span style="color: rgba(0, 0, 0, 1)"> self.panel_image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">225</span> self.panel_rect.x =<span style="color: rgba(0, 0, 0, 1)"> 0
</span><span style="color: rgba(0, 128, 128, 1)">226</span> self.panel_rect.y =<span style="color: rgba(0, 0, 0, 1)"> PANEL_Y_START
</span><span style="color: rgba(0, 128, 128, 1)">227</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">228</span>
<span style="color: rgba(0, 128, 128, 1)">229</span> self.value_image =<span style="color: rgba(0, 0, 0, 1)"> getSunValueImage(sun_value)
</span><span style="color: rgba(0, 128, 128, 1)">230</span> self.value_rect =<span style="color: rgba(0, 0, 0, 1)"> self.value_image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">231</span> self.value_rect.x = 21
<span style="color: rgba(0, 128, 128, 1)">232</span> self.value_rect.y = self.menu_rect.bottom - 21
<span style="color: rgba(0, 128, 128, 1)">233</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">234</span> self.button_image =<span style="color: rgba(0, 0, 0, 1)">self.loadFrame(c.START_BUTTON)
</span><span style="color: rgba(0, 128, 128, 1)">235</span> self.button_rect =<span style="color: rgba(0, 0, 0, 1)"> self.button_image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">236</span> self.button_rect.x = 155
<span style="color: rgba(0, 128, 128, 1)">237</span> self.button_rect.y = 547
<span style="color: rgba(0, 128, 128, 1)">238</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">239</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setupCards(self, card_list):
</span><span style="color: rgba(0, 128, 128, 1)">240</span> self.card_list =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">241</span> x = PANEL_X_START -<span style="color: rgba(0, 0, 0, 1)"> PANEL_X_INTERNAL
</span><span style="color: rgba(0, 128, 128, 1)">242</span> y = PANEL_Y_START + 43 -<span style="color: rgba(0, 0, 0, 1)"> PANEL_Y_INTERNAL
</span><span style="color: rgba(0, 128, 128, 1)">243</span> <span style="color: rgba(0, 0, 255, 1)">for</span> i, index <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> enumerate(card_list):
</span><span style="color: rgba(0, 128, 128, 1)">244</span> <span style="color: rgba(0, 0, 255, 1)">if</span> i % 8 ==<span style="color: rgba(0, 0, 0, 1)"> 0:
</span><span style="color: rgba(0, 128, 128, 1)">245</span> x = PANEL_X_START -<span style="color: rgba(0, 0, 0, 1)"> PANEL_X_INTERNAL
</span><span style="color: rgba(0, 128, 128, 1)">246</span> y +=<span style="color: rgba(0, 0, 0, 1)"> PANEL_Y_INTERNAL
</span><span style="color: rgba(0, 128, 128, 1)">247</span> x +=<span style="color: rgba(0, 0, 0, 1)"> PANEL_X_INTERNAL
</span><span style="color: rgba(0, 128, 128, 1)">248</span> self.card_list.append(Card(x, y, index, 0.75<span style="color: rgba(0, 0, 0, 1)">))
</span><span style="color: rgba(0, 128, 128, 1)">249</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">250</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> checkCardClick(self, mouse_pos):
</span><span style="color: rgba(0, 128, 128, 1)">251</span> delete_card =<span style="color: rgba(0, 0, 0, 1)"> None
</span><span style="color: rgba(0, 128, 128, 1)">252</span> <span style="color: rgba(0, 0, 255, 1)">for</span> card <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> self.selected_cards:
</span><span style="color: rgba(0, 128, 128, 1)">253</span> <span style="color: rgba(0, 0, 255, 1)">if</span> delete_card: <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> when delete a card, move right cards to left</span>
<span style="color: rgba(0, 128, 128, 1)">254</span> card.rect.x -= 55
<span style="color: rgba(0, 128, 128, 1)">255</span> <span style="color: rgba(0, 0, 255, 1)">elif</span><span style="color: rgba(0, 0, 0, 1)"> card.checkMouseClick(mouse_pos):
</span><span style="color: rgba(0, 128, 128, 1)">256</span> <span style="color: rgba(0, 0, 0, 1)"> self.deleteCard(card.name_index)
</span><span style="color: rgba(0, 128, 128, 1)">257</span> delete_card =<span style="color: rgba(0, 0, 0, 1)"> card
</span><span style="color: rgba(0, 128, 128, 1)">258</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">259</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> delete_card:
</span><span style="color: rgba(0, 128, 128, 1)">260</span> <span style="color: rgba(0, 0, 0, 1)"> self.selected_cards.remove(delete_card)
</span><span style="color: rgba(0, 128, 128, 1)">261</span> self.selected_num -= 1
<span style="color: rgba(0, 128, 128, 1)">262</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">263</span> <span style="color: rgba(0, 0, 255, 1)">if</span> self.selected_num ==<span style="color: rgba(0, 0, 0, 1)"> CARD_LIST_NUM:
</span><span style="color: rgba(0, 128, 128, 1)">264</span> <span style="color: rgba(0, 0, 255, 1)">return</span>
<span style="color: rgba(0, 128, 128, 1)">265</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">266</span> <span style="color: rgba(0, 0, 255, 1)">for</span> card <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> self.card_list:
</span><span style="color: rgba(0, 128, 128, 1)">267</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> card.checkMouseClick(mouse_pos):
</span><span style="color: rgba(0, 128, 128, 1)">268</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> card.canSelect():
</span><span style="color: rgba(0, 128, 128, 1)">269</span> <span style="color: rgba(0, 0, 0, 1)"> self.addCard(card)
</span><span style="color: rgba(0, 128, 128, 1)">270</span> <span style="color: rgba(0, 0, 255, 1)">break</span>
<span style="color: rgba(0, 128, 128, 1)">271</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">272</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> addCard(self, card):
</span><span style="color: rgba(0, 128, 128, 1)">273</span> <span style="color: rgba(0, 0, 0, 1)"> card.setSelect(False)
</span><span style="color: rgba(0, 128, 128, 1)">274</span> y = 8
<span style="color: rgba(0, 128, 128, 1)">275</span> x = 78 + self.selected_num * 55
<span style="color: rgba(0, 128, 128, 1)">276</span> <span style="color: rgba(0, 0, 0, 1)"> self.selected_cards.append(Card(x, y, card.name_index))
</span><span style="color: rgba(0, 128, 128, 1)">277</span> self.selected_num += 1
<span style="color: rgba(0, 128, 128, 1)">278</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">279</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> deleteCard(self, index):
</span><span style="color: rgba(0, 128, 128, 1)">280</span> <span style="color: rgba(0, 0, 0, 1)"> self.card_list.setSelect(True)
</span><span style="color: rgba(0, 128, 128, 1)">281</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">282</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> checkStartButtonClick(self, mouse_pos):
</span><span style="color: rgba(0, 128, 128, 1)">283</span> <span style="color: rgba(0, 0, 255, 1)">if</span> self.selected_num <<span style="color: rgba(0, 0, 0, 1)"> CARD_LIST_NUM:
</span><span style="color: rgba(0, 128, 128, 1)">284</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 128, 128, 1)">285</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">286</span> x, y =<span style="color: rgba(0, 0, 0, 1)"> mouse_pos
</span><span style="color: rgba(0, 128, 128, 1)">287</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (x >= self.button_rect.x <span style="color: rgba(0, 0, 255, 1)">and</span> x <= self.button_rect.right <span style="color: rgba(0, 0, 255, 1)">and</span>
<span style="color: rgba(0, 128, 128, 1)">288</span> y >= self.button_rect.y <span style="color: rgba(0, 0, 255, 1)">and</span> y <=<span style="color: rgba(0, 0, 0, 1)"> self.button_rect.bottom):
</span><span style="color: rgba(0, 128, 128, 1)">289</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> True
</span><span style="color: rgba(0, 128, 128, 1)">290</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 128, 128, 1)">291</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">292</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> getSelectedCards(self):
</span><span style="color: rgba(0, 128, 128, 1)">293</span> card_index_list =<span style="color: rgba(0, 0, 0, 1)"> []
</span><span style="color: rgba(0, 128, 128, 1)">294</span> <span style="color: rgba(0, 0, 255, 1)">for</span> card <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> self.selected_cards:
</span><span style="color: rgba(0, 128, 128, 1)">295</span> <span style="color: rgba(0, 0, 0, 1)"> card_index_list.append(card.name_index)
</span><span style="color: rgba(0, 128, 128, 1)">296</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> card_index_list
</span><span style="color: rgba(0, 128, 128, 1)">297</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">298</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> draw(self, surface):
</span><span style="color: rgba(0, 128, 128, 1)">299</span> <span style="color: rgba(0, 0, 0, 1)"> self.menu_image.blit(self.value_image, self.value_rect)
</span><span style="color: rgba(0, 128, 128, 1)">300</span> <span style="color: rgba(0, 0, 0, 1)"> surface.blit(self.menu_image, self.menu_rect)
</span><span style="color: rgba(0, 128, 128, 1)">301</span> <span style="color: rgba(0, 0, 0, 1)"> surface.blit(self.panel_image, self.panel_rect)
</span><span style="color: rgba(0, 128, 128, 1)">302</span> <span style="color: rgba(0, 0, 255, 1)">for</span> card <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> self.card_list:
</span><span style="color: rgba(0, 128, 128, 1)">303</span> <span style="color: rgba(0, 0, 0, 1)"> card.draw(surface)
</span><span style="color: rgba(0, 128, 128, 1)">304</span> <span style="color: rgba(0, 0, 255, 1)">for</span> card <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> self.selected_cards:
</span><span style="color: rgba(0, 128, 128, 1)">305</span> <span style="color: rgba(0, 0, 0, 1)"> card.draw(surface)
</span><span style="color: rgba(0, 128, 128, 1)">306</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">307</span> <span style="color: rgba(0, 0, 255, 1)">if</span> self.selected_num ==<span style="color: rgba(0, 0, 0, 1)"> CARD_LIST_NUM:
</span><span style="color: rgba(0, 128, 128, 1)">308</span> surface.blit(self.button_image, self.button_rect)</pre>
</div>
<p> </p>
<h2 class="md-end-block md-heading"><span class="md-plain">鼠标图片切换</span></h2>
<p class="md-end-block md-p"><span class="md-plain">setupMouseImage 函数实现鼠标图片切换为选中的植物:</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">self.mouse_image :根据 plant_name 获取选中的植物图片;</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">self.mouse_rect:选中植物图片的位置,在drawMouseShow函数中,需要将植物图片的位置设置成当前鼠标的位置;</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">pg.mouse.set_visible(False):隐藏默认的鼠标显示,这样效果就是鼠标图片切换为选中的植物了。</span></p>
</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setupMouseImage(self, plant_name, plant_cost):
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> frame_list =<span style="color: rgba(0, 0, 0, 1)"> tool.GFX
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 255, 1)">if</span> plant_name <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> tool.PLANT_RECT:
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> data =<span style="color: rgba(0, 0, 0, 1)"> tool.PLANT_RECT
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> x, y, width, height = data[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">x</span><span style="color: rgba(128, 0, 0, 1)">'</span>], data[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">y</span><span style="color: rgba(128, 0, 0, 1)">'</span>], data[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">width</span><span style="color: rgba(128, 0, 0, 1)">'</span>], data[<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">height</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> x, y =<span style="color: rgba(0, 0, 0, 1)"> 0, 0
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> rect =<span style="color: rgba(0, 0, 0, 1)"> frame_list.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> width, height =<span style="color: rgba(0, 0, 0, 1)"> rect.w, rect.h
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 255, 1)">if</span> plant_name == c.POTATOMINE <span style="color: rgba(0, 0, 255, 1)">or</span> plant_name ==<span style="color: rgba(0, 0, 0, 1)"> c.SQUASH:
</span><span style="color: rgba(0, 128, 128, 1)">13</span> color =<span style="color: rgba(0, 0, 0, 1)"> c.WHITE
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">15</span> color =<span style="color: rgba(0, 0, 0, 1)"> c.BLACK
</span><span style="color: rgba(0, 128, 128, 1)">16</span> self.mouse_image = tool.get_image(frame_list, x, y, width, height, color, 1<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">17</span> self.mouse_rect =<span style="color: rgba(0, 0, 0, 1)"> self.mouse_image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 0, 1)"> pg.mouse.set_visible(False)
</span><span style="color: rgba(0, 128, 128, 1)">19</span> self.drag_plant =<span style="color: rgba(0, 0, 0, 1)"> True
</span><span style="color: rgba(0, 128, 128, 1)">20</span> self.plant_name =<span style="color: rgba(0, 0, 0, 1)"> plant_name
</span><span style="color: rgba(0, 128, 128, 1)">21</span> self.plant_cost =<span style="color: rgba(0, 0, 0, 1)"> plant_cost
</span><span style="color: rgba(0, 128, 128, 1)">22</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">23</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> drawMouseShow(self, surface):
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> self.hint_plant:
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 0, 1)"> surface.blit(self.hint_image, self.hint_rect)
</span><span style="color: rgba(0, 128, 128, 1)">27</span> x, y =<span style="color: rgba(0, 0, 0, 1)"> pg.mouse.get_pos()
</span><span style="color: rgba(0, 128, 128, 1)">28</span> self.mouse_rect.centerx =<span style="color: rgba(0, 0, 0, 1)"> x
</span><span style="color: rgba(0, 128, 128, 1)">29</span> self.mouse_rect.centery =<span style="color: rgba(0, 0, 0, 1)"> y
</span><span style="color: rgba(0, 128, 128, 1)">30</span> surface.blit(self.mouse_image, self.mouse_rect)</pre>
</div>
<p> </p>
<h2 class="md-end-block md-heading"><span class="md-plain">提示种在哪个方格中</span></h2>
<p class="md-end-block md-p"><span class="md-plain">先看下map类,代码在source\component\map.py 中:</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">self.map:二维list,用来保存每个方格的状态。每个entry初始化为 0, 表示可以种植物,值为1时表示这个方格已经种了植物。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">getMapIndex 函数:传入参数是游戏中的坐标位置(比如当前鼠标的位置),返回该位置在地图的哪个方格中。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">getMapGridPos 函数:传入一个方格的index,返回在该方格中种植物的坐标位置。</span></p>
</li>
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">showPlant 函数:根据传入的坐标位置,判断该位置所在的方格是否能种植物,如果能种,就返回返回在该方格中种植物的坐标位置。</span></p>
</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> MAP_EMPTY =<span style="color: rgba(0, 0, 0, 1)"> 0
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> MAP_EXIST = 1
<span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> Map():
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> <span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self, width, height):
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> self.width =<span style="color: rgba(0, 0, 0, 1)"> width
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> self.height =<span style="color: rgba(0, 0, 0, 1)"> height
</span><span style="color: rgba(0, 128, 128, 1)"> 9</span> self.map = [ <span style="color: rgba(0, 0, 255, 1)">for</span> y <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> range(self.height)]
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">11</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">12</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> isValid(self, map_x, map_y):
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (map_x < 0 <span style="color: rgba(0, 0, 255, 1)">or</span> map_x >= self.width <span style="color: rgba(0, 0, 255, 1)">or</span>
<span style="color: rgba(0, 128, 128, 1)">14</span> map_y < 0 <span style="color: rgba(0, 0, 255, 1)">or</span> map_y >=<span style="color: rgba(0, 0, 0, 1)"> self.height):
</span><span style="color: rgba(0, 128, 128, 1)">15</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 128, 128, 1)">16</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> True
</span><span style="color: rgba(0, 128, 128, 1)">17</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">18</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> isMovable(self, map_x, map_y):
</span><span style="color: rgba(0, 128, 128, 1)">19</span> <span style="color: rgba(0, 0, 255, 1)">return</span> (self.map ==<span style="color: rgba(0, 0, 0, 1)"> c.MAP_EMPTY)
</span><span style="color: rgba(0, 128, 128, 1)">20</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> getMapIndex(self, x, y):
</span><span style="color: rgba(0, 128, 128, 1)">22</span> x -=<span style="color: rgba(0, 0, 0, 1)"> c.MAP_OFFSET_X
</span><span style="color: rgba(0, 128, 128, 1)">23</span> y -=<span style="color: rgba(0, 0, 0, 1)"> c.MAP_OFFSET_Y
</span><span style="color: rgba(0, 128, 128, 1)">24</span> <span style="color: rgba(0, 0, 255, 1)">return</span> (x // c.GRID_X_SIZE, y //<span style="color: rgba(0, 0, 0, 1)"> c.GRID_Y_SIZE)
</span><span style="color: rgba(0, 128, 128, 1)">25</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">26</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> getMapGridPos(self, map_x, map_y):
</span><span style="color: rgba(0, 128, 128, 1)">27</span> <span style="color: rgba(0, 0, 255, 1)">return</span> (map_x * c.GRID_X_SIZE + c.GRID_X_SIZE//2 +<span style="color: rgba(0, 0, 0, 1)"> c.MAP_OFFSET_X,
</span><span style="color: rgba(0, 128, 128, 1)">28</span> map_y * c.GRID_Y_SIZE + c.GRID_Y_SIZE//5 * 3 +<span style="color: rgba(0, 0, 0, 1)"> c.MAP_OFFSET_Y)
</span><span style="color: rgba(0, 128, 128, 1)">29</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">30</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setMapGridType(self, map_x, map_y, type):
</span><span style="color: rgba(0, 128, 128, 1)">31</span> self.map =<span style="color: rgba(0, 0, 0, 1)"> type
</span><span style="color: rgba(0, 128, 128, 1)">32</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">33</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">34</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> getRandomMapIndex(self):
</span><span style="color: rgba(0, 128, 128, 1)">35</span> map_x = random.randint(0, self.width-1<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">36</span> map_y = random.randint(0, self.height-1<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">37</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> (map_x, map_y)
</span><span style="color: rgba(0, 128, 128, 1)">38</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">39</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)">40</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> showPlant(self, x, y):
</span><span style="color: rgba(0, 128, 128, 1)">41</span> pos =<span style="color: rgba(0, 0, 0, 1)"> None
</span><span style="color: rgba(0, 128, 128, 1)">42</span> map_x, map_y =<span style="color: rgba(0, 0, 0, 1)"> self.getMapIndex(x, y)
</span><span style="color: rgba(0, 128, 128, 1)">43</span> <span style="color: rgba(0, 0, 255, 1)">if</span> self.isValid(map_x, map_y) <span style="color: rgba(0, 0, 255, 1)">and</span><span style="color: rgba(0, 0, 0, 1)"> self.isMovable(map_x, map_y):
</span><span style="color: rgba(0, 128, 128, 1)">44</span> pos =<span style="color: rgba(0, 0, 0, 1)"> self.getMapGridPos(map_x, map_y)
</span><span style="color: rgba(0, 128, 128, 1)">45</span> <span style="color: rgba(0, 0, 255, 1)">return</span> pos</pre>
</div>
<p> </p>
<p class="md-end-block md-p"><span class="md-plain">代码在source\state\level.py中:</span></p>
<ul class="ul-list" data-mark="-">
<li class="md-list-item">
<p class="md-end-block md-p"><span class="md-plain">canSeedPlant 函数:判断当前鼠标位置能否种植物;</span></p>
</li>
<li class="md-list-item md-focus-container">
<p class="md-end-block md-p md-focus"><span class="md-plain">setupHintImage 函数:如果当前鼠标位置能种植物,且有选择了一个植物卡片,则设置self.hint_image 显示当前会在哪一个方格中种植物,self.hint_rect 是植物种的坐标位置。</span></p>
</li>
</ul>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)"> 1</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> canSeedPlant(self):
</span><span style="color: rgba(0, 128, 128, 1)"> 2</span> x, y =<span style="color: rgba(0, 0, 0, 1)"> pg.mouse.get_pos()
</span><span style="color: rgba(0, 128, 128, 1)"> 3</span> <span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> self.map.showPlant(x, y)
</span><span style="color: rgba(0, 128, 128, 1)"> 4</span> <span style="color: rgba(0, 0, 0, 1)">
</span><span style="color: rgba(0, 128, 128, 1)"> 5</span> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> setupHintImage(self):
</span><span style="color: rgba(0, 128, 128, 1)"> 6</span> pos =<span style="color: rgba(0, 0, 0, 1)"> self.canSeedPlant()
</span><span style="color: rgba(0, 128, 128, 1)"> 7</span> <span style="color: rgba(0, 0, 255, 1)">if</span> pos <span style="color: rgba(0, 0, 255, 1)">and</span><span style="color: rgba(0, 0, 0, 1)"> self.mouse_image:
</span><span style="color: rgba(0, 128, 128, 1)"> 8</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (self.hint_image <span style="color: rgba(0, 0, 255, 1)">and</span> pos == self.hint_rect.x <span style="color: rgba(0, 0, 255, 1)">and</span>
<span style="color: rgba(0, 128, 128, 1)"> 9</span> pos ==<span style="color: rgba(0, 0, 0, 1)"> self.hint_rect.y):
</span><span style="color: rgba(0, 128, 128, 1)">10</span> <span style="color: rgba(0, 0, 255, 1)">return</span>
<span style="color: rgba(0, 128, 128, 1)">11</span> width, height =<span style="color: rgba(0, 0, 0, 1)"> self.mouse_rect.w, self.mouse_rect.h
</span><span style="color: rgba(0, 128, 128, 1)">12</span> image =<span style="color: rgba(0, 0, 0, 1)"> pg.Surface()
</span><span style="color: rgba(0, 128, 128, 1)">13</span> <span style="color: rgba(0, 0, 0, 1)"> image.blit(self.mouse_image, (0, 0), (0, 0, width, height))
</span><span style="color: rgba(0, 128, 128, 1)">14</span> <span style="color: rgba(0, 0, 0, 1)"> image.set_colorkey(c.BLACK)
</span><span style="color: rgba(0, 128, 128, 1)">15</span> image.set_alpha(128<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)">16</span> self.hint_image =<span style="color: rgba(0, 0, 0, 1)"> image
</span><span style="color: rgba(0, 128, 128, 1)">17</span> self.hint_rect =<span style="color: rgba(0, 0, 0, 1)"> image.get_rect()
</span><span style="color: rgba(0, 128, 128, 1)">18</span> self.hint_rect.centerx =<span style="color: rgba(0, 0, 0, 1)"> pos
</span><span style="color: rgba(0, 128, 128, 1)">19</span> self.hint_rect.bottom = pos
</span><span style="color: rgba(0, 128, 128, 1)">20</span> self.hint_plant =<span style="color: rgba(0, 0, 0, 1)"> True
</span><span style="color: rgba(0, 128, 128, 1)">21</span> <span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 128, 128, 1)">22</span> self.hint_plant = False</pre>
</div>
<p> </p><br><br>
来源:https://www.cnblogs.com/Qqun821460695/p/12001851.html
頁:
[1]