愤怒的小鸟无敌版(愤怒的小鸟无敌版下载安装)
时间:2022-04-13 16:16:11
小编:背着包包行
阅读:
玩游戏不如写游戏。前几天发的五子棋还挺受欢迎,今天写大家都熟悉的愤怒的小鸟。不过就不用原图了,用代码写图片,虽然抽象,也挺好玩。每步都可以运行,这样既容易理解也好玩。
注意版本,版本不同可能会有方法上的改变:
pygame 1.9.6
pymunk 5.6.0
Python 3.7
第一步,设置游戏界面,代码生成木条、“小鸟”、“小猪”、弹弓等等。
第一步代码
第一步运行效果图
第二步:拉伸弹弓
第二步代码(黄色部分为新添加,下同)
第二步运行效果图
第三步:弹出小鸟
第三步代码
第三步效果图
第四步代码
第四步运行效果图
第五步:完善功能,加入简单通关效果、显示计分信息等
五步全部代码
运行效果图
全部代码拿走
import pygame, pymunkimport math, sys, timefrom pymunk import Vec2dfrom PIL import Image as pil_imgpygame.init() # 初始化模块# 制造木条screen_column = pygame.display.set_mode((20, 85))screen_column.fill((100, 50, 25))pygame.image.save(screen_column, 'column.png')# 小鸟(红色圆球)、小猪(蓝色圆球)def create_birdie_piggie(R, G, B, name): clear_bg = pil_img.new('RGBA', (30, 30), (0, 0, 0, 0)) #创建透明底色图片 clear_bg.save('clear.png') # 保存至本地待用 clear_bg = pygame.image.load('clear.png') pygame.draw.circle(clear_bg, (R, G, B), (15, 15), 15) #在透明底照片上画半径15的实心圆 pygame.image.save(clear_bg, '%s.png'%name)create_birdie_piggie(255, 0, 0, 'birdie') # 创建红色圆代表小鸟create_birdie_piggie(0, 0, 255, 'piggie') # 创建蓝色圆代表小猪# 游戏界面、游戏角色设置screen = pygame.display.set_mode((1200, 650))column = pygame.image.load('column.png')birdie = pygame.image.load('birdie.png')piggie = pygame.image.load('piggie.png')# 大写的Y做弹弓font = pygame.font.get_default_font()font = pygame.font.Font(font, 130)sling_Y = font.render('Y', True, (100, 50, 25))def music(): pygame.mixer.music.load(r'快活的小喜鹊.mp3') pygame.mixer.music.play(-1) # -1为循环sling_x1, sling_y1 = 220, 420sling_x2, sling_y2 = 260, 420def sling_pulling(): # 制作皮筋 global angle, mouse_distance # 设置皮筋最大值,及正反方向 mouse_distance = sling_x1 - x_mouse if mouse_distance > 90: mouse_distance = 90 elif mouse_distance < -90: mouse_distance = -90 pygame.draw.line(screen, (100, 50, 25), (sling_x1, sling_y1), (x_mouse, y_mouse), 12) pygame.draw.line(screen, (100, 50, 25), (sling_x2, sling_y2), (x_mouse, y_mouse), 12) if bird_numbers > 1: screen.blit(birdie, (x_mouse-10, y_mouse-10)) angle_x = sling_x1 - x_mouse angle_y = sling_y1 - y_mouse if angle_x == 0: angle_x = 0.1 angle = math.atan(angle_y/angle_x)# 设置空间属性def set_space(): space = pymunk.Space() space.gravity = (0, -700) # 重力 static_body = pymunk.Body(body_type=pymunk.Body.STATIC) static_seg_floor = pymunk.Segment(static_body, (0, 0), (1200, 0), 100) #地表范围 static_seg_floor.elasticity = 1 # 地表属性,弹性,摩擦力等 static_seg_floor.friction = 1 space.add(static_body, static_seg_floor) return spaceclass Bird(): def __init__(self, distance, x, y, space, angle): body = pymunk.Body(6, 666) body.position = x, y power = distance * 50 impulse = power * Vec2d(1, 0) angle = -angle body.apply_impulse_at_local_point(impulse.rotated(angle)) shape = pymunk.Circle(body, 6) shape.elasticity = 0.9 shape.friction = 0.3 space.add(body, shape) self.body = body self.shape = shapeclass Wood_Pig(): def __init__(self, pos, lenght, height, space, angle = 0): body = pymunk.Body(6, 900) body.position = pos shape = pymunk.Poly.create_box(body, (lenght, height)) shape.elasticity = 0.1 shape.friction = 0.2 space.add(body, shape) self.body = body self.shape = shape self.angle = angle def rotated_img(self, wood_or_pig, screen): angle_degree = math.degrees(self.shape.body.angle) + self.angle rotated_img = pygame.transform.rotate(wood_or_pig, angle_degree) pos = self.shape.body.position.x, -self.shape.body.position.y + 630 off_set = Vec2d(rotated_img.get_size())/2 pos = pos-off_set screen.blit(rotated_img, pos)def level_1(): # 第一关 global space, bird_list, wood_list, pig_list, bird_numbers, SCORE bird_numbers = 4 SCORE = 0 space = set_space() bird_list = [] wood_list = [] wood_list.append(Wood_Pig((950, 200), 20, 85, space)) wood_list.append(Wood_Pig((1008, 200), 20, 85, space)) wood_list.append(Wood_Pig((980, 230), 85, 20, space, angle = 90)) pig_list = [] pig_list.append(Wood_Pig((980, 260), 30, 30, space))def show_info(txt): font = pygame.font.get_default_font() font = pygame.font.Font(font, 50) info = font.render(str(txt), True, (125, 0, 125)) return infodef score(wood_pig, wood_pig_list): # 击中目标后目标消失,并累计分数 global SCORE try: for bird in bird_list: if abs(bird.shape.body.position.x - wood.shape.body.position.x) < 30 and abs(bird.shape.body.position.y - wood.shape.body.position.y) < 30: wood_pig_list.remove(wood_pig) SCORE += 500 except ValueError: pass return SCOREmusic()running = Truemouse_pressed = Falsemouse_distance = 90level_1()bird_numbers = 4last_bird_time = 0SCORE = 0while running: for event in pygame.event.get(): if event.type == pygame.QUIT: # 点击右上角叉叉退出游戏 running = False sys.exit() elif event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: #按ESC退出 running = False sys.exit() if pygame.mouse.get_pressed()[0]: mouse_pressed = True if event.type == pygame.MOUSEBUTTONUP: mouse_pressed = False if bird_numbers > 0: bird = Bird(mouse_distance, 230, 230, space, angle) bird_list.append(bird) bird_numbers -= 1 last_bird_time = time.time() # 简单演示通关,延时两秒变关 if bird_numbers == 0 and int(time.time() - last_bird_time) >= 2: level_1() screen.fill((0, 125, 125)) # 游戏界面背景 screen.blit(sling_Y, (200, 400)) # 弹弓 for i in range(bird_numbers): screen.blit(birdie, (30+i*40, 500)) x_mouse, y_mouse = pygame.mouse.get_pos() if mouse_pressed: sling_pulling() else: if bird_numbers > 1: screen.blit(birdie, (230, 400)) # 小鸟 for bird in bird_list: pos = bird.shape.body.position.x, -bird.shape.body.position.y + 630 screen.blit(birdie, pos) for wood in wood_list: wood.rotated_img(column, screen) SCORE = score(wood, wood_list) for pig in pig_list: pig.rotated_img(piggie, screen) SCORE = score(pig, pig_list) info = show_info('scored: %d'%SCORE) screen.blit(info, (100, 100)) for i in range(2): space.step(0.01) pygame.display.update() # 刷新界面及里面的元素 pygame.display.flIP()
本文标签:
- 火影忍者疾风传ost2(火影忍者疾风传ost1)在今年已经开播的众多新番动画当中,《Megalo Box》的存在可谓是耀眼异常。这部动画不仅拥有着粗狂复古的画风,万分吸引的故事,其中的配乐表现更是极为出挑。想必有不少同学对于时间:2022-04-22
- 火影忍者羁绊60(火影忍者羁绊60隐藏英雄密码)在云顶之弈11.12的更新当中,虽然对于游戏机制以及羁绊人口上限的改动非常多,但在这次改动里面对于羁绊的改动和加强却是少之又少,而圣光守卫羁绊却有幸成为上个版本里为数不多时间:2022-04-22
- 火影忍者羁绊55(火影忍者羁绊5.6隐藏英雄密码)在火影忍者中,本来我们都以为迈特凯与卡卡西的实力差不了多少,虽说曾吊打晓组织的干柿鬼鲛,但毕竟迈特凯总是站在与卡卡西同一个层次上,总是视他为最重要的对手,而至于卡卡西的实时间:2022-04-22
- 火影忍者羁绊43(火影忍者羁绊433什么英雄厉害)火影忍者OL周年庆开始啦,这次增加了一个新的玩法,羁绊对决,看起来有点小意思哟,还有大量的周年庆活动和一些福利,还是一起来看看具体更新内容吧。主要更新内容如下:1、新增玩法-羁时间:2022-04-22
- 火影忍者羁绊31(火影忍者羁绊3.1隐藏英雄密码)如何快速获得羁绊硬币兑换回归商店中的黄金增幅书和白金徽章呢?对于活跃玩家来说,整个回归活动,最想要的就是纯净的黄鸡增幅书和白金徽章礼盒了,但是我们每天和回归号组队刷图,最时间:2022-04-22
![无敌](https://www.mopxz.com/shouyou/imgfile/202002/12110926g3za.jpg)
无敌
- 类型:策略棋牌
- 语言:中文
- 大小:
- 版本: 最新版
- 星级:
热门阅读
-
暗黑3魔盒(暗黑3魔盒使用攻略)
阅读:3620
-
dnf五一(dnf五一套2022)
阅读:2266
-
艾尔登法环摩恩城支线攻略 老头环摩恩城主女儿支线任务
阅读:2219
-
微博不小心点了催更怎么取消(视频催更怎么关)
阅读:1931
-
斗罗大陆小舞篇破解版(斗罗大陆小舞篇破解版安卓)
阅读:1647