




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
贪吃蛇源码,初始源码来自于网络。初学python,做了部分修改,加了些有趣的功能进行测试。增加了部分注释;增加背景设置;增加历史高分统计;增加当前玩家排名;增加幸运食物,吃了有惊喜!开始:回车键暂停:空格键操作:控制上下左右( w、s、a、d ) or( up、down、left、right)自动背景开启和关闭: L手动背景RGB值微调:r、g、b 键(L开启才可用)游戏界面Python 源码贪吃蛇import randomimport sysimport timeimport copyimport pygamefrom pygame.locals import *from collections import dequeSCREEN_WIDTH = 800 # 屏幕宽度SCREEN_HEIGHT = 480 # 屏幕高度SIZE = 20 # 小方格大小LINE_WIDTH = 3 # 网格线宽度# 游戏区域的坐标范围SCOPE_X = (0, SCREEN_WIDTH / SIZE - 1)SCOPE_Y = (2, SCREEN_HEIGHT / SIZE - 1)# 食物的分值及颜色# FOOD_STYLE_LIST = (10, (255, 100, 100), (20, (100, 255, 100), (30, (100, 100, 255)FOOD_STYLE_LIST = (10, (255, 0, 0), (20, (0, 255, 0), (30, (0, 0, 255), (100, (255, 255, 0)# 幸运食物出现概率(蛇身减一,速度不增加)FOOD_LUCK=(0,7)# LIGHT = (100, 100, 100)DARK = (200, 200, 200) # 蛇的颜色BLACK = (0, 0, 0) # 网格线颜色RED = (200, 30, 30) # 红色,GAME OVER 的字体颜色BGCOLOR = (40, 40, 60) # 背景色def print_text(screen, font, x, y, text, fcolor=(255, 255, 255): imgText = font.render(text, True, fcolor) screen.blit(imgText, (x, y)# 初始化蛇def init_snake(): snake = deque() snake.append(2, SCOPE_Y0) # snake.append(1, SCOPE_Y0+1), snake.append(1, SCOPE_Y0), snake.append(1, SCOPE_Y0+2) snake.append(1, SCOPE_Y0) snake.append(0, SCOPE_Y0) return snakedef create_food(snake): food_x = random.randint(SCOPE_X0, SCOPE_X1) food_y = random.randint(SCOPE_Y0, SCOPE_Y1) while (food_x, food_y) in snake: # 如果食物出现在蛇身上,则重来 food_x = random.randint(SCOPE_X0, SCOPE_X1) food_y = random.randint(SCOPE_Y0, SCOPE_Y1) return food_x, food_ydef get_food_style(): if random.randint(FOOD_LUCK0,FOOD_LUCK1)=FOOD_LUCK1: return FOOD_STYLE_LIST3 else: return FOOD_STYLE_LISTrandom.randint(0, 2)def main(): pygame.init() screen = pygame.display.set_mode(SCREEN_WIDTH, SCREEN_HEIGHT) #pygame创建窗口 pygame.display.set_caption(贪吃蛇) #窗口名称 font1 = pygame.font.SysFont(SimHei, 16) # 得分的字体 font_ypos = 12 #位置 font2 = pygame.font.Font(None, 72) # GAME OVER 的字体 fwidth, fheight = font2.size(GAME OVER) # 如果蛇正在向右移动,那么快速点击向下向左,由于程序刷新没那么快,向下事件会被向左覆盖掉,导致蛇后退,直接GAME OVER # b 变量就是用于防止这种情况的发生 b = True # 蛇 snake = init_snake() # 食物 food = create_food(snake) food_style = get_food_style() # 方向 pos = (1, 0) #(左-1 右1,上-1 下1) game_over = True start = False # 是否开始,当start = True,game_over = True 时,才显示 GAME OVER score = 0 # 得分 orispeed =0.5 # 原始速度 speed = orispeed luck_times=0 last_move_time = None last_draw_time = None pause = False # 暂停 BG_r = 40 #手动背景调整 BG_g = 40 BG_b = 60 BG_auto=True REC_score= REC_save=False while True: for event in pygame.event.get(): if event.type = QUIT: #关闭窗口事件直接退出 sys.exit() elif event.type = KEYDOWN: #处理按键事件 if event.key = K_RETURN: #处理回车键事件 if game_over: start = True #游戏开始 game_over = False b = True snake = init_snake() food = create_food(snake) food_style = get_food_style() pos = (1, 0) # 得分 score = 0 REC_save=True REC_score.append(score) last_move_time = time.time() last_draw_time = last_move_time luck_times = 0 elif event.key = K_SPACE: #处理空格键事件 暂停和继续 if not game_over: pause = not pause elif event.key in (K_w, K_UP): # 这个判断是为了防止蛇向上移时按了向下键,导致直接 GAME OVER if b and not pos1: pos = (0, -1) b = False elif event.key in (K_s, K_DOWN): if b and not pos1: pos = (0, 1) b = False elif event.key in (K_a, K_LEFT): if b and not pos0: pos = (-1, 0) b = False elif event.key in (K_d, K_RIGHT): if b and not pos0: pos = (1, 0) b = False elif event.key in (K_r,K_g,K_b): #背景色调整 L键控制开关(R,G,B)键控制3原色 if event.key=K_r: BG_r=BG_r+5 if BG_r=125: BG_r=40 elif event.key=K_g: BG_g=BG_g+5 if BG_g=125: BG_g=40 elif event.key=K_b: BG_g=BG_b+5 if BG_b=125: BG_b=40 elif event.key=K_l: BG_auto=not BG_auto # 填充背景色 if BG_auto: screen.fill(BGCOLOR) else: screen.fill(BG_r,BG_g,BG_b) # 画网格线 竖线 for x in range(SIZE, SCREEN_WIDTH, SIZE): pygame.draw.line(screen, BLACK, (x, SCOPE_Y0 * SIZE), (x, SCREEN_HEIGHT), LINE_WIDTH) # 画网格线 横线 for y in range(SCOPE_Y0 * SIZE, SCREEN_HEIGHT, SIZE): pygame.draw.line(screen, BLACK, (0, y), (SCREEN_WIDTH, y), LINE_WIDTH) if not game_over: curTime = time.time() if curTime - last_move_time speed: #控制移动速度speed值越小,刷新越快 if not pause: b = True last_move_time = curTime next_s = (snake00 + pos0, snake01 + pos1) #按方向读取下一个前进位 if next_s = food: # 吃到了食物 snake.appendleft(next_s) score += food_style0 if REC_save: #记录得分 REC_score.pop() REC_score.append(score) if food_style0 = FOOD_STYLE_LIST30 and len(snake) 3: snake.pop() snake.pop() luck_times+=1 else: speed = orispeed - 0.03 * (score / 100-luck_times) food = create_food(snake) food_style = get_food_style() else: if SCOPE_X0 = next_s0 = SCOPE_X1 and SCOPE_Y0 = next_s1 0.01: #闪烁时间 pygame.draw.rect(screen, food_style1, (food0 * SIZE, food1 * SIZE, SIZE, SIZE), 0) last_draw_time=curTime else: pygame.draw.rect(screen, food_style1, (food0 * SIZE, food1 * SIZE, SIZE, SIZE), 0) # 画蛇 for s in snake: pygame.draw.rect(screen, DARK, (s0 * SIZE + LINE_WIDTH, s1 * SIZE + LINE_WIDTH, SIZE - LINE_WIDTH * 2, SIZE - LINE_WIDTH * 2), 0) print_text(screen, font1, 30, font_ypos, f速度: score/100-luck_times) print_text(screen, font1, 630, font_ypos, f得分: score) if game_over: if start: print_text(screen, font2, (SCREEN_WIDTH - fwidth) / 2, (SCREEN_HEIGHT - fheight) / 2, GAME OVER, RED) TMP_score=copy.deepcopy(REC_score) TMP_score.sort() TMP_score.reverse() if len(REC_score): print_text(screen, font1, 230, font_ypos, f最高得分:
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业银行笔试试题及答案
- 民航局笔试试题及答案
- 2025年度延安市消防救援支队第一批次政府专职消防员招聘10模拟试卷附答案详解(黄金题型)
- 2025年自考专业(公共关系)过关检测试卷及答案详解【夺冠】
- 2024年反射疗法师大赛理论题库附答案详解【夺分金卷】
- 2025年广东惠州惠东县第一批乡镇政府专职消防员招聘14人笔试备考题库参考答案详解
- 化学推断题考研真题及答案
- 2024宜春职业技术学院单招《职业适应性测试》考试彩蛋押题及参考答案详解(基础题)
- 2025年度方协议有效期与金融投资合作合同
- 2025年天津市西青区教育系统引进高层次人才需求计划笔试高频难、易错点备考题库含答案详解
- 养猪与猪病防治 课件汇 1绪论 - 6种公猪的饲养管理
- 追寻红色足迹课件
- 新疆乌鲁木齐市2025年通信工程师考试高、中级(通信专业实务传输与接入)题库及答案
- 2025水稻代烘干合同书
- 金缕玉衣教学课件
- 岗前安全教育培训考试题及答案解析
- 激光镭雕岗位安全培训课件
- 茶叶发酵技术培训课件
- 排水管道非开挖修复施工方案
- 沪教版(2024)二年级上册第二单元《欢乐购物街》单元测试卷(含解析)
- 冲孔灌注桩施工方案
评论
0/150
提交评论