Pygame之2048.

Slides:



Advertisements
Similar presentations
移动端网页开发 分享:杨顺心 WEB 前端开发工程师 2014 年. 目录 HTML5 现状 移动端 CSS3 移动端 javascript 调式移动端.
Advertisements

第 1 章第 1 章 新生命的誕生 1-3 有性生殖. 阿德的眼睛長得像爸爸、臉型長得像媽媽, 而阿德的妹妹嘴型長得像爸爸、鼻子長得 像媽媽。請問:為什麼會這樣? Warm Up 參考解答 爸爸的睪丸及媽媽的卵巢分別藉由減 數分裂產生含半數染色體(遺傳物質)的 精子及卵子,所以經受精作用誕生的阿德.
While 迴圈 - 不知重複執行次數
Web 开发基础 第二章 表格与页面布局. 回顾 Internet 和 万维网 网页的工作原理 网页的基本结构 标记及其属性 段落标记,图片标记,超级链接标记 相对路径,绝对路径,物理路径.
牛熊證簡介.
华东师大版《初中数学》各册教材 修 订 说 明 与 解 读
广州宜家选址分析 0连锁 李若谷 陈玉风 黄小飞 蓝柔盈.
Duke University Professor Susan H. Rodger Gaetjens Lezin July 2008
第一章EXCEL高级应用 1.3 数据分析和决策.
專題報告 宇宙雙人射擊遊戲.
高等医药院校药学类第三轮规划教材——大学计算机基础
LOGO 海龜樂園 編寫程式入門 第一節 圖龜編程 中二級電腦科.
98學年度 高職優質化輔助方案專業諮詢 國立瑞芳高工優質化計畫簡報 計畫主持人:林清南 校長 報告人:國立瑞芳高工 詹秉鈞秘書
学生教育办介绍 2015年9月.
鄭士康 國立台灣大學 電機工程學系/電信工程研究所/ 資訊網路與多媒體研究所
现代农业创业指导 广西省兴安县农广校.
「大家來畫童話故事郵票」 徵圖活動 比賽結果
迴圈 迴圈基本觀念 while迴圈 do 迴圈 for迴圈 巢狀迴圈 迴圈設計注意事項 其他控制指令 迴圈與選擇的組合.
MUYAOLIN Finance Class
Pygame 講者:張浩軒.
第八章 了解法律制度 自觉遵守法律 我国宪法规定的基本制度 第一节 我国的实体法律制度 第二节 我国的程序法律制度 第三节.
计算机与程序.
第4章 循环结构 程序设计2 本章主讲 赵家刚 计算机编程导论.
第五章 电视手法与分镜头稿本 第一单元:电视摄像造型基础.
科技活动与学科融合 四师教研室---熊正超 2016年.
102年紫錐花春暉反反毒宣導 高雄應用科技大學 黃淑玲教官.
上課囉 職場甘苦談 小資男孩向錢衝 育碁數位科技 呂宗益/副理.
市级个人课题交流材料 《旋转》问题情境引入的效果对比 高淳县第一中学 孔小军.
项目:贪吃蛇游戏设计 工作任务三:块类(Block)设计 工作任务四:蛇类(Snake)设计
第 9 章 函數的應用 著作權所有 © 旗標出版股份有限公司.
第一课 计算机基础知识.
 人体的营养.
三角形的邊角關係 大綱:三角形邊的不等關係 三角形邊角關係 樞紐定理 背景知識:不等式 顧震宇 台灣數位學習科技股份有限公司.
Shell Script 程式設計.
If … else 選擇結構 P27.
JAVA程序设计 第5章 深入理解JAVA语言----补充.
程式撰寫流程.
程式語言Visual Basic 重複結構 黃瀧輝 老師 Long Hwai,Huang.
Snake Battle 指導教授: 曾學文 組員: 鄭涵德 趙一驎
算法设计与分析.
Python Final Project 組員:楊承叡、謝谷松.
攝影機運動 Camera movements .
主題: 英語挑戰營 學校: 市立長億高中 設計者: 陳依函
本章中將會更詳細地考慮有關重複的概念,並且會 介紹for和do…while等兩種用來控制重複的敘述 式。 也將會介紹switch多重選擇敘述式。 我們會討論直接和迅速離開某種控制敘述式的 break敘述式,以及用來跳過重複敘述式本體剩餘 部份的continue敘述式。 本章會討論用來組合控制條件的邏輯運算子,最後.
语言教学实践作业 姓名: 学号: (学生填写)
計數式重複敘述 for 迴圈 P
現代教育研究社 UP 樣張 12+ STEM 專題課程 低頭一族.
Page Down 跳頁 高等眾生不一定都住在天堂, 當你內心有愛、很單純、 有同情心,內心很平靜時, 你就是高等眾生了。 由 鄭福平.
綜合活動領域 常逛網站分享 復興國中.
電腦遊戲設計-第十組 指導老師:江清水 資三B 謝孟穎 資三B 陳沛蓁 資三B 謝家蓉
注意:教程中给出的所有示例代码请勿直接拷贝使用!会引起不必要的错误!
Python Turtle 模組.
程式結構&語法.
電腦遊戲設計期末報告 林鴻文 陳韋瑄 徐久泰.
4 條件選擇 4.1 程式基本結構 循序式結構 選擇式結構 重複式結構 4-3
Lucene 算法介绍 IR-Lab 胡晓光.
本节内容 Lua基本语法.
生命教育 媒材應用分享 電影 天外奇蹟(UP) 華盛頓高中 巫孟容.
▲重合的概念 ▲對應頂點、對應邊、對應角 ▲全等的記法 ▲全等性質 ▲三角形全等性質
教學目標:基本認識Dash & Dot編程.
2011/2013年度 六年級家長座談會 中學學位分配-升中選校
神秘方塊.
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
主讲人: 吕敏 { } Spring 2016,USTC 算法基础 主讲人: 吕敏 { } Spring 2016,USTC.
Creating Animated Apps: Canvas與ImageSprite 靜宜大學資管系 楊子青
判斷(選擇性敘述) if if else else if 條件運算子.
小組製作人介紹 2 年 14 班 21 號 高嘉駿 2 年 14 班 20 號 林宏恩 2 年 14 班 14 號 林立仁.
第二章 Java基本语法 讲师:复凡.
第八章 大眾文化對消費者行為的影響 消費者心理學 徐達光著.
Presentation transcript:

Pygame之2048

一、方块对象 class Block(): def __init__(self): #随机数值 self.number = random.choice([2,2,2,4]) #根据数值加载对应的图片 self.image = pygame.image.load("Block_%d.png" % self.number) def changeNumber(self, number): #改变数字的同时改变图片 self.number = number self.image = pygame.image.load("Block_%d.png" % number)

二、方格盘 theBoard = [ [0,0,0,0] ] 用x表示横坐标,y表示纵坐标 theBoard[y][x]来表示一个格 子

二、方格盘 生成空方格盘函数: def GenerateNewBoard(): newBoard = [] #将棋盘初始化为元素都为0的4x4的二维列 表 for i in range(4): newBoard.append([0, 0, 0, 0]) return newBoard theBoard = GenerateNewBoard()

三、移动棋盘 def SildeBoard(board, direction): #删除所有的0 y = 0 zeroNumber = [0, 0, 0, 0] while y < len(board): x = 0 while x < len(board[y]): if board[y][x] == 0: board[y].pop(x) zeroNumber[y] += 1 x -= 1 x += 1 y += 1 …… [2] [2,4] [] []

三、移动棋盘 def SildeBoard(board, direction): …… #向左滑动 if direction == "LEFT": for y in range(4): for num in range(zeroNumber[y]): board[y].append(0) #向右滑动 elif direction == "RIGHT": board[y].insert(0, 0) [2,0,0,0] [0,0,0,2] [2,4,0,0] [0,0,2,4] [0,0,0, 0] [0,0,0, 0]

三、移动方块 def SlideBoard(board, direction): #先逆时针旋转方格盘 if direction ==“UP”or direction ==“DOWN”: board = RotateBoard(board, “COUNTERCLOSEWISE”) …… elif direction == “UP”: #向上移动 for y in range(4): for num in zeroNumber[y]: board[y].append(0) board = RotateBoard(board, “CLOSEWISE”) elif direction == “DOWN”: #向下移动 board[y].insert(0, 0) return board 原上方 原下方

四、旋转方格盘 [0,0,0,2] [0,0,2,4] [0,0,0,0] [2,4,0,0] [0,2,0,0] [0,0,0,0] def RotateBoard(board, direction): newBoard = [] #逆时针旋转 if direction == “COUNTERCLOCKWISE”: for x in range(-1, -5, -1): newLine = [] for y in range(4): newline.append(board[y][x]) newBoard.append(newline) #顺时针旋转 elif direction == “CLOCKWISE”: for x in range(4): for y in range(-1, -5, -1): return newBoard 原上方 原下方

五、合并方格 def MergeBlock(board, direction): #向左合并 for y in range(4): for x in range(3): if board[y][x] == board[y][x+1]: board[y][x].changeNumber(board[y][x].number*2) board[y][x+1] = 0 #向右合并 for x in range(-1, -4, -1): if board[y][x] == board[y][x-1]: board[y][x-1] = 0

五、合并方格 def MergeBlock(board, direction): #向上合并 if direction == “UP”: board = RotateBoard(board, “COUNTERCLOCKWISE”) for y in range(4): for x in range(3): if board[y][x] == board[y][x+1]: board[y][x].changeNumber(board[y][x].number*2) board[y][x+1] = 0 board = RotateBoard(board, “CLOCKWISE”)

五、合并方格 def MergeBlock(board, direction): #向下合并 if direction == “DOWN”: board = RotateBoard(board, “COUNTERCLOCKWISE”) for y in range(4): for x in range(-1, -4, -1): if board[y][x] == board[y][x-1]: board[y][x].changeNumber(board[y][x].number*2) board[y][x-1] = 0 board = RotateBoard(board, “CLOCKWISE”)

五、合并方格 def MergeBlock(board, direction): #向下合并 if direction == “LEFT”: …… board = SlideBoard(board, “LEFT”) elif direction == “UP”: board = RotateBoard(board, “CLOCKWISE”) return board

六、绘制棋盘 def DrawBoard(board, Screen): #载入背景和边框图片 background = pygame.image.load('background.png') border = pygame.image.load('border.png') #绘制背景 Screen.blit(background, [0,0]) #绘制所有方块 for y in range(4): for x in range(4): if board[y][x] != 0: Screen.blit(board[y][x].image, [x*BLOCK_WIDTH, y*BLOCK_WIDTH]) #绘制边框 Screen.blit(border, [0,0]) #返回绘制后的界面 return Screen

七、生成新方块 def GenerateNewBlock(board): #空位置,用于从中随机挑选出一个位置作为新方块的位置 emptyPos=[] for y in range(4): for x in range(4): #如果位置是空的,加入到空位置列表当中 if board[y][x] == 0 : emptyPos.append([y,x]) #从空位当中随机挑一个作为新方块的位置 newPos = random.choice(emptyPos) board[newPos[0]][newPos[1]] = Block() #将生成新方块后的棋盘当做结果返回 return board

八、初始化游戏 theBoard = GenerateNewBoard() #新建棋盘 theBoard = GenerateNewBoard() #生成初始的两个方块 theBoard = GenerateNewBlock(theBoard) #绘制界面 screen = DrawBoard(theBoard, screen) #刷新界面 pygame.display.flip()

九、消息循环 running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False elif event.type == pygame.KEYDOWN: direction = "" pressed = False if event.key == pygame.K_UP: direction = "UP" pressed = True elif event.key == pygame.K_DOWN: direction = "DOWN" elif event.key == pygame.K_LEFT: direction = "LEFT" elif event.key == pygame.K_RIGHT: direction = "RIGHT" if pressed: theBoard = SildeBoard(theBoard, direction) theBoard = MergeBlock(theBoard, direction) theBoard = GenerateNewBlock(theBoard) screen = DrawBoard(theBoard, screen) pygame.display.flip()