实例介绍
【实例简介】
【实例截图】
【实例截图】
【核心代码】
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 | from Tkinter import * import tkMessageBox,sys from random import randint class Grid( object ): def __init__( self ,master = None ,window_width = 800 ,window_height = 600 ,grid_width = 50 ,offset = 10 ): self .height = window_height self .width = window_width self .grid_width = grid_width self .offset = offset self .grid_x = self .width / self .grid_width self .grid_y = self .height / self .grid_width self .bg = "#EBEBEB" self .canvas = Canvas(master, width = self .width 2 * self .offset, height = self .height 2 * self .offset, bg = self .bg) self .canvas.pack() self .grid_list() def draw( self , pos, color,): x = pos[ 0 ] * self .grid_width self .offset y = pos[ 1 ] * self .grid_width self .offset self .canvas.create_rectangle(x, y, x self .grid_width, y self .grid_width,fill = color,outline = self .bg) def grid_list( self ): grid_list = [] for y in range ( 0 , self .grid_y): for x in range ( 0 , self .grid_x): grid_list.append((x,y)) self .grid_list = grid_list class Food( object ): def __init__( self , Grid): self .grid = Grid self .color = "#23D978" self .set_pos() def set_pos( self ): x = randint( 0 , self .grid.grid_x - 1 ) y = randint( 0 , self .grid.grid_y - 1 ) self .pos = (x, y) def display( self ): self .grid.draw( self .pos, self .color) class Snake( object ): def __init__( self , Grid): self .grid = Grid self .body = [( 10 , 6 ),( 10 , 7 ),( 10 , 8 )] self .direction = "Up" self .status = [ 'run' , 'stop' ] self .speed = 300 self .color = "#5FA8D9" self .food = Food( self .grid) self .display_food() self .gameover = False self .score = 0 def available_grid( self ): return [i for i in self .grid.grid_list if i not in self .body[ 2 :]] def change_direction( self , direction): self .direction = direction def display( self ): for (x,y) in self .body: self .grid.draw((x,y), self .color) def display_food( self ): while ( self .food.pos in self .body): self .food.set_pos() self .food.display() def move( self ): head = self .body[ 0 ] if self .direction = = 'Up' : new = (head[ 0 ], head[ 1 ] - 1 ) elif self .direction = = 'Down' : new = (head[ 0 ], head[ 1 ] 1 ) elif self .direction = = 'Left' : new = (head[ 0 ] - 1 ,head[ 1 ]) else : new = (head[ 0 ] 1 ,head[ 1 ]) if not self .food.pos = = head: pop = self .body.pop() self .grid.draw(pop, self .grid.bg) else : self .display_food() self .score = 1 self .body.insert( 0 ,new) if not new in self .available_grid(): self .status.reverse() self .gameover = True else : self .grid.draw(new,color = self .color) class SnakeGame(Frame): def __init__( self ,master = None , * args, * * kwargs): Frame.__init__( self , master) self .master = master self .grid = Grid(master = master, * args, * * kwargs) self .snake = Snake( self .grid) self .bind_all( "<KeyRelease>" , self .key_release) self .snake.display() def run( self ): if not self .snake.status[ 0 ] = = 'stop' : self .snake.move() if self .snake.gameover = = True : message = tkMessageBox.showinfo( "Game Over" , "your score: %d" % self .snake.score) if message = = 'ok' : sys.exit() self .after( self .snake.speed, self .run) def key_release( self , event): key = event.keysym key_dict = { "Up" : "Down" , "Down" : "Up" , "Left" : "Right" , "Right" : "Left" } if key_dict.has_key(key) and not key = = key_dict[ self .snake.direction]: self .snake.change_direction(key) self .snake.move() elif key = = 'p' : self .snake.status.reverse() if __name__ = = '__main__' : root = Tk() snakegame = SnakeGame(root) snakegame.run() snakegame.mainloop() |
好例子网口号:伸出你的我的手 — 分享!
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论