首页 手机游戏 手机软件 新闻 攻略 手游礼包 手游开测 手游合集 手游专区 排行榜

愤怒的小鸟无敌版(愤怒的小鸟无敌版下载安装)

时间: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)
    火影忍者疾风传ost2(火影忍者疾风传ost1)
    在今年已经开播的众多新番动画当中,《Megalo Box》的存在可谓是耀眼异常。这部动画不仅拥有着粗狂复古的画风,万分吸引的故事,其中的配乐表现更是极为出挑。想必有不少同学对于
    时间:2022-04-22
  • 火影忍者羁绊60(火影忍者羁绊60隐藏英雄密码)
    火影忍者羁绊60(火影忍者羁绊60隐藏英雄密码)
    在云顶之弈11.12的更新当中,虽然对于游戏机制以及羁绊人口上限的改动非常多,但在这次改动里面对于羁绊的改动和加强却是少之又少,而圣光守卫羁绊却有幸成为上个版本里为数不多
    时间:2022-04-22
  • 火影忍者羁绊55(火影忍者羁绊5.6隐藏英雄密码)
    火影忍者羁绊55(火影忍者羁绊5.6隐藏英雄密码)
    在火影忍者中,本来我们都以为迈特凯与卡卡西的实力差不了多少,虽说曾吊打晓组织的干柿鬼鲛,但毕竟迈特凯总是站在与卡卡西同一个层次上,总是视他为最重要的对手,而至于卡卡西的实
    时间:2022-04-22
  • 火影忍者羁绊43(火影忍者羁绊433什么英雄厉害)
    火影忍者羁绊43(火影忍者羁绊433什么英雄厉害)
    火影忍者OL周年庆开始啦,这次增加了一个新的玩法,羁绊对决,看起来有点小意思哟,还有大量的周年庆活动和一些福利,还是一起来看看具体更新内容吧。主要更新内容如下:1、新增玩法-羁
    时间:2022-04-22
  • 火影忍者羁绊31(火影忍者羁绊3.1隐藏英雄密码)
    火影忍者羁绊31(火影忍者羁绊3.1隐藏英雄密码)
    如何快速获得羁绊硬币兑换回归商店中的黄金增幅书和白金徽章呢?对于活跃玩家来说,整个回归活动,最想要的就是纯净的黄鸡增幅书和白金徽章礼盒了,但是我们每天和回归号组队刷图,最
    时间:2022-04-22
无敌

无敌

  • 类型:策略棋牌
  • 语言:中文
  • 大小:
  • 版本: 最新版
  • 星级:
简介:无敌手游中玩家来到经典三国乱世中,展开刺激的战斗之旅。游戏画面恢弘大气,人物卡通可爱,以独创的沉浸式剧情体验为主,完美还原三国乱世中的场景,给玩家带来极致的视觉盛宴和无限
立即下载