鱼C论坛

 找回密码
 立即注册
查看: 11226|回复: 100

[技术交流] 有宫崎骏相伴的每个夏天

[复制链接]
发表于 2013-9-4 19:12:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Seandor 于 2014-4-14 16:17 编辑

最近一口气几乎看完了宫爷爷的所有作品。他的作品总能让人心生温暖。

一年前在Coursera上学习python课程的时候写的一个memory的小游戏。属于记忆类的小游戏。比较无聊。

原来的memory是所有的纸牌都排成一列的,通过点击来翻牌,如果最近的两次翻的牌都一样那么就成功了,牌会保持翻开的状态。

如下图所示:
111048_BfO6_590878.jpg

现做出如下改动:
  • 将牌面放在一个二维的平面上。
  • 将原来的牌的正面数字以及牌的背面均用图片代替。

  1. # memory-Hayao edition
  2. # By Seandor
  3. import pygame, sys, random
  4. from pygame.locals import *

  5. FPS = 30 # frames per second setting
  6. WINDOWWIDTH = 800
  7. WINDOWHEIGHT = 600
  8. CARDWIDTH = 100
  9. CARDHEIGHT = 87
  10. CARDNUM = 36

  11. # colors   R    G    B
  12. BLACK = (  0,   0,   0)
  13. WHITE = (255, 255, 255)
  14. RED   = (255,   0,   0)
  15. GREEN = (  0, 255,   0)
  16. BLUE  = (  0,   0, 255)

  17. # loading image source
  18. MASTERPIECE_SURF = pygame.image.load('masterpiece.png')
  19. CARDBACK_SURF = pygame.image.load('back.png')
  20. BACKGROUND_SURF = pygame.image.load('totoro.png')

  21. class GameState():
  22.     def __init__(self, exposed, state, card_list, moves):
  23.         self.exposed = exposed
  24.         self.state = state
  25.         self.card_list = card_list
  26.         self.moves = moves

  27. def createDeck(source):
  28.     ''' Return a list of Surface Object.
  29.        Use the image source to create a deck.
  30.     '''
  31.     deck = []
  32.     for i in range(CARDNUM // 2):
  33.         card = source.subsurface((CARDWIDTH * i, 0, CARDWIDTH, CARDHEIGHT))
  34.         deck.extend([card] * 2)
  35.     return deck

  36. def main():
  37.     global FPSCLOCK, DISPLAYSURF, BASICFONT, DECK
  38.     pygame.init()
  39.     FPSCLOCK = pygame.time.Clock()
  40.     DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
  41.     BASICFONT = pygame.font.Font('freesansbold.ttf', 18)
  42.     pygame.display.set_caption('Memory-Hayao edition')

  43.     DECK = createDeck(MASTERPIECE_SURF)
  44.     random.shuffle(DECK)
  45.     exposed = [False] * CARDNUM
  46.     state = 0
  47.     card_list = []
  48.     moves = 0
  49.     gameState = GameState(exposed, state, card_list, moves)
  50.    
  51.     showStartScreen()

  52.     # add background music
  53. ##    pygame.mixer.music.load('totoro.mp3')
  54. ##    pygame.mixer.music.play(-1, 0.0)
  55.     # draw background
  56.     DISPLAYSURF.blit(BACKGROUND_SURF, (0, 0))
  57.    
  58.     while True:
  59.         gameStart(gameState)
  60.         gameOver()

  61. def showStartScreen():
  62.     pass

  63. def gameStart(gameState):
  64.     mouseClicked = False
  65.     for event in pygame.event.get():
  66.         if event.type == QUIT:
  67.             pygame.quit()
  68.             sys.exit()
  69.         elif event.type == MOUSEMOTION:
  70.             mousepos = event.pos
  71.         elif event.type == MOUSEBUTTONUP:
  72.             mousepos = event.pos
  73.             mouseClicked = True
  74.     if mouseClicked:
  75.         onClick(gameState, mousepos)

  76.     drawCards(gameState)
  77.     pygame.display.update()
  78.     FPSCLOCK.tick(FPS)

  79. def onClick(gameState, mousepos):
  80.     if mousepos[0] < 150 or mousepos[0] > 750 or mousepos[1] < 39 or mousepos[1] > 561:
  81.         return
  82.     card_checked = (int(mousepos[0] - 150) // CARDWIDTH) + (int(mousepos[1] - 39) // CARDHEIGHT) * 6
  83.     if gameState.exposed[card_checked] == True:
  84.         return
  85.     gameState.moves += 1
  86.     gameState.exposed[card_checked] = True
  87.     if gameState.state == 0:
  88.         gameState.card_list.append(card_checked)
  89.         gameState.state = 1
  90.     elif gameState.state == 1:
  91.         gameState.card_list.append(card_checked)
  92.         gameState.state = 2
  93.     else:
  94.         card1, card2 = gameState.card_list.pop(), gameState.card_list.pop()
  95.         if DECK[card1] != DECK[card2]:
  96.             gameState.exposed[card1], gameState.exposed[card2] = False, False
  97.         gameState.card_list.append(card_checked)
  98.         gameState.state = 1

  99. def drawCards(gameState):
  100.     startDrawX = 150
  101.     startDrawY = 39
  102.     # draw a 6 * 6 board
  103.     for i in range(6):
  104.         for j in range(6):
  105.             DISPLAYSURF.blit(DECK[i * 6 + j], (startDrawX + CARDWIDTH * j, startDrawY + CARDHEIGHT *i))
  106.             if not gameState.exposed[i * 6 + j]:
  107.                 DISPLAYSURF.blit(CARDBACK_SURF, (startDrawX + CARDWIDTH * j, startDrawY + CARDHEIGHT *i))

  108. def gameOver():
  109.     pass

  110. if __name__ == '__main__':
  111.     main()
复制代码

可以看到里面的一些函数还是空的。因为没有太多时间和精力去完善它,尽管是很小的东西,但是要做的精致还是很困难的。
下面是游戏运行的截图:

124618_JjGj_590878.jpg

当所有牌都是正面的时候就gameover了。

体会感悟:
虽然做的东西很简单,但全都是自己一点一点做的,每张图片,每个图片的处理,每行代码都认真的考虑过,修改过,所以完成的时候还是挺开心的。功能方面还是有很多可以添加和改进的,可以很容易想到的就有,对于点击次数的计数,还可以添加关卡设置不同难度,玩家排名数据统计等等。或许有闲暇时间会来再次改进。

                                                                                                                                                                    ---2014/4/14修改







点评

宫崎骏全部作品:给喜爱的人。 http://www.yyets.com/resource/27807  发表于 2013-9-6 23:35

评分

参与人数 3荣誉 +30 鱼币 +35 贡献 +20 收起 理由
comeheres + 5 + 5 宫崎峻,永远的大师
福禄娃娃 + 10 + 10 + 5 楼主很花心思!
小甲鱼 + 20 + 20 + 10 赞一个,太棒了!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-9-4 19:46:11 | 显示全部楼层
看看                     
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-4 20:09:53 | 显示全部楼层
:big..............
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-4 20:37:21 | 显示全部楼层
看看是什么好东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-4 21:02:53 | 显示全部楼层
谢谢楼主!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-4 22:42:50 | 显示全部楼层
python做的吗?来欣赏下:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-4 22:45:42 | 显示全部楼层
只看过喜欢天空之城,印象很深,动画风格简洁、干净。简单的故事往往蕴含着一个深意,给人一种心灵宁静的感觉。其他的暂时还没看。
附一个楼主的pygame下载地址http://www.pygame.org/download.shtml
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-4 23:14:29 | 显示全部楼层
顶楼主啦..希望楼主多发精品好帖啦.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 00:04:04 | 显示全部楼层
真不错,唯美!千与千寻我前几天才看,嘻嘻~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 00:12:36 From FishC Mobile | 显示全部楼层
手机先骂  回头用电脑看               
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 00:23:39 | 显示全部楼层
{:1_1:}......................
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 01:28:51 | 显示全部楼层
有宫崎骏相伴的每个夏天
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 01:35:15 | 显示全部楼层
看看大神作品~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 01:44:59 | 显示全部楼层
来支持一下。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 02:19:27 | 显示全部楼层
看看是什么好东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 04:09:11 | 显示全部楼层
宫崎骏不了解的说~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 06:52:32 | 显示全部楼层
{:1_1:}哦哦哦哦哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 07:05:07 | 显示全部楼层
围观围观。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 07:39:40 | 显示全部楼层
好像很牛逼的样子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-9-5 07:57:09 | 显示全部楼层
看看。 。 。 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-27 19:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表